The Pydantic docs have an example of reusing a validator:
https://pydantic-docs.helpmanual.io/usage/validators/#reuse-validators
Is it possible to reuse a root validator?
Advertisement
Answer
Yes, it is possible and the API is very similiar
Example:
JavaScript
x
31
31
1
from datetime import datetime
2
3
from pydantic import BaseModel, validator
4
from pydantic.class_validators import root_validator
5
6
def validate_start_time_before_end_time(cls, values):
7
"""
8
Reusable validator for pydantic models
9
"""
10
if values["start_time"] >= values["end_time"]:
11
raise ValueError("start_time must be before end_time")
12
return values
13
14
class Model1(BaseModel):
15
start_time: datetime
16
end_time: datetime
17
18
# validators
19
_datetime_order_validation = root_validator(allow_reuse=True)(
20
validate_start_time_before_end_time
21
)
22
23
class Model2(BaseModel):
24
start_time: datetime
25
end_time: datetime
26
27
# validators
28
_datetime_order_validation = root_validator(allow_reuse=True)(
29
validate_start_time_before_end_time
30
)
31
It is also possible to parameterize the validator like in this example https://github.com/samuelcolvin/pydantic/discussions/2938