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

1from typing import Optional 1jklmnopqr

2 

3import pytest 1jklmnopqr

4from pydantic.error_wrappers import ValidationError 1jklmnopqr

5from sqlmodel import SQLModel 1jklmnopqr

6 

7 

8def test_validation_pydantic_v2(clear_sqlmodel): 1jklmnopqr

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

10 

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

12 # arguments that are not explicitly provided. 

13 

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

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

16 

17 """ 

18 from pydantic import field_validator 1abcdefghi

19 

20 class Hero(SQLModel): 1abcdefghi

21 name: Optional[str] = None 1abcdefghi

22 secret_name: Optional[str] = None 1abcdefghi

23 age: Optional[int] = None 1abcdefghi

24 

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

29 

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

31 

32 with pytest.raises(ValidationError): 1abcdefghi

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