Reference Type
The Reference type allows you to reference another schema by its $ref property. This is useful for reusing schemas across your application.
The Reference type has no specific properties, it has only the generic properties:
default: Default value for the reference.
description: Description of the reference field.
Examples
Reference to the Root schema:
from jambo import SchemaConverter
schema = {
"title": "Person",
"type": "object",
"properties": {
"name": {"type": "string"},
"age": {"type": "integer"},
"emergency_contact": {
"$ref": "#"
}
},
"required": ["name"],
}
Model = SchemaConverter.build(schema)
obj = Model(name="Alice", age=30, emergency_contact=Model(name="Bob", age=25))
print(obj) # Output: Person(name='Alice', age=30, emergency_contact=Person(name='Bob', age=25))
Reference to a Def Schema:
from jambo import SchemaConverter
schema = {
"title": "Person",
"type": "object",
"properties": {
"name": {"type": "string"},
"age": {"type": "integer"},
"address": {
"$ref": "#/$defs/Address"
}
},
"required": ["name"],
"$defs": {
"Address": {
"type": "object",
"properties": {
"street": {"type": "string"},
"city": {"type": "string"},
},
"required": ["street", "city"],
}
},
}
Model = SchemaConverter.build(schema)
obj = Model(name="Alice", age=30, address={"street": "123 Main St", "city": "Springfield"})
print(obj) # Output: Person(name='Alice', age=30, address=Address(street='123 Main St', city='Springfield'))
Note
At the moment, Jambo doesn’t have a way to expose the class definition Address defined inside the $defs property,
but you can access the model class by using the Model.__fields__ attribute to get the field definitions,
or by using the Model.model_fields property to get a dictionary of field names and their types.
Warning
The JSON Schema Reference specification allows for uri referneces, but Jambo currently only supports root references (using the # symbol) and def references (using the $def property).