我正在使用 Cerberus 来验证具有 atype
和 adata
字段的有效负载。根据type
(test
或build
) 的值,我想data
针对不同的约束进行验证。
到目前为止,我有这个设置:
test_task = {"folder": {"required": True}}
build_task = {"environment": {"allowed": ["staging", "product"]}}
abstract_task = {'type': {'allowed': ['test', 'build']},
'data': {'type': 'dict',
'required': True,
'anyof': [{'schema': test_task},
{'schema': build_task}]}}
但是当预期的子模式失败时,也会报告关于另一个的错误:
>>> validator = cerberus.Validator(schemas.abstract_task)
>>> validator.validate({
... "type": "build",
... "data": {"environment": "staging"}})
>>> pp validator.errors
{'data': {'anyof': 'no definitions validated',
'definition 0': {'environment': 'unknown field',
'folder': 'required field'},
'definition 1': {'environment': 'unallowed value bad'}}}
definition 1
当兄弟姐妹type
具有价值时,有没有办法有条件地使用build
?
这个问题源于这个问题。