From 2da409e6df81bfc4c56481775d74ffbc0cd28989 Mon Sep 17 00:00:00 2001 From: Vitor Hideyoshi Date: Mon, 24 Nov 2025 17:34:29 +0000 Subject: [PATCH] fix: fixes invalid subobject required --- jambo/parser/object_type_parser.py | 10 +++++++--- tests/test_schema_converter.py | 30 ++++++++++++++++++++++++++++++ 2 files changed, 37 insertions(+), 3 deletions(-) diff --git a/jambo/parser/object_type_parser.py b/jambo/parser/object_type_parser.py index b625a6e..57bc177 100644 --- a/jambo/parser/object_type_parser.py +++ b/jambo/parser/object_type_parser.py @@ -23,9 +23,13 @@ class ObjectTypeParser(GenericTypeParser): ) type_properties = self.mappings_properties_builder(properties, **kwargs) - if (default_value := type_properties.pop("default", None)) is not None: - type_properties["default_factory"] = lambda: type_parsing.model_validate( - default_value + if ( + default_value := type_properties.pop("default", None) + ) is not None or not kwargs.get("required", False): + type_properties["default_factory"] = ( + lambda: type_parsing.model_validate(default_value) + if default_value is not None + else None ) if (example_values := type_properties.pop("examples", None)) is not None: diff --git a/tests/test_schema_converter.py b/tests/test_schema_converter.py index 77c88c9..cbc6f72 100644 --- a/tests/test_schema_converter.py +++ b/tests/test_schema_converter.py @@ -836,3 +836,33 @@ class TestSchemaConverter(TestCase): second_type = get_args(arg2)[0] self.assertNotEqual(first_type.__name__, second_type.__name__) + + def test_object_invalid_require(self): + # https://github.com/HideyoshiNakazone/jambo/issues/60 + object_ = SchemaConverter.build( + { + "$schema": "https://json-schema.org/draft/2020-12/schema", + "title": "TEST", + "type": "object", + "required": ["title"], + "properties": { + "title": { + "type": "string", + "description": "The title of the object", + }, + "description": { + "type": "object", + "properties": { + "summary": { + "type": "string", + }, + "details": { + "type": "string", + }, + }, + }, + }, + } + ) + + self.assertFalse(object_.model_fields["description"].is_required()) # FAIL