Переглянути джерело

Added two validator methods: check() and check_collection_types_all(), minor comment refactor

Vsevolod Levitan 1 рік тому
батько
коміт
0d437efaa7
1 змінених файлів з 39 додано та 5 видалено
  1. 39 5
      src/validation/validator.py

+ 39 - 5
src/validation/validator.py

@@ -8,13 +8,28 @@ class validator:
         if not hasattr(cls, "instance"):
             cls.instance = super(validator, cls).__new__(cls)
         return cls.instance
+    
+    def check(self, value, method):
+        """
+            Валидация аргумента по лямбде
+        Args:
+            value (any): Передаваемый аргумент
+            method (lambda): Лямбда-функция для проверки
+        Raises:
+            argument_exception: Аргумент не прошел валидацию по лямбде
+        """
+
+        if not method(value):
+            raise argument_exception("Аргумент не прошел валидацию по лямбде")
+        
+        return True
 
     def check_type(self, value, exp_type):
         """
             Валидация аргумента по типу
         Args:
             value (any): Передаваемый аргумент
-            type(Type): Ожидаемый тип
+            type (Type): Ожидаемый тип
         Raises:
             argument_exception: Некорректный тип аргумента
         """
@@ -161,7 +176,7 @@ class validator:
         """
             Валидация аргумента по соответствию типу Число
         Args:
-            value: Передаваемый аргумент
+            value (any): Передаваемый аргумент
         Raises:
             argument_exception: Аргумент не является числом
         """
@@ -175,8 +190,8 @@ class validator:
         """
             Валидация коллекции по соответствию лямбде
         Args:
-            value: Передаваемая коллекция
-            method: Лямбда-функция валидации
+            value (any): Передаваемая коллекция
+            method (lambda): Лямбда-функция валидации
         Raises:
             argument_exception: Один из членов коллекции не прошел валидацию
         """
@@ -189,4 +204,23 @@ class validator:
                 raise argument_exception(f"Один из членов коллекции не прошел валидацию \
                                          ({exc.error.error_text} on item #{num})")
             
-        return True
+        return True
+    
+    def check_collection_types_all(self, value, exp_type):
+        """
+            Валидация коллекции по соответствию типа
+        Args:
+            value (any): Передаваемая коллекция
+            type (Type): Ожидаемый тип элементов
+        Raises:
+            argument_exception: Один из членов коллекции не соответствует типу
+        """
+
+        for num, val in enumerate(value):
+            try:
+                self.check_type(val, exp_type)
+            except argument_exception as exc:
+                raise argument_exception(f"Один из членов коллекции не соответствует типу {exp_type} \
+                                         (excepted {exp_type}, got {type(val)} on element #{num})")
+            
+        return True