From c8629add6ce022a8a9f6773163d36aaf890c4304 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 17 Feb 2025 05:05:49 +0000 Subject: [PATCH 01/12] build(deps-dev): bump ruff from 0.9.2 to 0.9.6 Bumps [ruff](https://github.com/astral-sh/ruff) from 0.9.2 to 0.9.6. - [Release notes](https://github.com/astral-sh/ruff/releases) - [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md) - [Commits](https://github.com/astral-sh/ruff/compare/0.9.2...0.9.6) --- updated-dependencies: - dependency-name: ruff dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- poetry.lock | 38 +++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/poetry.lock b/poetry.lock index cb90926f6..da3e424b1 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1187,29 +1187,29 @@ use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] [[package]] name = "ruff" -version = "0.9.2" +version = "0.9.6" description = "An extremely fast Python linter and code formatter, written in Rust." optional = false python-versions = ">=3.7" files = [ - {file = "ruff-0.9.2-py3-none-linux_armv6l.whl", hash = "sha256:80605a039ba1454d002b32139e4970becf84b5fee3a3c3bf1c2af6f61a784347"}, - {file = "ruff-0.9.2-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:b9aab82bb20afd5f596527045c01e6ae25a718ff1784cb92947bff1f83068b00"}, - {file = "ruff-0.9.2-py3-none-macosx_11_0_arm64.whl", hash = "sha256:fbd337bac1cfa96be615f6efcd4bc4d077edbc127ef30e2b8ba2a27e18c054d4"}, - {file = "ruff-0.9.2-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:82b35259b0cbf8daa22a498018e300b9bb0174c2bbb7bcba593935158a78054d"}, - {file = "ruff-0.9.2-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8b6a9701d1e371bf41dca22015c3f89769da7576884d2add7317ec1ec8cb9c3c"}, - {file = "ruff-0.9.2-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9cc53e68b3c5ae41e8faf83a3b89f4a5d7b2cb666dff4b366bb86ed2a85b481f"}, - {file = "ruff-0.9.2-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:8efd9da7a1ee314b910da155ca7e8953094a7c10d0c0a39bfde3fcfd2a015684"}, - {file = "ruff-0.9.2-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3292c5a22ea9a5f9a185e2d131dc7f98f8534a32fb6d2ee7b9944569239c648d"}, - {file = "ruff-0.9.2-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1a605fdcf6e8b2d39f9436d343d1f0ff70c365a1e681546de0104bef81ce88df"}, - {file = "ruff-0.9.2-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c547f7f256aa366834829a08375c297fa63386cbe5f1459efaf174086b564247"}, - {file = "ruff-0.9.2-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:d18bba3d3353ed916e882521bc3e0af403949dbada344c20c16ea78f47af965e"}, - {file = "ruff-0.9.2-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:b338edc4610142355ccf6b87bd356729b62bf1bc152a2fad5b0c7dc04af77bfe"}, - {file = "ruff-0.9.2-py3-none-musllinux_1_2_i686.whl", hash = "sha256:492a5e44ad9b22a0ea98cf72e40305cbdaf27fac0d927f8bc9e1df316dcc96eb"}, - {file = "ruff-0.9.2-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:af1e9e9fe7b1f767264d26b1075ac4ad831c7db976911fa362d09b2d0356426a"}, - {file = "ruff-0.9.2-py3-none-win32.whl", hash = "sha256:71cbe22e178c5da20e1514e1e01029c73dc09288a8028a5d3446e6bba87a5145"}, - {file = "ruff-0.9.2-py3-none-win_amd64.whl", hash = "sha256:c5e1d6abc798419cf46eed03f54f2e0c3adb1ad4b801119dedf23fcaf69b55b5"}, - {file = "ruff-0.9.2-py3-none-win_arm64.whl", hash = "sha256:a1b63fa24149918f8b37cef2ee6fff81f24f0d74b6f0bdc37bc3e1f2143e41c6"}, - {file = "ruff-0.9.2.tar.gz", hash = "sha256:b5eceb334d55fae5f316f783437392642ae18e16dcf4f1858d55d3c2a0f8f5d0"}, + {file = "ruff-0.9.6-py3-none-linux_armv6l.whl", hash = "sha256:2f218f356dd2d995839f1941322ff021c72a492c470f0b26a34f844c29cdf5ba"}, + {file = "ruff-0.9.6-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:b908ff4df65dad7b251c9968a2e4560836d8f5487c2f0cc238321ed951ea0504"}, + {file = "ruff-0.9.6-py3-none-macosx_11_0_arm64.whl", hash = "sha256:b109c0ad2ececf42e75fa99dc4043ff72a357436bb171900714a9ea581ddef83"}, + {file = "ruff-0.9.6-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1de4367cca3dac99bcbd15c161404e849bb0bfd543664db39232648dc00112dc"}, + {file = "ruff-0.9.6-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ac3ee4d7c2c92ddfdaedf0bf31b2b176fa7aa8950efc454628d477394d35638b"}, + {file = "ruff-0.9.6-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5dc1edd1775270e6aa2386119aea692039781429f0be1e0949ea5884e011aa8e"}, + {file = "ruff-0.9.6-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:4a091729086dffa4bd070aa5dab7e39cc6b9d62eb2bef8f3d91172d30d599666"}, + {file = "ruff-0.9.6-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d1bbc6808bf7b15796cef0815e1dfb796fbd383e7dbd4334709642649625e7c5"}, + {file = "ruff-0.9.6-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:589d1d9f25b5754ff230dce914a174a7c951a85a4e9270613a2b74231fdac2f5"}, + {file = "ruff-0.9.6-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dc61dd5131742e21103fbbdcad683a8813be0e3c204472d520d9a5021ca8b217"}, + {file = "ruff-0.9.6-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:5e2d9126161d0357e5c8f30b0bd6168d2c3872372f14481136d13de9937f79b6"}, + {file = "ruff-0.9.6-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:68660eab1a8e65babb5229a1f97b46e3120923757a68b5413d8561f8a85d4897"}, + {file = "ruff-0.9.6-py3-none-musllinux_1_2_i686.whl", hash = "sha256:c4cae6c4cc7b9b4017c71114115db0445b00a16de3bcde0946273e8392856f08"}, + {file = "ruff-0.9.6-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:19f505b643228b417c1111a2a536424ddde0db4ef9023b9e04a46ed8a1cb4656"}, + {file = "ruff-0.9.6-py3-none-win32.whl", hash = "sha256:194d8402bceef1b31164909540a597e0d913c0e4952015a5b40e28c146121b5d"}, + {file = "ruff-0.9.6-py3-none-win_amd64.whl", hash = "sha256:03482d5c09d90d4ee3f40d97578423698ad895c87314c4de39ed2af945633caa"}, + {file = "ruff-0.9.6-py3-none-win_arm64.whl", hash = "sha256:0e2bb706a2be7ddfea4a4af918562fdc1bcb16df255e5fa595bbd800ce322a5a"}, + {file = "ruff-0.9.6.tar.gz", hash = "sha256:81761592f72b620ec8fa1068a6fd00e98a5ebee342a3642efd84454f3031dca9"}, ] [[package]] From d5068fe8e6679f2c7dbd2749af1a19f83c6568ed Mon Sep 17 00:00:00 2001 From: Nicholas Car Date: Sat, 22 Mar 2025 12:40:16 +1000 Subject: [PATCH 02/12] add readthedocs sphynx.configuration --- .readthedocs.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/.readthedocs.yaml b/.readthedocs.yaml index f737b9b00..d847956c1 100644 --- a/.readthedocs.yaml +++ b/.readthedocs.yaml @@ -27,4 +27,5 @@ build: - python -c "from rdflib import Graph; print(Graph)" sphinx: + configuration: docs/conf.py fail_on_warning: true From 9dac1d43dad373d98e5adcdfaea2977a9d1ead92 Mon Sep 17 00:00:00 2001 From: Nicholas Car Date: Sat, 22 Mar 2025 22:44:35 +1000 Subject: [PATCH 03/12] replace ConjunctiveGraph() with Dataset() in tests --- test/test_graph/test_graph_formula.py | 6 +-- test/test_n3.py | 26 +++++----- test/test_parsers/test_empty_xml_base.py | 6 +-- test/test_parsers/test_nquads.py | 51 ++++++++++--------- test/test_parsers/test_parser_hext.py | 2 +- test/test_parsers/test_trix_parse.py | 10 ++-- test/test_serializers/test_finalnewline.py | 2 +- test/test_serializers/test_serializer_hext.py | 2 +- test/test_serializers/test_serializer_trix.py | 12 ++--- test/test_serializers/test_serializer_xml.py | 18 +++---- test/test_sparql/test_sparql.py | 10 ++-- test/test_trig.py | 24 ++++----- test/test_turtle_quoting.py | 4 +- 13 files changed, 87 insertions(+), 86 deletions(-) diff --git a/test/test_graph/test_graph_formula.py b/test/test_graph/test_graph_formula.py index 0f77dc294..eebc8385a 100644 --- a/test/test_graph/test_graph_formula.py +++ b/test/test_graph/test_graph_formula.py @@ -4,7 +4,7 @@ import pytest from rdflib import RDF, RDFS, BNode, URIRef, Variable, plugin -from rdflib.graph import ConjunctiveGraph, QuotedGraph +from rdflib.graph import Dataset, QuotedGraph implies = URIRef("http://www.w3.org/2000/10/swap/log#implies") testN3 = """ @@ -21,7 +21,7 @@ def checkFormulaStore(store="default", configString=None): # noqa: N802, N803 try: - g = ConjunctiveGraph(store=store) + g = Dataset(store=store) except ImportError: pytest.skip("Dependencies for store '%s' not available!" % store) @@ -48,7 +48,7 @@ def checkFormulaStore(store="default", configString=None): # noqa: N802, N803 d = URIRef("http://test/d") v = Variable("y") - universe = ConjunctiveGraph(g.store) + universe = Dataset(g.store) # test formula as terms assert len(list(universe.triples((formulaA, implies, formulaB)))) == 1 diff --git a/test/test_n3.py b/test/test_n3.py index f3d7eeb07..d2c362a39 100644 --- a/test/test_n3.py +++ b/test/test_n3.py @@ -4,7 +4,7 @@ import pytest -from rdflib.graph import ConjunctiveGraph, Graph +from rdflib.graph import Dataset, Graph from rdflib.plugins.parsers.notation3 import BadSyntax, exponent_syntax from rdflib.term import Literal, URIRef from test import TEST_DIR @@ -44,7 +44,7 @@ n3:predicate :p; n3:object :y ] a log:Truth}. -# Needs more thought ... ideally, we have the implcit AND rules of +# Needs more thought ... ideally, we have the implicit AND rules of # juxtaposition (introduction and elimination) { @@ -125,9 +125,9 @@ def test_base_serialize(self): ) s = g.serialize(base="http://example.com/", format="n3", encoding="latin-1") assert b"" in s - g2 = ConjunctiveGraph() - g2.parse(data=s, publicID="http://example.com/", format="n3") - assert list(g) == list(g2) + g2 = Dataset() + g2.parse(data=s, format="n3") + assert list(g) == list(g2.triples((None, None, None))) def test_issue23(self): input = """ "this word is in \\u201Cquotes\\u201D".""" @@ -195,24 +195,24 @@ def test_dot_in_prefix(self): ) def test_model(self): - g = ConjunctiveGraph() + g = Dataset() g.parse(data=test_data, format="n3") i = 0 - for s, p, o in g: + for s, p, o, c in g: if isinstance(s, Graph): i += 1 assert i == 3 - assert len(list(g.contexts())) == 13 + assert len(list(g.graphs())) == 13 g.close() def test_quoted_serialization(self): - g = ConjunctiveGraph() + g = Dataset() g.parse(data=test_data, format="n3") g.serialize(format="n3") def test_parse(self): - g = ConjunctiveGraph() + g = Dataset() try: g.parse( "http://groups.csail.mit.edu/dig/2005/09/rein/examples/troop42-policy.n3", @@ -229,14 +229,14 @@ def test_single_quoted_literals(self): for data in test_data: # N3 doesn't accept single quotes around string literals - g = ConjunctiveGraph() + g = Dataset() with pytest.raises(BadSyntax): g.parse(data=data, format="n3") - g = ConjunctiveGraph() + g = Dataset() g.parse(data=data, format="turtle") assert len(g) == 1 - for _, _, o in g: + for _, _, o, c in g: assert o == Literal("o") def test_empty_prefix(self): diff --git a/test/test_parsers/test_empty_xml_base.py b/test/test_parsers/test_empty_xml_base.py index 0f3f18694..0225c4c63 100644 --- a/test/test_parsers/test_empty_xml_base.py +++ b/test/test_parsers/test_empty_xml_base.py @@ -5,7 +5,7 @@ and RDF/XML dependence on it """ -from rdflib.graph import ConjunctiveGraph +from rdflib.graph import Dataset from rdflib.namespace import FOAF, RDF from rdflib.term import URIRef @@ -36,7 +36,7 @@ class TestEmptyBase: def test_empty_base_ref(self): - self.graph = ConjunctiveGraph() + self.graph = Dataset() self.graph.parse(data=test_data, publicID=baseUri, format="xml") assert ( len(list(self.graph)) > 0 @@ -50,7 +50,7 @@ def test_empty_base_ref(self): class TestRelativeBase: def test_relative_base_ref(self): - self.graph = ConjunctiveGraph() + self.graph = Dataset() self.graph.parse(data=test_data2, publicID=baseUri2, format="xml") assert ( len(self.graph) > 0 diff --git a/test/test_parsers/test_nquads.py b/test/test_parsers/test_nquads.py index ad17b5aee..01f46bd28 100644 --- a/test/test_parsers/test_nquads.py +++ b/test/test_parsers/test_nquads.py @@ -1,6 +1,7 @@ import os -from rdflib import ConjunctiveGraph, Namespace, URIRef +from rdflib import Dataset, Namespace, URIRef, Literal +from rdflib.namespace import FOAF from test.data import TEST_DATA_DIR TEST_BASE = os.path.join(TEST_DATA_DIR, "nquads.rdflib") @@ -8,7 +9,7 @@ class TestNQuadsParser: def _load_example(self): - g = ConjunctiveGraph() + g = Dataset() nq_path = os.path.relpath( os.path.join(TEST_DATA_DIR, "nquads.rdflib/example.nquads"), os.curdir ) @@ -21,9 +22,9 @@ def test_01_simple_open(self): assert len(g.store) == 449 def test_02_contexts(self): - # There should be 16 separate contexts + # There should be 17 separate contexts - 16 Named + default g = self._load_example() - assert len([x for x in g.store.contexts()]) == 16 + assert len([x for x in g.store.contexts()]) == 17 def test_03_get_value(self): # is the name of entity E10009 "Arco Publications"? @@ -36,11 +37,11 @@ def test_03_get_value(self): g = self._load_example() s = URIRef("http://bibliographica.org/entity/E10009") - FOAF = Namespace("http://xmlns.com/foaf/0.1/") # noqa: N806 - assert g.value(s, FOAF.name).eq("Arco Publications") + for s, p, o, c in list(g.quads((s, FOAF.name, None, None))): + assert o == Literal("Arco Publications") def test_context_is_optional(self): - g = ConjunctiveGraph() + g = Dataset() nq_path = os.path.relpath( os.path.join(TEST_DATA_DIR, "nquads.rdflib/test6.nq"), os.curdir ) @@ -49,7 +50,7 @@ def test_context_is_optional(self): assert len(g) > 0 def test_serialize(self): - g = ConjunctiveGraph() + g = Dataset() uri1 = URIRef("http://example.org/mygraph1") uri2 = URIRef("http://example.org/mygraph2") @@ -63,7 +64,7 @@ def test_serialize(self): s = g.serialize(format="nquads", encoding="utf-8") assert len([x for x in s.split(b"\n") if x.strip()]) == 2 - g2 = ConjunctiveGraph() + g2 = Dataset() g2.parse(data=s, format="nquads") assert len(g) == len(g2) @@ -89,8 +90,8 @@ def teardown_method(self, method): def test_parse_shared_bnode_context(self): bnode_ctx = dict() - g = ConjunctiveGraph() - h = ConjunctiveGraph() + g = Dataset() + h = Dataset() g.parse(self.data, format="nquads", bnode_context=bnode_ctx) self.data.seek(0) h.parse(self.data, format="nquads", bnode_context=bnode_ctx) @@ -98,7 +99,7 @@ def test_parse_shared_bnode_context(self): def test_parse_shared_bnode_context_same_graph(self): bnode_ctx = dict() - g = ConjunctiveGraph() + g = Dataset() g.parse(self.data_obnodes, format="nquads", bnode_context=bnode_ctx) o1 = set(g.objects()) self.data_obnodes.seek(0) @@ -107,27 +108,27 @@ def test_parse_shared_bnode_context_same_graph(self): assert o1 == o2 def test_parse_distinct_bnode_context(self): - g = ConjunctiveGraph() + g = Dataset() g.parse(self.data, format="nquads", bnode_context=dict()) - s1 = set(g.subjects()) + s1 = set([x for x, p, o, c in list(g.quads((None, None, None, None)))]) self.data.seek(0) g.parse(self.data, format="nquads", bnode_context=dict()) - s2 = set(g.subjects()) + s2 = set([x for x, p, o, c in list(g.quads((None, None, None, None)))]) assert set() != (s2 - s1) def test_parse_distinct_bnode_contexts_between_graphs(self): - g = ConjunctiveGraph() - h = ConjunctiveGraph() + g = Dataset() + h = Dataset() g.parse(self.data, format="nquads") - s1 = set(g.subjects()) + s1 = sorted(set([x for x, p, o, c in list(g.quads((None, None, None, None)))])) self.data.seek(0) h.parse(self.data, format="nquads") - s2 = set(h.subjects()) + s2 = sorted(set([x for x, p, o, c in list(h.quads((None, None, None, None)))])) assert s1 != s2 def test_parse_distinct_bnode_contexts_named_graphs(self): - g = ConjunctiveGraph() - h = ConjunctiveGraph() + g = Dataset() + h = Dataset() g.parse(self.data, format="nquads") self.data.seek(0) h.parse(self.data, format="nquads") @@ -135,9 +136,9 @@ def test_parse_distinct_bnode_contexts_named_graphs(self): def test_parse_shared_bnode_contexts_named_graphs(self): bnode_ctx = dict() - g = ConjunctiveGraph() - h = ConjunctiveGraph() - g.parse(self.data, format="nquads", bnode_context=bnode_ctx) + g = Dataset() + h = Dataset() + g.parse(TEST_DATA_DIR / "nquads.rdflib/bnode_context.nquads", format="nquads", bnode_context=bnode_ctx) self.data.seek(0) - h.parse(self.data, format="nquads", bnode_context=bnode_ctx) + h.parse(TEST_DATA_DIR / "nquads.rdflib/bnode_context.nquads", format="nquads", bnode_context=bnode_ctx) assert set(h.contexts()) == set(g.contexts()) diff --git a/test/test_parsers/test_parser_hext.py b/test/test_parsers/test_parser_hext.py index c71bd1a49..c73e7481c 100644 --- a/test/test_parsers/test_parser_hext.py +++ b/test/test_parsers/test_parser_hext.py @@ -140,7 +140,7 @@ def test_small_file_multigraph(): def test_small_file_multigraph_cg(): - d = ConjunctiveGraph() + d = Dataset() assert len(d) == 0 d.parse( Path(__file__).parent.parent / "data/test_parser_hext_multigraph.ndjson", diff --git a/test/test_parsers/test_trix_parse.py b/test/test_parsers/test_trix_parse.py index e6f2ae91b..e48cf9b07 100644 --- a/test/test_parsers/test_trix_parse.py +++ b/test/test_parsers/test_trix_parse.py @@ -1,6 +1,6 @@ import os -from rdflib.graph import ConjunctiveGraph +from rdflib.graph import Dataset from test.data import TEST_DATA_DIR @@ -12,7 +12,7 @@ def teardown_method(self): pass def testAperture(self): # noqa: N802 - g = ConjunctiveGraph() + g = Dataset() trix_path = os.path.relpath( os.path.join(TEST_DATA_DIR, "suites", "trix/trix-aperture.trix"), os.curdir @@ -24,12 +24,12 @@ def testAperture(self): # noqa: N802 t = sum(map(len, g.contexts())) assert t == 24 - assert len(c) == 4 + assert len(c) == 5 # print "Parsed %d triples"%t def testSpec(self): # noqa: N802 - g = ConjunctiveGraph() + g = Dataset() trix_path = os.path.relpath( os.path.join(TEST_DATA_DIR, "suites", "trix/trix-nokia-example.trix"), @@ -40,7 +40,7 @@ def testSpec(self): # noqa: N802 # print "Parsed %d triples"%len(g) def testNG4j(self): # noqa: N802 - g = ConjunctiveGraph() + g = Dataset() trix_path = os.path.relpath( os.path.join(TEST_DATA_DIR, "suites", "trix/trix-ng4j-test-01.trix"), diff --git a/test/test_serializers/test_finalnewline.py b/test/test_serializers/test_finalnewline.py index bc5451397..bfdbc023b 100644 --- a/test/test_serializers/test_finalnewline.py +++ b/test/test_serializers/test_finalnewline.py @@ -1,5 +1,5 @@ import rdflib.plugin -from rdflib import ConjunctiveGraph, URIRef +from rdflib import URIRef, ConjunctiveGraph def test_finalnewline(): diff --git a/test/test_serializers/test_serializer_hext.py b/test/test_serializers/test_serializer_hext.py index 2b0577bc1..fbe868d2c 100644 --- a/test/test_serializers/test_serializer_hext.py +++ b/test/test_serializers/test_serializer_hext.py @@ -90,7 +90,7 @@ def test_hext_graph(): def test_hext_cg(): """Tests ConjunctiveGraph data""" - d = ConjunctiveGraph() + d = Dataset() trig_data = """ PREFIX ex: PREFIX owl: diff --git a/test/test_serializers/test_serializer_trix.py b/test/test_serializers/test_serializer_trix.py index bdfc91c81..37bc5912f 100644 --- a/test/test_serializers/test_serializer_trix.py +++ b/test/test_serializers/test_serializer_trix.py @@ -1,6 +1,6 @@ from io import BytesIO -from rdflib.graph import ConjunctiveGraph, Graph +from rdflib.graph import Dataset, Graph from rdflib.term import Literal, URIRef @@ -19,7 +19,7 @@ def test_serialize(): g2 = Graph(identifier=s2) g2.add((r2, label, Literal("label 3"))) - g = ConjunctiveGraph() + g = Dataset() for s, p, o in g1.triples((None, None, None)): g.addN([(s, p, o, g1)]) for s, p, o in g2.triples((None, None, None)): @@ -28,14 +28,14 @@ def test_serialize(): g.add((r3, label, Literal(4))) r = g.serialize(format="trix", encoding="utf-8") - g3 = ConjunctiveGraph() + g3 = Dataset() g3.parse(BytesIO(r), format="trix") for q in g3.quads((None, None, None)): # TODO: Fix once getGraph/getContext is in conjunctive graph - if isinstance(q[3].identifier, URIRef): - tg = Graph(store=g.store, identifier=q[3].identifier) + if isinstance(q[3], URIRef): + tg = Graph(store=g.store, identifier=q[3]) else: # BNode, this is a bit ugly # we cannot match the bnode to the right graph automagically @@ -74,7 +74,7 @@ def test_issue_250(): """ - graph = ConjunctiveGraph() + graph = Dataset() graph.bind(None, "http://defaultnamespace") sg = graph.serialize(format="trix") assert 'xmlns="http://defaultnamespace"' not in sg, sg diff --git a/test/test_serializers/test_serializer_xml.py b/test/test_serializers/test_serializer_xml.py index eda0b3d43..e5508858c 100644 --- a/test/test_serializers/test_serializer_xml.py +++ b/test/test_serializers/test_serializer_xml.py @@ -1,6 +1,6 @@ from io import BytesIO -from rdflib.graph import ConjunctiveGraph +from rdflib.graph import Dataset, Graph from rdflib.namespace import RDFS from rdflib.plugins.serializers.rdfxml import XMLSerializer from rdflib.term import BNode, URIRef @@ -10,7 +10,7 @@ class SerializerTestBase: repeats = 8 def setup_method(self): - graph = ConjunctiveGraph() + graph = Dataset(default_union=True) graph.parse(data=self.test_content, format=self.test_content_format) self.source_graph = graph @@ -40,13 +40,13 @@ def _assert_equal_graphs(g1, g2): def _mangled_copy(g): - "Makes a copy of the graph, replacing all bnodes with the bnode ``_blank``." - gcopy = ConjunctiveGraph() + """Makes a copy of the graph, replacing all bnodes with the bnode ``_blank``.""" + gcopy = Dataset() def isbnode(v): return isinstance(v, BNode) - for s, p, o in g: + for s, p, o, c in g: if isbnode(s): s = _blank if isbnode(p): @@ -67,8 +67,8 @@ def serialize(source_graph, make_serializer, get_value=True, extra_args={}): def serialize_and_load(source_graph, make_serializer): stream = serialize(source_graph, make_serializer, False) stream.seek(0) - reparsed_graph = ConjunctiveGraph() - reparsed_graph.parse(stream, publicID=None, format="xml") + reparsed_graph = Dataset(default_union=True) + reparsed_graph.parse(stream, format="xml") return reparsed_graph @@ -173,7 +173,7 @@ def test_result_fragments_with_base(self): '' term. g.add(TRIPLE + (rdflib.URIRef("http://example.com/foo."),)) @@ -81,7 +81,7 @@ def test_graph_uri_syntax(): def test_blank_graph_identifier(): - g = rdflib.ConjunctiveGraph() + g = rdflib.Dataset() g.add(TRIPLE + (rdflib.BNode(),)) out = g.serialize(format="trig", encoding="latin-1") graph_label_line = out.splitlines()[-4] @@ -94,7 +94,7 @@ def test_graph_parsing(): data = """ . """ - g = rdflib.ConjunctiveGraph() + g = rdflib.Dataset() g.parse(data=data, format="trig") assert len(list(g.contexts())) == 1 @@ -104,7 +104,7 @@ def test_graph_parsing(): { . } """ - g = rdflib.ConjunctiveGraph() + g = rdflib.Dataset() g.parse(data=data, format="trig") assert len(list(g.contexts())) == 1 @@ -118,7 +118,7 @@ def test_graph_parsing(): . } """ - g = rdflib.ConjunctiveGraph() + g = rdflib.Dataset() g.parse(data=data, format="trig") assert len(list(g.contexts())) == 2 @@ -133,7 +133,7 @@ def test_round_trips(): . } """ - g = rdflib.ConjunctiveGraph() + g = rdflib.Dataset() for i in range(5): g.parse(data=data, format="trig") data = g.serialize(format="trig") @@ -154,7 +154,7 @@ def test_default_graph_serializes_without_name(): { . } """ - g = rdflib.ConjunctiveGraph() + g = rdflib.Dataset() g.parse(data=data, format="trig") data = g.serialize(format="trig", encoding="latin-1") @@ -174,7 +174,7 @@ def test_prefixes(): } """ - cg = rdflib.ConjunctiveGraph() + cg = rdflib.Dataset() cg.parse(data=data, format="trig") data = cg.serialize(format="trig", encoding="latin-1") diff --git a/test/test_turtle_quoting.py b/test/test_turtle_quoting.py index aa523f57b..7cdd63a24 100644 --- a/test/test_turtle_quoting.py +++ b/test/test_turtle_quoting.py @@ -12,7 +12,7 @@ import pytest -from rdflib.graph import ConjunctiveGraph, Graph +from rdflib.graph import Dataset, Graph from rdflib.plugins.parsers import ntriples from rdflib.term import Literal, URIRef from test.utils.namespace import EGDC @@ -147,7 +147,7 @@ def test_parse_correctness( data = f' "{quoted}" .' else: data = f' "{quoted}".' - graph = ConjunctiveGraph() + graph = Dataset(default_union=True) graph.parse(data=data, format=format) objs = list(graph.objects()) assert len(objs) == 1 From 33b0a0ffb059b9bf4eee8310679a50e2ff85c964 Mon Sep 17 00:00:00 2001 From: Nicholas Car Date: Sun, 23 Mar 2025 16:43:01 +1000 Subject: [PATCH 04/12] tidy some notation --- rdflib/plugins/parsers/notation3.py | 4 +- test/test_graph/test_graph_context.py | 67 +++++++++------------ test/test_graph/test_namespace_rebinding.py | 5 +- 3 files changed, 33 insertions(+), 43 deletions(-) diff --git a/rdflib/plugins/parsers/notation3.py b/rdflib/plugins/parsers/notation3.py index da71405e0..4df892ee4 100755 --- a/rdflib/plugins/parsers/notation3.py +++ b/rdflib/plugins/parsers/notation3.py @@ -57,7 +57,7 @@ from rdflib.compat import long_type from rdflib.exceptions import ParserError -from rdflib.graph import ConjunctiveGraph, Graph, QuotedGraph +from rdflib.graph import Dataset, Graph, QuotedGraph from rdflib.term import ( _XSD_PFX, BNode, @@ -2047,7 +2047,7 @@ def parse( # type: ignore[override] elif not fa: raise ParserError("Cannot parse N3 into non-formula-aware store.") - conj_graph = ConjunctiveGraph(store=graph.store) + conj_graph = Dataset(store=graph.store) conj_graph.default_context = graph # TODO: CG __init__ should have a # default_context arg # TODO: update N3Processor so that it can use conj_graph as the sink diff --git a/test/test_graph/test_graph_context.py b/test/test_graph/test_graph_context.py index 7d0a90f7c..423b1d348 100644 --- a/test/test_graph/test_graph_context.py +++ b/test/test_graph/test_graph_context.py @@ -291,71 +291,62 @@ def test_triples(self): for c in [graph, self.graph.get_context(c1)]: # unbound subjects - asserte(set(c.subjects(likes, pizza)), set((michel, tarek))) - asserte(set(c.subjects(hates, pizza)), set((bob,))) - asserte(set(c.subjects(likes, cheese)), set([tarek, bob, michel])) + asserte(set(c.subjects(likes, pizza)), {michel, tarek}) + asserte(set(c.subjects(hates, pizza)), {bob}) + asserte(set(c.subjects(likes, cheese)), {tarek, bob, michel}) asserte(set(c.subjects(hates, cheese)), set()) # unbound objects - asserte(set(c.objects(michel, likes)), set([cheese, pizza])) - asserte(set(c.objects(tarek, likes)), set([cheese, pizza])) - asserte(set(c.objects(bob, hates)), set([michel, pizza])) - asserte(set(c.objects(bob, likes)), set([cheese])) + asserte(set(c.objects(michel, likes)), {cheese, pizza}) + asserte(set(c.objects(tarek, likes)), {cheese, pizza}) + asserte(set(c.objects(bob, hates)), {michel, pizza}) + asserte(set(c.objects(bob, likes)), {cheese}) # unbound predicates - asserte(set(c.predicates(michel, cheese)), set([likes])) - asserte(set(c.predicates(tarek, cheese)), set([likes])) - asserte(set(c.predicates(bob, pizza)), set([hates])) - asserte(set(c.predicates(bob, michel)), set([hates])) + asserte(set(c.predicates(michel, cheese)), {likes}) + asserte(set(c.predicates(tarek, cheese)), {likes}) + asserte(set(c.predicates(bob, pizza)), {hates}) + asserte(set(c.predicates(bob, michel)), {hates}) - asserte(set(c.subject_objects(hates)), set([(bob, pizza), (bob, michel)])) + asserte(set(c.subject_objects(hates)), {(bob, pizza), (bob, michel)}) asserte( set(c.subject_objects(likes)), - set( - [ - (tarek, cheese), - (michel, cheese), - (michel, pizza), - (bob, cheese), - (tarek, pizza), - ] - ), + {(tarek, cheese), (michel, cheese), (michel, pizza), (bob, cheese), + (tarek, pizza)}, ) asserte( - set(c.predicate_objects(michel)), set([(likes, cheese), (likes, pizza)]) + set(c.predicate_objects(michel)), {(likes, cheese), (likes, pizza)} ) asserte( set(c.predicate_objects(bob)), - set([(likes, cheese), (hates, pizza), (hates, michel)]), + {(likes, cheese), (hates, pizza), (hates, michel)}, ) asserte( - set(c.predicate_objects(tarek)), set([(likes, cheese), (likes, pizza)]) + set(c.predicate_objects(tarek)), {(likes, cheese), (likes, pizza)} ) asserte( set(c.subject_predicates(pizza)), - set([(bob, hates), (tarek, likes), (michel, likes)]), + {(bob, hates), (tarek, likes), (michel, likes)}, ) asserte( set(c.subject_predicates(cheese)), - set([(bob, likes), (tarek, likes), (michel, likes)]), + {(bob, likes), (tarek, likes), (michel, likes)}, ) - asserte(set(c.subject_predicates(michel)), set([(bob, hates)])) + asserte(set(c.subject_predicates(michel)), {(bob, hates)}) asserte( set(c), - set( - [ - (bob, hates, michel), - (bob, likes, cheese), - (tarek, likes, pizza), - (michel, likes, pizza), - (michel, likes, cheese), - (bob, hates, pizza), - (tarek, likes, cheese), - ] - ), + { + (bob, hates, michel), + (bob, likes, cheese), + (tarek, likes, pizza), + (michel, likes, pizza), + (michel, likes, cheese), + (bob, hates, pizza), + (tarek, likes, cheese) + }, ) # remove stuff and make sure the graph is empty again diff --git a/test/test_graph/test_namespace_rebinding.py b/test/test_graph/test_namespace_rebinding.py index babac1b4f..253fbedc2 100644 --- a/test/test_graph/test_namespace_rebinding.py +++ b/test/test_graph/test_namespace_rebinding.py @@ -1,6 +1,6 @@ import pytest -from rdflib import ConjunctiveGraph, Graph, Literal +from rdflib import Dataset, Graph, Literal from rdflib.namespace import OWL, Namespace, NamespaceManager from rdflib.plugins.stores.memory import Memory from rdflib.term import URIRef @@ -292,12 +292,11 @@ def test_multigraph_bindings(): assert list(g1.namespaces()) == [("friend-of-a-friend", foaf1_uri)] # Including newly-created objects that use the store - cg = ConjunctiveGraph(store=store) + cg = Dataset(store=store, default_union=True) cg.namespace_manager = NamespaceManager(cg, bind_namespaces="core") assert ("foaf", foaf1_uri) not in list(cg.namespaces()) assert ("friend-of-a-friend", foaf1_uri) in list(cg.namespaces()) - assert len(list(g1.namespaces())) == 6 assert len(list(g2.namespaces())) == 6 assert len(list(cg.namespaces())) == 6 From 49240fc7ec26fcdf154419a0d415fb58acfdfa5f Mon Sep 17 00:00:00 2001 From: Nicholas Car Date: Sun, 23 Mar 2025 16:44:22 +1000 Subject: [PATCH 05/12] align black version --- .pre-commit-config.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index a558a5411..a44a2a6a1 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -14,7 +14,7 @@ repos: args: ["--fix"] - repo: https://github.com/psf/black-pre-commit-mirror # WARNING: Black version should be the same as in `pyproject.toml` - rev: "25.1.0" + rev: "24.4.2" hooks: - id: black pass_filenames: false From 50a5f92fed1dd393e8ddb45eec964a85c8ef35f7 Mon Sep 17 00:00:00 2001 From: Nicholas Car Date: Sun, 23 Mar 2025 21:20:08 +1000 Subject: [PATCH 06/12] fix black & ruff --- test/test_graph/test_graph_context.py | 19 ++++++++++--------- test/test_parsers/test_nquads.py | 14 +++++++++++--- test/test_serializers/test_finalnewline.py | 2 +- test/test_serializers/test_serializer_hext.py | 2 +- test/test_serializers/test_serializer_xml.py | 2 +- 5 files changed, 24 insertions(+), 15 deletions(-) diff --git a/test/test_graph/test_graph_context.py b/test/test_graph/test_graph_context.py index 423b1d348..8c1a8a457 100644 --- a/test/test_graph/test_graph_context.py +++ b/test/test_graph/test_graph_context.py @@ -311,20 +311,21 @@ def test_triples(self): asserte(set(c.subject_objects(hates)), {(bob, pizza), (bob, michel)}) asserte( set(c.subject_objects(likes)), - {(tarek, cheese), (michel, cheese), (michel, pizza), (bob, cheese), - (tarek, pizza)}, + { + (tarek, cheese), + (michel, cheese), + (michel, pizza), + (bob, cheese), + (tarek, pizza), + }, ) - asserte( - set(c.predicate_objects(michel)), {(likes, cheese), (likes, pizza)} - ) + asserte(set(c.predicate_objects(michel)), {(likes, cheese), (likes, pizza)}) asserte( set(c.predicate_objects(bob)), {(likes, cheese), (hates, pizza), (hates, michel)}, ) - asserte( - set(c.predicate_objects(tarek)), {(likes, cheese), (likes, pizza)} - ) + asserte(set(c.predicate_objects(tarek)), {(likes, cheese), (likes, pizza)}) asserte( set(c.subject_predicates(pizza)), @@ -345,7 +346,7 @@ def test_triples(self): (michel, likes, pizza), (michel, likes, cheese), (bob, hates, pizza), - (tarek, likes, cheese) + (tarek, likes, cheese), }, ) diff --git a/test/test_parsers/test_nquads.py b/test/test_parsers/test_nquads.py index 01f46bd28..ee14856ab 100644 --- a/test/test_parsers/test_nquads.py +++ b/test/test_parsers/test_nquads.py @@ -1,6 +1,6 @@ import os -from rdflib import Dataset, Namespace, URIRef, Literal +from rdflib import Dataset, Literal, URIRef from rdflib.namespace import FOAF from test.data import TEST_DATA_DIR @@ -138,7 +138,15 @@ def test_parse_shared_bnode_contexts_named_graphs(self): bnode_ctx = dict() g = Dataset() h = Dataset() - g.parse(TEST_DATA_DIR / "nquads.rdflib/bnode_context.nquads", format="nquads", bnode_context=bnode_ctx) + g.parse( + TEST_DATA_DIR / "nquads.rdflib/bnode_context.nquads", + format="nquads", + bnode_context=bnode_ctx, + ) self.data.seek(0) - h.parse(TEST_DATA_DIR / "nquads.rdflib/bnode_context.nquads", format="nquads", bnode_context=bnode_ctx) + h.parse( + TEST_DATA_DIR / "nquads.rdflib/bnode_context.nquads", + format="nquads", + bnode_context=bnode_ctx, + ) assert set(h.contexts()) == set(g.contexts()) diff --git a/test/test_serializers/test_finalnewline.py b/test/test_serializers/test_finalnewline.py index bfdbc023b..bc5451397 100644 --- a/test/test_serializers/test_finalnewline.py +++ b/test/test_serializers/test_finalnewline.py @@ -1,5 +1,5 @@ import rdflib.plugin -from rdflib import URIRef, ConjunctiveGraph +from rdflib import ConjunctiveGraph, URIRef def test_finalnewline(): diff --git a/test/test_serializers/test_serializer_hext.py b/test/test_serializers/test_serializer_hext.py index fbe868d2c..de39e37dc 100644 --- a/test/test_serializers/test_serializer_hext.py +++ b/test/test_serializers/test_serializer_hext.py @@ -1,7 +1,7 @@ import json from pathlib import Path -from rdflib import ConjunctiveGraph, Dataset, Graph +from rdflib import Dataset, Graph def test_hext_graph(): diff --git a/test/test_serializers/test_serializer_xml.py b/test/test_serializers/test_serializer_xml.py index e5508858c..535b24c85 100644 --- a/test/test_serializers/test_serializer_xml.py +++ b/test/test_serializers/test_serializer_xml.py @@ -1,6 +1,6 @@ from io import BytesIO -from rdflib.graph import Dataset, Graph +from rdflib.graph import Dataset from rdflib.namespace import RDFS from rdflib.plugins.serializers.rdfxml import XMLSerializer from rdflib.term import BNode, URIRef From 03f46956b13fd312c4f04775dac22f758fafee55 Mon Sep 17 00:00:00 2001 From: Nicholas Car Date: Sun, 23 Mar 2025 21:27:25 +1000 Subject: [PATCH 07/12] poetry --check -> poetry-check --lock --- .pre-commit-config.yaml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index a44a2a6a1..098305df0 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -24,6 +24,5 @@ repos: rev: 2.1.1 hooks: - id: poetry-check - - id: poetry-lock # sadly `--no-update` does not work on pre-commit.ci - args: ["--check"] + args: ["--lock"] From 7d30c135ff1cbbfa44521fc74e850d8a2fff67fe Mon Sep 17 00:00:00 2001 From: Nicholas Car Date: Sun, 23 Mar 2025 21:45:28 +1000 Subject: [PATCH 08/12] more CG -> Datasets --- test/test_graph/test_diff.py | 4 ++-- test/test_parsers/test_parser_hext.py | 8 ++++---- test/test_sparql/test_initbindings.py | 8 ++++---- test/test_util.py | 4 ++-- test_reports/rdflib_w3c_sparql10-HEAD.ttl | 2 +- test_reports/rdflib_w3c_sparql11-HEAD.ttl | 20 ++++++++++---------- 6 files changed, 23 insertions(+), 23 deletions(-) diff --git a/test/test_graph/test_diff.py b/test/test_graph/test_diff.py index 696d8be89..a1d4f948e 100644 --- a/test/test_graph/test_diff.py +++ b/test/test_graph/test_diff.py @@ -9,7 +9,7 @@ import rdflib from rdflib import Graph from rdflib.compare import graph_diff -from rdflib.graph import ConjunctiveGraph, Dataset +from rdflib.graph import Dataset from rdflib.namespace import FOAF, RDF from rdflib.term import BNode, Literal from test.utils import ( @@ -111,7 +111,7 @@ def as_element_set(self, value: _ElementSetTypeOrStr) -> _ElementSetType: if isinstance(value, str): graph = self.graph_type() graph.parse(data=value, format=self.format) - if isinstance(graph, ConjunctiveGraph): + if isinstance(graph, Dataset): return GraphHelper.quad_set(graph, BNodeHandling.COLLAPSE) else: return GraphHelper.triple_set(graph, BNodeHandling.COLLAPSE) diff --git a/test/test_parsers/test_parser_hext.py b/test/test_parsers/test_parser_hext.py index c73e7481c..17d19fa26 100644 --- a/test/test_parsers/test_parser_hext.py +++ b/test/test_parsers/test_parser_hext.py @@ -1,6 +1,6 @@ from pathlib import Path -from rdflib import BNode, ConjunctiveGraph, Dataset, Literal, URIRef +from rdflib import BNode, Dataset, Literal, URIRef from rdflib.compare import isomorphic from rdflib.graph import DATASET_DEFAULT_GRAPH_ID from rdflib.namespace import XSD @@ -97,7 +97,7 @@ def test_small_string_cg(): ["http://example.com/s01", "http://example.com/op1", "http://example.com/o2", "globalId", "", ""] ["http://example.com/s01", "http://example.com/op2", "http://example.com/o3", "globalId", "", ""] """ - d = ConjunctiveGraph(identifier=DATASET_DEFAULT_GRAPH_ID) + d = Dataset() d.parse(data=s, format="hext") expected_graph_names = ( @@ -185,14 +185,14 @@ def test_roundtrip(): print(f"Test {tests}: {f}") if f.name not in files_to_skip.keys(): try: - cg = ConjunctiveGraph().parse(f, format="nt") + cg = Dataset().parse(f, format="nt") # print(cg.serialize(format="n3")) except Exception: print("Skipping: could not NT parse") skipped += 1 skip = True if not skip: - cg2 = ConjunctiveGraph() + cg2 = Dataset() cg2.parse( data=cg.serialize(format="hext"), format="hext", diff --git a/test/test_sparql/test_initbindings.py b/test/test_sparql/test_initbindings.py index 0cb55f344..55f5853a3 100644 --- a/test/test_sparql/test_initbindings.py +++ b/test/test_sparql/test_initbindings.py @@ -1,8 +1,8 @@ -from rdflib import ConjunctiveGraph, Literal, URIRef, Variable +from rdflib import Dataset, Literal, URIRef, Variable from rdflib.plugins.sparql import prepareQuery from test.utils.namespace import EGDC -g = ConjunctiveGraph() +g = Dataset() def test_str(): @@ -272,7 +272,7 @@ def test_prepare(): def test_data(): - data = ConjunctiveGraph() + data = Dataset() data += [ (URIRef("urn:a"), URIRef("urn:p"), Literal("a")), (URIRef("urn:b"), URIRef("urn:p"), Literal("b")), @@ -297,7 +297,7 @@ def test_ask(): assert a == b, "ask: %r != %r" % (a, b) -g2 = ConjunctiveGraph() +g2 = Dataset() g2.bind("", EGDC) g2.add((EGDC["s1"], EGDC["p"], EGDC["o1"])) g2.add((EGDC["s2"], EGDC["p"], EGDC["o2"])) diff --git a/test/test_util.py b/test/test_util.py index 63c085033..ca51f480a 100644 --- a/test/test_util.py +++ b/test/test_util.py @@ -9,7 +9,7 @@ import pytest from rdflib import XSD, util -from rdflib.graph import ConjunctiveGraph, Graph, QuotedGraph +from rdflib.graph import Graph, QuotedGraph, Dataset from rdflib.namespace import RDF, RDFS from rdflib.term import BNode, IdentifiedNode, Literal, Node, URIRef from rdflib.util import _coalesce, _iri2uri, find_roots, get_tree @@ -262,7 +262,7 @@ def parse_n3(term_n3): "@prefix xsd: .\n" " %s.\n" % term_n3 ) - g = ConjunctiveGraph() + g = Dataset(default_union=True) g.parse(data=prepstr, format="n3") return [t for t in g.triples((None, None, None))][0][2] diff --git a/test_reports/rdflib_w3c_sparql10-HEAD.ttl b/test_reports/rdflib_w3c_sparql10-HEAD.ttl index f3ac4255d..b8369a94d 100644 --- a/test_reports/rdflib_w3c_sparql10-HEAD.ttl +++ b/test_reports/rdflib_w3c_sparql10-HEAD.ttl @@ -1603,7 +1603,7 @@ earl:assertedBy ; earl:mode earl:automatic ; earl:result [ a earl:TestResult ; - earl:outcome earl:failed ] ; + earl:outcome earl:passed ] ; earl:subject ; earl:test . diff --git a/test_reports/rdflib_w3c_sparql11-HEAD.ttl b/test_reports/rdflib_w3c_sparql11-HEAD.ttl index 6d498df8b..6140fa914 100644 --- a/test_reports/rdflib_w3c_sparql11-HEAD.ttl +++ b/test_reports/rdflib_w3c_sparql11-HEAD.ttl @@ -691,7 +691,7 @@ earl:assertedBy ; earl:mode earl:automatic ; earl:result [ a earl:TestResult ; - earl:outcome earl:failed ] ; + earl:outcome earl:passed ] ; earl:subject ; earl:test . @@ -699,7 +699,7 @@ earl:assertedBy ; earl:mode earl:automatic ; earl:result [ a earl:TestResult ; - earl:outcome earl:failed ] ; + earl:outcome earl:passed ] ; earl:subject ; earl:test . @@ -707,7 +707,7 @@ earl:assertedBy ; earl:mode earl:automatic ; earl:result [ a earl:TestResult ; - earl:outcome earl:failed ] ; + earl:outcome earl:passed ] ; earl:subject ; earl:test . @@ -715,7 +715,7 @@ earl:assertedBy ; earl:mode earl:automatic ; earl:result [ a earl:TestResult ; - earl:outcome earl:failed ] ; + earl:outcome earl:passed ] ; earl:subject ; earl:test . @@ -723,7 +723,7 @@ earl:assertedBy ; earl:mode earl:automatic ; earl:result [ a earl:TestResult ; - earl:outcome earl:failed ] ; + earl:outcome earl:passed ] ; earl:subject ; earl:test . @@ -731,7 +731,7 @@ earl:assertedBy ; earl:mode earl:automatic ; earl:result [ a earl:TestResult ; - earl:outcome earl:failed ] ; + earl:outcome earl:passed ] ; earl:subject ; earl:test . @@ -1939,7 +1939,7 @@ earl:assertedBy ; earl:mode earl:automatic ; earl:result [ a earl:TestResult ; - earl:outcome earl:failed ] ; + earl:outcome earl:passed ] ; earl:subject ; earl:test . @@ -1947,7 +1947,7 @@ earl:assertedBy ; earl:mode earl:automatic ; earl:result [ a earl:TestResult ; - earl:outcome earl:failed ] ; + earl:outcome earl:passed ] ; earl:subject ; earl:test . @@ -2251,7 +2251,7 @@ earl:assertedBy ; earl:mode earl:automatic ; earl:result [ a earl:TestResult ; - earl:outcome earl:failed ] ; + earl:outcome earl:passed ] ; earl:subject ; earl:test . @@ -2259,7 +2259,7 @@ earl:assertedBy ; earl:mode earl:automatic ; earl:result [ a earl:TestResult ; - earl:outcome earl:failed ] ; + earl:outcome earl:passed ] ; earl:subject ; earl:test . From c6c71aaefddba3c4c771c1056791367f9ef51ee3 Mon Sep 17 00:00:00 2001 From: Nicholas Car Date: Sun, 23 Mar 2025 21:46:53 +1000 Subject: [PATCH 09/12] ruff --- test/test_util.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/test_util.py b/test/test_util.py index ca51f480a..890697475 100644 --- a/test/test_util.py +++ b/test/test_util.py @@ -9,7 +9,7 @@ import pytest from rdflib import XSD, util -from rdflib.graph import Graph, QuotedGraph, Dataset +from rdflib.graph import Dataset, Graph, QuotedGraph from rdflib.namespace import RDF, RDFS from rdflib.term import BNode, IdentifiedNode, Literal, Node, URIRef from rdflib.util import _coalesce, _iri2uri, find_roots, get_tree From 4a66bac70a81b767ebfad404e35d55366224ebe1 Mon Sep 17 00:00:00 2001 From: Nicholas Car Date: Sun, 23 Mar 2025 22:03:41 +1000 Subject: [PATCH 10/12] GC -> Dataset --- test/test_tools/test_chunk_serializer.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/test_tools/test_chunk_serializer.py b/test/test_tools/test_chunk_serializer.py index d683ca606..9d68c0c04 100644 --- a/test/test_tools/test_chunk_serializer.py +++ b/test/test_tools/test_chunk_serializer.py @@ -84,7 +84,7 @@ def test_chunk_by_size(tmp_path: Path): (TEST_DATA_DIR / "defined_namespaces/mf.ttl", 100, ..., False, True, 1), ], ) -def test_chuking( +def test_chunking( tmp_path: Path, test_graph_path: Path, max_triples: Union[ellipsis, int], From 7e0547d67b376e3845bd956f83c36c3e9c373ee5 Mon Sep 17 00:00:00 2001 From: Nicholas Car Date: Mon, 24 Mar 2025 08:44:08 +1000 Subject: [PATCH 11/12] CG -> D --- test/test_graph/test_aggregate_graphs.py | 8 ++++---- test/test_graph/test_graph_context.py | 9 ++++++--- test/test_issues/test_issue535.py | 4 ++-- test/test_namespace/test_namespace.py | 2 +- .../test_broken_parse_data_from_jena.py | 2 +- test/test_serializers/test_prettyxml.py | 16 ++++++++-------- test/test_serializers/test_serializer.py | 4 ++-- .../test_store_sparqlupdatestore_mock.py | 6 +++--- 8 files changed, 27 insertions(+), 24 deletions(-) diff --git a/test/test_graph/test_aggregate_graphs.py b/test/test_graph/test_aggregate_graphs.py index fd45c4a14..b2e6ad247 100644 --- a/test/test_graph/test_aggregate_graphs.py +++ b/test/test_graph/test_aggregate_graphs.py @@ -1,7 +1,7 @@ from io import StringIO -from rdflib import logger, plugin -from rdflib.graph import ConjunctiveGraph, Graph, ReadOnlyGraphAggregate +from rdflib import logger, plugin, Dataset +from rdflib.graph import Dataset, Graph, ReadOnlyGraphAggregate from rdflib.namespace import RDF, RDFS from rdflib.store import Store from rdflib.term import URIRef @@ -108,10 +108,10 @@ def test_aggregate2(): graph4 = Graph(mem_store, RDFS) graph4.parse(data=TEST_GRAPH_1N3, format="n3") - g = ConjunctiveGraph(mem_store) + g = Dataset(store=mem_store, default_union=True) assert g is not None assert len(list(g.quads((None, None, None, None)))) == 11 - assert len(list(g.contexts())) == 4 + assert len(list(g.contexts())) == 5 logger.debug(list(g.contexts())) assert ( len(list(g.quads((None, None, None, URIRef("http://example.com/graph2"))))) == 4 diff --git a/test/test_graph/test_graph_context.py b/test/test_graph/test_graph_context.py index 8c1a8a457..93c5f7d9b 100644 --- a/test/test_graph/test_graph_context.py +++ b/test/test_graph/test_graph_context.py @@ -9,7 +9,7 @@ import pytest -from rdflib import BNode, ConjunctiveGraph, Graph, URIRef, plugin +from rdflib import BNode, Dataset, Graph, URIRef, plugin from rdflib.store import Store @@ -20,7 +20,7 @@ class ContextTestCase(unittest.TestCase): def setUp(self): try: - self.graph = ConjunctiveGraph(store=self.store) + self.graph = Dataset(store=self.store, default_union=True) except ImportError: pytest.skip("Dependencies for store '%s' not available!" % self.store) if self.store == "SQLite": @@ -337,8 +337,11 @@ def test_triples(self): ) asserte(set(c.subject_predicates(michel)), {(bob, hates)}) + d = set() + for x in c: + d.add(x[0:3]) asserte( - set(c), + set(d), { (bob, hates, michel), (bob, likes, cheese), diff --git a/test/test_issues/test_issue535.py b/test/test_issues/test_issue535.py index 03f75d601..80a639694 100644 --- a/test/test_issues/test_issue535.py +++ b/test/test_issues/test_issue535.py @@ -1,8 +1,8 @@ -from rdflib import ConjunctiveGraph, URIRef +from rdflib import Dataset, URIRef def test_nquads_default_graph(): - ds = ConjunctiveGraph() + ds = Dataset(default_union=True) data = """ . diff --git a/test/test_namespace/test_namespace.py b/test/test_namespace/test_namespace.py index 409d703f3..60d687424 100644 --- a/test/test_namespace/test_namespace.py +++ b/test/test_namespace/test_namespace.py @@ -232,7 +232,7 @@ def add_not_in_namespace(s): # a property name within the FOAF namespace assert FOAF.givenName == URIRef("http://xmlns.com/foaf/0.1/givenName") - # namescape can be used as str + # namespace can be used as str assert FOAF.givenName.startswith(FOAF) def test_contains_method(self): diff --git a/test/test_parsers/test_broken_parse_data_from_jena.py b/test/test_parsers/test_broken_parse_data_from_jena.py index 353593837..da25154a7 100644 --- a/test/test_parsers/test_broken_parse_data_from_jena.py +++ b/test/test_parsers/test_broken_parse_data_from_jena.py @@ -33,6 +33,6 @@ def xfail_broken_parse_data(request): @pytest.mark.parametrize("testfile", os.listdir(broken_parse_data)) @pytest.mark.usefixtures("xfail_broken_parse_data") def test_n3_serializer_roundtrip(testfile) -> None: - g1 = rdflib.ConjunctiveGraph() + g1 = rdflib.Dataset(default_union=True) g1.parse(os.path.join(broken_parse_data, testfile), format="n3") diff --git a/test/test_serializers/test_prettyxml.py b/test/test_serializers/test_prettyxml.py index 6c798e825..aac19af50 100644 --- a/test/test_serializers/test_prettyxml.py +++ b/test/test_serializers/test_prettyxml.py @@ -1,6 +1,6 @@ from io import BytesIO -from rdflib.graph import ConjunctiveGraph +from rdflib.graph import Dataset from rdflib.namespace import RDF, RDFS from rdflib.plugins.serializers.rdfxml import PrettyXMLSerializer from rdflib.term import BNode, Literal, URIRef @@ -10,7 +10,7 @@ class SerializerTestBase: repeats = 8 def setup_method(self): - graph = ConjunctiveGraph() + graph = Dataset() graph.parse(data=self.test_content, format=self.test_content_format) self.source_graph = graph @@ -41,12 +41,12 @@ def _assert_equal_graphs(g1, g2): def _mangled_copy(g): "Makes a copy of the graph, replacing all bnodes with the bnode ``_blank``." - gcopy = ConjunctiveGraph() + gcopy = Dataset() def isbnode(v): return isinstance(v, BNode) - for s, p, o in g: + for s, p, o, c in g: if isbnode(s): s = _blank if isbnode(p): @@ -67,7 +67,7 @@ def serialize(source_graph, make_serializer, get_value=True, extra_args={}): def serialize_and_load(source_graph, make_serializer): stream = serialize(source_graph, make_serializer, False) stream.seek(0) - reparsed_graph = ConjunctiveGraph() + reparsed_graph = Dataset() reparsed_graph.parse(stream, format="xml") return reparsed_graph @@ -170,7 +170,7 @@ def test_subclass_of_objects(self): def test_pretty_xmlliteral(self): # given: - g = ConjunctiveGraph() + g = Dataset() g.add( ( BNode(), @@ -191,7 +191,7 @@ def test_pretty_xmlliteral(self): def test_pretty_broken_xmlliteral(self): # given: - g = ConjunctiveGraph() + g = Dataset() g.add((BNode(), RDF.value, Literal("""

None: NS = Namespace("example:") # noqa: N806 - graph = ConjunctiveGraph() + graph = Dataset(default_union=True) graph.bind("eg", NS) nodes = [NS.subj, NS.pred, NS.obj, NS.graph] nodes[tuple_index] = RDF.type @@ -68,7 +68,7 @@ def test_rdf_type(format: str, tuple_index: int, is_keyword: bool) -> None: assert str(RDF) not in data else: assert str(RDF) in data - parsed_graph = ConjunctiveGraph() + parsed_graph = Dataset(default_union=True) parsed_graph.parse(data=data, format=format) GraphHelper.assert_triple_sets_equals(graph, parsed_graph) diff --git a/test/test_store/test_store_sparqlupdatestore_mock.py b/test/test_store/test_store_sparqlupdatestore_mock.py index 5d7e13eb8..054f746e1 100644 --- a/test/test_store/test_store_sparqlupdatestore_mock.py +++ b/test/test_store/test_store_sparqlupdatestore_mock.py @@ -1,6 +1,6 @@ from typing import ClassVar -from rdflib.graph import ConjunctiveGraph +from rdflib.graph import Dataset from rdflib.plugins.stores.sparqlstore import SPARQLUpdateStore from test.utils.http import MethodName, MockHTTPResponse from test.utils.httpservermock import ServedBaseHTTPServerMock @@ -33,7 +33,7 @@ def teardown_method(self): pass def test_graph_update(self): - graph = ConjunctiveGraph("SPARQLUpdateStore") + graph = Dataset("SPARQLUpdateStore") graph.open((self.query_endpoint, self.update_endpoint)) update_statement = ( f"INSERT DATA {{ {EGDO['subj']} {EGDO['pred']} {EGDO['obj']}. }}" @@ -58,7 +58,7 @@ def test_graph_update(self): assert "application/sparql-update" in req.headers.get("content-type") def test_update_encoding(self): - graph = ConjunctiveGraph("SPARQLUpdateStore") + graph = Dataset("SPARQLUpdateStore") graph.open((self.query_endpoint, self.update_endpoint)) update_statement = ( f"INSERT DATA {{ {EGDO['subj']} {EGDO['pred']} {EGDO['obj']}. }}" From f73167da8c2c3ed59099641740556cc05d3b09a2 Mon Sep 17 00:00:00 2001 From: Nicholas Car Date: Mon, 24 Mar 2025 13:50:35 +1000 Subject: [PATCH 12/12] ruff fixes --- test/test_graph/test_aggregate_graphs.py | 4 ++-- test/test_serializers/test_serializer.py | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/test/test_graph/test_aggregate_graphs.py b/test/test_graph/test_aggregate_graphs.py index b2e6ad247..6ede92fda 100644 --- a/test/test_graph/test_aggregate_graphs.py +++ b/test/test_graph/test_aggregate_graphs.py @@ -1,7 +1,7 @@ from io import StringIO -from rdflib import logger, plugin, Dataset -from rdflib.graph import Dataset, Graph, ReadOnlyGraphAggregate +from rdflib import Dataset, Graph, logger, plugin +from rdflib.graph import ReadOnlyGraphAggregate from rdflib.namespace import RDF, RDFS from rdflib.store import Store from rdflib.term import URIRef diff --git a/test/test_serializers/test_serializer.py b/test/test_serializers/test_serializer.py index 73008f381..096142dc1 100644 --- a/test/test_serializers/test_serializer.py +++ b/test/test_serializers/test_serializer.py @@ -30,7 +30,7 @@ import rdflib import rdflib.plugin from rdflib import RDF, XSD, Graph, Literal, Namespace, URIRef -from rdflib.graph import DATASET_DEFAULT_GRAPH_ID, ConjunctiveGraph, Dataset +from rdflib.graph import DATASET_DEFAULT_GRAPH_ID, Dataset from rdflib.serializer import Serializer from test.utils import GraphHelper, get_unique_plugins from test.utils.destination import DestinationType, DestParmType, DestRef