Coverage for tests / test_validation.py: 100%
16 statements
« prev ^ index » next coverage.py v7.13.0, created at 2026-11-09 00:02 +0000
« prev ^ index » next coverage.py v7.13.0, created at 2026-11-09 00:02 +0000
1import pytest 1jklmnopqr
2from pydantic.error_wrappers import ValidationError 1jklmnopqr
3from sqlmodel import SQLModel 1jklmnopqr
6def test_validation_pydantic_v2(clear_sqlmodel): 1jklmnopqr
7 """Test validation of implicit and explicit None values.
9 # For consistency with pydantic, validators are not to be called on
10 # arguments that are not explicitly provided.
12 https://github.com/tiangolo/sqlmodel/issues/230
13 https://github.com/samuelcolvin/pydantic/issues/1223
15 """
16 from pydantic import field_validator 1abcdefghi
18 class Hero(SQLModel): 1abcdefghi
19 name: str | None = None 1abcdefghi
20 secret_name: str | None = None 1abcdefghi
21 age: int | None = None 1abcdefghi
23 @field_validator("name", "secret_name", "age") 1abcdefghi
24 def reject_none(cls, v): 1abcdefghi
25 assert v is not None 1abcdefghi
26 return v 1abcdefghi
28 Hero.model_validate({"age": 25}) 1abcdefghi
30 with pytest.raises(ValidationError): 1abcdefghi
31 Hero.model_validate({"name": None, "age": 25}) 1abcdefghi