我正在验证.csv
文件,我想以用户习惯的格式给出验证结果。为了使用Cerberus,我让用户在.yaml
文件中定义验证规则。
架构.yaml
Rules:
Rule1:
maxlength: 10
Rule2:
allowed: ["MO", "TU", "WE", "TH", "FR", "SA", "SU"]
Rule3:
required: True
然后,我将这些规则映射到它们适用的 CSV 文件中的列。
csv_fields.yaml
Fields:
1:
rules:
- Rule1
- Rule2
2:
rules:
- Rule2
- Rule3
3:
rules:
- Rule1
- Rule3
样本文件.csv
下面是一个包含三列的示例文件first_name
:day_of_week
和is_employed
。
Peter, XX, True
要使用 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
的规则定义中添加一个字段
Rules:
Rule1:
maxlength: 10
meta: {'rule_name': "Rule1"}
但是当我测试时,我似乎无法从引发的错误中访问这个元密钥,因为我在document_error_tree
甚至schema_error_tree
.