|
2 | 2 |
|
3 | 3 | from pydantic_core import SchemaError, SchemaValidator |
4 | 4 |
|
5 | | -from ..conftest import PyAndJson |
| 5 | +from ..conftest import PyAndJson, plain_repr |
6 | 6 |
|
7 | 7 |
|
8 | 8 | def test_typed_dict_default(): |
@@ -222,3 +222,36 @@ def test_on_error_wrong(): |
222 | 222 | def test_build_default_and_default_factory(): |
223 | 223 | with pytest.raises(SchemaError, match="'default' and 'default_factory' cannot be used together"): |
224 | 224 | SchemaValidator({'type': 'default', 'schema': 'int', 'default_factory': lambda: 1, 'default': 2}) |
| 225 | + |
| 226 | + |
| 227 | +def test_model_class(): |
| 228 | + class MyModel: |
| 229 | + __slots__ = '__dict__', '__fields_set__' |
| 230 | + field_a: str |
| 231 | + field_b: int |
| 232 | + |
| 233 | + v = SchemaValidator( |
| 234 | + { |
| 235 | + 'type': 'new-class', |
| 236 | + 'class_type': MyModel, |
| 237 | + 'schema': { |
| 238 | + 'type': 'default', |
| 239 | + 'schema': { |
| 240 | + 'type': 'typed-dict', |
| 241 | + 'return_fields_set': True, |
| 242 | + 'fields': {'field_a': {'schema': {'type': 'str'}}, 'field_b': {'schema': {'type': 'int'}}}, |
| 243 | + }, |
| 244 | + 'default': ({'field_a': '[default-a]', 'field_b': '[default-b]'}, ()), |
| 245 | + 'on_error': 'default', |
| 246 | + }, |
| 247 | + } |
| 248 | + ) |
| 249 | + assert 'expect_fields_set:true' in plain_repr(v) |
| 250 | + m = v.validate_python({'field_a': 'test', 'field_b': 12}) |
| 251 | + assert isinstance(m, MyModel) |
| 252 | + assert m.field_a == 'test' |
| 253 | + assert m.field_b == 12 |
| 254 | + m = v.validate_python({'field_a': 'test', 'field_b': 'wrong'}) |
| 255 | + assert isinstance(m, MyModel) |
| 256 | + assert m.field_a == '[default-a]' |
| 257 | + assert m.field_b == '[default-b]' |
0 commit comments