Skip to content

Commit 2e12473

Browse files
committed
Preserve the new base URI when looking up references.
1 parent dc62987 commit 2e12473

File tree

2 files changed

+27
-2
lines changed

2 files changed

+27
-2
lines changed

referencing/_core.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -316,15 +316,16 @@ def lookup(self, ref: URI) -> Resolved[D]:
316316
if the reference isn't resolvable
317317
"""
318318
uri, fragment = urldefrag(urljoin(self._base_uri, ref))
319-
resolver, registry = self, self._registry
319+
registry = self._registry
320320
resource = registry.get(uri)
321321
if resource is None:
322322
registry = registry.crawl()
323323
try:
324324
resource = registry[uri]
325325
except KeyError:
326326
raise exceptions.Unresolvable(ref=ref) from None
327-
resolver = evolve(resolver, registry=registry)
327+
328+
resolver = evolve(self, registry=registry, base_uri=uri)
328329
if fragment.startswith("/"):
329330
return resource.pointer(pointer=fragment, resolver=resolver)
330331

referencing/tests/test_core.py

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -336,6 +336,30 @@ def test_lookup_subresource(self):
336336
resolved = resolver.lookup("http://example.com/a")
337337
assert resolved.contents == {"ID": "http://example.com/a", "foo": 12}
338338

339+
def test_multiple_lookup(self):
340+
"""
341+
Continuing to lookup resources maintains the new base URI.
342+
"""
343+
# FIXME: Ideally there'd be some way to represent this test in the
344+
# referencing suite, but I can't think of one yet.
345+
registry = Registry(
346+
{
347+
"http://example.com/": Resource.opaque({}),
348+
"http://example.com/foo/": Resource.opaque({"foo": "bar"}),
349+
"http://example.com/foo/bar": Resource.opaque({"baz": "quux"}),
350+
},
351+
)
352+
353+
resolver = registry.resolver()
354+
first = resolver.lookup("http://example.com/")
355+
assert first.contents == {}
356+
357+
second = first.resolver.lookup("foo/")
358+
assert second.contents == {"foo": "bar"}
359+
360+
third = second.resolver.lookup("bar")
361+
assert third.contents == {"baz": "quux"}
362+
339363
def test_lookup_unknown_reference(self):
340364
resolver = Registry().resolver()
341365
ref = "http://example.com/does/not/exist"

0 commit comments

Comments
 (0)