如何使用Cerberus验证包含特定范围内浮动的列表



我想验证被解析到Python字典中的JSON对象,如下所示:

# example with 2 elements
{
'coordinates': [-20.3, 30.6]
}
# example with 3 elements
{
'coordinates': [-20.3, 30.6, 0]
}

到目前为止,我能够定义以下模式:

schema = {
'coordinates': {
'required': True,
'type': 'list',
'minlength': 2,
'maxlength': 3,
'schema': {
'type': 'float',
},
}
}

我还想检查这些限制:

  • coordinates字段值的第一项应介于-30.0和10.0之间
  • 第二项应介于-10.0和50.0之间

但我没能想出有用的东西。有人对如何实现这一目标有什么建议吗?


更新:根据接受的答案,模式变为以下

schema = {
'coordinates': {
'required': True,
'type': 'list',
"oneof_items": (
({"min": -30.0, "max": 10.0}, {"min": -10.0, "max": 50.0}),
({"min": -30.0, "max": 10.0}, {"min": -10.0, "max": 50.0}, {}),
),
}
}

文档:https://docs.python-cerberus.org/en/stable/validation-rules.html#of-规则类型保护程序

添加此规则:

{"oneof_items":
(
({"min": -30.0, "max": 10.0}, {"min": -10.0, "max": 50.0}),
({"min": -30.0, "max": 10.0}, {"min": -10.0, "max": 50.0}, {}),
)
}

这使得与长度相关的规则变得多余。为了消除冗余,Python对象引用或规则集注册表是可行的。

最新更新