Skip to content
Snippets Groups Projects
Verified Commit 7551d8e0 authored by Tom Teichler's avatar Tom Teichler :beers:
Browse files

Merge branch '359-make-celery-non-optional' of...

Merge branch '359-make-celery-non-optional' of edugit.org:AlekSIS/Official/AlekSIS-Core into 359-make-celery-non-optional
parents 4d65440b 3bae1a9a
No related branches found
No related tags found
Loading
Pipeline #5922 passed
import os
from functools import partial
from django.db import transaction
from celery import Celery
......@@ -7,3 +10,10 @@ 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()
def _amqp_send_task_message_on_commit(*args, **kwargs):
transaction.on_commit(partial(app.amqp.send_task_message, *args, **kwargs))
app.amqp.send_task_message = _amqp_send_task_message_on_commit
......@@ -113,7 +113,7 @@ class ProgressRecorder(AbstractProgressRecorder):
percent = 0
if self._total > 0:
percent = self._current / self._total
percent = self._current / self._total * 100
if description is not None:
self._messages.append((level, description))
......@@ -140,18 +140,23 @@ class ProgressRecorder(AbstractProgressRecorder):
self.set_progress(description=message, level=level)
def recorded_task(orig: Callable, *args, **kwargs) -> app.Task:
def recorded_task(orig: Optional[Callable] = None, **kwargs) -> Union[Callable, app.Task]:
"""Create a Celery task that receives a ProgressRecorder.
Returns a Task object with a wrapper that passes the recorder instance
as the recorder keyword argument.
"""
@wraps(orig)
def _inject_recorder(task, *args, **kwargs):
recorder = ProgressRecorder(task)
return orig(*args, **kwargs, recorder=recorder)
def _real_decorator(orig: Callable) -> app.Task:
@wraps(orig)
def _inject_recorder(task, *args, **kwargs):
recorder = ProgressRecorder(task)
return orig(*args, **kwargs, recorder=recorder)
# Force bind to True because _inject_recorder needs the Task object
kwargs["bind"] = True
return app.task(_inject_recorder, *args, **kwargs)
# Force bind to True because _inject_recorder needs the Task object
kwargs["bind"] = True
return app.task(_inject_recorder, **kwargs)
if orig and not kwargs:
return _real_decorator(orig)
return _real_decorator
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment