Skip to content

Commit ae6ecb1

Browse files
author
Kolea Plesco
committed
Updated conceptual mappings diff report
1 parent 6983752 commit ae6ecb1

4 files changed

Lines changed: 122 additions & 40 deletions

File tree

ted_sws/core/model/transform.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@ class ConceptualMappingXPATH(MappingSuiteComponent):
7272

7373
class ConceptualMappingDiff(MappingSuiteComponent):
7474
""""""
75+
created_at: str = datetime.now().isoformat()
7576
metadata: Optional[dict]
7677
data: Optional[dict]
7778

ted_sws/mapping_suite_processor/entrypoints/cli/cmd_conceptual_mapping_differ.py

Lines changed: 35 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -44,13 +44,14 @@ def __init__(
4444
output_folder
4545
):
4646
super().__init__(name=CMD_NAME)
47-
self.mapping_suite_id = self._init_list_input_opts_split(mapping_suite_id)
48-
self.file = self._init_list_input_opts_split(file)
49-
self.branch = self._init_list_input_opts_split(branch)
47+
self.mapping_suite_ids = self._init_list_input_opts_split(mapping_suite_id)
48+
self.files = self._init_list_input_opts_split(file)
49+
self.branches = self._init_list_input_opts_split(branch)
5050
self.mappings_path = mappings_path
5151
self.output_folder = output_folder
5252

53-
def _report(self, data, files: list):
53+
def _report(self, diff, files: list):
54+
data = diff['data']
5455
report_file_file_name_json = Path(self.output_folder) / (DEFAULT_REPORT_FILE_NAME + ".json")
5556
with open(report_file_file_name_json, 'w+') as report_file:
5657
report_file.write(json.dumps(data, indent=2))
@@ -60,9 +61,11 @@ def _report(self, data, files: list):
6061
generate_conceptual_mappings_diff_html_report(
6162
ConceptualMappingDiff(
6263
metadata={
63-
"branches": self.branch,
64-
"mapping_suite_ids": self.mapping_suite_id,
65-
"files": files
64+
"branches": self.branches,
65+
"mapping_suite_ids": self.mapping_suite_ids,
66+
"files": files,
67+
"defaults": diff['metadata']['defaults'],
68+
"metadata": diff['metadata']['metadata']
6669
},
6770
data=data
6871
))
@@ -81,12 +84,12 @@ def _mappings_path(self) -> Path:
8184
return mappings_path
8285

8386
def _display_input(self):
84-
if self.branch:
85-
self.log(LOG_WARN_TEXT.format("GIT Branches: ") + str(self.branch))
86-
if self.mapping_suite_id:
87-
self.log(LOG_WARN_TEXT.format("MappingSuites: ") + str(self.mapping_suite_id))
88-
if self.file:
89-
self.log(LOG_WARN_TEXT.format("Files: ") + str(self.file))
87+
if self.branches:
88+
self.log(LOG_WARN_TEXT.format("GIT Branches: ") + str(self.branches))
89+
if self.mapping_suite_ids:
90+
self.log(LOG_WARN_TEXT.format("MappingSuites: ") + str(self.mapping_suite_ids))
91+
if self.files:
92+
self.log(LOG_WARN_TEXT.format("Files: ") + str(self.files))
9093

9194
def run_cmd(self):
9295
self._display_input()
@@ -95,49 +98,49 @@ def run_cmd(self):
9598
filepath1 = None
9699
filepath2 = None
97100

98-
file_len = len(self.file)
99-
mapping_suite_id_len = len(self.mapping_suite_id)
100-
branch_len = len(self.branch)
101+
file_len = len(self.files)
102+
mapping_suite_id_len = len(self.mapping_suite_ids)
103+
branch_len = len(self.branches)
101104

