LoginSignup
5
6

More than 5 years have passed since last update.

pykwalifyを使ったYaml検証

Posted at

yamlファイルのバリデーションをおこなうpykwalifyというPythonのツールを使う機会があったので
使い方をまとめる

環境情報

検証に使用した環境のバージョン情報

  • python3 --version

    • Python 3.6.5
  • pip3.6 --version

    • pip 9.0.1 from /usr/lib/python3.6/site-packages (python 3.6)
  • インストール

    • pip install pykwalify

バリデーションの種類

type チェック対象
str 文字列
int 整数
float 浮動小数点数
number intとfloat
text numberとstr
bool 真理値
seq シーケンス
map マップ
scalar スカラー
date 日付
timestamp 日付と時刻
any なんでも

使い方

  • 値の形式チェック

チェックするYamlファイル

hoge:
  hoge1: 1
  hoge2: hoge

スキーマファイル

type: map
mapping:
  hoge:
    type: map
    mapping:
      hoge1:
        type: int
      hoge2:
        type: str
  • 値の必須チェック

スキーマファイル

type: map
mapping:
  hoge:
    type: map
    mapping:
      hoge1:
        type: int
        required: true
      hoge2:
        type: str
        required: true

required: true を指定する

  • 正規表現を使用した文字列形式チェック

スキーマファイル

type: map
mapping:
  hoge:
    type: map
    mapping:
      hoge1:
        type: int
        required: true
      hoge2:
        type: str
        pattern: '[a-zA-z]'
        required: true

pattern にチェックする正規表現を定義する

  • リスト

チェックするYamlファイル

hoge:
  seq
    - hoge1
      hoge2

スキーマファイル

type: map
mapping:
  seq:
    type: seq
    sequence:
      - type: str
        required: true
  • Mapのリスト

チェックするYamlファイル

hoge:
  seq
    - hoge1: 1
      hoge2: hoge

スキーマファイル

type: map
mapping:
  seq:
    type: seq
    sequence:
      - type: map
        mapping:
          hoge1:
            type: int
            required: true
          hoge2:
            type: str
            required: true

実行例

  • OK
# pykwalify -d hoge.yml -s hoge-schema.yml 
 INFO - validation.valid
  • NG
    • type: int 項目に文字列を指定
# pykwalify -d hoge.yml -s hoge-schema.yml 
 ERROR - validation.invalid
 ERROR -  --- All found errors ---
 ERROR - ["Value 'fuga' is not of type 'int'. Path: '/hoge/hoge1'"]
Traceback (most recent call last):
  File "/usr/bin/pykwalify", line 11, in <module>
    sys.exit(cli_entrypoint())
  File "/usr/lib/python3.6/site-packages/pykwalify/cli.py", line 95, in cli_entrypoint
    run(parse_cli())
  File "/usr/lib/python3.6/site-packages/pykwalify/cli.py", line 82, in run
    c.validate()
  File "/usr/lib/python3.6/site-packages/pykwalify/core.py", line 167, in validate
    error_msg=u'.\n - '.join(self.validation_errors)))
pykwalify.errors.SchemaError: <SchemaError: error code 2: Schema validation failed:
 - Value 'fuga' is not of type 'int'. Path: '/hoge/hoge1'.: Path: '/'>
5
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
6