File tree Expand file tree Collapse file tree 2 files changed +30
-0
lines changed Expand file tree Collapse file tree 2 files changed +30
-0
lines changed Original file line number Diff line number Diff line change @@ -371,6 +371,19 @@ def resolver(self, base_uri: URI = "") -> Resolver[D]:
371
371
"""
372
372
return Resolver (base_uri = base_uri , registry = self )
373
373
374
+ def resolver_with_root (self , resource : Resource [D ]) -> Resolver [D ]:
375
+ """
376
+ Return a `Resolver` with a specific root resource.
377
+
378
+ The resource must have an internal identifier (e.g. for a JSON Schema
379
+ resource in recent versions, an ``$id`` keyword).
380
+ """
381
+ uri = resource .id () or ""
382
+ return Resolver (
383
+ base_uri = uri ,
384
+ registry = self .with_resource (uri , resource ),
385
+ )
386
+
374
387
375
388
@frozen
376
389
class Resolved (Generic [D ]):
Original file line number Diff line number Diff line change @@ -425,6 +425,23 @@ def retrieve(uri):
425
425
registry = Registry (retrieve = retrieve ).with_resource ("urn:root" , root )
426
426
assert registry .crawl ()["urn:child" ] == child
427
427
428
+ def test_resolver (self ):
429
+ one = Resource .opaque (contents = {})
430
+ registry = Registry ({"http://example.com" : one })
431
+ resolver = registry .resolver (base_uri = "http://example.com" )
432
+ assert resolver .lookup ("#" ).contents == {}
433
+
434
+ def test_resolver_with_root_identified (self ):
435
+ root = ID_AND_CHILDREN .create_resource ({"ID" : "http://example.com" })
436
+ resolver = Registry ().resolver_with_root (root )
437
+ assert resolver .lookup ("http://example.com" ).contents == root .contents
438
+ assert resolver .lookup ("#" ).contents == root .contents
439
+
440
+ def test_resolver_with_root_unidentified (self ):
441
+ root = Resource .opaque (contents = {})
442
+ resolver = Registry ().resolver_with_root (root )
443
+ assert resolver .lookup ("#" ).contents == root .contents
444
+
428
445
def test_repr (self ):
429
446
one = Resource .opaque (contents = {})
430
447
two = ID_AND_CHILDREN .create_resource ({"foo" : "bar" })
You can’t perform that action at this time.
0 commit comments