Esempio n. 1
0
    def handle(self, *args, **kwargs):
        self.stdout.write('Start to get all existing repo')
        self.all_repo = [
            repo.repo_id for repo in seafile_api.get_repo_list(-1, -1)
        ]
        trash_repo = [
            repo.repo_id for repo in seafile_api.get_trash_repo_list(-1, -1)
        ]
        self.all_repo.extend(trash_repo)
        self.stdout.write('Successly get all existing repos')

        #on_delete is  CASCADE, so FileTag/FileComment will be deleted
        self.tables = {
            'FileUUIDMap': FileUUIDMap,
            'RevisionTags': RevisionTags,
            'UserStarredFiles': UserStarredFiles,
            'ExtraGroupsSharePermission': ExtraGroupsSharePermission,
            'ExtraSharePermission': ExtraSharePermission,
            'UploadLinkShare': UploadLinkShare
        }

        for table in list(self.tables.items()):
            self.clear_table(table[0], table[1])

        self.stdout.write('All invalid repo data are deleted')
Esempio n. 2
0
    def get(self, request, format=None):
        """ List deleted repos (by owner)

        Permission checking:
        1. only admin can perform this action.
        """

        if not request.user.admin_permissions.can_manage_library():
            return api_error(status.HTTP_403_FORBIDDEN, 'Permission denied.')

        # list by owner
        search_owner = request.GET.get('owner', '')
        if search_owner:
            if not is_valid_username(search_owner):
                error_msg = 'owner invalid.'
                return api_error(status.HTTP_400_BAD_REQUEST, error_msg)

            repos = seafile_api.get_trash_repos_by_owner(search_owner)

            return_repos = []
            for repo in repos:
                result = get_trash_repo_info(repo)
                return_repos.append(result)

            return Response({
                "search_owner": search_owner,
                "repos": return_repos
            })

        # list by page
        try:
            current_page = int(request.GET.get('page', '1'))
            per_page = int(request.GET.get('per_page', '100'))
        except ValueError:
            current_page = 1
            per_page = 100

        start = (current_page - 1) * per_page
        limit = per_page + 1

        repos_all = seafile_api.get_trash_repo_list(start, limit)

        if len(repos_all) > per_page:
            repos_all = repos_all[:per_page]
            has_next_page = True
        else:
            has_next_page = False

        return_results = []
        for repo in repos_all:
            repo_info = get_trash_repo_info(repo)
            return_results.append(repo_info)

        page_info = {
            'has_next_page': has_next_page,
            'current_page': current_page
        }

        return Response({"page_info": page_info, "repos": return_results})
    def handle(self, *args, **kwargs):
        all_repo= [repo.repo_id for repo in seafile_api.get_repo_list(-1, -1)]
        trash_repo = [repo.repo_id for repo in seafile_api.get_trash_repo_list(-1, -1)]
        all_repo.extend(trash_repo)
        #on_delete is  CASCADE, so FileTag will be deleted
        fup_repo_ids = FileUUIDMap.objects.all().values_list('repo_id', flat=True)
        FileUUIDMap.objects.filter(repo_id__in=list(set(fup_repo_ids) - set(all_repo))).delete()
        rt_repo_ids = RevisionTags.objects.all().values_list('repo_id', flat=True)
        RevisionTags.objects.filter(repo_id__in=list(set(rt_repo_ids) - set(all_repo))).delete()


        self.stdout.write('Invalid repo data deleted')
Esempio n. 4
0
    def get(self, request, format=None):
        """ List deleted repos (by owner)

        Permission checking:
        1. only admin can perform this action.
        """

        # list by owner
        search_owner = request.GET.get('owner', '')
        if search_owner:
            if not is_valid_username(search_owner):
                error_msg = 'owner invalid.'
                return api_error(status.HTTP_400_BAD_REQUEST, error_msg)

            repos = seafile_api.get_trash_repos_by_owner(search_owner)

            return_repos = []
            for repo in repos:
                result = get_trash_repo_info(repo)
                return_repos.append(result)

            return Response({"search_owner": search_owner, "repos": return_repos})

        # list by page
        try:
            current_page = int(request.GET.get('page', '1'))
            per_page = int(request.GET.get('per_page', '100'))
        except ValueError:
            current_page = 1
            per_page = 100

        start = (current_page - 1) * per_page
        limit = per_page + 1

        repos_all = seafile_api.get_trash_repo_list(start, limit)

        if len(repos_all) > per_page:
            repos_all = repos_all[:per_page]
            has_next_page = True
        else:
            has_next_page = False

        return_results = []
        for repo in repos_all:
            repo_info = get_trash_repo_info(repo)
            return_results.append(repo_info)

        page_info = {
            'has_next_page': has_next_page,
            'current_page': current_page
        }

        return Response({"page_info": page_info, "repos": return_results})