问题标签 [cerberus]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - 是否可以使用 Cerberus 验证 yaml 文件的键名和字典名称?
我需要使用 Python3.7 验证 YAML 文件。我正在尝试 Cerberus 执行内容验证。至于值验证,它工作得很好,但对于键名,我找不到在 YAML 文件的上下文中成功验证其有效性的方法。
字典名称是一个电子邮件地址,对于 YAML 文件中的每个条目都应该是唯一的,并且应该经过验证。一些键名区分大小写,需要验证是否准确。
我也是 Python 的新手,所以很有可能这只是新手的无知。我可能需要寻找 Cerberus 以外的其他地方,但我还没有找到一个强大的 YAML 验证器。非常欢迎提出建议。
我按照 Cerberus 文档创建了 schema.py 和 validationScript.py。我试图放置密钥规则,但似乎无法在该级别进行“任何”验证。在我的测试中,键规则似乎适用于字典中的所有键。如果我使用密钥规则,我可以验证一个密钥,但其他密钥失败。我尝试了一系列规则,我尝试了 anyof 和 anyof_regex 但未能让它们成功查看所有键名并进行验证。
我找不到验证字典名称的方法。我知道如果我硬编码存在于 YAML 中的有效电子邮件,我可以验证它。
schema.py 看起来像这样:
yaml是
我希望有可以验证规则的代码,但是在使用 anyof 时会出现语法错误:File "", line 5 'anyof': ^ SyntaxError: invalid syntax
使用键规则时,我最终会出现架构错误
随着所有内容验证的工作,我最终得到字典名称(电子邮件地址)返回 False 声明{'my@mydomain.com': ['unknown field'], 'stack@exchange.com': ['unknown field']}
python - 使用 Cerberus 进行依赖项验证
我正在使用Cerberus验证 CSV 文件,但我正在努力解决我认为的一些基本逻辑
设想:
CSV 文件有 2 列。Column 2
只有当有值时才需要Column 1
有值。如果Column 1
是空的,那么Column 2
也应该是空的。
我认为这将是最直接的规则之一,但到目前为止,没有任何事情能按预期工作。
下面是使用 python 字典的相同逻辑。
我本来预计这里会出现错误,Column 2
因为Column 1
已提供但这里的结果True
意味着没有错误
我已经检查了github 上提出的问题,但似乎找不到任何明显的解决方案。
cerberus - Can a Cerberus schema have an arbitrary name for the base dict?
I need to validate Python dicts that will have arbitrary names. When I attempt to validate them using Cerberus, I get unknown field
. Is there a way of allowing for arbitrary dict names?
I was thinking that keysrules
might work, but it appears to only work on items within the base dict.
I would like to be able to use an arbitrary name where account_created
is in this dict.
python - 如何使用 Cerberus 返回自定义规则名称/错误代码?
我正在验证.csv
文件,我想以用户习惯的格式给出验证结果。为了使用Cerberus,我让用户在.yaml
文件中定义验证规则。
架构.yaml
然后,我将这些规则映射到它们适用的 CSV 文件中的列。
csv_fields.yaml
样本文件.csv
下面是一个包含三列的示例文件first_name
:day_of_week
和is_employed
。
要使用 Cerberus 进行验证,请将文档键中的rules
定义与文件中的 交叉引用。这很容易做到,因为文件在 python 中以键值格式读取为字典。rules
csv_fields.yaml
Rules
schema.yaml
.yaml
我的问题
在上面的示例数据中,cerberus 抛出了错误'day_of_week': ['unallowed value XX']
,但用户不知道是什么规则触发了这个错误。
期待告诉用户的是,错误是由用户知道的而不是技术 Cerberus 特定定义unallowed value XX
触发的。Rule2
Rule2
即使这意味着定义schema.yaml
不同,有没有办法实现这一点?
我查看了Cerberus 错误部分,但似乎找不到解决方法。
更新:
所以我尝试在schema.yamlmeta
的规则定义中添加一个字段
但是当我测试时,我似乎无法从引发的错误中访问这个元密钥,因为我在document_error_tree
甚至schema_error_tree
.
python - 如何通过 cerberus 验证其字段可以是 dict 或 dict 列表的数据?
我需要验证从用户收到的字典
问题是一个字段既可以是字典也可以是字典列表。我如何用 cerberus 验证这一点?
像一个例子我尝试这个模式:
但是当我在测试数据上尝试时,我收到错误:
错误:
python - 如何将相同的规则传递给 rules_set
使用Cerberus,我定义了基于传递给规则的一些参数验证数据(CSV 数据)的自定义规则。请参阅下面从我问的另一个问题的答案中复制的示例规则。
碰巧的是,在一个字段中,例如上面的字段 2,一个规则可以多次使用,但参数不同。所以在上面的例子中,字段 1 可能依赖于字段 2,字段 1 可能又依赖于字段 3。意思是,我需要通过/运行此规则两次。
问题是 arules_set
只需要 adict
这意味着规则必须是唯一的。所以问题是,我怎样才能多次通过相同的规则。
我注意到文档状态A validation schema is a mapping, usually a dict.
所以想知道,它可以是一个列表,如果是的话,我怎样才能将规则作为一个列表传递?
python-3.x - 如何为 cerberus 添加条件模式
我正在尝试验证 oneof 模式,并且当 random1 和 random2 都不在请求中时它给出 True 。即使我已经尝试过所有其他的规则。你能帮我解决这个问题吗?就像我通过模式中的两个字段它应该通过,如果我只有一个它应该通过,如果我没有通过它应该失败。
python - Cerberus 验证速度很慢,我做错了什么?
(免责声明:我读过的关于stackoverflow的每一次性能比较都因为不全面/正确/写得好/相关等而受到抨击。等等-我不是假装这是一个真正的比较或完美的设置,我只是想知道我是否可以使 cerberus 更快地验证数据。)
我有cerberus的以下模型设置:
这用于验证数据,大约 50% 的数据通过do_validation
。
问题是 cerberus在执行此验证时非常慢,每次验证平均花费超过一毫秒。相比之下,这比其他库慢 10 倍以上,比pydantic
我对其进行基准测试时慢 26 倍。
如果 cerberus 稍微慢一点,我不会感到惊讶,但这种差异似乎太极端了,无法理解。
我做错了什么会严重损害性能吗?
上面的代码是为pydantic 文档的基准测试部分编写的。
添加 cerberus 的 PR(当前)在此处打开,其中包含完整的代码和结果。
python - Python cerberus – 字符串的选择
如何验证字符串选择列表的架构?
假设我希望以下动物字符串有效:
检查 key 是否包含其中任何一个的模式会是什么样animal
子?
我不太清楚如何在这种情况下使用 anyOf 规则。
谢谢!