Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package python-referencing for 
openSUSE:Factory checked in at 2023-05-26 20:15:33
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-referencing (Old)
 and      /work/SRC/openSUSE:Factory/.python-referencing.new.1533 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-referencing"

Fri May 26 20:15:33 2023 rev:12 rq:1089009 version:0.28.5

Changes:
--------
--- /work/SRC/openSUSE:Factory/python-referencing/python-referencing.changes    
2023-05-24 20:23:06.372445630 +0200
+++ 
/work/SRC/openSUSE:Factory/.python-referencing.new.1533/python-referencing.changes
  2023-05-26 20:15:50.068391766 +0200
@@ -1,0 +2,9 @@
+Thu May 25 06:24:03 UTC 2023 - ka...@b1-systems.de
+
+- Update to version 0.28.5:
+  * Fill in the missing coverage, and ensure it runs in CI.
+  * Add pip-audit to CI.
+  * Explicitly ensure we catch calling .anchor on a nonexistent
+    resource.
+
+-------------------------------------------------------------------

Old:
----
  referencing-0.28.4.tar.gz

New:
----
  referencing-0.28.5.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ python-referencing.spec ++++++
--- /var/tmp/diff_new_pack.IrNDUt/_old  2023-05-26 20:15:50.624395080 +0200
+++ /var/tmp/diff_new_pack.IrNDUt/_new  2023-05-26 20:15:50.632395128 +0200
@@ -26,7 +26,7 @@
 %endif
 %{?sle15_python_module_pythons}
 Name:           python-referencing%{psuffix}
-Version:        0.28.4
+Version:        0.28.5
 Release:        0
 Summary:        JSON Referencing + Python
 License:        MIT

++++++ _service ++++++
--- /var/tmp/diff_new_pack.IrNDUt/_old  2023-05-26 20:15:50.680395414 +0200
+++ /var/tmp/diff_new_pack.IrNDUt/_new  2023-05-26 20:15:50.684395438 +0200
@@ -2,7 +2,7 @@
   <service name="tar_scm" mode="disabled">
     <param name="url">https://github.com/python-jsonschema/referencing</param>
     <param name="scm">git</param>
-    <param name="revision">v0.28.4</param>
+    <param name="revision">v0.28.5</param>
     <param name="versionformat">@PARENT_TAG@</param>
     <param name="changesgenerate">enable</param>
     <param name="versionrewrite-pattern">v(.*)</param>

++++++ _servicedata ++++++
--- /var/tmp/diff_new_pack.IrNDUt/_old  2023-05-26 20:15:50.704395557 +0200
+++ /var/tmp/diff_new_pack.IrNDUt/_new  2023-05-26 20:15:50.708395581 +0200
@@ -1,6 +1,6 @@
 <servicedata>
 <service name="tar_scm">
                 <param 
name="url">https://github.com/python-jsonschema/referencing</param>
-              <param 
name="changesrevision">de0d25830a19539d8b0bb31c8661ad65f80011cc</param></service></servicedata>
+              <param 
name="changesrevision">c22e9213bb9390cfdfef9e06efb987979531a4b7</param></service></servicedata>
 (No newline at EOF)
 

++++++ referencing-0.28.4.tar.gz -> referencing-0.28.5.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/referencing-0.28.4/.git/FETCH_HEAD 
new/referencing-0.28.5/.git/FETCH_HEAD
--- old/referencing-0.28.4/.git/FETCH_HEAD      2023-05-23 22:36:13.000000000 
+0200
+++ new/referencing-0.28.5/.git/FETCH_HEAD      2023-05-24 21:33:11.000000000 
+0200
@@ -1,2 +1,2 @@
-de0d25830a19539d8b0bb31c8661ad65f80011cc       not-for-merge   branch 'main' 
of https://github.com/python-jsonschema/referencing
+fb511b359283c2543b3e6972b849b1c7edae5703       not-for-merge   branch 'main' 
of https://github.com/python-jsonschema/referencing
 29f587735daddcf3fde3318382227e6d1f561e6a       not-for-merge   branch 
