aboutsummaryrefslogtreecommitdiffstats
path: root/bsfs/graph/nodes.py
diff options
context:
space:
mode:
authorMatthias Baumgartner <dev@igsor.net>2022-12-18 14:15:18 +0100
committerMatthias Baumgartner <dev@igsor.net>2022-12-18 14:15:18 +0100
commite19c8f9d0818a147832df0945188ea14de9c7690 (patch)
tree6a1e388af7ace081fbe516b0c56e28ff1f1e48db /bsfs/graph/nodes.py
parent58496960926a56149c10d64e01b6df7d048eed0e (diff)
downloadbsfs-e19c8f9d0818a147832df0945188ea14de9c7690.tar.gz
bsfs-e19c8f9d0818a147832df0945188ea14de9c7690.tar.bz2
bsfs-e19c8f9d0818a147832df0945188ea14de9c7690.zip
documentation, types, and style fixes
Diffstat (limited to 'bsfs/graph/nodes.py')
-rw-r--r--bsfs/graph/nodes.py44
1 files changed, 9 insertions, 35 deletions
diff --git a/bsfs/graph/nodes.py b/bsfs/graph/nodes.py
index 7b0e8f4..c417a0e 100644
--- a/bsfs/graph/nodes.py
+++ b/bsfs/graph/nodes.py
@@ -5,7 +5,6 @@ A copy of the license is provided with the project.
Author: Matthias Baumgartner, 2022
"""
# imports
-import itertools
import time
import typing
@@ -87,34 +86,14 @@ class Nodes():
pred: URI, # FIXME: URI or _schema.Predicate?
value: typing.Any,
) -> 'Nodes':
- """
- """
- try:
- # insert triples
- self.__set(pred, value)
- # save changes
- self._backend.commit()
-
- except (
- errors.PermissionDeniedError, # tried to set a protected predicate (ns.bsm.t_created)
- errors.ConsistencyError, # node types are not in the schema or don't match the predicate
- errors.InstanceError, # guids/values don't have the correct type
- TypeError, # value is supposed to be a Nodes instance
- ValueError, # multiple values passed to unique predicate
- ):
- # revert changes
- self._backend.rollback()
- # notify the client
- raise
-
- return self
+ """Set predicate *pred* to *value*."""
+ return self.set_from_iterable([(pred, value)])
def set_from_iterable(
self,
predicate_values: typing.Iterable[typing.Tuple[URI, typing.Any]], # FIXME: URI or _schema.Predicate?
) -> 'Nodes':
- """
- """
+ """Set mutliple predicate-value pairs at once."""
# TODO: Could group predicate_values by predicate to gain some efficiency
# TODO: ignore errors on some predicates; For now this could leave residual
# data (e.g. some nodes were created, some not).
@@ -137,14 +116,11 @@ class Nodes():
# notify the client
raise
+ # FIXME: How about other errors? Shouldn't I then rollback as well?!
+
return self
- def __set(
- self,
- predicate: URI,
- value: typing.Any,
- #on_error: str = 'ignore', # ignore, rollback
- ):
+ def __set(self, predicate: URI, value: typing.Any):
"""
"""
# get normalized predicate. Raises KeyError if *pred* not in the schema.
@@ -216,11 +192,9 @@ class Nodes():
else:
raise errors.UnreachableError()
- def _ensure_nodes(
- self,
- node_type: _schema.Node,
- guids: typing.Iterable[URI],
- ):
+ def _ensure_nodes(self, node_type: _schema.Node, guids: typing.Iterable[URI]):
+ """
+ """
# check node existence
guids = set(guids)
existing = set(self._backend.exists(node_type, guids))