Skip to content

Commit adad3bc

Browse files
committed
Don't wrap CannotDetermineSpecification exceptions in retrievers.
They indicate that a resource was indeed retrieved, just we don't know how to interpret it, so Unretrievable is a lie. They still will get wrapped by Unresolvable exceptions when used with Resolver.lookup.
1 parent 330cd39 commit adad3bc

File tree

2 files changed

+24
-2
lines changed

2 files changed

+24
-2
lines changed

referencing/_core.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -249,7 +249,10 @@ def __getitem__(self, uri: URI) -> Resource[D]:
249249
except LookupError:
250250
try:
251251
return self._retrieve(uri)
252-
except exceptions.NoSuchResource:
252+
except (
253+
exceptions.CannotDetermineSpecification,
254+
exceptions.NoSuchResource,
255+
):
253256
raise
254257
except Exception:
255258
raise exceptions.Unretrievable(ref=uri)

referencing/tests/test_core.py

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -403,7 +403,7 @@ def test_retrieve(self):
403403
registry = Registry(retrieve=lambda uri: foo)
404404
assert registry["urn:example"] == foo
405405

406-
def test_retrieve_error(self):
406+
def test_retrieve_arbitrary_exception(self):
407407
def retrieve(uri):
408408
if uri == "urn:succeed":
409409
return {}
@@ -414,6 +414,25 @@ def retrieve(uri):
414414
with pytest.raises(exceptions.Unretrievable):
415415
registry["urn:uhoh"]
416416

417+
def test_retrieve_no_such_resource(self):
418+
def retrieve(uri):
419+
if uri == "urn:succeed":
420+
return {}
421+
raise exceptions.NoSuchResource(ref=uri)
422+
423+
registry = Registry(retrieve=retrieve)
424+
assert registry["urn:succeed"] == {}
425+
with pytest.raises(exceptions.NoSuchResource):
426+
registry["urn:uhoh"]
427+
428+
def test_retrieve_cannot_determine_specification(self):
429+
def retrieve(uri):
430+
return Resource.from_contents({})
431+
432+
registry = Registry(retrieve=retrieve)
433+
with pytest.raises(exceptions.CannotDetermineSpecification):
434+
registry["urn:uhoh"]
435+
417436
def test_retrieve_already_available_resource(self):
418437
def retrieve(uri):
419438
raise Exception("Oh no!")

0 commit comments

Comments
 (0)