微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

validictory 无法正确验证

如何解决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 举报,一经查实,本站将立刻删除。