Чувственный Эксклюзивный Класс
Я использую чувственный 0.9.2, и у меня есть проблема с классом Эксклюзив. Мне нужно, чтобы, если нет ни одного ключа, должно выдаваться сообщение об ошибке. Тем не менее, это нормально для сладострастных. Это ошибка сладострастного? Если нет, то как я могу написать сценарий для этого?
Чтобы прояснить мою проблему, предположим, что мы построили такую схему:
schema = Schema({Exclusive('a', 'z'): int, Exclusive('b', 'z'): int, 'c': int}, required=True)
Мне нужен один и только один из ключей в группе исключения. Но когда я проверяю с {'c': 5}
, кажется, это действительно, хотя я не дал ни a
или же b
, Я не знаю, как заставить это работать специально для этой ситуации.
2 ответа
Согласно документации, Exclusive
наследуется от Optional
, Который означает, что a
а также b
являются необязательными в вашей схеме; вот почему {'c': 5}
является допустимым входом. Чтобы обойти эту проблему, вам необходимо явно указать их при необходимости:
from voluptuous import Schema, Exclusive, Required
schema = Schema({Required(Exclusive('a', 'z')): int, Required(Exclusive('b', 'z')): int, 'c': int}, required=True)
Уловка, которая работает здесь, состоит в том, чтобы использовать две различные схемы, которые должны проверяться одновременно:
from voluptuous import All, Any, Exclusive, Required
schema = All(
{
Exclusive('a', 'z'): int,
Exclusive('b', 'z'): int,
Required('c'): int,
},
{
Required(Any('a', 'b')): int,
Required('c'): int,
},
)
Первая схема не проходит проверку, когда оба a
а также b
присутствуют, и вторая схема дает сбой, когда ни a
ни b
присутствуют. Следовательно, либо a
или же b
должен присутствовать.