Я пытаюсь написать pydantic
валидаторы , но я не могу понять, как использовать аргумент kwargs
, который упоминается в документации. Я хотел бы передать условные параметры для проверки. Вот игрушечный пример:
from pydantic import validator
import pydantic.dataclasses as pyd_dc
@pyd_dc.dataclass
class Point_t:
x: int = 0
y: int = 1
@validator("y")
def quadrant(cls, val, values, **kwargs):
pt = x, y = values.get("x", None), val
if x is None:
raise ValueError(f"invalid point: {x}, {y}")
signs = kwargs.get("signs", None)
if signs is None:
raise ValueError("'signs' parameter missing")
if all(c * s >= 0 for c, s in zip(pt, signs) if s != 0):
return val
raise ValueError(f"{pt} not in quadrant: {signs}")
Кажется, что это не работает, создание экземпляра объекта Point_t
приводит к ошибке проверки:
ValidationError: 1 validation error for Point_t
y
'signs' parameter missing (type=value_error)
Как передать signs
параметр в приведенном выше примере? Если нет способа, какой смысл разрешать **kwargs
? Чего мне не хватает?