Este pacote fornece uma maneira de produzir automaticamente anotações de tipo com base em jsonschema -Schemas.
Nem todos os conceitos cobertos pelo jsonschema são expressos nas anotações de digitação de Python. No entanto, a maioria das coisas funcionará como você esperaria. A maioria dos tipos é traduzida trivialmente ( integer , number , string , array , boolean e null ). O tipo interessante é object , que é traduzido para um TypedDict .
Aviso: isso é baseado no sistema de plug -in MyPy, que afirma que não tem garantia de compatibilidade com versões anteriores. Novas versões do MyPy podem não ser suportadas imediatamente.
Um 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 " ]
}Um 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]"Você também pode obter tipos de partes de um esquema, bem como tipos de elementos nas matrizes. Dê uma olhada nos casos de teste para obter mais exemplos de uso.
pip install jsonschema-typed Você também precisa ativar o (s) plugin (s) em seu arquivo de configuração 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 As instalações acima resolvem as dependências, que consistem em mypy e jsonschema (naturalmente). Os testes foram feitos com versões:
Provavelmente, algumas versões mais antigas também funcionarão. Relate um problema se você precisar de outras versões.
additionalProperties não têm realmente um equivalente no typeddict.default não é suportada; Mas veja: Python/mypy#6131."#" ) não podem realmente funcionar corretamente até que as referências anteriores aninhadas sejam suportadas; Veja: Python/mypy#731.