Skip to content

Commit 7b07da3

Browse files
authored
Merge pull request #413 from OP-TED/feature/TED-1053
Feature/ted 1053
2 parents f09f254 + f2133ce commit 7b07da3

16 files changed

Lines changed: 107 additions & 12 deletions

File tree

ted_sws/core/model/transform.py

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -147,15 +147,37 @@ class ConceptualMappingRMLModule(MappingSuiteComponent):
147147
file_name: Optional[str]
148148

149149

150+
class ConceptualMappingRemark(MappingSuiteComponent):
151+
"""
152+
153+
"""
154+
standard_form_field_id: Optional[str]
155+
standard_form_field_name: Optional[str]
156+
field_xpath: Optional[List[str]]
157+
158+
159+
class ConceptualMappingControlList(MappingSuiteComponent):
160+
"""
161+
162+
"""
163+
field_value: Optional[str]
164+
mapping_reference: Optional[str]
165+
super_type: Optional[str]
166+
xml_path_fragment: Optional[str]
167+
168+
150169
class ConceptualMapping(MappingSuiteComponent):
151170
"""
152171
153172
"""
154173
xpaths: List[ConceptualMappingXPATH] = []
155174
metadata: Optional[ConceptualMappingMetadata]
156175
rules: List[ConceptualMappingRule] = []
176+
mapping_remarks: List[ConceptualMappingRemark] = []
157177
resources: List[ConceptualMappingResource] = []
158178
rml_modules: List[ConceptualMappingRMLModule] = []
179+
cl1_roles: List[ConceptualMappingControlList] = []
180+
cl2_organisations: List[ConceptualMappingControlList] = []
159181

160182

161183
class MappingSuite(MappingSuiteComponent):
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,19 @@
11
CONCEPTUAL_MAPPINGS_METADATA_SHEET_NAME = "Metadata"
22
CONCEPTUAL_MAPPINGS_RULES_SHEET_NAME = "Rules"
3+
CONCEPTUAL_MAPPINGS_REMARKS_SHEET_NAME = "Mapping Remarks"
34
CONCEPTUAL_MAPPINGS_RESOURCES_SHEET_NAME = "Resources"
45
CONCEPTUAL_MAPPINGS_RML_MODULES_SHEET_NAME = "RML_Modules"
6+
CONCEPTUAL_MAPPINGS_CL1_ROLES_SHEET_NAME = "CL1 Controlled List of Roles"
7+
CONCEPTUAL_MAPPINGS_CL2_ORGANISATIONS_SHEET_NAME = "CL2 Controlled List for Organis"
58

69
RULES_E_FORM_BT_NAME = 'eForm BT Name (Provisional/Indicative) (O)'
710
RULES_FIELD_XPATH = 'Field XPath (M)'
811
RULES_FIELD_XPATH_CONDITION = 'Field XPath condition (M)'
912
RULES_SF_FIELD_ID = 'Standard Form Field ID (M)'
1013
RULES_SF_FIELD_NAME = 'Standard Form Field Name (M)'
1114
RULES_E_FORM_BT_ID = 'eForm BT-ID (Provisional/Indicative) (O)'
15+
16+
CL_FIELD_VALUE = 'Field Value (in XML)'
17+
CL_MAPPING_REFERENCE = 'Mapping Reference (in ePO)'
18+
CL_SUPERTYPE = 'SuperType'
19+
CL_XML_PATH_FRAGMENT = 'XML PATH Fragment'

ted_sws/mapping_suite_processor/entrypoints/cli/cmd_conceptual_mapping_differ.py

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,15 @@
44
from pathlib import Path
55

66
import click
7-
from ted_sws.event_manager.adapters.log import LOG_WARN_TEXT
7+
from pydantic.utils import deep_update
88

99
from ted_sws.core.adapters.cmd_runner import CmdRunner as BaseCmdRunner, DEFAULT_MAPPINGS_PATH
10+
from ted_sws.core.model.transform import ConceptualMappingDiff
11+
from ted_sws.event_manager.adapters.log import LOG_WARN_TEXT
1012
from ted_sws.mapping_suite_processor.entrypoints.cli import CONCEPTUAL_MAPPINGS_FILE_TEMPLATE
1113
from ted_sws.mapping_suite_processor.services.conceptual_mapping_differ import \
1214
mapping_suite_diff_files_conceptual_mappings, mapping_suite_diff_repo_conceptual_mappings, \
13-
generate_conceptual_mappings_diff_html_report, transform_conceptual_mappings_diff_data
14-
from ted_sws.core.model.transform import ConceptualMappingDiff
15+
generate_conceptual_mappings_diff_html_report
1516

