diff --git a/docs/changes.rst b/docs/changes.rst index 90c0126..278d363 100644 --- a/docs/changes.rst +++ b/docs/changes.rst @@ -2,6 +2,11 @@ Changelog ========= +v0.27.2 +------- + +* Another fix for looking up anchors from non-canonical URIs, now when they're inside a subresource which has a relative ``$id``. + v0.27.1 ------- diff --git a/referencing/_core.py b/referencing/_core.py index c040a3a..21b1e2f 100644 --- a/referencing/_core.py +++ b/referencing/_core.py @@ -364,20 +364,23 @@ def anchor(self, uri: URI, name: str): """ Retrieve a given anchor from a resource which must already be crawled. """ - resource = self.get(uri) - if resource is None: - canonical_uri = uri - else: - canonical_uri = resource.id() or uri - - value = self._anchors.get((canonical_uri, name)) + value = self._anchors.get((uri, name)) if value is not None: return Retrieved(value=value, registry=self) registry = self.crawl() - value = registry._anchors.get((canonical_uri, name)) + value = registry._anchors.get((uri, name)) if value is not None: return Retrieved(value=value, registry=registry) + + resource = self.get(uri) + if resource is not None: + canonical_uri = resource.id() + if canonical_uri is not None: + value = registry._anchors.get((canonical_uri, name)) + if value is not None: + return Retrieved(value=value, registry=registry) + if "/" in name: raise exceptions.InvalidAnchor( ref=uri, diff --git a/suite b/suite index e8927d9..ff209ae 160000 --- a/suite +++ b/suite @@ -1 +1 @@ -Subproject commit e8927d9121b83fb84f0a7d888b878abd1cbc76b4 +Subproject commit ff209ae6d7ca083a548aba7968cf39ce25ba451f