瀏覽代碼

Added converters and corresponding tests

Vsevolod Levitan 1 年之前
父節點
當前提交
c807b985ea

+ 7 - 0
src/convert/basic_converter.py

@@ -0,0 +1,7 @@
+from src.convert.converter import converter
+
+
+class basic_converter(converter):
+    @staticmethod
+    def convert(obj):
+        return str(obj)

+ 4 - 0
src/convert/converter.py

@@ -0,0 +1,4 @@
+class converter:
+    @staticmethod
+    def convert(obj):
+        pass

+ 17 - 0
src/convert/converter_factory.py

@@ -0,0 +1,17 @@
+from src.convert.basic_converter import basic_converter
+from src.convert.datetime_converter import datetime_converter
+from src.convert.model_converter import model_converter
+
+
+class converter_factory:
+    @staticmethod
+    def create_basic():
+        return basic_converter()
+
+    @staticmethod
+    def create_model():
+        return model_converter()
+
+    @staticmethod
+    def create_datetime():
+        return datetime_converter()

+ 14 - 0
src/convert/datetime_converter.py

@@ -0,0 +1,14 @@
+from src.convert.converter import converter
+
+
+class datetime_converter(converter):
+    @staticmethod
+    def convert(obj):
+        return {
+            "year": obj.year,
+            "month": obj.month,
+            "day": obj.day,
+            "hour": obj.hour,
+            "minute": obj.minute,
+            "second": obj.second,
+        }

+ 8 - 0
src/convert/iterative_converter.py

@@ -0,0 +1,8 @@
+from src.convert.converter_factory import converter_factory
+
+
+def iterative_converter(converter):
+    @staticmethod
+    def convert(obj):
+        contor = converter_factory.create()
+        return [contor.convert(val) for val in obj]

+ 14 - 0
src/convert/model_converter.py

@@ -0,0 +1,14 @@
+from src.convert.converter import converter
+
+
+class model_converter(converter):
+    @staticmethod
+    def convert(obj):
+        properties = {}
+        for name in dir(obj.__class__):
+            if name == "error":
+                continue
+            attr = getattr(obj.__class__, name)
+            if isinstance(attr, property):
+                properties[name] = attr.fget(obj)
+        return properties

+ 42 - 0
tests/test_converters.py

@@ -0,0 +1,42 @@
+from datetime import datetime
+import unittest
+from models.nomenclature_group_model import nomenclature_group_model
+from src.convert.basic_converter import basic_converter
+from src.convert.converter_factory import converter_factory
+from src.convert.datetime_converter import datetime_converter
+from src.convert.model_converter import model_converter
+
+
+class test_converters(unittest.TestCase):
+    def check_factory():
+        assert isinstance(converter_factory.create_basic(), basic_converter)
+        assert isinstance(converter_factory.create_model(), model_converter)
+        assert isinstance(converter_factory.create_datetime(), datetime_converter)
+
+    def check_basic():
+        num = 10
+        st = "test"
+        contor = basic_converter()
+
+        assert contor.convert(num) == str(num)
+        assert contor.convert(st) == st
+
+    def check_model():
+        g = nomenclature_group_model.create_group()
+        contor = model_converter()
+        conv = contor.convert(g)
+
+        assert g.id == conv["id"]
+        assert g.name == conv["name"]
+
+    def check_datetime():
+        now = datetime.now()
+        contor = datetime_converter()
+        conv = contor.convert(now)
+
+        assert now.year == conv["year"]
+        assert now.month == conv["month"]
+        assert now.day == conv["day"]
+        assert now.hour == conv["hour"]
+        assert now.minute == conv["minute"]
+        assert now.second == conv["second"]