YSPEC هو مدقق بسيط بسيط للهياكل. إنه مفيد بشكل خاص للتحقق من ملفات YAML/JSON المختلفة
yspec ./schema.yaml /tmp/data.jsonملاحظة: YSPEC قادرة على أخذ YAML/JSON للمخطط وللبيانات
from yspec . checker import check
# Some code that prepares data and rules
check ( data , rules )المخطط هو قول القواعد. كل قاعدة تقوم ببعض الفحص وفقًا لحقل "المطابقة". يجب أن يتضمن المخطط قاعدة "الجذر" التي يتم تطبيقها على الكائن العلوي في الهيكل.
على سبيل المثال الهيكل (في YAML):
---
- ' string1 '
- ' string2 '
سيكون ساري المفعول للمخطط (في يامل):
---
root :
match : list
item : string
string :
match : string my_awesome_string :
match : string my_awesome_bool :
match : bool my_awesome_int :
match : int my_awesome_float :
match : float empty_object :
match : none any_type :
match : anyهناك اثنان منهم: القولان والقائمة. كلاهما لديه نفس منطق العودية. في البداية ، نطبق بعض الشيكات على الكائن نفسه ، ثم نطبق قاعدة أخرى (أو نفس) على الأطفال (عناصر قائمة ، أو قيم القول).
my_list :
match : list
item : some_other_ruleالقائمة هي نوع Recurent. القبضة التي تتحقق هي القائمة الكائن ، ثم تحقق من كل عنصر وفقًا للقاعدة في "العنصر" attr.
my_list :
match : dict
items :
key1 : string_rule
key2 : integer_rule
default_item : some_other_rule
required_items :
- key2هذه قاعدة تصف القولان الذي يحتوي على مفتاحين (key1 و key2). أحد المفاتيح (key2) إلزامي. يجب فحص Key1 وفقًا لقاعدة "string_rule" ، في حين سيتم فحص أي مفاتيح أخرى مع أي اسم آخر (غير مفتاح 1 أو مفتاح 2) وفقًا لـ Some_other_rule.
إذا قمنا بإزالة Default_Item
my_list :
match : dict
items :
key1 : string_rule
key2 : integer_rule
required_items :
- key2يمكن أن يكون القولان مع مفتاحين (key1 ، key2) الحد الأقصى
مخطط:
---
boolean :
match : bool
string :
match : string
integer :
match : int
float :
match : float
list :
match : list
item : string
root :
match : dict
items :
key1 : boolean
key2 : string
key3 : integer
key4 : float
key5 : listبيانات:
---
key1 : true
key2 : " That is a string "
key3 : 1
key4 : 1.0
key5 :
- " One more string "
- " Another string " constraint_list_item :
match : one_of
variants :
- integer_rule
- some_other_ruleيتطابق مع نجاح واحد إذا كان أي من القواعد الناجحة من "المتغيرات".
لنفترض أنك بحاجة إلى التحقق من قائمة الفواكه الصغيرة:
---
- apple
- plumيمكنك استخدام مجموعة المطابقة لذلك. في بند المتغيرات من مجموعة المطابقة ، يمكنك إدراج جميع القيم المطلقة لهذا النوع:
---
root :
match : list
item : fruits
fruits :
match : set
variants :
- apple
- orange
- plum في بعض الأحيان ، تحتاج إلى إجراء فحوصات منفصلة للملفات التي تحتوي على زوج من المفاتيح/القيمة.
على سبيل المثال لديك البيانات التالية:
---
- type : type1
payload :
- 1
- 1
- type : type2
payload :
- " that is a string "
- " that is a string2 "في هذا المثال ، لديك DICT WICH لديه حمولة مختلفة يعتمد على مفتاح النوع. من الممكن وصفها باتباع المخطط:
---
root :
match : list
item : list_item
list_item :
match : dict_key_selection
selector : type
variants :
type1 : dict_with_int
type2 : dict_with_string
dict_with_int :
match : dict
items :
type : string
payload : list_of_int
required_items :
- type
- payload
dict_with_string :
match : dict
items :
type : string
payload : list_of_string
required_items :
- type
- payload
list_of_int :
match : list
item : int
int :
match : int
list_of_string :
match : list
item : string
string :
match : string