توفر هذه الحزمة وسيلة لإنتاج التعليقات التوضيحية نوعًا تلقائيًا بناءً على jsonschema -schemas.
لا يمكن التعبير عن كل المفاهيم التي يغطيها jsonschema في تعليقات الكتابة على Python. ومع ذلك ، فإن معظم الأشياء ستعمل كما تتوقع. تتم ترجمة معظم الأنواع بشكل تافه ( integer ، number ، string ، array ، boolean null ). النوع المثير للاهتمام هو object ، والذي يتم ترجمته إلى TypedDict .
تحذير: يعتمد هذا على نظام MyPy Plugin ، والذي يذكر أنه ليس لديه ضمان توافق متخلف. قد لا يتم دعم إصدارات جديدة من 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 حقًا مكافئًا في TypedDict.default غير مدعومة ؛ لكن انظر: Python/mypy#6131."#" ) بشكل صحيح حتى يتم دعم المراجع الأمامية المتداخلة ؛ انظر: Python/mypy#731.