Pydantic models for representing JSON Schema objects
Project description
jsonschema-models
Pydantic models for representing JSON Schema objects.
Features
- Full support for JSON Schema Draft 2020-12 specification
- Python 3.12+ type annotations
- Pydantic-based models for validation and serialization
- Specialized schema classes for different types (string, number, array, object, etc.)
- Support for references and nested schemas
- Type fields can use Python types (str, int, float, bool, list, dict) or SchemaType enums
- Sypport for specifying format validation:
- Email formats (email, idn-email)
- Hostname formats (hostname, idn-hostname)
- IP address formats (ipv4, ipv6)
- Resource identifier formats (uri, uri-reference, iri, iri-reference, uuid)
- Date and time formats (date-time, date, time, duration)
- URI templates (uri-template)
- JSON pointers (json-pointer, relative-json-pointer)
- Regular expressions (regex)
Installation
pip install jsonschema-models
Usage
Basic Usage
import jsonschema_models as jsm
# Create a simple schema
schema = jsm.Schema(
title='Person',
type=jsm.SchemaType.OBJECT, # Or use Python type: type=dict
properties={
'name': jsm.Schema(type=jsm.SchemaType.STRING), # Or use Python type: type=str
'age': jsm.Schema(type=jsm.SchemaType.INTEGER, minimum=0) # Or use Python type: type=int
},
required=['name']
)
# Convert to JSON Schema
json_schema = schema.model_dump(by_alias=True)
Using Specialized Schema Classes
import jsonschema_models as jsm
# Create a schema using specialized classes
schema = jsm.ObjectSchema(
title='Person',
properties={
'name': jsm.StringSchema(min_length=1),
'age': jsm.IntegerSchema(minimum=0),
'hobbies': jsm.ArraySchema(items=jsm.StringSchema()),
'email': jsm.EmailSchema(description="Contact email"),
'website': jsm.URISchema(pattern="^https://")
},
required=['name', 'email']
)
Working with Format Validation
import jsonschema_models as jsm
# Using format validation with specialized schemas
user_schema = jsm.ObjectSchema(
title='User',
properties={
'id': jsm.UuidSchema(),
'email': jsm.EmailSchema(min_length=5),
'website': jsm.URISchema(),
'registration_date': jsm.DateTimeSchema(),
'server_hostname': jsm.HostnameSchema(),
'server_ip': jsm.IPv4Schema()
},
required=['id', 'email']
)
# Using format validation with Schema class
contact_schema = jsm.Schema(
type=jsm.SchemaType.OBJECT,
properties={
'email_alternative': jsm.Schema(
type=jsm.SchemaType.STRING,
format=jsm.FormatType.EMAIL
),
'phone': jsm.Schema(
type=jsm.SchemaType.STRING,
pattern=r'^\+[0-9]{1,3}-[0-9]{3,14}$'
)
}
)
# Convert to JSON Schema
json_schema = user_schema.model_dump(by_alias=True)
Working with References
import jsonschema_models as jsm
# Create a schema with references
schema = jsm.Schema(
title='Root',
type=dict,
properties={
'user': jsm.Schema(ref='#/$defs/user')
},
defs={
'user': jsm.Schema(
type=dict,
properties={
'name': jsm.Schema(type=str),
'email': jsm.EmailSchema(),
'created_at': jsm.DateTimeSchema()
},
required=['name', 'email']
)
}
)
License
BSD License - See LICENSE file for details
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
jsonschema_models-1.0.0.tar.gz
(11.4 kB
view details)
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file jsonschema_models-1.0.0.tar.gz.
File metadata
- Download URL: jsonschema_models-1.0.0.tar.gz
- Upload date:
- Size: 11.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d9d3cacada7f6627e4762b4dcd5a05999f767f82900bd57d388671b752c4a626
|
|
| MD5 |
8241d585e2a1a1b4f429d1d1ac4bab11
|
|
| BLAKE2b-256 |
59b5eccca50780e4599a9d1a1f11eac7bc708f8ac889f48cea28a09fd45f1196
|
File details
Details for the file jsonschema_models-1.0.0-py3-none-any.whl.
File metadata
- Download URL: jsonschema_models-1.0.0-py3-none-any.whl
- Upload date:
- Size: 8.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
940132dd1745d8f48c7a904b40d7fe75b3af135ea464567c38d22dee2731dbb6
|
|
| MD5 |
af17118695dc9b353acaac54fd0fa1ce
|
|
| BLAKE2b-256 |
82f5c92ce3d843890f7a3750f524fdd7422273662d173ce65a5b0b620b8ca015
|