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