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
                            }
                        }
                    }
                }
            }
        }