问题标签 [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.

0 投票
1 回答
1271 浏览

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']}

0 投票
1 回答
405 浏览

python - Cerberus META 验证规则访问

Python cerberus有一个名为meta的验证规则,我在其中将 dict 分配给 meta 规则。我应该如何访问它?我正在编写一个自定义 error_handler 使用来自定义错误消息。

我的目标是schema = {'a': {'type': 'integer', 'meta': {'label': 'Age'}}} 并且希望在我的错误消息中使用该标签。

任何帮助,将不胜感激。

0 投票
2 回答
1572 浏览

python - 使用 Cerberus 进行依赖项验证

我正在使用Cerberus验证 CSV 文件,但我正在努力解决我认为的一些基本逻辑

设想:

CSV 文件有 2 列。Column 2只有当有值时才需要Column 1有值。如果Column 1是空的,那么Column 2也应该是空的。

我认为这将是最直接的规则之一,但到目前为止,没有任何事情能按预期工作。

下面是使用 python 字典的相同逻辑。

我本来预计这里会出现错误,Column 2因为Column 1已提供但这里的结果True意味着没有错误

我已经检查了github 上提出的问题,但似乎找不到任何明显的解决方案。

0 投票
1 回答
162 浏览

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.

0 投票
1 回答
838 浏览

python - 如何使用 Cerberus 返回自定义规则名称/错误代码?

我正在验证.csv文件,我想以用户习惯的格式给出验证结果。为了使用Cerberus,我让用户在.yaml文件中定义验证规则。

架构.yaml

然后,我将这些规则映射到它们适用的 CSV 文件中的列。

csv_fields.yaml

样本文件.csv

下面是一个包含三列的示例文件first_nameday_of_weekis_employed

要使用 Cerberus 进行验证,请将文档键中的rules定义与文件中的 交叉引用。这很容易做到,因为文件在 python 中以键值格式读取为字典。rulescsv_fields.yamlRulesschema.yaml.yaml

我的问题

在上面的示例数据中,cerberus 抛出了错误'day_of_week': ['unallowed value XX'],但用户不知道是什么规则触发了这个错误。

期待告诉用户的是,错误是由用户知道的而不是技术 Cerberus 特定定义unallowed value XX触发的。Rule2Rule2

即使这意味着定义schema.yaml不同,有没有办法实现这一点?

我查看了Cerberus 错误部分,但似乎找不到解决方法。

更新:

所以我尝试在schema.yamlmeta的规则定义中添加一个字段

但是当我测试时,我似乎无法从引发的错误中访问这个元密钥,因为我在document_error_tree甚至schema_error_tree.

0 投票
2 回答
3455 浏览

python - 如何通过 cerberus 验证其字段可以是 dict 或 dict 列表的数据?

我需要验证从用户收到的字典

问题是一个字段既可以是字典也可以是字典列表。我如何用 cerberus 验证这一点?

像一个例子我尝试这个模式:

但是当我在测试数据上尝试时,我收到错误:

错误:

0 投票
0 回答
84 浏览

python - 如何将相同的规则传递给 rules_set

使用Cerberus,我定义了基于传递给规则的一些参数验证数据(CSV 数据)的自定义规则。请参阅下面从我问的另一个问题的答案中复制的示例规则。

碰巧的是,在一个字段中,例如上面的字段 2,一个规则可以多次使用,但参数不同。所以在上面的例子中,字段 1 可能依赖于字段 2,字段 1 可能又依赖于字段 3。意思是,我需要通过/运行此规则两次。

问题是 arules_set只需要 adict这意味着规则必须是唯一的。所以问题是,我怎样才能多次通过相同的规则。

我注意到文档状态A validation schema is a mapping, usually a dict.所以想知道,它可以是一个列表,如果是的话,我怎样才能将规则作为一个列表传递?

0 投票
0 回答
147 浏览

python-3.x - 如何为 cerberus 添加条件模式

我正在尝试验证 oneof 模式,并且当 random1 和 random2 都不在请求中时它给出 True 。即使我已经尝试过所有其他的规则。你能帮我解决这个问题吗?就像我通过模式中的两个字段它应该通过,如果我只有一个它应该通过,如果我没有通过它应该失败。

0 投票
0 回答
1003 浏览

python - Cerberus 验证速度很慢,我做错了什么?

(免责声明:我读过的关于stackoverflow的每一次性能比较都因为不全面/正确/写得好/相关等而受到抨击。等等-我不是假装这是一个真正的比较或完美的设置,我只是想知道我是否可以使 cerberus 更快地验证数据。)

我有cerberus的以下模型设置:

这用于验证数据,大约 50% 的数据通过do_validation

问题是 cerberus在执行此验证时非常慢,每次验证平均花费超过一毫秒。相比之下,这比其他库慢 10 倍以上,比pydantic我对其进行基准测试时慢 26 倍。

如果 cerberus 稍微慢一点,我不会感到惊讶,但这种差异似乎太极端了,无法理解。

我做错了什么会严重损害性能吗?


上面的代码是为pydantic 文档的基准测试部分编写的。

添加 cerberus 的 PR(当前)在此处打开,其中包含完整的代码和结果。

0 投票
2 回答
553 浏览

python - Python cerberus – 字符串的选择

如何验证字符串选择列表的架构?

假设我希望以下动物字符串有效:

检查 key 是否包含其中任何一个的模式会是什么样animal子?

我不太清楚如何在这种情况下使用 anyOf 规则。

谢谢!