Implements Object Defaults

This commit is contained in:
2025-04-13 02:37:21 -03:00
parent 62f3f9b1c5
commit 7272b1a74b
7 changed files with 71 additions and 15 deletions

View File

@@ -21,3 +21,29 @@ class TestObjectTypeParser(TestCase):
self.assertEqual(obj.name, "name")
self.assertEqual(obj.age, 10)
def test_object_type_parser_with_default(self):
parser = ObjectTypeParser()
properties = {
"type": "object",
"properties": {
"name": {"type": "string"},
"age": {"type": "integer"},
},
"default": {
"name": "default_name",
"age": 20,
},
}
_, type_validator = parser.from_properties("placeholder", properties)
# Check default value
default_obj = type_validator["default_factory"]()
self.assertEqual(default_obj.name, "default_name")
self.assertEqual(default_obj.age, 20)
# Chekc default factory new object id
new_obj = type_validator["default_factory"]()
self.assertNotEqual(id(default_obj), id(new_obj))

View File

@@ -256,3 +256,28 @@ class TestSchemaConverter(TestCase):
model_set = SchemaConverter.build(schema_set)
self.assertEqual(model_set().friends, {"John", "Jane"})
def test_default_for_object(self):
schema = {
"title": "Person",
"description": "A person",
"type": "object",
"properties": {
"address": {
"type": "object",
"properties": {
"street": {"type": "string"},
"city": {"type": "string"},
},
"default": {"street": "123 Main St", "city": "Springfield"},
},
},
"required": ["address"],
}
model = SchemaConverter.build(schema)
obj = model(address={"street": "123 Main St", "city": "Springfield"})
self.assertEqual(obj.address.street, "123 Main St")
self.assertEqual(obj.address.city, "Springfield")