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) 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): class EventTask(app.Task):
def __call__(self, *args, **kwargs): def __call__(self, *args, **kwargs):
if 'event_id' in kwargs: if 'event_id' in kwargs:
@@ -88,21 +99,9 @@ class EventTask(app.Task):
return ret return ret
class ProfiledEventTask(ProfiledTask, EventTask): class ProfiledEventTask(TransactionAwareTaskMixin, ProfiledTask, EventTask):
pass pass
class TransactionAwareTask(ProfiledTask): class TransactionAwareTask(TransactionAwareTaskMixin, ProfiledTask):
""" pass
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)
)