YAMLの検証をpyKwalifyを使って行う

Python環境化にてYAMLが正しく書かれているかを検証する必要があった
ここでいう正しく書かれているというのは今回は下記をみたすもの

  • 必要なキーが書かれている
  • バリーに意図した型(boolean, string, numeric)の値が入っている

この2つが満たされていることを検証するものを実現したい

pyKwalify

今回の用途に使われるものとしてKwalifyというものがある
これはYAML, JSON用のスキーマバリデータで、YAMLJSON内容が正しいかどうかを検証することが出来ます

言語としてはRubyJava用に用意されているいるのですが、これをPython環境化でも使えるようにしたのがpyKwalifyです

github.com

使い方

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を参照してみてください