Python Cerberus: несколько схем для одного файла?
Я пытаюсь использовать Цербер для проверки некоторых данных, но сталкиваюсь с проблемой.
Я определил несколько более мелких схем, таких как:
A = {"type": "dict", "required": False, "schema": {"name": {"type": "string"}}}
B = {"type": "dict", "required": False, "schema": {"age": {"type": "integer"}}}
C = {"type": "dict", "required": False, "schema": {"gender": {"type": "string"}}}
И схема более высокого уровня выглядит так:
{"something": {"type": "list", "schema": "type": [A, B, C]}}
Это, очевидно, не работает.
Я хочу проверить список, элементы в котором нужно проверить только одним из (A, B, C)
, Я не знаю, как это сделать с Цербером, и мне нужна помощь.
Благодарю.
1 ответ
Попробуй это:
A = {"type": "dict", "schema": {"name": {"type": "string"}}}
B = {"type": "dict", "schema": {"age": {"type": "integer"}}}
C = {"type": "dict", "schema": {"gender": {"type": "string"}}}
schema = {'field':{'type':'list','anyof_schema':[A,B,C]}}
v = Validator(schema)
challenge = {'field':[{'name':'a name'}]}
v.validate(challenge)
True
Это работает благодаря anyof_*
, который является одним из нескольких вариантов, предлагаемых так называемыми of-rules. Эти правила позволяют вам определять различные наборы правил для проверки. Поле будет считаться действительным, если оно сверяется с установленным в списке списком в соответствии с логикой префиксов all, any, one или none. Подробности смотрите в соответствующей документации.