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')
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')
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})