Ce package fournit un moyen de produire automatiquement des annotations de type basés sur les sonschemas jsonschema .
Tous les concepts couverts par jsonschema ne sont pas exprimés dans les annotations de typage Python. Cependant, la plupart des choses fonctionneront comme vous vous y attendez. La plupart des types sont traduits trivialement ( integer , number , string , array , boolean et null ). Le type intéressant est object , qui est traduit dans un TypedDict .
AVERTISSEMENT: Ceci est basé sur le système de plugin MyPy, qui ne peut avoir aucune garantie de compatibilité en arrière. Les nouvelles versions de MyPy pourraient ne pas être prises en charge immédiatement.
Un schéma JSON:
{
"$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 " ]
}Un dactyloclé:
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]"Vous pouvez également obtenir des types de parties d'un schéma, ainsi que des types d'éléments dans les tableaux. Jetez un œil aux cas de test pour plus d'exemples d'utilisation.
pip install jsonschema-typed Vous devez également activer le (s) plugin (s) dans votre fichier de configuration mypy.ini :
# 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 Les installations ci-dessus résout les dépendances, qui sont composées de mypy et jsonschema (naturellement). Les tests ont été effectués avec des versions:
Probablement certaines versions plus anciennes fonctionneront également. Signalez un problème si vous avez besoin d'autres versions.
additionalProperties n'ont pas vraiment d'équivalent dans TypedDict.default n'est pas pris en charge; Mais voir: Python / mypy # 6131."#" ) ne peuvent pas vraiment fonctionner correctement jusqu'à ce que les références avant-gardistes soient soutenues; Voir: Python / mypy # 731.