Page cover

👨‍💻Использование

Пример использования пакета

Импорт пакета

Импортировать пакет можно как показано ниже.

import aval as v

Реализация конкретных стратегий проверки

Для использования "Абстрактного Валидатора" потребуется одна или более конкретных стратегий проверки. В нашем примере мы опишем:

  • проверку факта принадлежности полученного данного типу "строка",

  • проверку длины строки (используя ограничения min_length и max_length).

Пример реализации таких стратегий приведен ниже.

def is_string(obj: v.VObj, params: v.VParams) -> None:
    t = type(obj)
    if t != str:
        raise v.ValError(
            f'Полученный объект {repr(obj)} имеет некорректный тип {t}. '
            f'Требуется строка'
        )


def correct_length(obj: v.VObj, params: v.VParams) -> None:
    mn = params.get('min_length', 1)
    mx = params.get('max_length', 32)
    ln = len(obj)
    if not mn <= ln <= mx:
        raise v.ValError(
            f'Некорректная длина строки. Требуется строка длинной в пределах '
            f'от {mn} до {mx} (включительно). '
            f'Фактическая длина полученной строки составляет {ln}'
        )

⚠️ важный момент: конкретные стратегии проверки обязательно должны содержать вызов исключения ValError (данный тип импортируется из пакета).

Первый метод отвечает за проверку принадлежности полученного объекта obj типу str. Второй, в свою очередь, проверяет, чтобы длина строки лежала в пределах min_length и max_length.

Аннотация v.VObj позволяет явно указать, что obj является проверяемым объектом. Аналогично можно применить аннотацию к params.

При получении параметров min_length и max_length предусмотрены значения по умолчанию (на случай, если в params не будет соответствующих именованных параметров):

Создание валидатора

Когда стратегии валидации описаны, создать конкретный валидатор можно путем указания перечня стратегий валидации (в виде списка) как показано ниже.

Применение валидатора

Применение через явный вызов метода validate

Позитивный тест

Применим описанные выше стратегии проверки к строке "Васисуалий" (без параметров):

Прогон завершился с кодом 0 (в рамках нашего примера полученные данные являются строкой корректной длины: для проверки применены параметры по умолчанию (минимальная длина = 1 и максимальная = 32).

Негативный тест

Передадим заведомо более длинную строку:

Прогон завершился аварийно (поднято исключение).

Указание параметров

Проверим ту же длинную строку, но указав соответствующие параметры:

Прогон завершился с кодом 0 (теперь строка попадает в заданный диапазон допустимых значений длины).

Применение через декоратор

Позитивный тест

Для тестового примера опишем класс "Пользователь":

В данном примере к методу __init__ применен декоратор с указанием параметров.

При попытке установить значение (при создании экземпляра класса) будет вызван метод validate валидатора val.

Негативный тест

При указанных граничных значениях (максимальная длина = 10), попытка создать объект класса UserName с указанием строки "Очень длинная строчища" вызовет ожидаемое исключение:

Last updated