Skip to content

Commit 16fef5b

Browse files
committed
Fix an additional unintentional resolution scope change in RefResolver
Closes: #1085
1 parent cd88c1d commit 16fef5b

File tree

2 files changed

+18
-8
lines changed

2 files changed

+18
-8
lines changed

jsonschema/tests/test_validators.py

+9-2
Original file line numberDiff line numberDiff line change
@@ -2333,8 +2333,15 @@ def test_pointer_within_schema_with_different_id(self):
23332333
See #1085.
23342334
"""
23352335
schema = validators.Draft7Validator.META_SCHEMA
2336-
resolver = validators._RefResolver("", schema)
2337-
validator = validators.Draft7Validator(schema, resolver=resolver)
2336+
one = validators._RefResolver("", schema)
2337+
validator = validators.Draft7Validator(schema, resolver=one)
2338+
self.assertFalse(validator.is_valid({"maxLength": "foo"}))
2339+
2340+
another = {
2341+
"allOf": [{"$ref": validators.Draft7Validator.META_SCHEMA["$id"]}],
2342+
}
2343+
two = validators._RefResolver("", another)
2344+
validator = validators.Draft7Validator(another, resolver=two)
23382345
self.assertFalse(validator.is_valid({"maxLength": "foo"}))
23392346

23402347

jsonschema/validators.py

+9-6
Original file line numberDiff line numberDiff line change
@@ -387,11 +387,14 @@ def descend(
387387
)
388388
return
389389

390-
if resolver is None:
391-
resolver = self._resolver.in_subresource(
392-
specification.create_resource(schema),
393-
)
394-
evolved = self.evolve(schema=schema, _resolver=resolver)
390+
if self._ref_resolver is not None:
391+
evolved = self.evolve(schema=schema)
392+
else:
393+
if resolver is None:
394+
resolver = self._resolver.in_subresource(
395+
specification.create_resource(schema),
396+
)
397+
evolved = self.evolve(schema=schema, _resolver=resolver)
395398

396399
for k, v in applicable_validators(schema):
397400
validator = evolved.VALIDATORS.get(k)
@@ -448,7 +451,7 @@ def _validate_reference(self, ref, instance):
448451
self._ref_resolver.push_scope(scope)
449452

450453
try:
451-
return self.descend(instance, resolved)
454+
return list(self.descend(instance, resolved))
452455
finally:
453456
self._ref_resolver.pop_scope()
454457

0 commit comments

Comments
 (0)