Python Cerberus: несколько схем для одного файла? - PullRequest
0 голосов
/ 24 мая 2018

Я пытаюсь использовать 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 Ответ

0 голосов
/ 24 мая 2018

Попробуйте:

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_*, который является одним из нескольких вариантов, предлагаемых так называемыми правил .Эти правила позволяют вам определять различные наборы правил для проверки.Поле будет считаться действительным, если оно проверяется на соответствие установленному в списке в соответствии с логиками префиксов all , any , one или none .Подробнее см. соответствующую документацию .

...