def dispatch_to_users(notification_name, eta=None, context={}, backends=None, **kwargs): notification = get_notification(notification_name) task_backends = notification.get_task_backends(backends) for backend in task_backends: users = notification.get_users(backend, context) for user in users: if isinstance(user, AnonymousUser): send_anonymous_notification.apply_async( (notification_name, backend, context), eta=eta) else: user_backend = UserBackendRegistry.objects.filter( user=user, backend=backend).first() if user_backend: deferred = DeferredNotification.objects.create( notification=notification_name, user_backend=user_backend, context=context) if celery_is_available(): task_id = send_notification.apply_async( (deferred.id,), eta=eta) deferred.task_id = task_id deferred.save() else: send_notification(deferred.id)
def schedule(self, context={}, delay_timedelta=None, eta=None, backends=None): run_eta = self.get_task_eta(delay_timedelta, eta) backends = self.get_task_backends(backends) if celery_is_available(): dispatch_to_users.delay( self.name, eta=run_eta, context=context, backends=backends) else: dispatch_to_users( self.name, eta=run_eta, context=context, backends=backends)
from __future__ import unicode_literals from django.utils import timezone from ahem.utils import get_notification, get_backend, celery_is_available from ahem.models import DeferredNotification, UserBackendRegistry if celery_is_available(): from celery import shared_task else: def shared_task(func): return func @shared_task def dispatch_to_users(notification_name, eta=None, context={}, backends=None, **kwargs): notification = get_notification(notification_name) task_backends = notification.get_task_backends(backends) users = notification.get_users(context) for user in users: for backend in task_backends: user_backend = UserBackendRegistry.objects.filter(user=user, backend=backend).first() if user_backend: deferred = DeferredNotification.objects.create( notification=notification_name, user_backend=user_backend, context=context) if celery_is_available():
from ahem.utils import celery_is_available if not celery_is_available(): print("ATTENTION: Running Ahem tests without Celery")