แพ็คเกจนี้ให้วิธีการสร้างคำอธิบายประกอบประเภทโดยอัตโนมัติตาม jsonschema -Schemas
ไม่ใช่แนวคิดทั้งหมดที่ครอบคลุมโดย jsonschema สามารถแสดงออกได้ภายในคำอธิบายประกอบการพิมพ์งูหลาม อย่างไรก็ตามสิ่งต่าง ๆ ส่วนใหญ่จะทำงานอย่างที่คุณคาดหวัง ประเภทส่วนใหญ่ได้รับการแปลเล็กน้อย ( integer , number , string , array , boolean และ null ) ประเภทที่น่าสนใจคือ object ซึ่งแปลเป็น TypedDict
คำเตือน: สิ่งนี้ขึ้นอยู่กับระบบปลั๊กอิน mypy ซึ่งระบุว่าไม่มีการรับประกันความเข้ากันได้ย้อนหลัง MyPy เวอร์ชันใหม่อาจไม่ได้รับการสนับสนุนทันที
สคีมา 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]"นอกจากนี้คุณยังสามารถรับประเภทของสคีมารวมถึงประเภทขององค์ประกอบในอาร์เรย์ ดูกรณีทดสอบสำหรับตัวอย่างการใช้งานเพิ่มเติม
pip install jsonschema-typed คุณต้องเปิดใช้งานปลั๊กอินในไฟล์กำหนดค่า 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 การติดตั้งข้างต้นแก้ไขการพึ่งพาซึ่งประกอบด้วย mypy และ jsonschema (ตามธรรมชาติ) การทดสอบได้ดำเนินการกับเวอร์ชัน:
อาจเป็นรุ่นเก่าบางรุ่นก็ใช้ได้เช่นกัน รายงานปัญหาหากคุณต้องการเวอร์ชันอื่น
additionalProperties ไม่ได้มีค่าเทียบเท่าใน typeddictdefault แต่ดู: Python/mypy#6131"#" ) ไม่สามารถทำงานได้อย่างถูกต้องจนกว่าจะได้รับการสนับสนุนการอ้างอิงไปข้างหน้า ดู: Python/mypy#731