102-
if not self.branch:
103-
if self.file and file_len == 2:
104-
filepath1 = self.file[0]
105+
if not self.branches:
106+
if self.files and file_len == 2:
107+
filepath1 = self.files[0]
105108
assert Path(filepath1).is_file()
106-
filepath2 = self.file[1]
109+
filepath2 = self.files[1]
107110
assert Path(filepath2).is_file()
108-
elif self.mapping_suite_id:
111+
elif self.mapping_suite_ids:
109112
mappings_path = self._mappings_path()
110113
if mapping_suite_id_len == 2:
111-
filepath1 = self._conceptual_mappings_file_path(mappings_path, self.mapping_suite_id[0])
114+
filepath1 = self._conceptual_mappings_file_path(mappings_path, self.mapping_suite_ids[0])
112115
assert Path(filepath1).is_file()
113-
filepath2 = self._conceptual_mappings_file_path(mappings_path, self.mapping_suite_id[1])
116+
filepath2 = self._conceptual_mappings_file_path(mappings_path, self.mapping_suite_ids[1])
114117
assert Path(filepath2).is_file()
115118
elif mapping_suite_id_len == 1 and file_len == 1:
116-
filepath1 = self._conceptual_mappings_file_path(mappings_path, self.mapping_suite_id[0])
119+
filepath1 = self._conceptual_mappings_file_path(mappings_path, self.mapping_suite_ids[0])
117120
assert Path(filepath1).is_file()
118-
filepath2 = self.file[0]
121+
filepath2 = str(Path(self.files[0]).resolve())
119122
assert Path(filepath2).is_file()
120123

121124
error = None
122125
if filepath1 and filepath2:
123126
diff = mapping_suite_diff_files_conceptual_mappings([Path(filepath1), Path(filepath2)])
124-
elif self.branch:
127+
elif self.branches:
125128
assert mapping_suite_id_len > 0
126-
if branch_len == 1 and mapping_suite_id_len == 1 and not self.file:
129+
if branch_len == 1 and mapping_suite_id_len == 1 and not self.files:
127130
mappings_path = self._mappings_path()
128-
filepath2 = self._conceptual_mappings_file_path(mappings_path, self.mapping_suite_id[0])
131+
filepath2 = self._conceptual_mappings_file_path(mappings_path, self.mapping_suite_ids[0])
129132
else:
130-
filepath2 = (self.file[0] if file_len == 1 else None)
133+
filepath2 = (self.files[0] if file_len == 1 else None)
131134

132135
diff = mapping_suite_diff_repo_conceptual_mappings(
133-
branch_or_tag_name=self.branch,
134-
mapping_suite_id=self.mapping_suite_id,
136+
branch_or_tag_name=self.branches,
137+
mapping_suite_id=self.mapping_suite_ids,
135138
filepath=Path(filepath2) if filepath2 else None
136139
)
137140
else:
138141
error = Exception("Cannot do a diff with provided input!")
139142

140-
self._report(data=diff, files=[filepath1, filepath2])
143+
self._report(diff=diff, files=[filepath1, filepath2])
141144
self.run_cmd_result(error)
142145

143146

ted_sws/mapping_suite_processor/resources/templates/conceptual_mappings_diff_report.jinja2

