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.2.tar.gz
(11.5 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.2.tar.gz.
File metadata
- Download URL: jsonschema_models-1.0.2.tar.gz
- Upload date:
- Size: 11.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
445972a02dfcf7a75ddb1c55ce411725f983d379f65e791da401bbbf22c09bd6
|
|
| MD5 |
37716f45bb3d5e7d9604622631164df8
|
|
| BLAKE2b-256 |
cc07affb09563ac46b7ea612ede6c2a8d64d293b9fea5e78640e55bb1de568c2
|
File details
Details for the file jsonschema_models-1.0.2-py3-none-any.whl.
File metadata
- Download URL: jsonschema_models-1.0.2-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 |
5577fd0964e6316900bfc77f3f4ca7110ea083930fd523ee0e43fac675247199
|
|
| MD5 |
4d9b5bb9d1cdea2335aedc6da0ae2781
|
|
| BLAKE2b-256 |
4ced6ccb1fdd7c62d8bbe97f1544eaadd7aff3e2be712ccaf3920d161a3a2403
|