python - 联合类型的 Python Cerberus 验证
问题描述
我正在使用 Cerberus 构建某种 DSL 的验证逻辑,它指定了不同对象的列表。例如(使用 YAML):
items:
- name: shape1
type: Circle
radius: 2
- name: shape2
type: Rectangle
length: 2
width: 1
如何使用 Cerberus 检查不同类型的不同属性?我尝试使用 schema(list) + anyof + rules 但它不起作用。示例架构如下所示:
items:
type: list
anyof:
- schema:
name:
type: string
required: true
type:
type: string
required: true
radius:
type: int
required: true
- schema:
name:
type: string
required: true
type:
type: string
required: true
length:
type: int
required: true
width:
type: int
required: true
示例错误:
self = <cerberus.validator.Validator object at 0x00000270F16E5040>, domain = 'validate', rule = 'type'
def __get_rule_handler(self, domain, rule): methodname = '_{0}_{1}'.format(domain, rule.replace(' ', '_')) result = getattr(self, methodname, None) if result is None:
raise RuntimeError(
"There's no handler for '{}' in the '{}' " "domain.".format(rule, domain) ) E RuntimeError: There's no handler for 'type' in the 'validate' domain.
解决方案
推荐阅读
- python - 与来自多个字典的给定键对应的一组值的交集
- get - JS 将 XMLHttpRequest 转换为 Fetch 函数 (GET):无法在“窗口”上执行“获取”:使用 GET/HEAD 方法的请求不能有正文
- node.js - Angular npm install 应用程序失败
- copy - 复制 N 次 Sling 资源
- javascript - 如何在 rxjs 和 axios 中永久重复订阅
- android - 在 ConstraintLayout 中移位的链式视图
- c - 如何抑制“警告:从不同大小的整数转换为指针”?
- python - Pyautogui 使用 size() 获取两个整数
- node.js - Node JS 和 Express 混合处理
- django - OperationalError:子选择返回 2 列 - 在 Django QuerySet 中预期为 1