Jelajahi Sumber

Added multiple-type validation to validator.py

Vsevolod Levitan 1 tahun lalu
induk
melakukan
e4418104fe
2 mengubah file dengan 25 tambahan dan 3 penghapusan
  1. 3 3
      src/models/company_model.py
  2. 22 0
      src/validation/validator.py

+ 3 - 3
src/models/company_model.py

@@ -1,6 +1,7 @@
 from src.models.abstract_reference import abstract_reference
 from src.models.abstract_reference import abstract_reference
 from src.settings.settings import settings
 from src.settings.settings import settings
 from src.errors.argument_exception import argument_exception
 from src.errors.argument_exception import argument_exception
+from src.validation.validator import validator
 
 
 class company_model (abstract_reference):
 class company_model (abstract_reference):
     # ИНН
     # ИНН
@@ -18,9 +19,8 @@ class company_model (abstract_reference):
         Args:
         Args:
             data (settings): Объект настроек с данными организации
             data (settings): Объект настроек с данными организации
         """
         """
-        if not isinstance(data, settings):
-            raise argument_exception(
-                "Аргумент data должен быть типа settings")
+        validator.check_type(data, settings)
+        
         self.__tax_id = settings.tax_id
         self.__tax_id = settings.tax_id
         self.__bank_id = settings.bank_id
         self.__bank_id = settings.bank_id
         self.__bank_account_id = settings.bank_account_id
         self.__bank_account_id = settings.bank_account_id

+ 22 - 0
src/validation/validator.py

@@ -17,6 +17,28 @@ class validator:
             raise argument_exception(f"Некорректный тип аргумента ({type(value)}, expected {exp_type})")
             raise argument_exception(f"Некорректный тип аргумента ({type(value)}, expected {exp_type})")
 
 
         return True
         return True
+    
+    def check_type_any(self, value, *types):
+        """
+            Валидация аргумента по соответствию одному из типов
+        Args:
+            value (any): Передаваемый аргумент
+            *types (Type): Ожидаемые типы
+        Raises:
+            argument_exception: Аргумент не соответствует ни одному из ожидаемых типов
+        """
+
+        flag = False
+        for type in types:
+            if isinstance(value, type):
+                flag = True
+                break
+
+        if not flag:
+            raise argument_exception("Аргумент не соответствует ни одному из ожидаемых типов "\
+                                     + f"({type(value)}, expected={', '.join(types)})")
+
+        return True
 
 
     def check_length(self, value, length: int):
     def check_length(self, value, length: int):
         """
         """