Skip to content

Commit 284f87c

Browse files
committed
Merge pull request #161 from Baltic-RCC/mr-revert-ids-to-original
Maps custom ids created by pypowsybl back to the original ones
1 parent 8f42ed6 commit 284f87c

File tree

1 file changed

+36
-0
lines changed

1 file changed

+36
-0
lines changed

emf/loadflow_tool/model_merger/merge_functions.py

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,8 +100,41 @@ def update_FullModel_from_OpdmObject(data, opdm_object):
100100
})
101101

102102

103+
def revert_ids_back(exported_model, triplets_data, revert_ids: bool = True):
104+
"""
105+
As pypowsybl creates its own unique uuids for the cases when the originals do not match the criteria then this
106+
takes the naming_strategy.csv provided by the pypowsybl and reverts those ids back if it is applicable
107+
:param exported_model: binary object from pypowsybl
108+
:param triplets_data: profile(s) converted to triplets
109+
:param revert_ids: True = fix, False=report only
110+
:return (updated) triplets data
111+
"""
112+
113+
contents = zipfile.ZipFile(exported_model)
114+
naming_strategy = pandas.DataFrame()
115+
116+
for file_name in contents.namelist():
117+
if 'naming_strategy' in file_name:
118+
naming_strategy = pandas.read_csv(filepath_or_buffer=BytesIO(contents.read(file_name)), sep=';')
119+
break
120+
if not naming_strategy.empty:
121+
existing_values = triplets_data.merge(naming_strategy, left_on='VALUE', right_on='CgmesUuid')
122+
existing_values = existing_values[existing_values['IidmId'] != 'unknown']
123+
if not existing_values.empty:
124+
if not revert_ids:
125+
logger.error(f"Found {len(existing_values.index)} changed ids, consider dangling reference errors")
126+
return triplets_data
127+
logger.warning(f"Mapping {len(existing_values.index)} ids back")
128+
existing_values['VALUE'] = existing_values['IidmId']
129+
new_existing_values = existing_values[['ID', 'KEY', 'VALUE', 'INSTANCE_ID']]
130+
triplets_data = triplets.rdf_parser.update_triplet_from_triplet(triplets_data, new_existing_values)
131+
return triplets_data
132+
133+
134+
103135
def create_sv_and_updated_ssh(merged_model, original_models, models_as_triplets, scenario_date, time_horizon, version, merging_area, merging_entity, mas):
104136

137+
105138
### SV ###
106139
# Set Metadata
107140
SV_ID = merged_model['network_meta']['id'].split("uuid:")[-1]
@@ -122,6 +155,9 @@ def create_sv_and_updated_ssh(merged_model, original_models, models_as_triplets,
122155
# Load SV data
123156
sv_data = pandas.read_RDF([exported_model])
124157

158+
# Fix naming
159+
sv_data = revert_ids_back(exported_model=exported_model, triplets_data=sv_data)
160+
125161
# Update
126162
sv_data.set_VALUE_at_KEY(key='label', value=filename_from_metadata(opdm_object_meta))
127163
sv_data = triplets.cgmes_tools.update_FullModel_from_filename(sv_data)

0 commit comments

Comments
 (0)