(fix): Adds check for discriminator type

This commit is contained in:
2025-08-19 22:25:36 -03:00
parent dc5853c5b2
commit 7e11c817a7
2 changed files with 36 additions and 3 deletions

View File

@@ -1,8 +1,8 @@
from jambo.parser._type_parser import GenericTypeParser
from jambo.types.type_parser_options import TypeParserOptions
from pydantic import BeforeValidator, Field, TypeAdapter, ValidationError
from typing_extensions import Annotated, Any, Union, Unpack
from pydantic import BaseModel, BeforeValidator, Field, TypeAdapter, ValidationError
from typing_extensions import Annotated, Any, Union, Unpack, get_args
class OneOfTypeParser(GenericTypeParser):
@@ -16,7 +16,7 @@ class OneOfTypeParser(GenericTypeParser):
if "oneOf" not in properties:
raise ValueError(f"Invalid JSON Schema: {properties}")
if not isinstance(properties["oneOf"], list):
if not isinstance(properties["oneOf"], list) or len(properties["oneOf"]) == 0:
raise ValueError(f"Invalid JSON Schema: {properties['oneOf']}")
mapped_properties = self.mappings_properties_builder(properties, **kwargs)
@@ -57,6 +57,16 @@ class OneOfTypeParser(GenericTypeParser):
if not isinstance(discriminator_prop, dict):
raise ValueError("Discriminator must be a dictionary")
for field in subfield_types:
field_type, field_info = get_args(field)
if issubclass(field_type, BaseModel):
continue
raise ValueError(
"When using a discriminator, all subfield types must be of type 'object'."
)
property_name = discriminator_prop.get("propertyName")
if property_name is None or not isinstance(property_name, str):
raise ValueError("Discriminator must have a 'propertyName' key")