0
我正在使用Cerberus来验证有效载荷有type
和data
字段。根据type
(test
或build
)的值,我想验证data
针对不同的约束。如何根据Cerberus中另一个字段的值验证字段对照模式?
到目前为止,我甲肝这种设置:
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
?
此问题来自this issue。