'retrieval' of https://github.com/python-jsonschema/referencing
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/referencing-0.28.4/.git/HEAD 
new/referencing-0.28.5/.git/HEAD
--- old/referencing-0.28.4/.git/HEAD    2023-05-23 22:36:13.000000000 +0200
+++ new/referencing-0.28.5/.git/HEAD    2023-05-24 21:33:11.000000000 +0200
@@ -1 +1 @@
-de0d25830a19539d8b0bb31c8661ad65f80011cc
+c22e9213bb9390cfdfef9e06efb987979531a4b7
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/referencing-0.28.4/.git/ORIG_HEAD 
new/referencing-0.28.5/.git/ORIG_HEAD
--- old/referencing-0.28.4/.git/ORIG_HEAD       2023-05-23 22:36:13.000000000 
+0200
+++ new/referencing-0.28.5/.git/ORIG_HEAD       2023-05-24 21:33:11.000000000 
+0200
@@ -1 +1 @@
-10376f502c5ae5f56a4e7e3c46ca06443e81cdc3
+1cbc3eed952d93f32405d602d45c061e122f7dc8
Binary files old/referencing-0.28.4/.git/index and 
new/referencing-0.28.5/.git/index differ
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/referencing-0.28.4/.git/logs/HEAD 
new/referencing-0.28.5/.git/logs/HEAD
--- old/referencing-0.28.4/.git/logs/HEAD       2023-05-23 22:36:13.000000000 
+0200
+++ new/referencing-0.28.5/.git/logs/HEAD       2023-05-24 21:33:11.000000000 
+0200
@@ -20,3 +20,5 @@
 2530bdfb17265bfbb55ce60fa1ffb7666c82ba0f 
381a7310b8b88abc65c46ec3ec905faf0fbd02db Johannes Kastl <ka...@b1-systems.de> 
1684828525 +0200        reset: moving to v0.28.3
 381a7310b8b88abc65c46ec3ec905faf0fbd02db 
10376f502c5ae5f56a4e7e3c46ca06443e81cdc3 Johannes Kastl <ka...@b1-systems.de> 
1684904504 +0200        merge v0.28.4: Merge made by the 'ort' strategy.
 10376f502c5ae5f56a4e7e3c46ca06443e81cdc3 
de0d25830a19539d8b0bb31c8661ad65f80011cc Johannes Kastl <ka...@b1-systems.de> 
1684904505 +0200        reset: moving to v0.28.4
+de0d25830a19539d8b0bb31c8661ad65f80011cc 
1cbc3eed952d93f32405d602d45c061e122f7dc8 Johannes Kastl <ka...@b1-systems.de> 
1684995842 +0200        merge v0.28.5: Merge made by the 'ort' strategy.
+1cbc3eed952d93f32405d602d45c061e122f7dc8 
c22e9213bb9390cfdfef9e06efb987979531a4b7 Johannes Kastl <ka...@b1-systems.de> 
1684995843 +0200        reset: moving to v0.28.5
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/referencing-0.28.4/.git/logs/refs/remotes/origin/main 
new/referencing-0.28.5/.git/logs/refs/remotes/origin/main
--- old/referencing-0.28.4/.git/logs/refs/remotes/origin/main   2023-05-23 
22:36:13.000000000 +0200
+++ new/referencing-0.28.5/.git/logs/refs/remotes/origin/main   2023-05-24 
21:33:11.000000000 +0200
@@ -11,3 +11,4 @@
 9959594fc784107f771ba14e6a675b16dc9c9629 
a22cd842aa769fd06c7d3ad256015fead9e71d10 Johannes Kastl <ka...@b1-systems.de> 
1684396194 +0200        fetch --filter=tree:0 --tags: fast-forward
 a22cd842aa769fd06c7d3ad256015fead9e71d10 
