validictory 无法正确验证
validictory is not able to validate properly
我正在尝试验证烧瓶请求的 headers 及其失败。我正在尝试使用下面的代码来模拟相同的代码,并且可以看到它无法正确验证 headers 即使我错过了一些强制性的 headers.
下面的代码预计会失败,但它通过了。
import validictory
from werkzeug.datastructures import EnvironHeaders
obj = EnvironHeaders(environ={})
validictory.validate(obj,{'type': 'object', 'properties': {'test':{'required': True, 'type': 'any'}}})
如果我将 EnvironHeaders 转换为字典,则验证会正常进行。
import validictory
from werkzeug.datastructures import EnvironHeaders
obj = EnvironHeaders(environ={})
validictory.validate(dict(obj),{'type': 'object', 'properties': {'test':{'required': True, '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, fieldname,
schema.get('patternProperties'))
for property in properties:
self.__validate(property, value, properties.get(property),
path + '.' + property)
else:
raise SchemaError("Properties definition of field '{0}' is not an object"
.format(fieldname))
注意: Validictory 已停止支持,因此不会在 git 回购中提出任何问题。将按照建议尝试使用 jsonschema 包。
我正在尝试验证烧瓶请求的 headers 及其失败。我正在尝试使用下面的代码来模拟相同的代码,并且可以看到它无法正确验证 headers 即使我错过了一些强制性的 headers.
下面的代码预计会失败,但它通过了。
import validictory
from werkzeug.datastructures import EnvironHeaders
obj = EnvironHeaders(environ={})
validictory.validate(obj,{'type': 'object', 'properties': {'test':{'required': True, 'type': 'any'}}})
如果我将 EnvironHeaders 转换为字典,则验证会正常进行。
import validictory
from werkzeug.datastructures import EnvironHeaders
obj = EnvironHeaders(environ={})
validictory.validate(dict(obj),{'type': 'object', 'properties': {'test':{'required': True, '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, fieldname,
schema.get('patternProperties'))
for property in properties:
self.__validate(property, value, properties.get(property),
path + '.' + property)
else:
raise SchemaError("Properties definition of field '{0}' is not an object"
.format(fieldname))
注意: Validictory 已停止支持,因此不会在 git 回购中提出任何问题。将按照建议尝试使用 jsonschema 包。