File tree Expand file tree Collapse file tree 2 files changed +27
-2
lines changed Expand file tree Collapse file tree 2 files changed +27
-2
lines changed Original file line number Diff line number Diff line change @@ -316,15 +316,16 @@ def lookup(self, ref: URI) -> Resolved[D]:
316
316
if the reference isn't resolvable
317
317
"""
318
318
uri , fragment = urldefrag (urljoin (self ._base_uri , ref ))
319
- resolver , registry = self , self ._registry
319
+ registry = self ._registry
320
320
resource = registry .get (uri )
321
321
if resource is None :
322
322
registry = registry .crawl ()
323
323
try :
324
324
resource = registry [uri ]
325
325
except KeyError :
326
326
raise exceptions .Unresolvable (ref = ref ) from None
327
- resolver = evolve (resolver , registry = registry )
327
+
328
+ resolver = evolve (self , registry = registry , base_uri = uri )
328
329
if fragment .startswith ("/" ):
329
330
return resource .pointer (pointer = fragment , resolver = resolver )
330
331
Original file line number Diff line number Diff line change @@ -336,6 +336,30 @@ def test_lookup_subresource(self):
336
336
resolved = resolver .lookup ("http://example.com/a" )
337
337
assert resolved .contents == {"ID" : "http://example.com/a" , "foo" : 12 }
338
338
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
+
339
363
def test_lookup_unknown_reference (self ):
340
364
resolver = Registry ().resolver ()
341
365
ref = "http://example.com/does/not/exist"
You can’t perform that action at this time.
0 commit comments