1617
CMD_NAME = "CMD_CONCEPTUAL_MAPPING_DIFFER"
1718

@@ -51,15 +52,20 @@ def __init__(
5152
self.output_folder = output_folder
5253

5354
def _report(self, diff, files: list):
54-
data = diff['data']
55+
diff['metadata'] = deep_update(diff['metadata'], {
56+
"branches": self.branches,
57+
"mapping_suite_ids": self.mapping_suite_ids,
58+
"files": files
59+
})
5560
report_file_file_name_json = Path(self.output_folder) / (DEFAULT_REPORT_FILE_NAME + ".json")
5661
with open(report_file_file_name_json, 'w+') as report_file:
57-
report_file.write(json.dumps(data, indent=2))
62+
report_file.write(json.dumps(diff, indent=2))
5863
report_file_file_name_html = Path(self.output_folder) / (DEFAULT_REPORT_FILE_NAME + ".html")
5964
with open(report_file_file_name_html, 'w+') as report_file:
6065
report_file.write(
6166
generate_conceptual_mappings_diff_html_report(
62-
ConceptualMappingDiff(**diff))
67+
ConceptualMappingDiff(**diff)
68+
)
6369
)
6470

6571
@classmethod

ted_sws/mapping_suite_processor/services/conceptual_mapping_differ.py

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,11 @@ class ConceptualMappingDiffDataTransformer:
2727
tabs: dict = {
2828
"metadata": {},
2929
"rules": {},
30+
"mapping_remarks": {},
3031
"resources": {},
31-
"rml_modules": {}
32+
"rml_modules": {},
33+
"cl1_roles": {},
34+
"cl2_organisations": {}
3235
}
3336
labels: dict
3437

@@ -45,8 +48,11 @@ def init_labels(cls):
4548
"tabs": {
4649
"metadata": "Metadata",
4750
"rules": "Rules",
51+
"mapping_remarks": "Remarks",
4852
"resources": "Resources",
49-
"rml_modules": "RML Modules"
53+
"rml_modules": "RML Modules",
54+
"cl1_roles": "CL1 Roles",
55+
"cl2_organisations": "CL2 Organisations"
5056
},
5157
"actions": {
5258
"set_item_added": "Set Added",
@@ -81,7 +87,11 @@ def init_labels(cls):
8187
"fragment_fingerprint": "Fragment Fingerprint",
8288
"file_name": "File name",
8389
"old_value": "Old value",
84-
"new_value": "New value"
90+
"new_value": "New value",
91+
"field_value": "Field Value (in XML)",
92+
"mapping_reference": "Mapping Reference (in ePO)",
93+
"super_type": "SuperType",
94+
"xml_path_fragment": "XML PATH Fragment"
8595
}
8696
}
8797

ted_sws/mapping_suite_processor/services/conceptual_mapping_reader.py

Lines changed: 51 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,14 @@
55
import pandas as pd
66

77
from ted_sws.core.model.transform import ConceptualMapping, ConceptualMappingXPATH, ConceptualMappingMetadata, \
8-
ConceptualMappingResource, ConceptualMappingMetadataConstraints, ConceptualMappingRule, ConceptualMappingRMLModule
8+
ConceptualMappingResource, ConceptualMappingMetadataConstraints, ConceptualMappingRule, ConceptualMappingRMLModule, \
9+
ConceptualMappingRemark, ConceptualMappingControlList
910
from ted_sws.mapping_suite_processor import CONCEPTUAL_MAPPINGS_METADATA_SHEET_NAME, \
1011
CONCEPTUAL_MAPPINGS_RULES_SHEET_NAME, RULES_FIELD_XPATH, RULES_SF_FIELD_ID, RULES_SF_FIELD_NAME, \
1112
CONCEPTUAL_MAPPINGS_RESOURCES_SHEET_NAME, CONCEPTUAL_MAPPINGS_RML_MODULES_SHEET_NAME, RULES_E_FORM_BT_ID, \
12-
RULES_E_FORM_BT_NAME, RULES_FIELD_XPATH_CONDITION
13+
RULES_E_FORM_BT_NAME, RULES_FIELD_XPATH_CONDITION, CONCEPTUAL_MAPPINGS_REMARKS_SHEET_NAME, \
14+
CONCEPTUAL_MAPPINGS_CL2_ORGANISATIONS_SHEET_NAME, CONCEPTUAL_MAPPINGS_CL1_ROLES_SHEET_NAME, CL_MAPPING_REFERENCE, \
15+
CL_SUPERTYPE, CL_FIELD_VALUE, CL_XML_PATH_FRAGMENT
1316
from ted_sws.mapping_suite_processor.services.conceptual_mapping_files_injection import FILE_NAME_KEY
1417
from ted_sws.notice_validator import BASE_XPATH_FIELD
1518

