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. Подробности смотрите в соответствующей документации.

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