在Cerberus中对循环数据 struct 模式建模的正确方法是什么?
try #1:
from cerberus import Validator, schema_registry
schema_registry.add("leaf", {"value": {"type": "integer", "required": True}})
schema_registry.add("tree", {"type": "dict", "anyof_schema": ["leaf", "tree"]})
v = Validator(schema = {"root": {"type": "dict", "schema": "tree"}})
错误:
cerberus.schema.Schema错误: {'root': [{
'schema': [
'no definitions validate', {
'anyof definition 0': [{
'anyof_schema': ['must be of dict type'],
'type': ['null value not allowed'],
}],
'anyof definition 1': [
'Rules set definition tree not found.'
],
},
]},
]}
try #2:
上面的错误表明需要tree
的规则集定义:
from cerberus import Validator, schema_registry, rules_set_registry
schema_registry.add("leaf", {"value": {"type": "integer", "required": True}})
rules_set_registry.add("tree", {"type": "dict", "anyof_schema": ["leaf", "tree"]})
v = Validator(schema = {"root": {"type": "dict", "schema": "tree"}})
v.validate({"root": {"value": 1}})
v.errors
v.validate({"root": {"a": {"value": 1}}})
v.errors
v.validate({"root": {"a": {"b": {"c": {"value": 1}}}}})
v.errors
输出:
False
{'root': ['must be of dict type']}
对于所有3个例子.
预期行为
理想情况下,我希望以下所有文档都通过验证:
v = Validator(schema = {"root": {"type": "dict", "schema": "tree"}})
assert v.validate({"root": {"value": 1}}), v.errors
assert v.validate({"root": {"a": {"value": 1}}}), v.errors
assert v.validate({"root": {"a": {"b": {"c": {"value": 1}}}}}), v.errors