Coverage for tests/test_validation.py: 100%

33 statements  

« prev     ^ index     » next       coverage.py v7.5.4, created at 2024-07-08 00:02 +0000

1from typing import Optional 1fabcde

2 

3import pytest 1fabcde

4from pydantic.error_wrappers import ValidationError 1fabcde

5from sqlmodel import SQLModel 1fabcde

6 

7from .conftest import needs_pydanticv1, needs_pydanticv2 1fabcde

8 

9 

10@needs_pydanticv1 1fabcde

11def test_validation_pydantic_v1(clear_sqlmodel): 1abcde

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

13 

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

15 # arguments that are not explicitly provided. 

16 

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

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

19 

20 """ 

21 from pydantic import validator 1ae

22 

23 class Hero(SQLModel): 1ae

24 name: Optional[str] = None 1ae

25 secret_name: Optional[str] = None 1ae

26 age: Optional[int] = None 1ae

27 

28 @validator("name", "secret_name", "age") 1ae

29 def reject_none(cls, v): 1ae

30 assert v is not None 1ae

31 return v 1ae

32 

33 Hero.validate({"age": 25}) 1ae

34 

35 with pytest.raises(ValidationError): 1ae

36 Hero.validate({"name": None, "age": 25}) 1ae

37 

38 

39@needs_pydanticv2 1fabcde

40def test_validation_pydantic_v2(clear_sqlmodel): 1abcde

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

42 

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

44 # arguments that are not explicitly provided. 

45 

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

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

48 

49 """ 

50 from pydantic import field_validator 1fbcd

51 

52 class Hero(SQLModel): 1fbcd

53 name: Optional[str] = None 1fbcd

54 secret_name: Optional[str] = None 1fbcd

55 age: Optional[int] = None 1fbcd

56 

57 @field_validator("name", "secret_name", "age") 1fbcd

58 def reject_none(cls, v): 1bcd

59 assert v is not None 1fbcd

60 return v 1fbcd

61 

62 Hero.model_validate({"age": 25}) 1fbcd

63 

64 with pytest.raises(ValidationError): 1fbcd

65 Hero.model_validate({"name": None, "age": 25}) 1fbcd