Cerberus 并验证包含字典的列表
Cerberus and validating a list containing dicts
我正在尝试验证以下文档。
document = {
'days': {
'Monday': [{
'address': 'my address',
'city': 'my town'
}],
'Tuesday': [{
'address': 'my address',
'city': 'my town'
}]
}
}
使用以下架构。
schema = {
'days': {
'type': 'dict',
'allowed': ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'],
'schema': {
'type': 'list',
'schema': {
'address': {
'type': 'string'
},
'city': {
'type': 'string', 'required': True
}
}
}
}
}
v = Validator(schema)
if not v.validate(document, schema):
raise Exception("Configuration file is not valid", v.errors)
我收到以下错误:{days: ['must be of dict type']}
我不知道如何验证列表中包含的字典。
你们非常亲密。您可以使用 valuesrules
表示“无论键是什么,值的规则都是这样”。然后,在列表中,您需要一个说明列表具有字典的模式,然后是其中的元素的模式。可能有更简单的方法,但这会通过您的文档。
schema = {
'days': {
'type': 'dict',
'allowed': ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'],
'valuesrules': {
'type': 'list',
'schema': {
'type': 'dict',
'schema': {
'address': {
'type': 'string'
},
'city': {
'type': 'string', 'required': True
}
}
}
}
}
}
我正在尝试验证以下文档。
document = {
'days': {
'Monday': [{
'address': 'my address',
'city': 'my town'
}],
'Tuesday': [{
'address': 'my address',
'city': 'my town'
}]
}
}
使用以下架构。
schema = {
'days': {
'type': 'dict',
'allowed': ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'],
'schema': {
'type': 'list',
'schema': {
'address': {
'type': 'string'
},
'city': {
'type': 'string', 'required': True
}
}
}
}
}
v = Validator(schema)
if not v.validate(document, schema):
raise Exception("Configuration file is not valid", v.errors)
我收到以下错误:{days: ['must be of dict type']}
我不知道如何验证列表中包含的字典。
你们非常亲密。您可以使用 valuesrules
表示“无论键是什么,值的规则都是这样”。然后,在列表中,您需要一个说明列表具有字典的模式,然后是其中的元素的模式。可能有更简单的方法,但这会通过您的文档。
schema = {
'days': {
'type': 'dict',
'allowed': ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'],
'valuesrules': {
'type': 'list',
'schema': {
'type': 'dict',
'schema': {
'address': {
'type': 'string'
},
'city': {
'type': 'string', 'required': True
}
}
}
}
}
}