希望社区中的人可以提供帮助。
我们有一个正在尝试解决的验证案例。通过 Cerberus 提供的现有规则或创建新规则。
情况1
如果“initiatedBy”的特定验证通过,我们只想对“searchResultSetId”执行验证。以下是文件,我认为这是代表我们正在尝试做的最简单的方法。
在下面的架构中,您会注意到“searchResultSetId”有一个名为“dependson”的 dict 类型规则。dict 的键是兄弟姐妹'initiateBy',其值与其他验证类似。如果'dependson'中的验证通过,则应执行'searchResultSetId'中的其余验证。如果'dependson'中的验证失败,则应跳过'searchResultSetId'中的剩余验证。
doc = {
'msg': {
'initiatedBy': 'bookmark',
'searchResultSetId': '1hd76t'
}
}
schema = {
'initiatedBy': {
'type': 'string',
'nullable': True,
'empty': False,
},
'searchResultSetId': {
'dependson': {
'initiatedBy': {
'allowed': [
'result-list',
'research-starter',
'content-vertical',
'browser-history'
],
}
},
'nullable': True,
'type': 'string',
'empty': False,
}
}
在上面的示例中,将跳过下面的验证,因为“书签”不在允许的值列表中。
{
'searchResultSetId': {
'nullable': True,
'type': 'string',
'empty': False,
}
}
到目前为止,使用自定义验证器方法,我们不确定如何跳过属性的剩余验证。有没有办法做到这一点?以下是我们目前所拥有的:
class CustomValidator(Validator):
def _validate_dependson(self, dependson, field, value):
"""{'type': 'dict'}"""
passed = Validator(normalize=False, allow_unknown=True, require_all=False, schema=dependson).validate(document=self.document)
if not passed:
# skip remaining validations for field?
pass
感谢您的时间和帮助。