Make all EventTasks transaction-aware

This commit is contained in:
Raphael Michel
2019-09-19 16:23:40 +02:00
parent 59b7f0a03d
commit 3f7807d242

View File

@@ -63,6 +63,17 @@ class ProfiledTask(app.Task):
return super().on_success(retval, task_id, args, kwargs)
class TransactionAwareTaskMixin:
def apply_async(self, *args, **kwargs):
"""
Unlike the default task in celery, this task does not return an async
result
"""
transaction.on_commit(
lambda: super().apply_async(*args, **kwargs)
)
class EventTask(app.Task):
def __call__(self, *args, **kwargs):
if 'event_id' in kwargs:
@@ -88,21 +99,9 @@ class EventTask(app.Task):
return ret
class ProfiledEventTask(ProfiledTask, EventTask):
class ProfiledEventTask(TransactionAwareTaskMixin, ProfiledTask, EventTask):
pass
class TransactionAwareTask(ProfiledTask):
"""
Task class which is aware of django db transactions and only executes tasks
after transaction has been committed
"""
def apply_async(self, *args, **kwargs):
"""
Unlike the default task in celery, this task does not return an async
result
"""
transaction.on_commit(
lambda: super(TransactionAwareTask, self).apply_async(*args, **kwargs)
)
class TransactionAwareTask(TransactionAwareTaskMixin, ProfiledTask):
pass