Search on the blog

2016年6月28日火曜日

便利なPythonライブラリ(7)Cerberus

Pythonでバリデーション処理を書くときは、Cerberusというライブラリが便利そう。

インストール
pipで。
$ pip install cerberus

サンプル
バリデーションの定義をdictで定義して、Validatorのコンストラクタに渡す。
from cerberus import Validator

schema = {
    "url": {'required': True, 'type': 'string'},
    "title": {'required': True, 'type': 'string'},
    "links" : {'type': 'list', 'schema': {'type': 'string'}},
    "imgs": {'type': 'list', 'schema': {'type': 'dict', \
                 'schema': {'tag': {'type': 'string'}, 'url': {'type': 'string'}}}},
    "pv": {'required': True, 'type': 'integer', 'min': 0}
}
validator = Validator(schema)
これで、validatorができた。

上から説明すると、
urlは必須項目。型はstring。
titleは必須項目。型はstring。
linksはオプション項目。型はstringのリスト。
imgsはオプション項目。型はtag, urlというキーをもつdictのリスト。ただし、tag、url共にstring。
pvは必須項目。型はinteger。最小値は0。

データを作ってバリデーションしてみる。

document = {
    "url": "http://example.com/validator/test.html",
    "links": ['http://example.com/test1.html', 'http://example.com/test2.html'],
    "imgs": [{'tag': 'pic1', 'url': 'img/pic1.png'}],
    "pv": 10
}

if validator.validate(document):
    print ("success!")
else:
    print ("fail!")
    print (validator.errors)

実行結果。
fail!
{'title': 'required field'}

という風になかなか直感的で使い易い。 もちろん拡張して自前のバリデーション定義も作成できる。

0 件のコメント:

コメントを投稿