由于一些过时的驱动程序,生产服务器已关闭,因此我一直在升级软件包以使其再次工作。我想我已经很接近了,但夏娃给我带来了一些麻烦。我有以下架构需要验证。为了清晰起见,删除了一些字段;
调查.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 升级
我将不胜感激任何帮助/建议。
如果您要从 cerberus 版本 <1 to >1 升级,请将模型中的“propertyschema”更改为“keyschema”以解决此问题。