Bläddra i källkod

Added new validator method: check_collection_all()

Vsevolod Levitan 1 år sedan
förälder
incheckning
33418bb6ce
2 ändrade filer med 36 tillägg och 1 borttagningar
  1. 20 0
      src/validation/validator.py
  2. 16 1
      tests/test_validator.py

+ 20 - 0
src/validation/validator.py

@@ -169,4 +169,24 @@ class validator:
         if not isinstance(value, Number):
         if not isinstance(value, Number):
             raise argument_exception(f"Аргумент не является числом (type={type(value)})")
             raise argument_exception(f"Аргумент не является числом (type={type(value)})")
         
         
+        return True
+    
+    def check_collection_all(self, value, method):
+        """
+            Валидация коллекции по соответствию лямбде
+        Args:
+            value: Передаваемая коллекция
+            method: Лямбда-функция валидации
+        Raises:
+            argument_exception: Один из членов коллекции не прошел валидацию
+        """
+
+        for num, val in enumerate(value):
+            try:
+                if not method(val):
+                    raise argument_exception("Член коллекции не прошел валидацию")
+            except argument_exception as exc:
+                raise argument_exception(f"Один из членов коллекции не прошел валидацию \
+                                         ({exc.error.error_text} on item #{num})")
+            
         return True
         return True

+ 16 - 1
tests/test_validator.py

@@ -70,4 +70,19 @@ class test_validator(unittest.TestCase):
 
 
         # Проверка
         # Проверка
         assert vtor.check_regex("abc", ".*b[c]+")
         assert vtor.check_regex("abc", ".*b[c]+")
-        self.assertRaises(argument_exception, lambda: vtor.check_regex("abc", ".*b[c]+[a]+"))
+        self.assertRaises(argument_exception, lambda: vtor.check_regex("abc", ".*b[c]+[a]+"))
+
+    def test_validator_collection_all(self):
+        """Проверить работоспособность validator.check_collection_all()"""
+        # Подготовка
+        vtor = validator()
+        col1 = ["a", "b", "c"]
+        col2 = ["a", 2, None]
+
+        # Действие
+
+        # Проверка
+        assert vtor.check_collection_all(col1, lambda item: vtor.check_type(item, str))
+        self.assertRaises(argument_exception,
+                          lambda: vtor.check_collection_all(col2,
+                                                            lambda item: vtor.check_type(item, str)))