Python環境化にてYAMLが正しく書かれているかを検証する必要があった
ここでいう正しく書かれているというのは今回は下記をみたすもの
- 必要なキーが書かれている
- バリーに意図した型(boolean, string, numeric)の値が入っている
この2つが満たされていることを検証するものを実現したい
pyKwalify
今回の用途に使われるものとしてKwalifyというものがある
これはYAML, JSON用のスキーマバリデータで、YAMLやJSON内容が正しいかどうかを検証することが出来ます
言語としてはRubyとJava用に用意されているいるのですが、これをPython環境化でも使えるようにしたのがpyKwalifyです
使い方
pyKwalifyではKwalifyと同じくバリデーション用の定義を書いたスキーマとしてYAMLで用意します
今回は下記のようなYAMLファイルを用意して検証していきます
hoge: age: 23 smoking: true rate: 5.3 fuga: age: 18 smoking: false rate:
まずスキーマファイルは下記のようになります
type: map mapping: "=": type: map mapping: "age": type: int required: true "smoking": type: bool required: true "rate": type: float "favorite_food": type: seq sequence: - type: str required: true
YAMLにはPythonでいう配列のシーケンスとディクショナリのマッピングがありますがそれらをチャックする際には下記のように書きはじめます
# シーケンス type: seq sequence: ~~~ # マッピング type: map mapping: ~~~
また今回はrootからのキーがhoge
, fuga
となっているのでそれぞれを定義しても良いのですが、ここは何が入っても良いのでpyKwalifyではそれを=
として定義することで任意のキーにマッチするように出来ます
下記キーにはtypeとよばれる期待する型を定義できて下記のようなものを指定することが出来ます
type | チェックするもの |
---|---|
str | 文字列 |
int | 整数 |
float | 浮動小数点 |
number | intとfloat |
text | numberとstr |
bool | true or false |
seq | シーケンス |
map | マッピング |
scalar | スカラー |
date | 日付 |
timestamp | 日付時刻 |
any | なんでも |
required
を指定することでそのキーが必須かどうかも指定できます
他にも設定できるものがあるのでKwalifyのdocを参照してみてください