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

@@ -1,5 +1,7 @@
from jambo.parser._type_parser import GenericTypeParser
from jambo.utils.properties_builder.numeric_properties_builder import numeric_properties_builder
from jambo.utils.properties_builder.numeric_properties_builder import (
numeric_properties_builder,
)
class FloatTypeParser(GenericTypeParser):

View File

@@ -1,5 +1,7 @@
from jambo.parser._type_parser import GenericTypeParser
from jambo.utils.properties_builder.numeric_properties_builder import numeric_properties_builder
from jambo.utils.properties_builder.numeric_properties_builder import (
numeric_properties_builder,
)
class IntTypeParser(GenericTypeParser):

View File

@@ -10,10 +10,12 @@ class ObjectTypeParser(GenericTypeParser):
def from_properties(name, properties):
from jambo.schema_converter import SchemaConverter
if "default" in properties:
raise RuntimeError("Default values for objects are not supported.")
type_parsing = SchemaConverter.build_object(name, properties)
type_properties = {}
return (
SchemaConverter.build_object(name, properties),
{}, # The second argument is not used in this case
)
if "default" in properties:
type_properties["default_factory"] = lambda: type_parsing.model_validate(
properties["default"]
)
return type_parsing, type_properties

View File

@@ -1,13 +1,11 @@
from jambo.parser import GenericTypeParser
from jambo.types.json_schema_type import JSONSchema
from jsonschema.exceptions import SchemaError
from jsonschema.protocols import Validator
from pydantic import create_model
from pydantic.fields import Field
from typing import Type
from jambo.types.json_schema_type import JSONSchema
from pydantic.main import ModelT
class SchemaConverter:
@@ -20,7 +18,7 @@ class SchemaConverter:
"""
@staticmethod
def build(schema: JSONSchema) -> Type:
def build(schema: JSONSchema) -> ModelT:
"""
Converts a JSON Schema to a Pydantic model.
:param schema: The JSON Schema to convert.
@@ -35,7 +33,7 @@ class SchemaConverter:
def build_object(
name: str,
schema: JSONSchema,
) -> Type:
) -> ModelT:
"""
Converts a JSON Schema object to a Pydantic model given a name.
:param name:
@@ -60,7 +58,7 @@ class SchemaConverter:
@staticmethod
def _build_model_from_properties(
model_name: str, model_properties: dict, required_keys: list[str]
) -> Type:
) -> ModelT:
properties = SchemaConverter._parse_properties(model_properties, required_keys)
return create_model(model_name, **properties)