0

我正在尝试在 YAML 中为 python cerberus 库定义我的验证器模式,因为它更具人类可读性。我遇到了一个问题,如果我尝试在 YAML 中定义强制函数,我会得到一个 SchemaError。从Normalizing string to date in cerbrus的示例开始,我将其修改为使用 YAML 模式。

import datetime
import yaml
st = '''
start_date: 
    type: datetime
    coerce: to_date
'''
schema = yaml.load(st)
v = cerberus.Validator()
to_date = lambda s: datetime.strptime(s, '%Y-%m-%d')
v.schema = schema
v.validate({'start_date': '2017-10-01'})

我得到错误:

SchemaError: {'start_date': [{'coerce': ['none or more than one rule validate', {'oneof definition 0': ['must be of callable type'], 'oneof definition 1': ['must属于列表类型'], 'oneof definition 2': ['unallowed value to_Date']}]}]}

定义基于 YAML 的模式支持的强制函数还是我需要切换回使用 JSON?

4

1 回答 1

1

您正在模块的全局范围内创建一个 lambda 函数。当您引用时,Cerberus 验证器不知道您的意思是那个'to_date'。因此,您需要在Validator子类中定义强制器。是相关文档。

于 2018-09-17T12:55:33.193 回答