381a7310b8b88abc65c46ec3ec905faf0fbd02db Johannes Kastl <ka...@b1-systems.de> 
1684828523 +0200        fetch --filter=tree:0 --tags: fast-forward
 381a7310b8b88abc65c46ec3ec905faf0fbd02db 
de0d25830a19539d8b0bb31c8661ad65f80011cc Johannes Kastl <ka...@b1-systems.de> 
1684904499 +0200        fetch --filter=tree:0 --tags: fast-forward
+de0d25830a19539d8b0bb31c8661ad65f80011cc 
fb511b359283c2543b3e6972b849b1c7edae5703 Johannes Kastl <ka...@b1-systems.de> 
1684995839 +0200        fetch --filter=tree:0 --tags: fast-forward
Binary files 
old/referencing-0.28.4/.git/objects/1c/bc3eed952d93f32405d602d45c061e122f7dc8 
and 
new/referencing-0.28.5/.git/objects/1c/bc3eed952d93f32405d602d45c061e122f7dc8 
differ
Binary files 
old/referencing-0.28.4/.git/objects/pack/pack-22fa87dc843471b5974e45386c4f700b2e649b6b.idx
 and 
new/referencing-0.28.5/.git/objects/pack/pack-22fa87dc843471b5974e45386c4f700b2e649b6b.idx
 differ
Binary files 
old/referencing-0.28.4/.git/objects/pack/pack-22fa87dc843471b5974e45386c4f700b2e649b6b.pack
 and 
new/referencing-0.28.5/.git/objects/pack/pack-22fa87dc843471b5974e45386c4f700b2e649b6b.pack
 differ
Binary files 
old/referencing-0.28.4/.git/objects/pack/pack-336ff868097ed9c76207c634ae7cfbfa4bd2576b.idx
 and 
new/referencing-0.28.5/.git/objects/pack/pack-336ff868097ed9c76207c634ae7cfbfa4bd2576b.idx
 differ
Binary files 
old/referencing-0.28.4/.git/objects/pack/pack-336ff868097ed9c76207c634ae7cfbfa4bd2576b.pack
 and 
new/referencing-0.28.5/.git/objects/pack/pack-336ff868097ed9c76207c634ae7cfbfa4bd2576b.pack
 differ
Binary files 
old/referencing-0.28.4/.git/objects/pack/pack-8d98480cdf751b95b21f65f6aba2b738b0a73ed6.idx
 and 
new/referencing-0.28.5/.git/objects/pack/pack-8d98480cdf751b95b21f65f6aba2b738b0a73ed6.idx
 differ
Binary files 
old/referencing-0.28.4/.git/objects/pack/pack-8d98480cdf751b95b21f65f6aba2b738b0a73ed6.pack
 and 
new/referencing-0.28.5/.git/objects/pack/pack-8d98480cdf751b95b21f65f6aba2b738b0a73ed6.pack
 differ
Binary files 
old/referencing-0.28.4/.git/objects/pack/pack-ba2d38a2b75a303339c0ce058ae8276dd5385329.idx
 and 
new/referencing-0.28.5/.git/objects/pack/pack-ba2d38a2b75a303339c0ce058ae8276dd5385329.idx
 differ
Binary files 
old/referencing-0.28.4/.git/objects/pack/pack-ba2d38a2b75a303339c0ce058ae8276dd5385329.pack
 and 
new/referencing-0.28.5/.git/objects/pack/pack-ba2d38a2b75a303339c0ce058ae8276dd5385329.pack
 differ
Binary files 
old/referencing-0.28.4/.git/objects/pack/pack-c56997946c8e401e90fe9b6d73c797584406b0e5.idx
 and 
new/referencing-0.28.5/.git/objects/pack/pack-c56997946c8e401e90fe9b6d73c797584406b0e5.idx
 differ
Binary files 
old/referencing-0.28.4/.git/objects/pack/pack-c56997946c8e401e90fe9b6d73c797584406b0e5.pack
 and 
