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

1import pytest 1jklmnopqr

2from pydantic.error_wrappers import ValidationError 1jklmnopqr

3from sqlmodel import SQLModel 1jklmnopqr

4 

5 

6def test_validation_pydantic_v2(clear_sqlmodel): 1jklmnopqr

7 """Test validation of implicit and explicit None values. 

8 

9 # For consistency with pydantic, validators are not to be called on 

10 # arguments that are not explicitly provided. 

11 

12 https://github.com/tiangolo/sqlmodel/issues/230 

13 https://github.com/samuelcolvin/pydantic/issues/1223 

14 

15 """ 

16 from pydantic import field_validator 1abcdefghi

17 

18 class Hero(SQLModel): 1abcdefghi

19 name: str | None = None 1abcdefghi

20 secret_name: str | None = None 1abcdefghi

21 age: int | None = None 1abcdefghi

22 

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

27 

28 Hero.model_validate({"age": 25}) 1abcdefghi

29 

30 with pytest.raises(ValidationError): 1abcdefghi

31 Hero.model_validate({"name": None, "age": 25}) 1abcdefghi