From 16fef5b641e82a88f71f50657e29ae8a827969a5 Mon Sep 17 00:00:00 2001 From: Julian Berman Date: Thu, 27 Apr 2023 10:48:40 -0400 Subject: Fix an additional unintentional resolution scope change in RefResolver Closes: #1085 --- jsonschema/tests/test_validators.py | 11 +++++++++-- jsonschema/validators.py | 15 +++++++++------ 2 files changed, 18 insertions(+), 8 deletions(-) diff --git a/jsonschema/tests/test_validators.py b/jsonschema/tests/test_validators.py index 00e0c40..1228078 100644 --- a/jsonschema/tests/test_validators.py +++ b/jsonschema/tests/test_validators.py @@ -2333,8 +2333,15 @@ class TestRefResolver(TestCase): See #1085. """ schema = validators.Draft7Validator.META_SCHEMA - resolver = validators._RefResolver("", schema) - validator = validators.Draft7Validator(schema, resolver=resolver) + one = validators._RefResolver("", schema) + validator = validators.Draft7Validator(schema, resolver=one) + self.assertFalse(validator.is_valid({"maxLength": "foo"})) + + another = { + "allOf": [{"$ref": validators.Draft7Validator.META_SCHEMA["$id"]}], + } + two = validators._RefResolver("", another) + validator = validators.Draft7Validator(another, resolver=two) self.assertFalse(validator.is_valid({"maxLength": "foo"})) diff --git a/jsonschema/validators.py b/jsonschema/validators.py index 5b16fdc..262113b 100644 --- a/jsonschema/validators.py +++ b/jsonschema/validators.py @@ -387,11 +387,14 @@ def create( ) return - if resolver is None: - resolver = self._resolver.in_subresource( - specification.create_resource(schema), - ) - evolved = self.evolve(schema=schema, _resolver=resolver) + if self._ref_resolver is not None: + evolved = self.evolve(schema=schema) + else: + if resolver is None: + resolver = self._resolver.in_subresource( + specification.create_resource(schema), + ) + evolved = self.evolve(schema=schema, _resolver=resolver) for k, v in applicable_validators(schema): validator = evolved.VALIDATORS.get(k) @@ -448,7 +451,7 @@ def create( self._ref_resolver.push_scope(scope) try: - return self.descend(instance, resolved) + return list(self.descend(instance, resolved)) finally: self._ref_resolver.pop_scope() -- cgit v1.2.1