Source code for sisense.data.permission
from sisense.resource import Resource
from sisense.api import API
[docs]class Permission(Resource):
def __init__(self, api: API, rjson: dict = None, elasticube_name: str = None):
super().__init__(api, rjson)
self._elasticube = elasticube_name
[docs] def all(self, elasticube: str = None) -> list:
"""
Get permissions (shares) for the specified elasticube.
:param elasticube: (str, default None) Elasticube's name. If None, use self.elasticube.
:return: a list of permission objects
"""
elasticube = elasticube if elasticube else self._elasticube
content = self._api.get(f'elasticubes/localhost/{elasticube}/permissions')
if 'shares' in content:
permissions = [Permission(self._api, share, elasticube) for share in content['shares']]
else:
permissions = []
return list(permissions)
[docs] def get(self, oid: str, elasticube: str = None) -> Resource:
"""
Get the permission for a user/group.
:param oid: (str) Party ID.
:param elasticube: (str, default None) Elasticube's name. If None, use self.elasticube.
:return: (Permission) if found. None, otherwise.
"""
for share in self.all(elasticube):
if share.party == oid:
return share
return None
[docs] def create(self, oid: str = None, ptype: str = None, level: str = None, elasticube: str = None) -> Resource:
"""
Create new permission to the specified elasticube.
If any optional parameters are None, add the current permission.
:param oid: (str, default None) Group/user id.
:param ptype: (str, default None) Party's type. Possible values are: 'group' or 'user'.
:param level: (str, default None) Permission's type. Possible values are: 'r' (read) or 'w' (write).
:param elasticube: (str, default None) Elasticube's name. If None, use self.elasticube.
:return: (Permission) The new permission.
"""
elasticube = elasticube if elasticube else self._elasticube
data = self.json if oid is None or type is None or level is None else {'party': oid,
'type': ptype,
'permission': level}
permissions = [share.json for share in self.all(elasticube)] + [data]
self._api.put(f'elasticubes/localhost/{elasticube}/permissions', data=permissions)
return Permission(self._api, data, elasticube)
[docs] def delete(self):
"""Delete the current permission."""
permissions = self.all()
self._api.delete(f'elasticubes/localhost/{self._elasticube}/permissions')
[share.create(share.party, share.type, share.permission) for share in permissions if share.party != self.party]
[docs] def delete_all(self, elasticube: str = None):
"""
Delete all elasticube's permissions.
:param elasticube: (str, default None) Elasticube's name. If None, use self.elasticube.
"""
elasticube = elasticube if elasticube else self._elasticube
self._api.delete(f'elasticubes/localhost/{elasticube}/permissions')