From f80a1bbda35246d198dadef9d17d4db1872ac00b Mon Sep 17 00:00:00 2001 From: Vitor Hideyoshi Date: Sun, 23 Nov 2025 21:40:54 -0300 Subject: [PATCH] feat: fixes error of multiple forwardref with same name --- jambo/parser/oneof_type_parser.py | 8 +++--- tests/test_schema_converter.py | 47 +++++++++++++++++++++++++++++++ 2 files changed, 51 insertions(+), 4 deletions(-) diff --git a/jambo/parser/oneof_type_parser.py b/jambo/parser/oneof_type_parser.py index 11092ea..3c55763 100644 --- a/jambo/parser/oneof_type_parser.py +++ b/jambo/parser/oneof_type_parser.py @@ -29,11 +29,11 @@ class OneOfTypeParser(GenericTypeParser): mapped_properties = self.mappings_properties_builder(properties, **kwargs) - sub_properties = properties["oneOf"] - sub_types = [ - GenericTypeParser.type_from_properties(name, subProperty, **kwargs) - for subProperty in sub_properties + GenericTypeParser.type_from_properties( + f"{name}_sub{i}", subProperty, **kwargs + ) + for i, subProperty in enumerate(properties["oneOf"]) ] if not kwargs.get("required", False): diff --git a/tests/test_schema_converter.py b/tests/test_schema_converter.py index 6f2b15a..f8a0f48 100644 --- a/tests/test_schema_converter.py +++ b/tests/test_schema_converter.py @@ -1,5 +1,6 @@ from jambo import SchemaConverter from jambo.exceptions import InvalidSchemaException, UnsupportedSchemaException +from jambo.types import JSONSchema from pydantic import AnyUrl, BaseModel, ValidationError @@ -791,3 +792,49 @@ class TestSchemaConverter(TestCase): with self.assertRaises(ValidationError): Model(a_thing="not none") + + def test_scoped_ref_schema(self): + schema: JSONSchema = { + "title": "Example Schema", + "type": "object", + "properties": { + "operating_system": { + "oneOf": [ + {"$ref": "#/$defs/operating_system"}, + { + "type": "object", + "properties": { + "creation": {"$ref": "#/$defs/operating_system"}, + "reinstallation": {"$ref": "#/$defs/operating_system"}, + }, + "required": ["creation", "reinstallation"], + }, + ] + }, + }, + "$defs": { + "operating_system": { + "type": "object", + "properties": { + "name": {"type": "string"}, + "version": {"type": "string"}, + }, + "required": ["name", "version"], + } + }, + } + + schema_type = SchemaConverter.build(schema) + + _ = schema_type.model_validate( + {"operating_system": {"name": "Ubuntu", "version": "20.04"}} + ) + + _ = schema_type.model_validate( + { + "operating_system": { + "creation": {"name": "Ubuntu", "version": "20.04"}, + "reinstallation": {"name": "Ubuntu", "version": "22.04"}, + } + } + )