python-eve Cerberus 不断抛出嵌入式字典的“未知规则”错误?

问题描述 投票:0回答:1

由于一些过时的驱动程序,生产服务器已关闭,因此我一直在升级软件包以使其再次工作。我想我已经很接近了,但夏娃给我带来了一些麻烦。我有以下架构需要验证。为了清晰起见,删除了一些字段;

调查.py

from . import question
from . import building_data
from . import address

schema = {
    'buildingAddress': {
        'type': 'dict',
        'schema': address.schema,
    },

    'surveyType': {
        'type': 'string',
        'allowed': [
            "local",
            "global",
        ],
    },

    'questions': {
        'type': 'list',
        'schema': {
            'type': 'dict',
            'schema': question.embedded_schema,
        }
    },
}

问题.py

import copy

schema = {

    'name': {
        'type': 'string',
        'required': True
    },

    'type': {
        'type': 'string',
        'allowed': [
            'boolean',
            'shortText',
        ],
        'required': True,
    },

    'group': {
        'type': 'string'
    },
    'title': {
        'type': 'string',
        'required': True
    },

    'oldCode': {
        'type': 'string'
    },

    'questionSets': {
        'type': 'list',
        'schema': {
            'type': 'string'
        },
    },

    'min': {
        'type': 'number',
        'nullable': True,
    },
    'max': {
        'type': 'number',
        'nullable': True,
    },

    'range': {
        'type': 'number',
        'nullable': True,
        'min': 1,
    },
    'minValue': {
        'type': 'string',
    },
    'maxValue': {
        'type': 'string',
    },

    # single / multiple choice
    'choices': {
        'type': 'dict',
        'propertyschema': {
            'type': 'string',
            'regex': '\d+'
        }
    },

}

embedded_schema = copy.deepcopy(schema)

embedded_schema.update(
    {
        '_id': {
            'type': 'objectid',
            'data_relation': {
                'resource': 'questions',
                'field': '_id',
                'embeddable': False
            }
        },
    }
)

无论出于何种原因,在进行 post 调用时都会引发 SchemaError(self.schema_validator.errors) 异常。该错误似乎来自“问题”字段,异常的其余部分如下。为了便于阅读,剪掉了其余部分。

{'questions': [{'schema': ['no definitions validate', {'anyof definition 0': [{'schema': [{'_id': ['unknown rule'], '_version': ['unknown rule'], 'choices': ['unknown rule'], 'group': ['unknown rule'], 'maxValue': ['unknown rule'], 'minValue': ['unknown rule'], 'name': ['unknown rule'], 'oldCode': ['unknown rule'], 'questionSets': ['unknown rule'], 'range': ['unknown rule'], 'title': ['unknown rule'], 'type': ["must be of ['string', 'list'] type"]}], 'type': ['null value not allowed']}], 'anyof definition 1': [{'schema': ['no definitions validate', {'anyof definition 0': [{'choices': [{'propertyschema': ['unknown rule']}]}] ...

我尝试了几种不同的 eve 和 cerberus 组合,但没有成功。我查看了存储库,发现 Cerberus 没有在代码中的任何位置导入,因此它必须是正在使用的 cerberus 的 eve 版本。

我目前使用的是 eve 1.1.5 和 cerberus 1.3.6。从 eve 0.7.10 和 Cerberus 0.9.2 升级

我将不胜感激任何帮助/建议。

python validation eve cerberus
1个回答
0
投票

如果您要从 cerberus 版本 <1 to >1 升级,请将模型中的“propertyschema”更改为“keyschema”以解决此问题。

© www.soinside.com 2019 - 2024. All rights reserved.