new/referencing-0.28.5/.git/objects/pack/pack-c56997946c8e401e90fe9b6d73c797584406b0e5.pack
 differ
Binary files 
old/referencing-0.28.4/.git/objects/pack/pack-c665bbcba8b18a44b8dad71a1a4a19089640aedc.idx
 and 
new/referencing-0.28.5/.git/objects/pack/pack-c665bbcba8b18a44b8dad71a1a4a19089640aedc.idx
 differ
Binary files 
old/referencing-0.28.4/.git/objects/pack/pack-c665bbcba8b18a44b8dad71a1a4a19089640aedc.pack
 and 
new/referencing-0.28.5/.git/objects/pack/pack-c665bbcba8b18a44b8dad71a1a4a19089640aedc.pack
 differ
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/referencing-0.28.4/.git/refs/remotes/origin/main 
new/referencing-0.28.5/.git/refs/remotes/origin/main
--- old/referencing-0.28.4/.git/refs/remotes/origin/main        2023-05-23 
22:36:13.000000000 +0200
+++ new/referencing-0.28.5/.git/refs/remotes/origin/main        2023-05-24 
21:33:11.000000000 +0200
@@ -1 +1 @@
-de0d25830a19539d8b0bb31c8661ad65f80011cc
+fb511b359283c2543b3e6972b849b1c7edae5703
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/referencing-0.28.4/.git/refs/tags/v0.28.5 
new/referencing-0.28.5/.git/refs/tags/v0.28.5
--- old/referencing-0.28.4/.git/refs/tags/v0.28.5       1970-01-01 
01:00:00.000000000 +0100
+++ new/referencing-0.28.5/.git/refs/tags/v0.28.5       2023-05-24 
21:33:11.000000000 +0200
@@ -0,0 +1 @@
+db0c4628b2184ce4de5ac6956844b5f736fbfb0d
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/referencing-0.28.4/.github/workflows/ci.yml 
new/referencing-0.28.5/.github/workflows/ci.yml
--- old/referencing-0.28.4/.github/workflows/ci.yml     2023-05-23 
22:36:13.000000000 +0200
+++ new/referencing-0.28.5/.github/workflows/ci.yml     2023-05-24 
21:33:11.000000000 +0200
@@ -47,6 +47,10 @@
       fail-fast: false
       matrix:
         noxenv: ${{ fromJson(needs.list.outputs.noxenvs) }}
+        include:
+          - os: ubuntu-latest
+            noxenv: "tests-3.11"
+            posargs: ghcoverage
 
     steps:
       - uses: actions/checkout@v3
@@ -65,7 +69,7 @@
       - name: Set up nox
         uses: wntrblm/nox@2023.04.22
       - name: Run nox
-        run: nox -s "${{ matrix.noxenv }}"
+        run: nox -s "${{ matrix.noxenv }}" -- ${{ matrix.posargs }}
 
   packaging:
     needs: ci
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/referencing-0.28.4/noxfile.py 
new/referencing-0.28.5/noxfile.py
--- old/referencing-0.28.4/noxfile.py   2023-05-23 22:36:13.000000000 +0200
+++ new/referencing-0.28.5/noxfile.py   2023-05-24 21:33:11.000000000 +0200
@@ -23,14 +23,21 @@
 @session(python=["3.8", "3.9", "3.10", "3.11", "pypy3"])
 def tests(session):
     session.install("-r", ROOT / "test-requirements.txt")
-    if session.posargs == ["coverage"]:
+
+    if session.posargs and session.posargs[0] in {"coverage", "ghcoverage"}:
         session.install("coverage[toml]")
-        session.run("coverage", "run", "-m", "pytest")
+        session.run("coverage", "run", "-m", "pytest", REFERENCING)
         session.run("coverage", "report")
     else:
         session.run("pytest", *session.posargs, REFERENCING)
 
 
