From c82be665bffa8eec7269bcfd94b3b8129b518b1b Mon Sep 17 00:00:00 2001 From: Dominik George <dominik.george@teckids.org> Date: Tue, 16 Feb 2021 20:32:16 +0100 Subject: [PATCH] Replace default app Task with a task that runs on_commit --- aleksis/core/celery.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/aleksis/core/celery.py b/aleksis/core/celery.py index 27a67c539..b9f0518fe 100644 --- a/aleksis/core/celery.py +++ b/aleksis/core/celery.py @@ -1,5 +1,7 @@ import os +from django.db import transaction + from celery import Celery os.environ.setdefault("DJANGO_SETTINGS_MODULE", "aleksis.core.settings") @@ -7,3 +9,14 @@ os.environ.setdefault("DJANGO_SETTINGS_MODULE", "aleksis.core.settings") app = Celery("aleksis") # noqa app.config_from_object("django.conf:settings", namespace="CELERY") app.autodiscover_tasks() + + +class OnCommitTask(app.Task): + """Task that is delayed at least until the current transaction commits.""" + def delay(self, *args, **kwargs): + def _real_delay(): + return super().delay(*args, **kwargs) + transaction.on_commit(_real_delay) + + +app.Task = OnCommitTask -- GitLab