Условно обязательные поля в схеме 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' как в моей зависимости диктовать.

Я думаю, что Ева может быть заселена attr2 со значением по умолчанию 1 указано в схеме и поэтому выдает эту ошибку, но я не уверен.

1 ответ

Я только что попробовал это на Цербере 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 обновлений). его требования Цербера).

Другие вопросы по тегам