- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个以 ID 作为根键的字典,我想验证它。换句话说,我想要验证的字典的根键是动态的。有没有办法针对根 key 运行 key 架构?
例如https://repl.it/@crunk1/cerberusrootkeys
import cerberus
v = cerberus.validator.Validator()
schema = {'keyschema': {'type': 'string'}}
d = {'foo': 'bar', 'baz': 'gaz'}
print('I want this to be true.')
print(v.validate(d, schema))
### Output:
# I want this to be true.
# False
我知道我可以执行以下操作:
wrapper = {'nested': d}
schema = {'nested': {'keyschema': {'type': 'string'}}}
v.validate(wrapper, schema)
但我的项目的当前结构不容易允许这样做。
有什么解决方案/提示/建议吗?
最佳答案
我设法一起破解一些东西( https://repl.it/@crunk1/Cerberus-root-types )子类化 Validator 并重写 validate():
class V(cerberus.Validator):
def validate(self, document, schema=None, update=False, normalize=True):
doc = None
wrapped = False
if schema is not None:
root_schema = schema.get('__root__', None)
wrapped = root_schema is not None
if wrapped:
doc = {'__root__': document}
schema = {'__root__': root_schema}
elif self.schema is not None:
root_schema = self.schema.get('__root__', None)
wrapped = root_schema is not None
if wrapped:
doc = {'__root__': document}
schema = {'__root__': root_schema}
doc = doc or document
result = super(V, self).validate(doc, schema, update, normalize)
if wrapped:
# Unwrap.
self.document = self.document['__root__']
for e in self._errors:
e.schema_path = tuple(e.schema_path[1:])
if len(e.document_path) > 1:
e.document_path = tuple(e.document_path[1:])
return result
这允许您将根文档视为 'type': 'dict'
或 'type': 'list'
。
v = V()
d = {'1': '1', '2': '2'}
schema = {'__root__': {
'type': 'dict',
'keyschema': {'coerce': int},
'valueschema': {'coerce': int},
}}
print(v.validate(d, schema), v.document, v.errors)
l = ['1', '2']
schema = {'__root__': {
'type': 'list',
'schema': {'coerce': int},
}}
print(v.validate(l, schema), v.document, v.errors)
l = ['1', 'b']
print(v.validate(l, schema), v.document, v.errors)
输出:
True {1: 1, 2: 2} {}
True [1, 2] {}
False [1, 'b'] {1: ["field '1' cannot be coerced: invalid literal for int() with base 10: 'b'"]}
关于Python Cerberus 如何检查动态根 key ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49762642/
我真的很喜欢 Cerberus,但我无法在文档中找到一个简单的案例。我想要 fudge 类型,它是一个带有 ~ 前缀的字符串。我根本不知道该怎么做.. fudge_type = cerberus.Ty
我正在使用 cerberus 来验证数据。我的一个字段是可选的 - 不需要每一项都存在。但是,该键必须在整个数据数组中至少填充一次。 举个例子,假设我想验证键 'c' 出现在我的数据列表中的至少一个字
考虑以下架构 schema = { "value_type":{ "type": "string", "required": True }, "units":
我使用的是 Cerberus 版本 1.1。 Cerberus required 验证规则似乎默认为 False,结果是空文档完全有效。 >>> schema = { 'spam': {'ty
我想使用 Cerberus 来验证某个字段不存在于对象中。 我想使用类似的东西: my_schema = { 'normal_field': { 'type': 'string
我正在尝试为具有引用文档中较高字段的依赖项的文档创建架构。例如: document = { 'packages': { 'some-package': {'version':
来自documentation ,我不清楚自定义规则和自定义验证器在用例中的区别是什么。在文档中给出的示例中,唯一的区别是额外的 if 语句检查自定义规则中 is_odd 的值。我什么时候应该更喜欢自
我有一个以 ID 作为根键的字典,我想验证它。换句话说,我想要验证的字典的根键是动态的。有没有办法针对根 key 运行 key 架构? 例如https://repl.it/@crunk1/cerber
考虑以下 Cerberus 架构: { 'employee': { 'type': 'list', 'schema': { 'type': 'dict',
有没有办法拥有 Cerberus验证两个字段是否具有相同数量的元素? 例如,该文档将验证: {'a': [1, 2, 3], b: [4, 5, 6]} 这不会: {'a': [1, 2, 3], '
正在使用 Cerberus 验证 CSV 文件但我正在努力解决我认为的一些基本逻辑 场景: CSV 文件有 2 列。仅当Column 1 有值时,Column 2 才需要有值。如果第 1 列 为空,则
我知道根据 Cerberus documentation ,可以根据其他键值定义验证依赖项,例如: schema = {'field1': {'required': False},
我正在使用开源 Python 数据验证库 Cerberus验证字典的结构。我希望它获取部分无效的文档并在没有无效键的情况下输出它。 例如,对于这个脚本: from cerberus import Va
我正在使用 python 库 cerberus ( http://docs.python-cerberus.org/en/stable/ ),我想检查 JSON 字段是数字(整数)还是空字符串。 我尝
我有以下架构: schema = { 'person': { 'name': {'type': 'string', 'required': True, 'minlength':
我想本地化 Cerberus 返回的错误消息,例如我想实现以下目标: >>> validator.schema = {'animal': {'forbidden': ['Einhorn']}} >>>
我有一个很大的 json 文档,如果其他字段具有精确值,则应该需要其中一些字段。例如 document = {'is_realty_address': False, 'postcode': 11111
我试图将字符串强制为日期,以便它可以验证日期数据类型,但它仍然返回False: from cerberus import Validator from datetime import datetime
有没有办法告诉 cerberus 将模式中的所有键的 required 默认设置为 True?这会节省我一些时间,因为大多数时候我想断言 key 的存在。 最佳答案 我认为这个问题没有通用的解决方案,
正在验证 .csv 文件,我想以用户习惯的格式给出验证结果。要利用Cerberus ,我让用户在 .yaml 文件中定义验证规则。 schema.yaml Rules: Rule1: maxle
我是一名优秀的程序员,十分优秀!