Eve模式中有条件的必填字段

时间:2014-11-21 14:52:36

标签: python eve

我实现了最近提交的'dependencies': {'attr': 'val'}支持,但它不适用于我的用例。这就是我想做的事情:

schema = {
    'attr1': {'type': 'string', 'required': True, 'allowed': ['Foo', 'Bar']},
    'attr2': {'type': 'integer', 'required': True, 'default': 1,
              'dependencies': {'attr1': 'Foo'}}
}

object = {
    'attr1': 'Bar'
}

当我将object发布到schema的端点时,它会失败并显示"attr2": "field 'type' is required with values: Foo"。如果attr1: 'Foo'和我的依赖关系一样,我希望它只会失败。

我认为Eve可能会使用架构中指定的默认值attr2填充1,这就是为什么它会抛出此错误,但我不确定。

1 个答案:

答案 0 :(得分:1)

我刚刚在Cerberus 0.8-dev上试过这个:

from cerberus import Validator

schema = {
    'attr1': {'type': 'string', 'required': True, 'allowed': ['Foo', 'Bar']},
    'attr2': {'type': 'integer', 'required': True, 'dependencies': {'attr1': 'Foo'}}
}

object = {
    'attr1': 'Bar'
}

v = Validator(schema)
v.validate(object)
True

然后我尝试了:

object = {
    'attr1': 'Bar',
    'attr2': 1
}

v.validate(object)
False

v.errors
{'attr2': "field 'attr1' is required with values: Foo"}

object = {
    'attr1': 'Foo',
    'attr2': 1
}

v.validate(object)
True

确保你已经在v0.8上了,但是这不能在0.7.2上工作,这是PyPI上现有的版本(这也意味着它在Eve中不可用)直到Cerberus 0.8发布,Eve 0.5更新其Cerberus要求)。