YSPEC adalah pemeriksa sederhana yang mematikan untuk struktur. Ini sangat berguna untuk validasi file YAML/JSON yang berbeda
yspec ./schema.yaml /tmp/data.jsonCatatan: YSPEC dapat mengambil YAML/JSON untuk skema dan untuk data
from yspec . checker import check
# Some code that prepares data and rules
check ( data , rules )Skema adalah dikt aturan. Setiap aturan melakukan beberapa cek sesuai dengan bidang 'Match'. Skema harus menyertakan aturan 'root' yang diterapkan pada objek teratas dalam struktur.
Misalnya struktur (di YAML):
---
- ' string1 '
- ' string2 '
akan valid untuk skema (di YAML):
---
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 : anyAda dua dari mereka: Dikt dan Daftar. Keduanya memiliki logika rekursi yang sama. Pada awalnya kami menerapkan beberapa cek pada objek itu sendiri, dan kemudian menerapkan aturan lain (atau sama) untuk anak -anak (elemen daftar, atau nilai -nilai dikt).
my_list :
match : list
item : some_other_ruleDaftar adalah tipe yang berulang. Tinju itu memeriksa adalah objek yang Daftar A, lalu periksa setiap elemen sesuai dengan aturan di 'item' attr.
my_list :
match : dict
items :
key1 : string_rule
key2 : integer_rule
default_item : some_other_rule
required_items :
- key2Itu adalah aturan yang menggambarkan dikt yang memiliki dua kunci (Key1 dan Key2). Salah satu kunci (Key2) adalah wajib. KEY1 harus diperiksa sesuai dengan aturan 'String_rule', sedangkan tombol lain dengan nama lain (non -Key1 atau Key2) akan diperiksa sesuai dengan some_other_rule.
Jika kami telah menghapus default_item
my_list :
match : dict
items :
key1 : string_rule
key2 : integer_rule
required_items :
- key2Dikt bisa dengan dua kunci (key1, key2) maksimal
Skema:
---
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 : listData:
---
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_ruleSalah satu cocok dengan sukses jika ada aturan dari "varian" kesuksesan.
Misalkan Anda perlu memeriksa daftar kecil buah Anda:
---
- apple
- plumAnda dapat menggunakan set yang cocok untuk itu. Dalam Varian Klausul Set Kecocokan Anda mencantumkan semua nilai yang mungkin untuk jenis ini:
---
root :
match : list
item : fruits
fruits :
match : set
variants :
- apple
- orange
- plum Beberapa kali Anda perlu melakukan cek terpisah untuk dikt yang memiliki beberapa pasangan kunci/nilai.
Misalnya Anda memiliki data berikut:
---
- type : type1
payload :
- 1
- 1
- type : type2
payload :
- " that is a string "
- " that is a string2 "Dalam contoh itu Anda memiliki dikt yang memiliki muatan yang berbeda tergantung pada kunci tipe. Itu mungkin untuk dijelaskan dengan skema berikut:
---
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