+@session()
+def audit(session):
+    session.install("pip-audit", ROOT)
+    session.run("python", "-m", "pip_audit")
+
+
 @session(tags=["build"])
 def build(session):
     session.install("build")
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/referencing-0.28.4/pyproject.toml 
new/referencing-0.28.5/pyproject.toml
--- old/referencing-0.28.4/pyproject.toml       2023-05-23 22:36:13.000000000 
+0200
+++ new/referencing-0.28.5/pyproject.toml       2023-05-24 21:33:11.000000000 
+0200
@@ -44,13 +44,23 @@
 Funding = "https://github.com/sponsors/Julian";
 Source = "https://github.com/python-jsonschema/referencing";
 
+[tool.coverage.html]
+show_contexts = true
+skip_covered = false
+
 [tool.coverage.run]
 branch = true
 source = ["referencing"]
 dynamic_context = "test_function"
 
 [tool.coverage.report]
+exclude_also = [
+  "if TYPE_CHECKING:",
+  "\\s*\\.\\.\\.\\s*",
+]
 fail_under = 100
+show_missing = true
+skip_covered = true
 
 [tool.doc8]
 ignore = [
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/referencing-0.28.4/referencing/_core.py 
new/referencing-0.28.5/referencing/_core.py
--- old/referencing-0.28.4/referencing/_core.py 2023-05-23 22:36:13.000000000 
+0200
+++ new/referencing-0.28.5/referencing/_core.py 2023-05-24 21:33:11.000000000 
+0200
@@ -374,21 +374,20 @@
         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)
+        resource = self[uri]
+        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,
-                resource=self[uri],
+                resource=resource,
                 anchor=name,
             )
-        raise exceptions.NoSuchAnchor(ref=uri, resource=self[uri], anchor=name)
+        raise exceptions.NoSuchAnchor(ref=uri, resource=resource, anchor=name)
 
     def contents(self, uri: URI) -> D:
         """
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/referencing-0.28.4/referencing/jsonschema.py 
new/referencing-0.28.5/referencing/jsonschema.py
--- old/referencing-0.28.4/referencing/jsonschema.py    2023-05-23 
22:36:13.000000000 +0200
+++ new/referencing-0.28.5/referencing/jsonschema.py    2023-05-24 
21:33:11.000000000 +0200
@@ -233,9 +233,7 @@
     Specifically handle even older drafts where there are some funky keywords.
     """
 
-    def subresources_of(contents: Schema) -> Iterable[ObjectSchema]:
-        if isinstance(contents, bool):
-            return
+    def subresources_of(contents: ObjectSchema) -> Iterable[ObjectSchema]:
         for each in in_value:
             if each in contents:
                 yield contents[each]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/referencing-0.28.4/referencing/tests/test_core.py 
new/referencing-0.28.5/referencing/tests/test_core.py
--- old/referencing-0.28.4/referencing/tests/test_core.py       2023-05-23 
22:36:13.000000000 +0200
+++ new/referencing-0.28.5/referencing/tests/test_core.py       2023-05-24 
21:33:11.000000000 +0200
@@ -24,6 +24,13 @@
 )
 
 
