def fire(signal_name, obj=None, namespace="aristotle_mdr.contrib.async_signals", **kwargs): from django.utils.module_loading import import_string message = kwargs if getattr(settings, 'ARISTOTLE_ASYNC_SIGNALS', False): # pragma: no cover -- We've dropped channels, and are awaiting (pun) on celery stuff message.update({ '__object__': { 'pk': obj.pk, 'app_label': obj._meta.app_label, 'model_name': obj._meta.model_name, }, # "__signal__": signal_name, }) from aristotle_bg_workers.celery import app message = clean_signal(message) app.send_task( 'fire_async_signal', args=[namespace, signal_name], kwargs={"message": message} ) # Channel("aristotle_mdr.contrib.channels.%s" % signal_name).send(message) else: message.update({'__object__': {'object': obj}}) import_string("%s.%s" % (namespace, signal_name))(message)
def get(self, request, task_name): task_promise = app.send_task( task_name, kwargs={"requester": self.request.user.email}) display_name = get_pretty_name(task_name) return HttpResponse(task_promise.id)
def async_handle_delete(self, sender, instance, **kwargs): if not settings.ARISTOTLE_ASYNC_SIGNALS: super().handle_delete(sender, instance, **kwargs) else: from aristotle_bg_workers.celery import app app.send_task( 'update_search_index', args=[ 'delete', { # sender 'app_label': sender._meta.app_label, 'model_name': sender._meta.model_name, }, { # instance 'pk': instance.pk, 'app_label': instance._meta.app_label, 'model_name': instance._meta.model_name, }, ], kwargs=kwargs )
def async_handle_save(self, sender, instance, **kwargs): if not settings.ARISTOTLE_ASYNC_SIGNALS: super().handle_save(sender, instance, **kwargs) else: from aristotle_mdr.contrib.async_signals.utils import clean_signal message = clean_signal(kwargs) from aristotle_bg_workers.celery import app app.send_task( 'update_search_index', args=[ 'save', { # sender 'app_label': sender._meta.app_label, 'model_name': sender._meta.model_name, }, { # instance 'pk': instance.pk, 'app_label': instance._meta.app_label, 'model_name': instance._meta.model_name, }, ], kwargs=message )
def get(self, request, task_name): task_promise = app.send_task(task_name) display_name = get_pretty_name(task_name) store_task(task_promise.id, display_name, request.user) return HttpResponse(task_promise.id)
def get(self, request, task_name): task_promise = app.send_task(task_name, kwargs={"requester": self.request.user.email}) display_name = get_pretty_name(task_name) return HttpResponse(task_promise.id)
def run_task_by_name_on_commit(task: str, args: Iterable = [], kwargs: Mapping = {}): """ Run a celery task by name after the next database commit (if we are in a transaction) The function above is preffered, only use this one if you can't import the task """ transaction.on_commit(lambda: app.send_task(task, args, kwargs))