aboutsummaryrefslogtreecommitdiffstats
path: root/bsfs/graph/graph.py
diff options
context:
space:
mode:
authorMatthias Baumgartner <dev@igsor.net>2023-03-01 12:39:42 +0100
committerMatthias Baumgartner <dev@igsor.net>2023-03-01 12:39:42 +0100
commitf9eec185bf3d857c220e5d78de75ec6713437330 (patch)
treee59a4a0fa57f3602e774891ebe4dba52b7518a7a /bsfs/graph/graph.py
parent9b490d19dcebc0fc24cb2ab89a783f1f7d6147f7 (diff)
downloadbsfs-f9eec185bf3d857c220e5d78de75ec6713437330.tar.gz
bsfs-f9eec185bf3d857c220e5d78de75ec6713437330.tar.bz2
bsfs-f9eec185bf3d857c220e5d78de75ec6713437330.zip
Construct Graph and Nodes with AC instead of user
Diffstat (limited to 'bsfs/graph/graph.py')
-rw-r--r--bsfs/graph/graph.py35
1 files changed, 23 insertions, 12 deletions
diff --git a/bsfs/graph/graph.py b/bsfs/graph/graph.py
index df2e3a5..a74da01 100644
--- a/bsfs/graph/graph.py
+++ b/bsfs/graph/graph.py
@@ -40,31 +40,42 @@ class Graph():
# link to the triple storage backend.
_backend: TripleStoreBase
- # user uri.
- _user: URI
+ # access controls.
+ _ac: ac.AccessControlBase
- def __init__(self, backend: TripleStoreBase, user: URI):
+ # query resolver.
+ _resolver: resolve.Filter
+
+ # query validator.
+ _validate: validate.Filter
+
+ def __init__(
+ self,
+ backend: TripleStoreBase,
+ access_control: ac.AccessControlBase,
+ ):
+ # store members
self._backend = backend
- self._user = user
+ self._ac = access_control
+ # helper classes
self._resolver = resolve.Filter(self._backend.schema)
self._validate = validate.Filter(self._backend.schema)
- self._ac = ac.NullAC(self._backend, self._user)
# ensure Graph schema requirements
self.migrate(self._backend.schema)
def __hash__(self) -> int:
- return hash((type(self), self._backend, self._user))
+ return hash((type(self), self._backend, self._ac))
def __eq__(self, other) -> bool:
return isinstance(other, type(self)) \
and self._backend == other._backend \
- and self._user == other._user
+ and self._ac == other._ac
def __repr__(self) -> str:
- return f'{typename(self)}(backend={repr(self._backend)}, user={self._user})'
+ return f'{typename(self)}({repr(self._backend)}, {self._ac})'
def __str__(self) -> str:
- return f'{typename(self)}({str(self._backend)}, {self._user})'
+ return f'{typename(self)}({str(self._backend)})'
@property
def schema(self) -> bsc.Schema:
@@ -106,7 +117,7 @@ class Graph():
"""
type_ = self.schema.node(node_type)
# NOTE: Nodes constructor materializes guids.
- return _nodes.Nodes(self._backend, self._user, type_, guids)
+ return _nodes.Nodes(self._backend, self._ac, type_, guids)
def node(self, node_type: URI, guid: URI) -> _nodes.Nodes:
"""Return node *guid* of type *node_type* as a `bsfs.graph.Nodes` instance.
@@ -131,14 +142,14 @@ class Graph():
# query the backend
guids = self._backend.get(type_, query) # no need to materialize
# return Nodes instance
- return _nodes.Nodes(self._backend, self._user, type_, guids)
+ return _nodes.Nodes(self._backend, self._ac, type_, guids)
def all(self, node_type: URI) -> _nodes.Nodes:
"""Return all instances of type *node_type*."""
# get node type
type_ = self.schema.node(node_type)
guids = self._backend.get(type_, None) # no need to materialize
- return _nodes.Nodes(self._backend, self._user, type_, guids)
+ return _nodes.Nodes(self._backend, self._ac, type_, guids)
## EOF ##