Чувственный Эксклюзивный Класс

Я использую чувственный 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 должен присутствовать.

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