summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIwan Aucamp <aucampia@gmail.com>2022-12-11 21:11:21 +0100
committerIwan Aucamp <aucampia@gmail.com>2022-12-11 21:11:21 +0100
commite2a2a140d32c7df2fe115c86a1a0dbbb9cf17d68 (patch)
treee4561be228539109d8493af1c95344754b757383
parent6f94c841ff2643ed0cd218e9497dabf22d1399e5 (diff)
downloadrdflib-add-nsm-arg-to-path-n3.tar.gz
chore: add some more type hints and ignoresadd-nsm-arg-to-path-n3
Sadly the __mul__ dunder is not defined in a way that mypy can find it, so there are some type errors that arise from using it. I added `type: ignore` comments for those. I also added some more type hints, which while not strictly necessary, does contribute to more complete type hint coverage.
-rw-r--r--rdflib/paths.py10
-rw-r--r--test/test_paths_n3.py41
2 files changed, 41 insertions, 10 deletions
diff --git a/rdflib/paths.py b/rdflib/paths.py
index e4a9f95a..9fdd6232 100644
--- a/rdflib/paths.py
+++ b/rdflib/paths.py
@@ -234,7 +234,7 @@ class InvPath(Path):
def __repr__(self):
return "Path(~%s)" % (self.arg,)
- def n3(self, namespace_manager: Optional["NamespaceManager"] = None):
+ def n3(self, namespace_manager: Optional["NamespaceManager"] = None) -> str:
return "^%s" % self.arg.n3(namespace_manager)
@@ -278,7 +278,7 @@ class SequencePath(Path):
def __repr__(self):
return "Path(%s)" % " / ".join(str(x) for x in self.args)
- def n3(self, namespace_manager: Optional["NamespaceManager"] = None):
+ def n3(self, namespace_manager: Optional["NamespaceManager"] = None) -> str:
return "/".join(a.n3(namespace_manager) for a in self.args)
@@ -299,7 +299,7 @@ class AlternativePath(Path):
def __repr__(self):
return "Path(%s)" % " | ".join(str(x) for x in self.args)
- def n3(self, namespace_manager: Optional["NamespaceManager"] = None):
+ def n3(self, namespace_manager: Optional["NamespaceManager"] = None) -> str:
return "|".join(a.n3(namespace_manager) for a in self.args)
@@ -403,7 +403,7 @@ class MulPath(Path):
def __repr__(self):
return "Path(%s%s)" % (self.path, self.mod)
- def n3(self, namespace_manager: Optional["NamespaceManager"] = None):
+ def n3(self, namespace_manager: Optional["NamespaceManager"] = None) -> str:
return "%s%s" % (self.path.n3(namespace_manager), self.mod)
@@ -436,7 +436,7 @@ class NegatedPath(Path):
def __repr__(self):
return "Path(! %s)" % ",".join(str(x) for x in self.args)
- def n3(self, namespace_manager: Optional["NamespaceManager"] = None):
+ def n3(self, namespace_manager: Optional["NamespaceManager"] = None) -> str:
return "!(%s)" % ("|".join(arg.n3(namespace_manager) for arg in self.args))
diff --git a/test/test_paths_n3.py b/test/test_paths_n3.py
index dfc8244d..b7834721 100644
--- a/test/test_paths_n3.py
+++ b/test/test_paths_n3.py
@@ -1,7 +1,19 @@
+import logging
+from typing import Union
+
import pytest
from rdflib import RDF, RDFS, Graph
-from rdflib.paths import OneOrMore, ZeroOrMore, ZeroOrOne
+from rdflib.paths import (
+ AlternativePath,
+ InvPath,
+ MulPath,
+ NegatedPath,
+ OneOrMore,
+ SequencePath,
+ ZeroOrMore,
+ ZeroOrOne,
+)
g = Graph()
nsm = g.namespace_manager
@@ -22,9 +34,23 @@ nsm = g.namespace_manager
"rdf:type|rdfs:subClassOf",
),
(-RDF.type, f"!(<{RDF.type}>)", "!(rdf:type)"),
- (RDFS.subClassOf * ZeroOrMore, f"<{RDFS.subClassOf}>*", "rdfs:subClassOf*"),
- (RDFS.subClassOf * OneOrMore, f"<{RDFS.subClassOf}>+", "rdfs:subClassOf+"),
- (RDFS.subClassOf * ZeroOrOne, f"<{RDFS.subClassOf}>?", "rdfs:subClassOf?"),
+ # type errors: Unsupported operand types for * ("URIRef" and "str")
+ # note on type errors: The operator is defined but in an odd place
+ (
+ RDFS.subClassOf * ZeroOrMore, # type: ignore[operator]
+ f"<{RDFS.subClassOf}>*",
+ "rdfs:subClassOf*",
+ ),
+ (
+ RDFS.subClassOf * OneOrMore, # type: ignore[operator]
+ f"<{RDFS.subClassOf}>+",
+ "rdfs:subClassOf+",
+ ),
+ (
+ RDFS.subClassOf * ZeroOrOne, # type: ignore[operator]
+ f"<{RDFS.subClassOf}>?",
+ "rdfs:subClassOf?",
+ ),
(
RDF.type / RDFS.subClassOf * "*",
f"<{RDF.type}>/<{RDFS.subClassOf}>*",
@@ -37,6 +63,11 @@ nsm = g.namespace_manager
),
],
)
-def test_paths_n3(path, no_nsm, with_nsm):
+def test_paths_n3(
+ path: Union[InvPath, SequencePath, AlternativePath, MulPath, NegatedPath],
+ no_nsm: str,
+ with_nsm: str,
+) -> None:
+ logging.debug("path = %s", path)
assert path.n3() == no_nsm
assert path.n3(nsm) == with_nsm