@@ -285,25 +285,38 @@ def _write_package_metadata(self, mapping_package: MappingPackage):
285285 :param mapping_package:
286286 :return:
287287 """
288- def convert_paths (obj ):
288+ import base64
289+
290+ def convert_for_json (obj ):
291+ """Convert non-JSON-serializable objects (Path, bytes) to serializable form."""
289292 if isinstance (obj , pathlib .Path ):
290293 return str (obj )
294+ elif isinstance (obj , bytes ):
295+ # Convert bytes to base64 string for JSON serialization
296+ return base64 .b64encode (obj ).decode ('utf-8' )
291297 elif isinstance (obj , dict ):
292- return {k : convert_paths (v ) for k , v in obj .items ()}
298+ return {k : convert_for_json (v ) for k , v in obj .items ()}
293299 elif isinstance (obj , list ):
294- return [convert_paths (i ) for i in obj ]
300+ return [convert_for_json (i ) for i in obj ]
295301 elif isinstance (obj , tuple ):
296- return tuple (convert_paths (i ) for i in obj )
302+ return tuple (convert_for_json (i ) for i in obj )
297303 else :
298304 return obj
299305
300306 package_path = self .repository_path / mapping_package .identifier
301307 package_path .mkdir (parents = True , exist_ok = True )
302308 metadata_path = package_path / MS_METADATA_FILE_NAME
303309 package_metadata = mapping_package .model_dump ()
304- [package_metadata .pop (key , None ) for key in
305- ["transformation_rule_set" , "shacl_test_suites" , "sparql_test_suites" ]]
306- package_metadata = convert_paths (package_metadata )
310+ # Exclude legacy fields (written separately) and MSSDK collection asset fields (contain file content)
311+ fields_to_exclude = [
312+ "transformation_rule_set" , "shacl_test_suites" , "sparql_test_suites" , # Legacy fields
313+ "technical_mapping_suite" , "vocabulary_mapping_suite" , # MSSDK - written separately
314+ "conceptual_mapping_asset" , # MSSDK - bytes content (xlsx)
315+ "test_data_suites" , "test_suites_sparql" , "test_suites_shacl" , "test_results" , # MSSDK test suites
316+ ]
317+ for key in fields_to_exclude :
318+ package_metadata .pop (key , None )
319+ package_metadata = convert_for_json (package_metadata )
307320 with metadata_path .open ("w" , encoding = "utf-8" ) as f :
308321 f .write (json .dumps (package_metadata ))
309322
@@ -371,6 +384,8 @@ def _write_package_transform_rules(self, mapping_package: MappingPackage):
371384 :param mapping_package:
372385 :return:
373386 """
387+ if mapping_package .transformation_rule_set is None :
388+ return
374389 package_path = self .repository_path / mapping_package .identifier
375390 transform_path = package_path / MS_TRANSFORM_FOLDER_NAME
376391 mappings_path = transform_path / MS_MAPPINGS_FOLDER_NAME
@@ -418,6 +433,8 @@ def _write_test_data_package(self, mapping_package: MappingPackage):
418433 :param mapping_package:
419434 :return:
420435 """
436+ if mapping_package .transformation_test_data is None :
437+ return
421438 package_path = self .repository_path / mapping_package .identifier
422439 test_data_path = package_path / MS_TEST_DATA_FOLDER_NAME
423440 test_data_path .mkdir (parents = True , exist_ok = True )
0 commit comments