diff --git a/libcove/lib/common.py b/libcove/lib/common.py index 5940fc3..342cb8d 100644 --- a/libcove/lib/common.py +++ b/libcove/lib/common.py @@ -18,13 +18,29 @@ from cached_property import cached_property from flattentool import unflatten from jsonschema import FormatChecker, RefResolver -from jsonschema._utils import extras_msg, find_additional_properties, uniq +from jsonschema._utils import ( + ensure_list, + extras_msg, + find_additional_properties, + types_msg, + uniq, +) from jsonschema.exceptions import UndefinedTypeCheck, ValidationError from .exceptions import cove_spreadsheet_conversion_error from .tools import decimal_default, get_request +def type_validator(validator, types, instance, schema): + types = ensure_list(types) + + for type in types: + if validator.is_type(instance, type): + break + else: + yield ValidationError(types_msg(instance, types)) + + class TypeChecker: def is_type(self, instance, type): if type == "string": @@ -52,7 +68,9 @@ def is_type(self, instance, type): # Otherwise we could cause conflicts with other software in the same process. validator = jsonschema.validators.extend( jsonschema.validators.Draft4Validator, - validators={}, + validators={ + "type": type_validator, + }, type_checker=TypeChecker(), ) diff --git a/tests/lib/test_common.py b/tests/lib/test_common.py index 633b29c..0c19c52 100644 --- a/tests/lib/test_common.py +++ b/tests/lib/test_common.py @@ -765,7 +765,7 @@ class DummySchemaObj: def get_pkg_schema_obj(self): return { - "type": "array", + "type": ["array"], "minItems": 2, }