gpt4 book ai didi

python - 如何检查 Cerberus 中的引用完整性?

转载 作者:行者123 更新时间:2023-12-01 07:59:36 27 4
gpt4 key购买 nike

考虑以下 Cerberus 架构:

{
'employee': {
'type': 'list',
'schema': {
'type': 'dict',
'schema': {
'id': {'required': True, 'type': 'integer'},
'name': {'required': True, 'type': 'string'}
}
}
},
'ceo-employee-id': {'required': True, 'type': 'integer'}
}

1) 如何验证 ceo-employee-id 是否与员工列表中的 ID 值之一匹配? (参照完整性)

2) 如何验证员工列表中的每个 ID 是否唯一(即没有重复的员工 ID)?

我意识到我可以在验证和解析配置后在运行时执行此操作,如下面@rafael 的建议。我想知道是否可以使用 Cerberus 验证功能来做到这一点。

最佳答案

您需要使用 custom validator实现 check_with 方法,使用其中的 document 属性,并修改您的架构以包含这些:

from cerberus import Validator


class CustomValidator(Validator):
def _check_with_ceo_employee(self, field, value):
if value not in (x["id"] for x in self.document["employee"]):
self._error(field, "ID is missing in employee list.")

def _check_with_employee_id_uniqueness(self, field, value):
all_ids = [x["id"] for x in self.document["employee"]]
if len(all_ids) != len(set(all_ids)):
self._error(field, "Employee IDs are not unique.")


validator = CustomValidator({
'employee': {
'type': 'list',
'schema': {
'type': 'dict',
'schema': {
'id': {'required': True, 'type': 'integer'},
'name': {'required': True, 'type': 'string'}
},
},
'check_with': 'employee_id_uniqueness'
},
'ceo-employee-id': {'required': True, 'type': 'integer', 'check_with': 'ceo_employee'}
})

引用的文档包含此处使用的所有部分的提示。

(对于示例中可能出现的任何缩进错误,我深表歉意。)

关于python - 如何检查 Cerberus 中的引用完整性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55783299/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com