summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJulian Berman <Julian@GrayVines.com>2023-04-27 10:48:40 -0400
committerJulian Berman <Julian@GrayVines.com>2023-04-27 10:48:40 -0400
commit16fef5b641e82a88f71f50657e29ae8a827969a5 (patch)
tree7afce825d17db495883609282c1ad13642e57727
parentcd88c1d6704fc17d83b0494bab29db2034573eeb (diff)
downloadjsonschema-16fef5b641e82a88f71f50657e29ae8a827969a5.tar.gz
Fix an additional unintentional resolution scope change in RefResolverv4.18.0a6
Closes: #1085
-rw-r--r--jsonschema/tests/test_validators.py11
-rw-r--r--jsonschema/validators.py15
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()