我正在尝试为具有依赖关系的文档创建架构,这些依赖关系引用文档中较高的字段。例如:
document = {
'packages': {
'some-package': {'version': 1}
},
'build-steps': {
'needs-some-package': {'foo': 'bar'},
'other-thing': {'funky': 'stuff'}
}
}
我在这里苦苦挣扎的是加强build-steps.needs-some-package和packages.some-package之间的依赖关系。每当构建步骤包含“ needs-some-package”时,软件包必须包含“ some-package”。
当不存在“ needs-some-package”时,则不需要“ some-package”。因此,此文档也应进行验证。
other_document = {
'packages': {
'other-package': {'version': 1}
},
'build-steps': {
'other-thing': {'funky': 'stuff'}
}
}
在似乎合适的地方具有依赖性的模式是
schema = {
'packages': {
'type': 'dict',
'valueschema': {
'type': 'dict'
}
},
'build-steps': {
'type': 'dict',
'schema': {
'needs-some-package': {
'type': 'dict',
'dependencies': 'packages.some-package'
},
'other-thing': {
'type': 'dict'
}
}
}
}
但这是行不通的,因为Cerberus似乎在子文档中的“ build-steps”下寻找“ packages”。有什么办法可以提升文档树?还是要参考文档的根目录?
描述的问题在版本1.0.2中得到解决:
处理子文档后,将在该文档的级别开始对相关字段的查找。为了将处理后的文档作为根级别访问,声明必须以^开头。两个初始插入符号(^^)的出现被解释为原义的单个^,没有特殊含义。
示例代码:
import cerberus
schema = {
'packages': {
'type': 'dict',
'valueschema': {
'type': 'dict'
}
},
'build-steps': {
'type': 'dict',
'schema': {
'needs-some-package': {
'type': 'dict',
'dependencies': '^packages.some-package'
},
'other-thing': {
'type': 'dict'
}
}
}
}
document = {
'packages': {
'some-package': {'version': 1}
},
'build-steps': {
'needs-some-package': {'foo': 'bar'},
'other-thing': {'funky': 'stuff'}
}
}
validator = cerberus.Validator(schema)
print(validator.validate(document))
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句