Как я могу проверить список, который содержит плавающие в указанном диапазоне c с Цербером? - PullRequest
1 голос
/ 11 марта 2020

Я бы хотел проверить JSON объекты, которые были проанализированы в Python словарях, например:

# example with 2 elements
{
    'coordinates': [-20.3, 30.6]
}

# example with 3 elements
{
    'coordinates': [-20.3, 30.6, 0]
}

До сих пор я мог определить следующую схему:

schema = {
    'coordinates': {
        'required': True,
        'type': 'list',
        'minlength': 2,
        'maxlength': 3,
        'schema': {
            'type': 'float',
        },
    }
}

Я также хотел бы проверить следующие ограничения:

  • первый элемент значения поля coordinates должен быть в диапазоне от -30,0 до 10,0
  • второй элемент должен быть между -10,0 и 50,0

Но я не смог придумать что-то полезное. У кого-нибудь есть предложения, как этого добиться?


Обновление: На основании принятого ответа схема становится следующей

schema = {
    'coordinates': {
        'required': True,
        'type': 'list',
        "oneof_items": (
            ({"min": -30.0, "max": 10.0}, {"min": -10.0, "max": 50.0}),
            ({"min": -30.0, "max": 10.0}, {"min": -10.0, "max": 50.0}, {}),
        ),
    }
}

docs: https://docs.python-cerberus.org/en/stable/validation-rules.html#of -правили-typesaver

1 Ответ

1 голос
/ 12 марта 2020

Добавьте это правило:

{"oneof_items":
  (
    ({"min": -30.0, "max": 10.0}, {"min": -10.0, "max": 50.0}),
    ({"min": -30.0, "max": 10.0}, {"min": -10.0, "max": 50.0}, {}),
  )
}

Это делает правила, связанные с длиной, излишними. Чтобы избавиться от избыточности Python ссылок на объекты или реестра наборов правил , возможны.

...