summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCharles Tapley Hoyt <cthoyt@gmail.com>2023-04-07 13:39:43 +0200
committerGitHub <noreply@github.com>2023-04-07 13:39:43 +0200
commit89982f836780650389fb893d7d94e57a0d512cf5 (patch)
treeb01b5b5ffd0098402e84b5b93e632dc0ccc06198
parent4fb468d970bb188981f2259d2c4d731b95fa8504 (diff)
downloadrdflib-89982f836780650389fb893d7d94e57a0d512cf5.tar.gz
fix: eliminate some mutable default arguments in SPARQL code (#2301)
This change eliminates some situations where a mutable object (i.e., a dictionary) was used as the default value for functions in the `rdflib.plugins.sparql.processor` module and related code. It replaces these situations with `typing.Optinal` that defaults to None, and is then handled within the function. Luckily, some of the code that the SPARQL Processor relied on already had this style, meaning not a lot of changes had to be made. This change also makes a small update to the logic in the SPARQL Processor's query function to simplify the if/else statement. This better mirrors the implementation in the `UpdateProcessor`.
-rw-r--r--rdflib/plugins/sparql/evaluate.py4
-rw-r--r--rdflib/plugins/sparql/processor.py34
-rw-r--r--rdflib/plugins/sparql/update.py6
3 files changed, 26 insertions, 18 deletions
diff --git a/rdflib/plugins/sparql/evaluate.py b/rdflib/plugins/sparql/evaluate.py
index 4f8d687b..764250c8 100644
--- a/rdflib/plugins/sparql/evaluate.py
+++ b/rdflib/plugins/sparql/evaluate.py
@@ -642,7 +642,7 @@ def evalDescribeQuery(ctx: QueryContext, query) -> Dict[str, Union[str, Graph]]:
def evalQuery(
graph: Graph,
query: Query,
- initBindings: Mapping[str, Identifier],
+ initBindings: Optional[Mapping[str, Identifier]] = None,
base: Optional[str] = None,
) -> Mapping[Any, Any]:
"""
@@ -661,7 +661,7 @@ def evalQuery(
documentation.
"""
- initBindings = dict((Variable(k), v) for k, v in initBindings.items())
+ initBindings = dict((Variable(k), v) for k, v in (initBindings or {}).items())
ctx = QueryContext(graph, initBindings=initBindings)
diff --git a/rdflib/plugins/sparql/processor.py b/rdflib/plugins/sparql/processor.py
index c2fb7e54..f10f372b 100644
--- a/rdflib/plugins/sparql/processor.py
+++ b/rdflib/plugins/sparql/processor.py
@@ -19,22 +19,30 @@ from rdflib.term import Identifier
def prepareQuery(
- queryString: str, initNs: Mapping[str, Any] = {}, base: Optional[str] = None
+ queryString: str,
+ initNs: Optional[Mapping[str, Any]] = None,
+ base: Optional[str] = None,
) -> Query:
"""
Parse and translate a SPARQL Query
"""
+ if initNs is None:
+ initNs = {}
ret = translateQuery(parseQuery(queryString), base, initNs)
ret._original_args = (queryString, initNs, base)
return ret
def prepareUpdate(
- updateString: str, initNs: Mapping[str, Any] = {}, base: Optional[str] = None
+ updateString: str,
+ initNs: Optional[Mapping[str, Any]] = None,
+ base: Optional[str] = None,
) -> Update:
"""
Parse and translate a SPARQL Update
"""
+ if initNs is None:
+ initNs = {}
ret = translateUpdate(parseUpdate(updateString), base, initNs)
ret._original_args = (updateString, initNs, base)
return ret
@@ -43,8 +51,8 @@ def prepareUpdate(
def processUpdate(
graph: Graph,
updateString: str,
- initBindings: Mapping[str, Identifier] = {},
- initNs: Mapping[str, Any] = {},
+ initBindings: Optional[Mapping[str, Identifier]] = None,
+ initNs: Optional[Mapping[str, Any]] = None,
base: Optional[str] = None,
) -> None:
"""
@@ -73,8 +81,8 @@ class SPARQLUpdateProcessor(UpdateProcessor):
def update(
self,
strOrQuery: Union[str, Update],
- initBindings: Mapping[str, Identifier] = {},
- initNs: Mapping[str, Any] = {},
+ initBindings: Optional[Mapping[str, Identifier]] = None,
+ initNs: Optional[Mapping[str, Any]] = None,
) -> None:
"""
.. caution::
@@ -108,8 +116,8 @@ class SPARQLProcessor(Processor):
def query( # type: ignore[override]
self,
strOrQuery: Union[str, Query],
- initBindings: Mapping[str, Identifier] = {},
- initNs: Mapping[str, Any] = {},
+ initBindings: Optional[Mapping[str, Identifier]] = None,
+ initNs: Optional[Mapping[str, Any]] = None,
base: Optional[str] = None,
DEBUG: bool = False,
) -> Mapping[str, Any]:
@@ -132,9 +140,7 @@ class SPARQLProcessor(Processor):
documentation.
"""
- if not isinstance(strOrQuery, Query):
- parsetree = parseQuery(strOrQuery)
- query = translateQuery(parsetree, base, initNs)
- else:
- query = strOrQuery
- return evalQuery(self.graph, query, initBindings, base)
+ if isinstance(strOrQuery, str):
+ strOrQuery = translateQuery(parseQuery(strOrQuery), base, initNs)
+
+ return evalQuery(self.graph, strOrQuery, initBindings, base)
diff --git a/rdflib/plugins/sparql/update.py b/rdflib/plugins/sparql/update.py
index f27ee9b3..5ce86f39 100644
--- a/rdflib/plugins/sparql/update.py
+++ b/rdflib/plugins/sparql/update.py
@@ -280,7 +280,9 @@ def evalCopy(ctx: QueryContext, u: CompValue) -> None:
def evalUpdate(
- graph: Graph, update: Update, initBindings: Mapping[str, Identifier] = {}
+ graph: Graph,
+ update: Update,
+ initBindings: Optional[Mapping[str, Identifier]] = None,
) -> None:
"""
@@ -315,7 +317,7 @@ def evalUpdate(
"""
for u in update.algebra:
- initBindings = dict((Variable(k), v) for k, v in initBindings.items())
+ initBindings = dict((Variable(k), v) for k, v in (initBindings or {}).items())
ctx = QueryContext(graph, initBindings=initBindings)
ctx.prologue = u.prologue