我希望这能回答你的问题,因为我不太确定我是否理解正确。这确实有点像一种解决方法,但它也会做你想做的事。听起来您想在多个地方重用一组需求。我看到的最佳选择是创建一个自定义验证器子类并添加一个自定义验证器方法来处理共享规则集。鉴于您提供的示例,下面的代码应该可以工作。
from cerberus import Validator
import yaml
class MyValidator(Validator):
def _validator_required_string(self, field, value):
# Check the type
if type(value) != str:
self._error(field, "Must be of type 'str'")
# Check the length
if len(value) == 0:
self._error(field, "Cannot be blank")
data = {"signin": { "name": "myusername",
"password": "mypassword"}}
schema = '''
signin:
type: dict
empty: False
nullable: False
schema:
name:
validator: required_string
password:
validator: required_string
'''
v = MyValidator(yaml.load(schema))
您可以在此处查看自定义验证器文档以了解命名要求。附带说明一下,如果您可以在 Python 代码而不是 YAML 中定义架构,则可以定义一个required_string
变量,该变量包含您要使用的实际规则的字典,然后在更大的架构定义中引用该变量。这将允许您使用实际规则,而不必定义函数来实现规则。