+def blow_up(uri):  # pragma: no cover
+    """
+    A retriever suitable for use in tests which expect it never to be used.
+    """
+    raise RuntimeError("This retrieve function expects to never be called!")
+
+
 class TestRegistry:
     def test_with_resource(self):
         """
@@ -181,6 +188,12 @@
         )
         assert retrieved.registry == registry.crawl()
 
+    def test_anchor_in_nonexistent_resource(self):
+        registry = Registry()
+        with pytest.raises(exceptions.NoSuchResource) as e:
+            registry.anchor("urn:example", "foo")
+        assert e.value == exceptions.NoSuchResource(ref="urn:example")
+
     def test_init(self):
         one = Resource.opaque(contents={})
         two = ID_AND_CHILDREN.create_resource({"foo": "bar"})
@@ -311,7 +324,7 @@
         two = ID_AND_CHILDREN.create_resource({"foo": "bar"})
         three = ID_AND_CHILDREN.create_resource({"baz": "quux"})
 
-        def retrieve(uri):
+        def retrieve(uri):  # pragma: no cover
             pass
 
         first = Registry().with_resource("http://example.com/1";, one)
@@ -344,7 +357,7 @@
         two = ID_AND_CHILDREN.create_resource({"foo": "bar"})
         three = ID_AND_CHILDREN.create_resource({"baz": "quux"})
 
-        def retrieve(uri):
+        def retrieve(uri):  #  pragma: no cover
             pass
 
         first = Registry(retrieve=retrieve).with_resource(
@@ -383,10 +396,10 @@
         two = ID_AND_CHILDREN.create_resource({"foo": "bar"})
         three = ID_AND_CHILDREN.create_resource({"baz": "quux"})
 
-        def foo_retrieve(uri):
+        def foo_retrieve(uri):  # pragma: no cover
             pass
 
-        def bar_retrieve(uri):
+        def bar_retrieve(uri):  # pragma: no cover
             pass
 
         first = Registry(retrieve=foo_retrieve).with_resource(
@@ -484,21 +497,15 @@
             registry.get_or_retrieve("urn:uhoh")
 
     def test_retrieve_already_available_resource(self):
-        def retrieve(uri):
-            raise Exception("Oh no!")
-
         foo = Resource.opaque({"foo": "bar"})
-        registry = Registry({"urn:example": foo})
+        registry = Registry({"urn:example": foo}, retrieve=blow_up)
         assert registry["urn:example"] == foo
         assert registry.get_or_retrieve("urn:example").value == foo
 
     def test_retrieve_first_checks_crawlable_resource(self):
-        def retrieve(uri):
-            raise Exception("Oh no!")
-
         child = ID_AND_CHILDREN.create_resource({"ID": "urn:child", "foo": 12})
         root = ID_AND_CHILDREN.create_resource({"children": [child.contents]})
-        registry = Registry(retrieve=retrieve).with_resource("urn:root", root)
+        registry = Registry(retrieve=blow_up).with_resource("urn:root", root)
         assert registry.crawl()["urn:child"] == child
 
     def test_resolver(self):
@@ -759,6 +766,7 @@
         ref = "urn:example#noSuchAnchor"
         with pytest.raises(exceptions.Unresolvable) as e:
             resolver.lookup(ref)
+        assert "'noSuchAnchor' does not exist" in str(e.value)
         assert e.value == exceptions.NoSuchAnchor(
             ref="urn:example",
             resource=root,
@@ -788,6 +796,21 @@
         resolved = resolver.lookup("http://example.com/";)
         assert resolved.contents == resource.contents
 
+    def test_lookup_failed_retrieved_resource(self):
+        """
+        Unretrievable exceptions are also wrapped in Unresolvable.
+        """
+
+        uri = "http://example.com/";
+
+        registry = Registry(retrieve=blow_up)
+        with pytest.raises(exceptions.Unretrievable):
+            registry.get_or_retrieve(uri)
+
+        resolver = registry.resolver()
+        with pytest.raises(exceptions.Unresolvable):
+            resolver.lookup(uri)
+
     def test_repeated_lookup_from_retrieved_resource(self):
         """
         A (custom-)retrieved resource is added to the registry returned by
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/referencing-0.28.4/referencing/tests/test_exceptions.py 
new/referencing-0.28.5/referencing/tests/test_exceptions.py
--- old/referencing-0.28.4/referencing/tests/test_exceptions.py 1970-01-01 
01:00:00.000000000 +0100
+++ new/referencing-0.28.5/referencing/tests/test_exceptions.py 2023-05-24 
21:33:11.000000000 +0200
@@ -0,0 +1,21 @@
+import itertools
+
+import pytest
+
+from referencing import Resource, exceptions
+
+
+def pairs(*choices):
+    return itertools.combinations(choices, 2)
+
+
+@pytest.mark.parametrize(
+    "one, two",
+    pairs(
+        exceptions.NoSuchResource("urn:example:foo"),
+        exceptions.NoInternalID(Resource.opaque({})),
+        exceptions.Unresolvable("urn:example:foo"),
+    ),
+)
+def test_eq_incompatible_types(one, two):
+    assert one != two
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/referencing-0.28.4/referencing/tests/test_jsonschema.py 
new/referencing-0.28.5/referencing/tests/test_jsonschema.py
--- old/referencing-0.28.4/referencing/tests/test_jsonschema.py 2023-05-23 
22:36:13.000000000 +0200
+++ new/referencing-0.28.5/referencing/tests/test_jsonschema.py 2023-05-24 
21:33:11.000000000 +0200
@@ -181,7 +181,109 @@
     assert specification is Specification.OPAQUE
 
 