Lines changed: 71 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,20 +20,85 @@
2020
table td {
2121
width: auto
2222
}
23+
24+
table.heading td,
25+
table.heading th {
26+
border: 1px solid #ddd;
27+
}
28+
table.heading th {
29+
background-color: #eee;
30+
text-align: left;
31+
}
32+
table.heading thead td {
33+
text-align: left;
34+
font-weight: bold;
35+
width: 50%;
36+
}
37+
table.heading tbody th {
38+
white-space: nowrap;
39+
}
2340
</style>
2441
</head>
2542
<body>
2643
<h1>Conceptual Mappings Diff HTML report </h1>
2744
<hr>
28-
<h3>
29-
{{ metadata | replace('\n', '<br>') | replace(' ', '&nbsp;') }}
30-
</h3>
45+
<ul>
46+
<li>Created at: {{ created_at }}</li>
47+
</ul>
48+
<hr>
49+
<h2>
50+
Conceptual Mappings
51+
</h2>
52+
<table class="heading">
53+
<thead>
54+
<tr>
55+
<th></th>
56+
<td>Conceptual Mapping 1</td>
57+
<td>Conceptual Mapping 2</td>
58+
</tr>
59+
</thead>
60+
<tbody>
61+
{% set branch1 = metadata['branches'][0] or metadata['defaults']['branch'] or "local" %}
62+
{% set branch2 = metadata['branches'][1] or metadata['defaults']['branch'] or "local" %}
63+
<tr>
64+
<th>Branch</th>
65+
<td>{{ branch1 }}</td>
66+
<td>{{ branch2 }}</td>
67+
</tr>
68+
{% set mapping_suite1 = metadata['mapping_suite_ids'][0] or metadata['mapping_suite_ids'][1] %}
69+
{% set mapping_suite2 = metadata['mapping_suite_ids'][1] or metadata['mapping_suite_ids'][0] %}
70+
<tr>
71+
<th>Mapping Suite</th>
72+
<td>{{ mapping_suite1 }}</td>
73+
<td>{{ mapping_suite2 }}</td>
74+
</tr>
75+
{% set file1 = metadata['files'][0] or metadata['defaults']['conceptual_mapping'] %}
76+
{% set file2 = metadata['files'][1] or metadata['defaults']['conceptual_mapping'] %}
77+
<tr>
78+
<th>Conceptual Mapping File</th>
79+
<td>{{ file1 }}</td>
80+
<td>{{ file2 }}</td>
81+
</tr>
82+
<tr>
83+
<th>Mapping Version</th>
84+
<td>{{ metadata['metadata'][0]['mapping_version'] }}</td>
85+
<td>{{ metadata['metadata'][1]['mapping_version'] }}</td>
86+
</tr>
87+
</tbody>
88+
</table>
3189
<hr>
3290
<h2>Report details: </h2>
33-
34-
{{ data }}
91+
{% if data %}
92+
{{ data }}
93+
{% else %}
94+
<h3>NO DIFF</h3>
95+
{% endif %}
3596
<script>
36-
document.querySelector('body>table').classList.add('dataTable');
97+
const tables = document.querySelectorAll('body>table');
98+
console.log(tables);
99+
for (const table of tables) {
100+
table.classList.add('dataTable');
101+
}
37102
</script>
38103
</body>
39104
</html>

ted_sws/mapping_suite_processor/services/conceptual_mapping_differ.py

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,19 @@ def mapping_suite_diff_conceptual_mappings(mappings: List[ConceptualMapping]) ->
2828
:return:
2929
"""
3030
assert mappings and len(mappings) == 2
31-
return DeepDiff(mappings[0].dict(), mappings[1].dict(), ignore_order=True)
31+
diff: ConceptualMappingDiff = ConceptualMappingDiff()
32+
diff.metadata = {
33+
"defaults": {
34+
"branch": "local",
35+
"conceptual_mapping": MS_TRANSFORM_FOLDER_NAME + "/" + MS_CONCEPTUAL_MAPPING_FILE_NAME
36+
},
37+
"metadata": [
38+
mappings[0].metadata.dict(),
39+
mappings[1].metadata.dict()
40+
]
41+
}
42+
diff.data = DeepDiff(mappings[0].dict(), mappings[1].dict(), ignore_order=True)
43+
return diff.dict()
3244

3345

3446
def mapping_suite_diff_files_conceptual_mappings(filepaths: List[Path]) -> dict:
@@ -103,7 +115,8 @@ def mapping_suite_diff_repo_conceptual_mappings(branch_or_tag_name: List[str], m
103115

104116
def generate_conceptual_mappings_diff_html_report(diff: ConceptualMappingDiff):
105117
html_report = TEMPLATES.get_template(CONCEPTUAL_MAPPINGS_DIFF_HTML_REPORT_TEMPLATE).render({
106-
"metadata": json.dumps(diff.metadata, indent=2),
118+
"metadata": diff.metadata,
119+
"created_at": diff.created_at,
107120
"data": json2html.convert(
108121
json=diff.data,
109122
table_attributes='class="display" border="1"',

0 commit comments

Comments
 (0)