Browse Source

Implemented conversion for collections and dicts, added corresponding unittests

Vsevolod Levitan 1 year ago
parent
commit
00b595db9c

+ 13 - 0
src/convert/collection_converter.py

@@ -0,0 +1,13 @@
+from src.convert.converter import converter
+
+
+class collection_converter(converter):
+    @staticmethod
+    def convert(obj):
+        from src.convert.converter_factory import converter_factory
+
+        items = []
+        for e in obj:
+            items.append(converter_factory.convert(e))
+
+        return items

+ 14 - 0
src/convert/converter_factory.py

@@ -1,5 +1,7 @@
 import datetime
 from functools import singledispatch
+from src.convert.collection_converter import collection_converter
+from src.convert.dict_converter import dict_converter
 from src.models.abstract_reference import abstract_reference
 from src.convert.basic_converter import basic_converter
 from src.convert.datetime_converter import datetime_converter
@@ -16,6 +18,18 @@ class converter_factory:
     def create(obj):
         return basic_converter()
 
+    @create.register
+    def create_set(obj: set):
+        return collection_converter()
+
+    @create.register
+    def create_list(obj: list):
+        return collection_converter()
+
+    @create.register
+    def create_dict(obj: dict):
+        return dict_converter()
+
     @create.register
     def create_model(obj: abstract_reference):
         return model_converter()

+ 13 - 0
src/convert/dict_converter.py

@@ -0,0 +1,13 @@
+from src.convert.converter import converter
+
+
+class dict_converter(converter):
+    @staticmethod
+    def convert(obj):
+        from src.convert.converter_factory import converter_factory
+
+        res = {}
+        for e in obj.keys():
+            res[converter_factory.convert(e)] = converter_factory.convert(obj[e])
+
+        return res

+ 3 - 1
src/convert/model_converter.py

@@ -6,6 +6,8 @@ from src.convert.converter import converter
 class model_converter(converter):
     @staticmethod
     def convert(obj):
+        from src.convert.converter_factory import converter_factory
+
         properties = {}
         for name in dir(obj.__class__):
             if name == "error":
@@ -16,5 +18,5 @@ class model_converter(converter):
                 if issubclass(v.__class__, abstract_reference):
                     properties[name] = f"{v.id}"
                 else:
-                    properties[name] = basic_converter.convert(v)
+                    properties[name] = converter_factory.convert(v)
         return properties

+ 16 - 0
tests/test_converters.py

@@ -1,5 +1,7 @@
 from datetime import datetime
 import unittest
+from src.convert.dict_converter import dict_converter
+from src.convert.collection_converter import collection_converter
 from src.models.abstract_reference import abstract_reference
 from src.models.nomenclature_group_model import nomenclature_group_model
 from src.convert.basic_converter import basic_converter
@@ -45,3 +47,17 @@ class test_converters(unittest.TestCase):
         assert now.hour == conv["hour"]
         assert now.minute == conv["minute"]
         assert now.second == conv["second"]
+
+    def test_collection(self):
+        col = [1, 2, 3, 4]
+        contor = collection_converter()
+        conv = contor.convert(col)
+
+        assert conv == ["1", "2", "3", "4"]
+
+    def test_dict(self):
+        d = {1: "1", 2: "2", 3: "3"}
+        contor = dict_converter()
+        conv = contor.convert(d)
+
+        assert conv == {"1": "1", "2": "2", "3": "3"}