Paket ini menyediakan cara untuk secara otomatis menghasilkan anotasi jenis berdasarkan jsonschema -schemas.
Tidak semua konsep yang dicakup oleh jsonschema dapat diungkapkan dalam anotasi pengetikan Python. Namun, sebagian besar hal akan bekerja seperti yang Anda harapkan. Sebagian besar jenis diterjemahkan secara sepele ( integer , number , string , array , boolean dan null ). Tipe yang menarik adalah object , yang diterjemahkan ke dalam TypedDict .
Peringatan: Ini didasarkan pada sistem plugin Mypy, yang dinyatakan tidak memiliki jaminan kompatibilitas ke belakang. Versi baru Mypy mungkin tidak akan segera didukung.
Skema 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 " ]
}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]"Anda juga bisa mendapatkan jenis bagian dari suatu skema, serta jenis elemen dalam array. Lihatlah kasus uji untuk lebih banyak contoh penggunaan.
pip install jsonschema-typed Anda juga perlu mengaktifkan plugin di file konfigurasi mypy.ini Anda:
# 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 Instalasi di atas menyelesaikan dependensi, yang terdiri dari mypy dan jsonschema (secara alami). Pengujian telah dilakukan dengan versi:
Mungkin beberapa versi yang lebih tua juga akan berfungsi. Laporkan masalah jika Anda membutuhkan versi lain.
additionalProperties tidak benar -benar memiliki setara di Typeddict.default tidak didukung; Tapi lihat: Python/Mypy#6131."#" ) tidak dapat benar-benar bekerja dengan baik sampai referensi ke depan bersarang didukung; Lihat: Python/Mypy#731.