@@ -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+
103135def 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