Обнаружить пустую строку в числовом поле, используя Цербер

Я использую библиотеку python cerberus ( http://docs.python-cerberus.org/en/stable/) и хочу проверить, является ли поле JSON числом (целым числом) или пустой строкой.

Я пытался использовать условие:

{"empty": True, "type": "intenger"}

Но когда поле является пустой строкой, например: (""), я получаю следующую ошибку.

'must be of integer type'

Есть ли способ использовать основные правила проверки, чтобы он обнаруживал также пустую строку в числовом поле? Я знаю, что это можно сделать с помощью расширенных функций проверки, но я хочу пока избежать этого решения.

2 ответа

Решение

Попробуйте что-то вроде этого:

{"anyof":[
   {"type":"string","allowed":[""]},
   {"anyof_type":["float","integer"]}
]},

Я бы посоветовал не усложнять схемы. 1) Несколько типов могут быть объявлены для type править. 2) empty Правило применяется только к значительным значениям, поэтому оно игнорирует любое заданное целое число. Следовательно, это самые простые возможные правила, установленные для ваших ограничений:

{'type': ('integer', 'string'),
 'empty': True}

Имейте в виду, что это не приводит к тому, что значение является пустой строкой, но допускает, что это будет vulgo: непустая строка также будет передаваться. Вы можете использовать max_lengh Правило ж / 0 в качестве ограничения вместо.

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