-# FIXME: These two also ideally should live in the referencing suite.
+# FIXME: The tests below should move to the referencing suite but I haven't yet
+#        figured out how to represent dynamic (& recursive) ref lookups in it.
+def test_lookup_trivial_dynamic_ref():
+    one = referencing.jsonschema.DRAFT202012.create_resource(
+        {"$dynamicAnchor": "foo"},
+    )
+    resolver = Registry().with_resource("http://example.com";, one).resolver()
+    resolved = resolver.lookup("http://example.com#foo";)
+    assert resolved.contents == one.contents
+
+
+def test_multiple_lookup_trivial_dynamic_ref():
+    TRUE = referencing.jsonschema.DRAFT202012.create_resource(True)
+    root = referencing.jsonschema.DRAFT202012.create_resource(
+        {
+            "$id": "http://example.com";,
+            "$dynamicAnchor": "fooAnchor",
+            "$defs": {
+                "foo": {
+                    "$id": "foo",
+                    "$dynamicAnchor": "fooAnchor",
+                    "$defs": {
+                        "bar": True,
+                        "baz": {
+                            "$dynamicAnchor": "fooAnchor",
+                        },
+                    },
+                },
+            },
+        },
+    )
+    resolver = (
+        Registry()
+        .with_resources(
+            [
+                ("http://example.com";, root),
+                ("http://example.com/foo/";, TRUE),
+                ("http://example.com/foo/bar";, root),
+            ],
+        )
+        .resolver()
+    )
+
+    first = resolver.lookup("http://example.com";)
+    second = first.resolver.lookup("foo/")
+    resolver = second.resolver.lookup("bar").resolver
+    fourth = resolver.lookup("#fooAnchor")
+    assert fourth.contents == root.contents
+
+
+def test_multiple_lookup_dynamic_ref_to_nondynamic_ref():
+    one = referencing.jsonschema.DRAFT202012.create_resource(
+        {"$anchor": "fooAnchor"},
+    )
+    two = referencing.jsonschema.DRAFT202012.create_resource(
+        {
+            "$id": "http://example.com";,
+            "$dynamicAnchor": "fooAnchor",
+            "$defs": {
+                "foo": {
+                    "$id": "foo",
+                    "$dynamicAnchor": "fooAnchor",
+                    "$defs": {
+                        "bar": True,
+                        "baz": {
+                            "$dynamicAnchor": "fooAnchor",
+                        },
+                    },
+                },
+            },
+        },
+    )
+    resolver = (
+        Registry()
+        .with_resources(
+            [
+                ("http://example.com";, two),
+                ("http://example.com/foo/";, one),
+                ("http://example.com/foo/bar";, two),
+            ],
+        )
+        .resolver()
+    )
+
+    first = resolver.lookup("http://example.com";)
+    second = first.resolver.lookup("foo/")
+    resolver = second.resolver.lookup("bar").resolver
+    fourth = resolver.lookup("#fooAnchor")
+    assert fourth.contents == two.contents
+
+
+def test_lookup_trivial_recursive_ref():
+    one = referencing.jsonschema.DRAFT201909.create_resource(
+        {"$recursiveAnchor": True},
+    )
+    resolver = Registry().with_resource("http://example.com";, one).resolver()
+    first = resolver.lookup("http://example.com";)
+    resolved = referencing.jsonschema.lookup_recursive_ref(
+        resolver=first.resolver,
+    )
+    assert resolved.contents == one.contents
+
+
 def test_lookup_recursive_ref_to_bool():
     TRUE = referencing.jsonschema.DRAFT201909.create_resource(True)
     registry = Registry({"http://example.com": TRUE})
