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
« prev ^ index » next coverage.py v7.5.4, created at 2024-07-08 00:02 +0000
1from typing import Optional 1fabcde
3import pytest 1fabcde
4from pydantic.error_wrappers import ValidationError 1fabcde
5from sqlmodel import SQLModel 1fabcde
7from .conftest import needs_pydanticv1, needs_pydanticv2 1fabcde
10@needs_pydanticv1 1fabcde
11def test_validation_pydantic_v1(clear_sqlmodel): 1abcde
12 """Test validation of implicit and explicit None values.
14 # For consistency with pydantic, validators are not to be called on
15 # arguments that are not explicitly provided.
17 https://github.com/tiangolo/sqlmodel/issues/230
18 https://github.com/samuelcolvin/pydantic/issues/1223
20 """
21 from pydantic import validator 1ae
23 class Hero(SQLModel): 1ae
24 name: Optional[str] = None 1ae
25 secret_name: Optional[str] = None 1ae
26 age: Optional[int] = None 1ae
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
33 Hero.validate({"age": 25}) 1ae
35 with pytest.raises(ValidationError): 1ae
36 Hero.validate({"name": None, "age": 25}) 1ae
39@needs_pydanticv2 1fabcde
40def test_validation_pydantic_v2(clear_sqlmodel): 1abcde
41 """Test validation of implicit and explicit None values.
43 # For consistency with pydantic, validators are not to be called on
44 # arguments that are not explicitly provided.
46 https://github.com/tiangolo/sqlmodel/issues/230
47 https://github.com/samuelcolvin/pydantic/issues/1223
49 """
50 from pydantic import field_validator 1fbcd
52 class Hero(SQLModel): 1fbcd
53 name: Optional[str] = None 1fbcd
54 secret_name: Optional[str] = None 1fbcd
55 age: Optional[int] = None 1fbcd
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
62 Hero.model_validate({"age": 25}) 1fbcd
64 with pytest.raises(ValidationError): 1fbcd
65 Hero.model_validate({"name": None, "age": 25}) 1fbcd