Skip to content

Commit bbaef68

Browse files
committed
confirming prebuilt usage via a test
1 parent 78f18b3 commit bbaef68

File tree

1 file changed

+48
-0
lines changed

1 file changed

+48
-0
lines changed

tests/validators/test_prebuilt.py

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
from pydantic_core import SchemaSerializer, SchemaValidator, core_schema
2+
3+
4+
def test_prebuilt_val_and_ser_used() -> None:
5+
class InnerModel:
6+
x: int
7+
8+
inner_schema = core_schema.model_schema(
9+
InnerModel,
10+
schema=core_schema.model_fields_schema(
11+
{'x': core_schema.model_field(schema=core_schema.int_schema())},
12+
),
13+
)
14+
15+
inner_schema_validator = SchemaValidator(inner_schema)
16+
inner_schema_serializer = SchemaSerializer(inner_schema)
17+
InnerModel.__pydantic_complete__ = True # pyright: ignore[reportAttributeAccessIssue]
18+
InnerModel.__pydantic_validator__ = inner_schema_validator # pyright: ignore[reportAttributeAccessIssue]
19+
InnerModel.__pydantic_serializer__ = inner_schema_serializer # pyright: ignore[reportAttributeAccessIssue]
20+
21+
class OuterModel:
22+
inner: InnerModel
23+
24+
outer_schema = core_schema.model_schema(
25+
OuterModel,
26+
schema=core_schema.model_fields_schema(
27+
{
28+
'inner': core_schema.model_field(
29+
schema=core_schema.model_schema(
30+
InnerModel,
31+
schema=core_schema.model_fields_schema(
32+
# note, we use str schema here even though that's incorrect
33+
# in order to verify that the prebuilt validator is used
34+
# off of InnerModel with the correct int schema, not this str schema
35+
{'x': core_schema.model_field(schema=core_schema.str_schema())},
36+
),
37+
)
38+
)
39+
}
40+
),
41+
)
42+
43+
outer_validator = SchemaValidator(outer_schema)
44+
outer_serializer = SchemaSerializer(outer_schema)
45+
46+
result = outer_validator.validate_python({'inner': {'x': 1}})
47+
assert result.inner.x == 1
48+
assert outer_serializer.to_python(result) == {'inner': {'x': 1}}

0 commit comments

Comments
 (0)