betty.json_schema module

Provide JSON utilities.

class betty.json_schema.AllOf

Bases: _Container

A JSON Schema allOf.

class betty.json_schema.AnyOf

Bases: _Container

A JSON Schema anyOf.

class betty.json_schema.Array

Bases: _Type

A JSON Schema array type.

__init__(items: Schema, *, def_name: str | None = None, title: ResolvableLocalizable | None = None, description: ResolvableLocalizable | None = None)
class betty.json_schema.Boolean

Bases: _Type

A JSON Schema boolean type.

class betty.json_schema.Const

Bases: Schema

A JSON Schema const.

__init__(const: PortableData, *, def_name: str | None = None, title: ResolvableLocalizable | None = None, description: ResolvableLocalizable | None = None)
class betty.json_schema.Def

Bases: str

The name of a named Betty schema.

Using this instead of str directly allows Betty to bundle schemas together under a project namespace.

See betty.json_schema.Schema.def_name.

static __new__(cls, def_name: str, /)
class betty.json_schema.Enum

Bases: Schema

A JSON Schema enum.

__init__(*values: PortableData, def_name: str | None = None, title: ResolvableLocalizable | None = None, description: ResolvableLocalizable | None = None)
class betty.json_schema.Integer

Bases: _Type

A JSON Schema integer type.

class betty.json_schema.JsonSchemaReference

Bases: String

The JSON Schema schema.

__init__()
final class betty.json_schema.JsonSchemaSchema

Bases: Schema

The JSON Schema Draft 2020-12 schema.

__init__()
class betty.json_schema.Null

Bases: _Type

A JSON Schema null type.

class betty.json_schema.Number

Bases: _Type

A JSON Schema number type.

class betty.json_schema.Object

Bases: _Type

A JSON Schema object type.

__init__(*, def_name: str | None = None, title: ResolvableLocalizable | None = None, description: ResolvableLocalizable | None = None)
add_property(property_name: str, property_schema: Schema, property_required: bool = True, /) None

Add a property to the object schema.

class betty.json_schema.OneOf

Bases: _Container

A JSON Schema oneOf.

class betty.json_schema.Ref

Bases: Schema

A JSON Schema that references a named Betty schema.

__init__(def_name: str, /)
class betty.json_schema.Schema

Bases: object

A JSON Schema.

All schemas using this class MUST follow JSON Schema Draft 2020-12.

To test your own subclasses, use betty.test_utils.json_schema.SchemaTestBase.

__init__(*, def_name: str | None = None, title: ResolvableLocalizable | None = None, description: ResolvableLocalizable | None = None)
property def_name: str | None

The schema machine name when embedded into another schema’s $defs.

property defs: PortableMapping

The JSON Schema’s $defs definitions, kept separately, so they can be merged when this schema is embedded.

Only top-level definitions are supported. You MUST NOT nest definitions. Instead, prefix or suffix their names.

property description: str | None

The schema’s human-readable US English (long) description.

embed(into: Schema, /) PortableMapping

Embed this schema.

This is where the raw schema may be enhanced before being returned.

property schema: PortableMapping

The raw JSON Schema.

property title: str | None

The schema’s human-readable US English (short) title.

validate(data: Any, /) None

Validate data against this schema.

class betty.json_schema.String

Bases: _Type

A JSON Schema string type.

class Format

Bases: Enum

A JSON Schema string type’s format.

DATE = 'date'
DATE_TIME = 'date-time'
DURATION = 'duration'
EMAIL = 'email'
HOSTNAME = 'hostname'
IDN_EMAIL = 'idn-email'
IDN_HOSTNAME = 'idn-hostname'
IPV4 = 'ipv4'
IPV6 = 'ipv6'
IRI = 'iri'
IRI_REFERENCE = 'iri-reference'
JSON_POINTER = 'json-pointer'
REGEX = 'regex'
RELATIVE_JSON_POINTER = 'relative-json-pointer'
TIME = 'time'
URI = 'uri'
URI_REFERENCE = 'uri-reference'
URI_TEMPLATE = 'uri-template'
UUID = 'uuid'
__init__(*, def_name: str | None = None, title: ResolvableLocalizable | None = None, description: ResolvableLocalizable | None = None, min_length: int | None = None, max_length: int | None = None, pattern: str | None = None, format: Format | None = None)