diff --git a/soitool/serialize_export_import_soi.py b/soitool/serialize_export_import_soi.py index 3900c67ec274156ef40b34aea9124f3ad1b7ad0e..18ba00bcb79ab56917733edf7b7e078cc63aa265 100644 --- a/soitool/serialize_export_import_soi.py +++ b/soitool/serialize_export_import_soi.py @@ -235,9 +235,53 @@ def construct_soi_from_serialized(serialized, compressed=False): if not SERIALIZED_SOI_SCHEMA.is_valid(serialized): raise ValueError("Serialized SOI does not have correct format.") - # Create dict for modules with instantiated widget(s) + # Construct modules and attachments + modules = construct_modules_from_serialized(serialized["modules"]) + attachments = construct_modules_from_serialized(serialized["attachments"]) + + # Create SOI + soi = SOI( + serialized["title"], + serialized["description"], + serialized["version"], + serialized["date"], + serialized["valid"]["from_date"], + serialized["valid"]["to_date"], + serialized["icon"], + serialized["classification"], + serialized["orientation"], + serialized["placement_strategy"], + serialized["algorithm_bin"], + serialized["algorithm_pack"], + serialized["algorithm_sort"], + modules, + attachments, + ) + + return soi + + +def construct_modules_from_serialized(serialized_modules): + """Instantiate modules from serialized format. + + Parameters + ---------- + serialized_modules : list + Containing dicts with serialized modules or attachment-modules. + + Returns + ------- + list + Containing dicts with instantiated modules or attachment-modules. + + Raises + ------ + TypeError + If type of module is not recognized. + """ modules = [] - for module in serialized["modules"]: + + for module in serialized_modules: module_type = module["type"] if module_type == "TableModule": @@ -275,44 +319,7 @@ def construct_soi_from_serialized(serialized, compressed=False): "Module-type '{}' is not recognized.".format(module_type) ) - # Create dict for attachments with instantiated widget(s) - attachments = [] - for attachment in serialized["attachments"]: - module_type = attachment["type"] - - if module_type == "TableModule": - size = attachment["size"] - data = attachment["data"] - attachments.append( - { - "widget": TableModule(size, data), - "meta": attachment["meta"], - } - ) - else: - raise TypeError( - "Module-type '{}' is not recognized.".format(module_type) - ) - # Create SOI - soi = SOI( - serialized["title"], - serialized["description"], - serialized["version"], - serialized["date"], - serialized["valid"]["from_date"], - serialized["valid"]["to_date"], - serialized["icon"], - serialized["classification"], - serialized["orientation"], - serialized["placement_strategy"], - serialized["algorithm_bin"], - serialized["algorithm_pack"], - serialized["algorithm_sort"], - modules, - attachments, - ) - - return soi + return modules def generate_soi_filename(soi):