diff options
Diffstat (limited to 'bsfs/graph/nodes.py')
-rw-r--r-- | bsfs/graph/nodes.py | 44 |
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)) |