对内置类型使用自定义验证
Using custom validation for built in types
我希望使用自定义验证器而不是内置验证器来验证日期时间类型。
代码如下所示:
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
来做到这一点 可以 但我希望打开这些模式public,所以要求他们都为他们做出贡献会很麻烦。我认为这也可以使用规范化器来完成,但我还是不想对输入进行修改。
这里有什么建议吗? dateutil
解析器正是我想要使用的。
由于您的输入数据是表示 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."}
}
我希望使用自定义验证器而不是内置验证器来验证日期时间类型。
代码如下所示:
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
来做到这一点 可以 但我希望打开这些模式public,所以要求他们都为他们做出贡献会很麻烦。我认为这也可以使用规范化器来完成,但我还是不想对输入进行修改。
这里有什么建议吗? dateutil
解析器正是我想要使用的。
由于您的输入数据是表示 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."}
}