From e2a2a140d32c7df2fe115c86a1a0dbbb9cf17d68 Mon Sep 17 00:00:00 2001 From: Iwan Aucamp Date: Sun, 11 Dec 2022 21:11:21 +0100 Subject: chore: add some more type hints and ignores 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. --- rdflib/paths.py | 10 +++++----- test/test_paths_n3.py | 41 ++++++++++++++++++++++++++++++++++++----- 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 -- cgit v1.2.1