如何解决validictory 无法正确验证
我正在尝试验证烧瓶请求的标头及其失败。我正在尝试使用下面的代码来模拟相同的内容,并且可以看到即使我错过了一些必需的标头,它也无法正确验证标头。
下面的代码预计会失败,但通过了。
import validictory
from werkzeug.datastructures import EnvironHeaders
obj = EnvironHeaders(environ={})
validictory.validate(obj,{'type': 'object','properties': {'test':{'required': True,'type': 'any'}}})
如果我将 EnvironHeaders 转换为 dict,那么验证就会正确进行。
import validictory
from werkzeug.datastructures import EnvironHeaders
obj = EnvironHeaders(environ={})
validictory.validate(dict(obj),'type': 'any'}}})
这在验证过程中正确地引发了以下错误。关于第一种情况下验证不当的原因有什么想法吗?
validictory.validator.requiredFieldValidationError: required field 'test' is missing
解决方法
通过查看 validictory 的源代码,我找到了这个问题的原因。
它通过了类型验证,因为 EnvironHeaders 具有“keys”和“values”属性。
def validate_type_object(self,val):
return isinstance(val,Mapping) or (hasattr(val,'keys') and hasattr(val,'items'))
属性验证仅对 dict 类型进行,并且验证通过,因为如果输入类型不是字典,代码不会引发任何错误。
def validate_properties(self,x,fieldname,schema,path,properties=None):
''' Validates properties of a JSON object by processing the object's schema recursively '''
value = x.get(fieldname)
if value is not None:
if isinstance(value,dict):
if isinstance(properties,dict):
if self.disallow_unknown_properties or self.remove_unknown_properties:
self._validate_unknown_properties(properties,value,schema.get('patternProperties'))
for property in properties:
self.__validate(property,properties.get(property),path + '.' + property)
else:
raise SchemaError("Properties definition of field '{0}' is not an object"
.format(fieldname))
注意: Validictory 已停止支持,因此不会在 git repo 中引发任何问题。将按照建议尝试使用 jsonschema 包。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。