0

我有一个 YAML 配置文件,我想使用 Cerberus 对其进行验证。问题是我的 YAML 文件是一种 3 层字典,当我们有超过 2 个嵌套时,验证功能似乎不起作用。例如,当我运行以下代码时:

a_config = {'dict1': {'dict11': {'dict111': 'foo111',
                                 'dict112': 'foo112'},
                      'dict12': {'dict121': 'foo121',
                                 'dict122': 'foo122'}},
            'dict2': 'foo2'}

a_simple_config = {'dict1': {'dict11': 'foo11'}, 'dict2': 'foo2'}

print(type(a_config))
print(type(a_simple_config))

simple_schema = {'dict1': {'type': 'dict', 'schema': {'dict11': {'type': 'string'}}}, 'dict2': {'type': 'string'}}
v_simple = Validator(simple_schema)

schema = {
    'dict1': {
        'type': 'dict',
        'schema': {
            'dict11': {
                'type': 'dict',
                'schema': {
                    'dict111': {'type': 'string'},
                    'dict112': {'type': 'string'}
                }
            }
        }
    },
    'dict2': {'type': 'string'}
}

v = Validator(schema)
print(v.validate(a_config, schema))
print(v.errors)

我明白了:

True
{}
False
{'dict1': [{'dict12': ['unknown field']}]}

我认为不支持验证 3 层文件。所以我唯一的想法是尝试从第 2 层验证它,如果它们都有效,那么就断定我的文件是有效的。我想知道当我有 3 层时我在编写模式时是否犯了一些错误?或者,是否存在验证此类文件的更好主意?

编辑:@flyx 声称问题出在 dict12 的定义中,所以我决定替换它。什么都没有改变。我再次有相同的输出!

4

0 回答 0