Валидация
Настройка
Валидацией полей можно управлять как на уровне всего класса, так и отдельно для каждого поля.
Валидация булевых типов
Значения из списка:
трактуются как True
.
Значения из списка:
трактуются как False
.
Пост валидация
Для валидации модели после создания можно использовать __post_init__
метод.
Note
cwtch перхватывает ValueError
и TypeError
исключения и оборачивает их в ValidationError
.
@dataclass
class D:
i: int
j: int
def __post_init__(self):
if self.i + self.j < 10:
raise ValueError("sum of i and j should be >= 10")
Валидация на основе метадаты
Для валидации поля перед или после cwtch можно исплоьзовать валидаторы на основе cwtch.metadata.TypeMetadata
.
from cwtch.metadata import TypeMetadata
class CustomValidator(TypeMetadata):
def before(self, value, /):
"""
Валидация значения перед валидацией на основании аннотации типа
"""
print("Before")
return value
def after(self, value, /):
"""
Валидация значения после валидации на основании аннотации типа
"""
print("After")
return value
@dataclass
class D:
i: Annotated[int, CustomValidator()]
Встроенные валидаторы
from cwtch import dataclass
from cwtch.metadata import Validator
from typing import Annotated
@dataclass
class D:
i: Annotated[int, Validator(after=lambda v: v / 2)]
>>> D(i='2')
D(i=1.0)
from typing import Annotated
from cwtch import dataclass
from cwtch.metadata import Ge, Gt, Le, Lt, MaxItems, MaxLen, MinItems, MinLen
@dataclass
class D:
i: Annotated[int, Ge(1)]
items: Annotated[list[int], MinItems(1)]