Pārlūkot izejas kodu

Implemented autofactory for converter_factory

Vsevolod Levitan 1 gadu atpakaļ
vecāks
revīzija
910c1352db

+ 9 - 5
src/convert/converter_factory.py

@@ -1,17 +1,21 @@
+import datetime
+from functools import singledispatch
+from src.models.abstract_reference import abstract_reference
 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:
+    @singledispatch
     @staticmethod
-    def create_basic():
+    def create(obj):
         return basic_converter()
 
-    @staticmethod
-    def create_model():
+    @create.register
+    def create_model(obj: abstract_reference):
         return model_converter()
 
-    @staticmethod
-    def create_datetime():
+    @create.register
+    def create_datetime(obj: datetime.datetime):
         return datetime_converter()

+ 1 - 1
src/export/strategies/json_export.py

@@ -22,7 +22,7 @@ class json_export(export):
             model (abstract_reference): модель, строку с которой нужно создать
         """
 
-        properties = converter_factory.create_model().convert(model)
+        properties = converter_factory.create(model).convert(model)
         res = "\n        {\n"
 
         for key in properties:

+ 8 - 3
tests/test_converters.py

@@ -1,5 +1,6 @@
 from datetime import datetime
 import unittest
+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
 from src.convert.converter_factory import converter_factory
@@ -9,9 +10,13 @@ from src.convert.model_converter import model_converter
 
 class test_converters(unittest.TestCase):
     def test_factory(self):
-        assert isinstance(converter_factory.create_basic(), basic_converter)
-        assert isinstance(converter_factory.create_model(), model_converter)
-        assert isinstance(converter_factory.create_datetime(), datetime_converter)
+        assert isinstance(converter_factory.create(10), basic_converter)
+        assert isinstance(
+            converter_factory.create(abstract_reference("test")), model_converter
+        )
+        assert isinstance(
+            converter_factory.create_datetime(datetime.now()), datetime_converter
+        )
 
     def test_basic(self):
         num = 10