Skip to main content

Automatic type annotations from JSON schemas

Project description

JSON Schema-powered type annotations

This package provides a way to automatically produce type annotations based on jsonschema-schemas.

Not all concepts covered by jsonschema is expressible within Python typing annotations. However, most things will work like you'd expect. Most types are translated trivially (integer, number, string, array, boolean and null). The interesting type is object, which is translated into a TypedDict.

Warning: This is based on the mypy plugin system, which is stated to have no backwards compatibility guarantee. New versions of mypy might not be supported immediately. have been warned.

Note: This is a maintained fork of erickpeirson's original start on this project. The original repo seems to be abandoned and its current state is not functional. Make sure to install the right package from PyPI, jsonschema-typed-v2

Example

A JSON schema:

{
    "$schema": "http://json-schema.org/draft-07/schema#",
    "$id": "http://foo.qwerty/some/schema#",
    "title": "Foo Schema",
    "type": "object",
    "properties": {
        "title": {
            "type": "string"
        },
        "awesome": {
            "type": "number"
        }
    },
    "required": ["title"]
}

A TypedDict:

from typing import TYPE_CHECKING
from jsonschema_typed import JSONSchema

data: JSONSchema["path/to/schema.json"] = {"title": "baz"}

if TYPE_CHECKING:
    reveal_type(data)  # Revealed type is 'TypedDict('FooSchema', {'title'?: builtins.str,
                                                                   'awesome'?: Union[builtins.int, builtins.float]})'
data["description"] = "there is no description"  # TypedDict "FooSchema" has no key 'description'
data["awesome"] = 42
data["awesome"] = None  # Argument 2 has incompatible type "None"; expected "Union[int, float]"

You can also get types of parts of a schema, as well as types of elements in arrays. Take a look at the test cases for more examples of usage.

Installation

pip install jsonschema-typed-v2

Requirements

The above installations resolves the dependencies, which consist of mypy and jsonschema (naturally). Testing has been done with versions:

  • mypy==0.761
  • jsonschema==3.2.0

Probably some older versions will also work. Report an issue if you need other versions.

Limitations

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Files for jsonschema-typed-v2, version 0.6.3
Filename, size File type Python version Upload date Hashes
Filename, size jsonschema_typed_v2-0.6.3-py3-none-any.whl (10.2 kB) File type Wheel Python version py3 Upload date Hashes View hashes

Supported by

Elastic Elastic Search Pingdom Pingdom Monitoring Google Google BigQuery Sentry Sentry Error logging AWS AWS Cloud computing DataDog DataDog Monitoring Fastly Fastly CDN DigiCert DigiCert EV certificate StatusPage StatusPage Status page