Tool to generate Python types based on TypedDict from a JSON Schema
Project description
JSON Schema generate Python types
Tools to generate Python types based on TypedDict from a JSON schema
Quick start
install:
python3 -m pip install --user jsonschema-gentypes
Convert a JSON schema to a Python file contains the types:
jsonschema-gentypes --json-schema=<JSON schema> --python=<destination Python file>
Config file
You can also write a config file named jsonschema-gentypes.yaml
with:
headers: >
# Automatically generated file from a JSON schema
# Used to correctly format the generated file
callbacks:
- - black
- - isort
generate:
- # JSON schema file path
source: jsonschema_gentypes/schema.json
# Python file path
destination: jsonschema_gentypes/configuration.py
# The name of the root element
root_name: Config
# Argument passed to the API
api_arguments:
additional_properties: Only explicit
# Rename an element
name_mapping: {}
# The minimum Python version that the code should support. By default the
# currently executing Python version is chosen. Note that the output
# may require typing_extensions to be installed.
python_version: '3.11'
And just run:
jsonschema-gentypes
Default
The default values are exported in the Python file, then you can do something like that:
value_with_default = my_object.get('field_name', my_schema.FIELD_DEFAULT)
Limitations
Requires Python 3.8
See the issues with label "limitation".
Pre-commit hooks
This project provides pre-commit hooks to automatically generate the files.
repos:
- repo: https://github.com/camptocamp/jsonschema-gentypes
rev: <version> # Use the ref you want to point at
hools:
- id: jsonschema-gentypes
files: |
(?x)^(
jsonschema-gentypes\.yaml|
<schema_path>\.json
)$
See also the pre_commit section in the configuration to run the pre-commit just after the generation, for example with:
pre_commit:
enabled: true
arguments:
- --color=never
OpenAPI3
We can also generate types for OpenAPI3 schemas (automatically detected).
The result of our example in tests/openapi3.json
can be used in pyramid with for example:
import pyramid.request
from pyramid.view import view_config
from openaoi3 import *
def open_api(func):
def wrapper(request: pyramid.request.Request, **kwargs) -> Any:
typed_request = {}
try:
typed_request{'request_body'} = request.json
except Exception as e:
pass
typed_request{'path'} = request.matchdict
typed_request{'query'} = request.params
return = func(request, request_typed=typed_request, **kwargs)
return wrapper
@view_config(route_name="route_name", renderer="json")
@open_api
def view(
request: pyramid.request.Request,
request_typed: OgcapiCollectionsCollectionidGet,
) -> OgcapiCollectionsCollectionidGetResponse:
return {...}
Contributing
Install the pre-commit hooks:
pip install pre-commit
pre-commit install --allow-missing-config
The prospector
tests should pass.
The code should be typed.
The code should be tested with pytests
.
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
Built Distribution
Hashes for jsonschema_gentypes-2.3.0.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | 923eaf059fafdaa10348d3e233790143dfcad13a0e93ff5d2a5dfc81aa726383 |
|
MD5 | 995cb6978a90ccd036e1019b112f5624 |
|
BLAKE2b-256 | bd406b4c896ce3107e488316cf8ced7de70932cbb236eac6a610c0535990651d |
Hashes for jsonschema_gentypes-2.3.0-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | ef79c6d6de881f6bc26d836b790a4df2f80c865ea9703593d3b8360d451a39a3 |
|
MD5 | a3fe873aa5d26ad21daf33cc1f1ae7b5 |
|
BLAKE2b-256 | 2f37f5a4247938a53fc13180a7a998b46eb5d7c74114d09ff1c5a19e724ae512 |