@@ -124,6 +127,25 @@ def _read_conceptual_mapping_rules(df: pd.DataFrame) -> List[ConceptualMappingRu
124127
return rules
125128

126129

130+
def _read_conceptual_mapping_remarks(df: pd.DataFrame) -> List[ConceptualMappingRemark]:
131+
"""
132+
133+
:param df:
134+
:return:
135+
"""
136+
137+
remarks_df = df[0:].copy()
138+
remarks = []
139+
remark: ConceptualMappingRemark
140+
for idx, row in remarks_df.iterrows():
141+
remark = ConceptualMappingRemark()
142+
remark.standard_form_field_id = _read_pd_value(row[RULES_SF_FIELD_ID])
143+
remark.standard_form_field_name = _read_pd_value(row[RULES_SF_FIELD_NAME])
144+
remark.field_xpath = _read_list_from_pd_multiline_value(row[RULES_FIELD_XPATH])
145+
remarks.append(remark)
146+
return remarks
147+
148+
127149
def _read_conceptual_mapping_resources(df: pd.DataFrame) -> List[ConceptualMappingResource]:
128150
"""
129151
@@ -156,6 +178,28 @@ def _read_conceptual_mapping_rml_modules(df: pd.DataFrame) -> List[ConceptualMap
156178
return rml_modules
157179

158180

181+
def _read_conceptual_mapping_control_list(df: pd.DataFrame) -> List[ConceptualMappingControlList]:
182+
"""
183+
184+
:param df:
185+
:return:
186+
"""
187+
188+
df.columns = df.iloc[0]
189+
control_list_df = df[1:].copy()
190+
191+
control_list = []
192+
item: ConceptualMappingControlList
193+
for idx, row in control_list_df.iterrows():
194+
item = ConceptualMappingControlList()
195+
item.field_value = _read_pd_value(row[CL_FIELD_VALUE])
196+
item.mapping_reference = _read_pd_value(row[CL_MAPPING_REFERENCE])
197+
item.super_type = _read_pd_value(row[CL_SUPERTYPE])
198+
item.xml_path_fragment = _read_pd_value(row[CL_XML_PATH_FRAGMENT])
199+
control_list.append(item)
200+
return control_list
201+
202+
159203
def _read_conceptual_mapping_xpaths(rules_df: pd.DataFrame, base_xpath: str) -> List[ConceptualMappingXPATH]:
160204
"""
161205
@@ -209,9 +253,14 @@ def mapping_suite_read_conceptual_mapping(conceptual_mappings_file_path: Path) -
209253
metadata = _read_conceptual_mapping_metadata(dfs[CONCEPTUAL_MAPPINGS_METADATA_SHEET_NAME])
210254
conceptual_mapping.metadata = metadata
211255
conceptual_mapping.rules = _read_conceptual_mapping_rules(dfs[CONCEPTUAL_MAPPINGS_RULES_SHEET_NAME])
256+
conceptual_mapping.mapping_remarks = _read_conceptual_mapping_remarks(dfs[CONCEPTUAL_MAPPINGS_REMARKS_SHEET_NAME])
212257
conceptual_mapping.resources = _read_conceptual_mapping_resources(dfs[CONCEPTUAL_MAPPINGS_RESOURCES_SHEET_NAME])
213258
conceptual_mapping.rml_modules = _read_conceptual_mapping_rml_modules(
214259
dfs[CONCEPTUAL_MAPPINGS_RML_MODULES_SHEET_NAME])
260+
conceptual_mapping.cl1_roles = _read_conceptual_mapping_control_list(
261+
dfs[CONCEPTUAL_MAPPINGS_CL1_ROLES_SHEET_NAME])
262+
conceptual_mapping.cl2_organisations = _read_conceptual_mapping_control_list(
263+
dfs[CONCEPTUAL_MAPPINGS_CL2_ORGANISATIONS_SHEET_NAME])
215264
conceptual_mapping.xpaths = _read_conceptual_mapping_xpaths(
216265
rules_df=dfs[CONCEPTUAL_MAPPINGS_RULES_SHEET_NAME][1:].copy(),
217266
base_xpath=metadata.base_xpath

0 commit comments

Comments
 (0)