MCPcopy
hub / github.com/pydantic/pydantic / test_config_model_defer_build_nested

Function test_config_model_defer_build_nested

tests/test_config.py:820–858  ·  view source on GitHub ↗
(defer_build: bool, generate_schema_calls: CallCounter)

Source from the content-addressed store, hash-verified

818
819@pytest.mark.parametrize('defer_build', [True, False])
820def test_config_model_defer_build_nested(defer_build: bool, generate_schema_calls: CallCounter):
821 config = ConfigDict(defer_build=defer_build)
822
823 assert generate_schema_calls.count == 0
824
825 class MyNestedModel(BaseModel):
826 model_config = config
827 x: int
828
829 class MyModel(BaseModel):
830 y: MyNestedModel
831
832 assert isinstance(MyModel.__pydantic_validator__, SchemaValidator)
833 assert isinstance(MyModel.__pydantic_serializer__, SchemaSerializer)
834
835 expected_schema_count = 1 if defer_build is True else 2
836 assert generate_schema_calls.count == expected_schema_count, 'Should respect defer_build'
837
838 if defer_build:
839 assert isinstance(MyNestedModel.__pydantic_validator__, MockValSer)
840 assert isinstance(MyNestedModel.__pydantic_serializer__, MockValSer)
841 else:
842 assert isinstance(MyNestedModel.__pydantic_validator__, SchemaValidator)
843 assert isinstance(MyNestedModel.__pydantic_serializer__, SchemaSerializer)
844
845 m = MyModel(y={'x': 1})
846 assert m.y.x == 1
847 assert m.model_dump() == {'y': {'x': 1}}
848 assert m.model_validate({'y': {'x': 1}}).y.x == 1
849 assert m.model_json_schema()['type'] == 'object'
850
851 if defer_build:
852 assert isinstance(MyNestedModel.__pydantic_validator__, MockValSer)
853 assert isinstance(MyNestedModel.__pydantic_serializer__, MockValSer)
854 else:
855 assert isinstance(MyNestedModel.__pydantic_validator__, SchemaValidator)
856 assert isinstance(MyNestedModel.__pydantic_serializer__, SchemaSerializer)
857
858 assert generate_schema_calls.count == expected_schema_count, 'Should not build duplicated core schemas'
859
860
861def test_config_model_defer_build_ser_first():

Callers

nothing calls this directly

Calls 5

ConfigDictClass · 0.90
model_validateMethod · 0.80
MyModelClass · 0.70
model_dumpMethod · 0.45
model_json_schemaMethod · 0.45

Tested by

no test coverage detected