pydantic icon indicating copy to clipboard operation
pydantic copied to clipboard

After validator shouldn't be called when a wrap validator doesn't call the handler

Open Viicos opened this issue 1 year ago • 0 comments

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.

Viicos avatar Apr 04 '25 10:04 Viicos