Dieses Paket bietet eine Möglichkeit, automatisch Typ -Anmerkungen auf der Grundlage von jsonschema -Schemas zu produzieren.
Nicht alle von jsonschema behandelten Konzepte sind in den Anmerkungen zwischen Python -Typing ausdrücklich ausdrücklich. Die meisten Dinge funktionieren jedoch, wie Sie es erwarten würden. Die meisten Typen werden trivial übersetzt ( integer , number , string , array , boolean und null ). Der interessante Typ ist object , das in ein TypedDict übersetzt wird.
WARNUNG: Dies basiert auf dem MyPy -Plugin -System, in dem angegeben wird, dass keine Rückwärtskompatibilitätsgarantie besteht. Neue Versionen von MyPy werden möglicherweise nicht sofort unterstützt.
Ein 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 " ]
}Ein 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]"Sie können auch Arten von Teilen eines Schemas sowie Arten von Elementen in Arrays abrufen. Schauen Sie sich die Testfälle an, um weitere Beispiele für die Nutzung zu erhalten.
pip install jsonschema-typed Sie müssen auch die Plugins in Ihrer Konfigurationsdatei mypy.ini aktivieren:
# mypy.ini
[ mypy ]
plugins = j sonschema_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 Die obigen Installationen beheben die Abhängigkeiten, die aus mypy und jsonschema (natürlich) bestehen. Tests wurden mit Versionen durchgeführt:
Wahrscheinlich werden einige ältere Versionen auch funktionieren. Melden Sie ein Problem, wenn Sie andere Versionen benötigen.
additionalProperties haben kein Äquivalent in TypedDict.default -Schlüsselwort wird nicht unterstützt. Aber siehe: Python/Mypy#6131."#" ) können nicht richtig funktionieren, wenn verschachtelte Vorwärtsreferenzen unterstützt werden. Siehe: Python/Mypy#731.