pydantic
pydantic copied to clipboard
After validator shouldn't be called when a wrap validator doesn't call the handler
from typing import Annotated
from pydantic import AfterValidator, BaseModel, WrapValidator
def after_validator(v):
assert False
def wrap_validator(v, h):
return 1
class Model1(BaseModel):
a: Annotated[int, AfterValidator(after_validator), WrapValidator(wrap_validator)]
Model1(a=2)
# Model1(a=1)
class Model2(BaseModel):
a: Annotated[int, WrapValidator(wrap_validator), AfterValidator(after_validator)]
Model2(a=2)
# assertion failed, after validator was called
The order of annotations shouldn't have anything to do with the order of validators in this case. If a wrap validator decides not to call the handler, then it behaves as a plain validator.