diff --git a/journal/importers/douban.py b/journal/importers/douban.py index e0f33b97..dd732540 100644 --- a/journal/importers/douban.py +++ b/journal/importers/douban.py @@ -67,6 +67,23 @@ class DoubanImporter: self.user.preference.import_status["douban_failed"] = self.failed self.user.preference.save(update_fields=["import_status"]) + @classmethod + def reset(cls, user): + user.preference.import_status["douban_pending"] = 0 + user.preference.save(update_fields=["import_status"]) + + @classmethod + def redo(cls, user): + file = user.preference.import_status["douban_file"] + imp = cls( + user, + user.preference.import_status["douban_visibility"], + user.preference.import_status["douban_mode"], + ) + imp.file = file + jid = f"Douban_{user.id}_{os.path.basename(file)}_redo" + django_rq.get_queue("import").enqueue(imp.import_from_file_task, job_id=jid) + def import_from_file(self, uploaded_file): try: wb = openpyxl.open( @@ -88,7 +105,6 @@ class DoubanImporter: ) except Exception: return False - # self.import_from_file_task(file, user, visibility) return True mark_sheet_config = { diff --git a/journal/management/commands/journal.py b/journal/management/commands/journal.py index 4e32bbc3..f024612d 100644 --- a/journal/management/commands/journal.py +++ b/journal/management/commands/journal.py @@ -1,6 +1,8 @@ from django.core.management.base import BaseCommand import pprint from journal.models import * +from journal.importers.douban import DoubanImporter +from users.models import User class Command(BaseCommand): @@ -12,6 +14,16 @@ class Command(BaseCommand): action="store_true", help="purge invalid data (visibility=99)", ) + parser.add_argument( + "--douban-import-redo", + action="store", + help="reimport for user id", + ) + parser.add_argument( + "--douban-import-reset", + action="store", + help="reset for user id", + ) def handle(self, *args, **options): if options["cleanup"]: @@ -20,4 +32,14 @@ class Command(BaseCommand): self.stdout.write(f"Cleaning up {cls}...") cls.objects.filter(visibility=99).delete() + if options["douban_import_redo"]: + user = User.objects.get(pk=options["douban_import_redo"]) + self.stdout.write(f"Redo import for {user}...") + DoubanImporter.redo(user) + + if options["douban_import_reset"]: + user = User.objects.get(pk=options["douban_import_reset"]) + self.stdout.write(f"Reset import for {user}...") + DoubanImporter.reset(user) + self.stdout.write(self.style.SUCCESS(f"Done."))