无法在 jsonschema 中使用日期验证

com*_*tor 5 python validation jsonschema python-3.x

我无法在 jsonschema 中使用“date”进行类型验证

myschema = {
    "$schema": "http://json-schema.org/draft-04/schema#",
    "type": "object",
    "self": {
        "primary_key": ["email"]
    },
    "properties": {
        "email": {
            "pattern": "[^@]+@[^@]+\.[^@]+"
        },
        "dob": {
            "description": "Date of Birth YYYY-MM-DD",
            "type": "date"
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

当我使用上面的架构执行下面的代码时

from jsonschema import validate
validate({ "dob": "2001-02-30"}, myschema)
Run Code Online (Sandbox Code Playgroud)

获得以下错误跟踪

Unhandled Exception: 'date' is not valid under any of the given schemas

Failed validating 'anyOf' in schema['properties']['properties']['additionalProperties']['properties']['type']:
    {'anyOf': [{'$ref': '#/definitions/simpleTypes'},
               {'items': {'$ref': '#/definitions/simpleTypes'},
                'minItems': 1,
                'type': 'array',
                'uniqueItems': True}]}

On instance['properties']['dob']['type']:
    'date'
Run Code Online (Sandbox Code Playgroud)

更新:看起来日期是一种格式而不是类型,但它仍然让我键入无效日期。我可以在 jsonschema 代码中清楚地看到它尝试使用日期时间解析它,但我无法在那里命中断点。

ale*_*cxe 5

应该date用作“格式”,而不是“类型”:

"dob": {
    "description": "Date of Birth YYYY-MM-DD",
    "type": "string", 
    "format": "date"
}
Run Code Online (Sandbox Code Playgroud)

然后,要检查格式,请使用:

from jsonschema import validate, FormatChecker

validate({"dob": "2001-02-30"}, myschema, format_checker=FormatChecker()) 
Run Code Online (Sandbox Code Playgroud)