Exemplo n.º 1
0
    def get_all_for_user(
        self,
        user: User,
        include_owned: bool = True,
        include_with_role: bool = True,
        parents_ids: typing.Optional[typing.List[int]] = None,
    ) -> typing.List[Workspace]:
        """
        Get all workspaces of user
        :param user:  just an user
        :param include_owned: include workspace where user is owner
        :param include_with_role: include workspace where user has a role
        :return: list of workspaces found
        """
        query = self._base_query()
        workspace_ids = []
        rapi = RoleApi(session=self._session,
                       current_user=self._user,
                       config=self._config)
        if include_with_role:
            workspace_ids.extend(
                rapi.get_user_workspaces_ids(
                    user_id=user.user_id, min_role=UserRoleInWorkspace.READER))
        if include_owned:
            owned_workspaces = self._get_workspaces_owned_by_user(user.user_id)
            workspace_ids.extend(
                [workspace.workspace_id for workspace in owned_workspaces])

        query = self._parent_id_filter(query, parent_ids=parents_ids)
        query = query.filter(Workspace.workspace_id.in_(workspace_ids))
        query = query.order_by(Workspace.label)
        return query.all()
Exemplo n.º 2
0
 def _get_user_workspaces_id(self, min_role: int) -> typing.Optional[typing.List[int]]:
     """
     Get user workspace list or None if no user set
     """
     if self._user:
         rapi = RoleApi(config=self._config, session=self._session, current_user=self._user)
         return rapi.get_user_workspaces_ids(self._user.user_id, min_role)
     return None
Exemplo n.º 3
0
 def get_user_orphan_workspaces(self, user: User):
     """Get all user workspaces where the users is not member of the parent and parent exists"""
     query = self._base_query()
     workspace_ids = []
     rapi = RoleApi(session=self._session,
                    current_user=self._user,
                    config=self._config)
     workspace_ids.extend(
         rapi.get_user_workspaces_ids(user_id=user.user_id,
                                      min_role=UserRoleInWorkspace.READER))
     query = query.filter(Workspace.workspace_id.in_(workspace_ids))
     query = query.filter(Workspace.parent_id.isnot(None))
     query = query.filter(Workspace.parent_id.notin_(workspace_ids))
     return self.default_order_workspace(query).all()
Exemplo n.º 4
0
    def get_one_by_filemanager_filename(
            self,
            filemanager_filename: str,
            parent: typing.Optional[Workspace] = None) -> Workspace:
        """
        get workspace according to filemanager_filename given and parent, if multiple workspace have
        same filemanager_filename, return first one found.

        filemanager_filename is filename like version of workspace with specific extension '.space'
        """
        if not filemanager_filename.endswith(Workspace.FILEMANAGER_EXTENSION):
            raise WorkspaceNotFound(
                'Invalid Workspace name. Filemanager_filename should end with "{}"'
                .format(Workspace.FILEMANAGER_EXTENSION))
        label = filemanager_filename[:-len(Workspace.FILEMANAGER_EXTENSION)]
        query = self._base_query().filter(Workspace.label == label)
        if parent:
            query = query.filter(Workspace.parent_id == parent.workspace_id)
        else:
            rapi = RoleApi(session=self._session,
                           current_user=self._user,
                           config=self._config)
            workspace_ids = rapi.get_user_workspaces_ids(
                user_id=self._user.user_id,
                min_role=UserRoleInWorkspace.READER)
            query = query.filter(
                or_(
                    Workspace.parent_id == None,  # noqa: E711
                    Workspace.parent_id.notin_(workspace_ids),
                ))
        result = self.default_order_workspace(query).all()
        if len(result) == 0:
            raise WorkspaceNotFound(
                "workspace {} does not exist or not visible for user".format(
                    id))

        return result[0]