@@ -229,3 +331,48 @@
     resolver = second.resolver.lookup("bar").resolver
     fourth = referencing.jsonschema.lookup_recursive_ref(resolver=resolver)
     assert fourth.contents == root.contents
+
+
+def test_multiple_lookup_recursive_ref_with_nonrecursive_ref():
+    one = referencing.jsonschema.DRAFT201909.create_resource(
+        {"$recursiveAnchor": True},
+    )
+    two = referencing.jsonschema.DRAFT201909.create_resource(
+        {
+            "$id": "http://example.com";,
+            "$recursiveAnchor": True,
+            "$defs": {
+                "foo": {
+                    "$id": "foo",
+                    "$recursiveAnchor": True,
+                    "$defs": {
+                        "bar": True,
+                        "baz": {
+                            "$recursiveAnchor": True,
+                            "$anchor": "fooAnchor",
+                        },
+                    },
+                },
+            },
+        },
+    )
+    three = referencing.jsonschema.DRAFT201909.create_resource(
+        {"$recursiveAnchor": False},
+    )
+    resolver = (
+        Registry()
+        .with_resources(
+            [
+                ("http://example.com";, three),
+                ("http://example.com/foo/";, two),
+                ("http://example.com/foo/bar";, one),
+            ],
+        )
+        .resolver()
+    )
+
+    first = resolver.lookup("http://example.com";)
+    second = first.resolver.lookup("foo/")
+    resolver = second.resolver.lookup("bar").resolver
+    fourth = referencing.jsonschema.lookup_recursive_ref(resolver=resolver)
+    assert fourth.contents == two.contents
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/referencing-0.28.4/referencing/tests/test_referencing_suite.py 
new/referencing-0.28.5/referencing/tests/test_referencing_suite.py
--- old/referencing-0.28.4/referencing/tests/test_referencing_suite.py  
2023-05-23 22:36:13.000000000 +0200
+++ new/referencing-0.28.5/referencing/tests/test_referencing_suite.py  
2023-05-24 21:33:11.000000000 +0200
@@ -10,7 +10,7 @@
 
 
 class SuiteNotFound(Exception):
-    def __str__(self):
+    def __str__(self):  # pragma: no cover
         return (
             "Cannot find the referencing suite. "
             "Set the REFERENCING_SUITE environment variable to the path to "
@@ -19,11 +19,11 @@
         )
 
 
-if "REFERENCING_SUITE" in os.environ:
+if "REFERENCING_SUITE" in os.environ:  # pragma: no cover
     SUITE = Path(os.environ["REFERENCING_SUITE"]) / "tests"
 else:
     SUITE = Path(__file__).parent.parent.parent / "suite/tests"
-if not SUITE.is_dir():
+if not SUITE.is_dir():  # pragma: no cover
     raise SuiteNotFound()
 DIALECT_IDS = json.loads(SUITE.joinpath("specifications.json").read_text())
 
@@ -56,7 +56,7 @@
                 assert resolved.contents == test["target"]
 
                 then = test.get("then")
-                while then:
+                while then:  # pragma: no cover
                     with subtests.test(test=test, then=then):
                         resolved = resolved.resolver.lookup(then["ref"])
                         assert resolved.contents == then["target"]

Reply via email to