From c7b9af00a568ca947a4fadb7dbff8adada48549f Mon Sep 17 00:00:00 2001
From: "Anders H. Rebner" <anderhre@stud.ntnu.no>
Date: Tue, 21 Apr 2020 08:41:39 +0200
Subject: [PATCH] #132 Felles funksjon for modul-konstruksjon

---
 soitool/serialize_export_import_soi.py | 75 ++++++++++++--------------
 1 file changed, 35 insertions(+), 40 deletions(-)

diff --git a/soitool/serialize_export_import_soi.py b/soitool/serialize_export_import_soi.py
index 3900c67..822e459 100644
--- a/soitool/serialize_export_import_soi.py
+++ b/soitool/serialize_export_import_soi.py
@@ -235,9 +235,41 @@ 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.")
 
+    modules = construct_modules(serialized)
+    attachments = construct_modules(serialized, is_modules=False)
+
+    # 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(serialized, is_modules=True):
+    """..."""
     # Create dict for modules with instantiated widget(s)
     modules = []
-    for module in serialized["modules"]:
+    if is_modules:
+        serialized_modules = serialized["modules"]
+    else:
+        serialized_modules = serialized["attachments"]
+
+    for module in serialized_modules:
         module_type = module["type"]
 
         if module_type == "TableModule":
@@ -268,51 +300,14 @@ def construct_soi_from_serialized(serialized, compressed=False):
             size = module["size"]
             data = module["data"]
             modules.append(
-                {"widget": FreeTextModule(size, data), "meta": module["meta"]}
+                {"widget": FreeTextModule(size, data), "meta": module["meta"],}
             )
         else:
             raise TypeError(
                 "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):
-- 
GitLab