我需要解析很多yml文件。 我有一个类似于示例的示例,其中某些情况下存在一个值,因此我需要更改另一个规则的正则表达式。 我找不到正确验证的方法
yaml1:
email: someone@company.com
yaml2:
email: otherguy@home.com
contract_type: external
模式:
schema = {
'email': {
'required': True,
'type': 'string',
'regex': '^([a-zA-Z0-9_\-\.]+)@company\.com$'
}
答案 0 :(得分:0)
cerberus
软件包支持“开箱即用”的复合验证。validation-success
,validation-fail
或validation-skipped
aadocuments = []
aadocuments.append(yaml.safe_load('''
person_fname: homer
person_lname: himpson
person_age: 33
prize_caption: free beer for life
prize_email: prizes@abcbooze.com
prize_category: alchohol
'''))
aadocuments.append(yaml.safe_load('''
person_fname: helen
person_lname: himpson
person_age: 16
prize_caption: free ammo for life
prize_email: prizes@zzzguns.com
prize_category: firearms
'''))
样本验证规则
- rule_caption: check-underage-minor
rule_vpath: '[@]|[? @.person_age < `18`]'
validation_schema:
prize_category:
type: string
allowed: ['pets','toys','candy']
prize_email:
type: string
regex: '[\w]+@.*'
person_age
小于18,则:
prize_category
字段存在prize_category
字段的类型为字符串prize_category
的值为pets
或toys
或candy
prize_email
字段是否存在,类型为字符串prize_email
字段与特定的正则表达式匹配helen himpson
的结果为validation-fail
。
check-underage-minor
验证规则将触发,因为person_age == 16
prize_cateogry
的值为firearms
,这是不允许的,因此验证失败rule_vpath
,它告诉系统仅当person_age
存在且小于18时才触发此特定规则。这增加了对jmespath的依赖。 / li>