对内置类型使用自定义验证

时间:2020-03-25 21:17:11

标签: python-3.x cerberus

我希望使用自定义验证器而不是内置验证器来验证日期时间类型。

代码如下:

        schema_text = """
            run_date:
                type: datetime
                required: true
            """
        s.schema = yaml.load(schema_text)

        s.validate(yaml.load("run_date: 2017-01-01T00:00+00:00:00"))

可以使用checks_with: my_custom_validator来做到这一点,这可以确定,但我希望向公众开放这些模式,因此请所有人为他们做贡献会很麻烦。我认为也可以使用规范化器来完成此操作,但是,我还是希望不要用输入来弥补。

这里有什么建议吗? dateutil解析器正是我要使用的解析器。

1 个答案:

答案 0 :(得分:1)

由于您的输入数据是一个表示ISO 8601格式的datetime的字符串,因此您可以使用两种方法而无需进行任何自定义。

(尝试)将字符串转换为datetime.datetime对象:

from datetime import datetime

schema = {
    "run_date": {"coerce": datetime.fromisoformat}
}

这需要进行规范化验证,否则将导致错误或将run_date字段的值转换为datetime.datetime对象。

如果要使用字符串作为数据类型,请使用regex规则:

schema = {
    "run_date": {"type": "string", "regex": r"\d{4}-\d\d-\d\d-etc.pp."}
}