From e888e76992658f84c175b821e3e16635228c98d7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lubom=C3=ADr=20Sedl=C3=A1=C5=99?= Date: Fri, 26 May 2023 10:07:54 +0200 Subject: [PATCH] Add back compatibility with jsonschema <3.0.0 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Resolves: https://pagure.io/pungi/issue/1667 Signed-off-by: Lubomír Sedlář --- pungi/checks.py | 35 ++++++++++++++++++++++++----------- 1 file changed, 24 insertions(+), 11 deletions(-) diff --git a/pungi/checks.py b/pungi/checks.py index cc7d00c7..0c607cd2 100644 --- a/pungi/checks.py +++ b/pungi/checks.py @@ -227,9 +227,19 @@ def validate(config, offline=False, schema=None): DefaultValidator = _extend_with_default_and_alias( jsonschema.Draft4Validator, offline=offline ) - validator = DefaultValidator( - schema, - ) + + if hasattr(jsonschema.Draft4Validator, "TYPE_CHECKER"): + # jsonschema >= 3.0 has new interface for checking types + validator = DefaultValidator(schema) + else: + validator = DefaultValidator( + schema, + { + "array": (tuple, list), + "regex": six.string_types, + "url": six.string_types, + }, + ) errors = [] warnings = [] for error in validator.iter_errors(config): @@ -444,15 +454,18 @@ def _extend_with_default_and_alias(validator_class, offline=False): context=all_errors, ) - def is_array(checker, instance): - return isinstance(instance, (tuple, list)) + kwargs = {} + if hasattr(validator_class, "TYPE_CHECKER"): + # jsonschema >= 3 + def is_array(checker, instance): + return isinstance(instance, (tuple, list)) - def is_string_type(checker, instance): - return isinstance(instance, six.string_types) + def is_string_type(checker, instance): + return isinstance(instance, six.string_types) - type_checker = validator_class.TYPE_CHECKER.redefine_many( - {"array": is_array, "regex": is_string_type, "url": is_string_type} - ) + kwargs["type_checker"] = validator_class.TYPE_CHECKER.redefine_many( + {"array": is_array, "regex": is_string_type, "url": is_string_type} + ) return jsonschema.validators.extend( validator_class, @@ -464,7 +477,7 @@ def _extend_with_default_and_alias(validator_class, offline=False): "additionalProperties": _validate_additional_properties, "anyOf": _validate_any_of, }, - type_checker=type_checker, + **kwargs )