Skip to main content

Automatic type annotations from JSON schemas

Project description

PyPI version Python version PyPI downloads License Code style: Black

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 are 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.

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

You also need to enable the plugin(s) in your mypy.ini configuration file:

# mypy.ini
[mypy]
plugins = jsonschema_typed.plugin, jsonschema_typed.optional_typed_dict

# Due to a quirk of how these type hints are generated, mypy's caching breaks.
# Disabling caching might be required.
cache_dir = /dev/null

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.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distribution

jsonschema_typed-0.8.1-py3-none-any.whl (11.8 kB view details)

Uploaded Python 3

File details

Details for the file jsonschema_typed-0.8.1-py3-none-any.whl.

File metadata

File hashes

Hashes for jsonschema_typed-0.8.1-py3-none-any.whl
Algorithm Hash digest
SHA256 52509fa251b390b56576be5a837382d6b8c60fab1ded4f235f0202b4af45006e
MD5 fe5919f5d38a4474320c5f2858c67a5b
BLAKE2b-256 fd396380d9561d071114ed02ea738ed90f0c85e6a96e9cad883922e3fef68bb8

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page