Este paquete proporciona una forma de producir automáticamente anotaciones de tipo basadas en jsonschema -Schemas.
No todos los conceptos cubiertos por jsonschema son expresables dentro de las anotaciones de tipificación de Python. Sin embargo, la mayoría de las cosas funcionarán como esperaría. La mayoría de los tipos se traducen trivialmente ( integer , number , string , array , boolean y null ). El tipo interesante es object , que se traduce a un TypedDict .
ADVERTENCIA: Esto se basa en el sistema de complementos MYPY, que se dice que no tiene una garantía de compatibilidad hacia atrás. Es posible que las nuevas versiones de Mypy no sean compatibles de inmediato.
Un esquema 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 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]"También puede obtener tipos de partes de un esquema, así como tipos de elementos en matrices. Eche un vistazo a los casos de prueba para obtener más ejemplos de uso.
pip install jsonschema-typed También debe habilitar los complementos en su archivo de configuración 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 Las instalaciones anteriores resuelven las dependencias, que consisten en mypy y jsonschema (naturalmente). Se han realizado pruebas con versiones:
Probablemente algunas versiones anteriores también funcionarán. Informe un problema si necesita otras versiones.
additionalProperties no tienen realmente un equivalente en Typeddict.default no es compatible; Pero ver: Python/Mypy#6131."#" ) realmente no pueden funcionar correctamente hasta que se respalden las referencias hacia adelante anidadas; Ver: Python/Mypy#731.