mirror of
https://github.com/haiwen/seahub.git
synced 2025-09-25 14:50:29 +00:00
clear invalid repo data by commond (#1928)
This commit is contained in:
@@ -1,22 +1,42 @@
|
||||
from django.core.management.base import BaseCommand
|
||||
|
||||
from seaserv import seafile_api
|
||||
from seahub.revision_tag.models import RevisionTags
|
||||
from seahub.tags.models import FileUUIDMap
|
||||
from seahub.base.models import UserStarredFiles
|
||||
from seahub.revision_tag.models import RevisionTags
|
||||
from seahub.wiki.models import PersonalWiki, GroupWiki
|
||||
from seahub.share.models import ExtraGroupsSharePermission, \
|
||||
ExtraSharePermission, UploadLinkShare
|
||||
|
||||
|
||||
class Command(BaseCommand):
|
||||
help = "Clear invalid data when repo deleted"
|
||||
|
||||
def handle(self, *args, **kwargs):
|
||||
all_repo= [repo.repo_id for repo in seafile_api.get_repo_list(-1, -1)]
|
||||
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)]
|
||||
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.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,
|
||||
'PersonalWiki': PersonalWiki, 'GroupWiki': GroupWiki,
|
||||
'UserStarredFiles': UserStarredFiles,
|
||||
'ExtraGroupsSharePermission': ExtraGroupsSharePermission,
|
||||
'ExtraSharePermission': ExtraSharePermission,
|
||||
'UploadLinkShare': UploadLinkShare}
|
||||
|
||||
self.stdout.write('Invalid repo data deleted')
|
||||
for table in self.tables.items():
|
||||
self.clear_table(table[0], table[1])
|
||||
|
||||
self.stdout.write('All invalid repo data are deleted')
|
||||
|
||||
def clear_table(self, table_name, table_model):
|
||||
""" clear invalid data on table
|
||||
table must has `repo_id` column and without foreign relationship
|
||||
"""
|
||||
self.stdout.write('Start to clear %s table' % table_name)
|
||||
tb_repo_ids = table_model.objects.all().values_list('repo_id', flat=True)
|
||||
table_model.objects.filter(repo_id__in=list(set(tb_repo_ids) - set(self.all_repo))).delete()
|
||||
self.stdout.write('%s table has been clear' % table_name)
|
||||
|
Reference in New Issue
Block a user