0

我实现了最近提交'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'
}

当我使用 POSTobject到端点时schema,它会失败并显示"attr2": "field 'type' is required with values: Foo"。我希望它只有attr1: 'Foo'在我的依赖项字典中才会失败。

我认为 Eve 可能正在填充模式中指定attr2的默认值1,这就是它抛出此错误的原因,但我不确定。

4

1 回答 1

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,这在 PyPI 上可用的当前版本 0.7.2 上不起作用(这也意味着在 Cerberus 0.8 发布和 Eve 0.5 更新之前,这在 Eve 中不可用其 Cerberus 要求)。

于 2014-11-21T15:49:29.380 回答