From 8f88b898d0a4085f66d79bba0423a5000b0ff237 Mon Sep 17 00:00:00 2001 From: ibuler Date: Wed, 26 Oct 2022 17:38:32 +0800 Subject: [PATCH] =?UTF-8?q?pref:=20=E4=BF=AE=E6=94=B9=20migrations?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/common/apps.py | 6 ++-- .../ops/migrations/0027_auto_20221024_1709.py | 32 +++++-------------- apps/ops/signal_handlers.py | 17 +++++----- 3 files changed, 21 insertions(+), 34 deletions(-) diff --git a/apps/common/apps.py b/apps/common/apps.py index 2a5799d10..c55e4c6e3 100644 --- a/apps/common/apps.py +++ b/apps/common/apps.py @@ -10,6 +10,8 @@ class CommonConfig(AppConfig): def ready(self): from . import signal_handlers from .signals import django_ready - if 'migrate' in sys.argv or 'compilemessages' in sys.argv: - return + excludes = ['migrate', 'compilemessages', 'makemigrations'] + for i in excludes: + if i in sys.argv: + return django_ready.send(CommonConfig) diff --git a/apps/ops/migrations/0027_auto_20221024_1709.py b/apps/ops/migrations/0027_auto_20221024_1709.py index 58340f75b..34e244363 100644 --- a/apps/ops/migrations/0027_auto_20221024_1709.py +++ b/apps/ops/migrations/0027_auto_20221024_1709.py @@ -11,6 +11,14 @@ class Migration(migrations.Migration): ] operations = [ + migrations.DeleteModel(name='CeleryTask'), + migrations.CreateModel( + name='CeleryTask', + fields=[ + ('id', models.UUIDField(default=uuid.uuid4, primary_key=True, serialize=False)), + ('name', models.CharField(max_length=1024)), + ] + ), migrations.CreateModel( name='CeleryTaskExecution', fields=[ @@ -25,28 +33,4 @@ class Migration(migrations.Migration): ('date_finished', models.DateTimeField(null=True)), ], ), - migrations.RemoveField( - model_name='celerytask', - name='args', - ), - migrations.RemoveField( - model_name='celerytask', - name='date_published', - ), - migrations.RemoveField( - model_name='celerytask', - name='date_start', - ), - migrations.RemoveField( - model_name='celerytask', - name='is_finished', - ), - migrations.RemoveField( - model_name='celerytask', - name='kwargs', - ), - migrations.RemoveField( - model_name='celerytask', - name='state', - ), ] diff --git a/apps/ops/signal_handlers.py b/apps/ops/signal_handlers.py index 3cb9b3f70..a444558bc 100644 --- a/apps/ops/signal_handlers.py +++ b/apps/ops/signal_handlers.py @@ -20,16 +20,17 @@ TASK_LANG_CACHE_TTL = 1800 @receiver(django_ready) def sync_registered_tasks(*args, **kwargs): with transaction.atomic(): - db_tasks = CeleryTask.objects.all() + try: + db_tasks = CeleryTask.objects.all() + except Exception as e: + return celery_task_names = [key for key in app.tasks] - db_task_names = [task.name for task in db_tasks] + db_task_names = db_tasks.values_list('name', flat=True) - for task in db_tasks: - if task.name not in celery_task_names: - task.delete() - for task in celery_task_names: - if task not in db_task_names: - CeleryTask(name=task).save() + db_tasks.exclude(name__in=celery_task_names).delete() + not_in_db_tasks = set(celery_task_names) - set(db_task_names) + tasks_to_create = [CeleryTask(name=name) for name in not_in_db_tasks] + CeleryTask.objects.bulk_create(tasks_to_create) @signals.before_task_publish.connect