Commit 6742cbb2 by Őry Máté

dashboard: fix send_email_notifications implementation

parent 5d9f0a4a
...@@ -18,6 +18,8 @@ ...@@ -18,6 +18,8 @@
import logging import logging
from django.conf import settings from django.conf import settings
from django.core.mail import send_mail from django.core.mail import send_mail
from django.core.urlresolvers import reverse
from django.db.models import Q
from django.template.loader import render_to_string from django.template.loader import render_to_string
from django.utils import timezone from django.utils import timezone
from django.utils.translation import ungettext, override from django.utils.translation import ungettext, override
...@@ -31,20 +33,25 @@ logger = logging.getLogger(__name__) ...@@ -31,20 +33,25 @@ logger = logging.getLogger(__name__)
@celery.task(ignore_result=True) @celery.task(ignore_result=True)
def send_email_notifications(): def send_email_notifications():
msgs = {} msgs = {}
for i in Notification.objects.filter(status=Notification.STATUS.new, q = Q(status=Notification.STATUS.new) & (
valid_until__lt=timezone.now()): Q(valid_until__lt=timezone.now()) | Q(valid_until=None))
for i in Notification.objects.filter(q):
if i.to not in msgs: if i.to not in msgs:
msgs[i.to] = [] msgs[i.to] = []
msgs[i.to].append(i) msgs[i.to].append(i)
from_email = settings['DEFAULT_FROM_EMAIL'] from_email = settings.DEFAULT_FROM_EMAIL
for user, i in msgs.iteritems: for user, i in msgs.iteritems():
if (not user.profile or not user.email or not if (not user.profile or not user.email or not
user.profile.email_notifications): user.profile.email_notifications):
logger.debug("%s gets no notifications", unicode(user))
continue continue
with override(user.profile.language): with override(user.profile.preferred_language):
context = {'user': user, 'messages': i} context = {'user': user.profile, 'messages': i,
'url': (settings.DJANGO_URL.rstrip("/") +
reverse("dashboard.views.notifications")),
'site': settings.COMPANY_NAME}
subject = ungettext("%d new notification", subject = ungettext("%d new notification",
"%d new notifications", len(i)) % len(i) "%d new notifications", len(i)) % len(i)
body = render_to_string('dashboard/notifications/email.txt', body = render_to_string('dashboard/notifications/email.txt',
...@@ -52,8 +59,10 @@ def send_email_notifications(): ...@@ -52,8 +59,10 @@ def send_email_notifications():
try: try:
send_mail(subject, body, from_email, (user.email, )) send_mail(subject, body, from_email, (user.email, ))
except: except:
logger.error("Failed to send mail to", user, exc_info=True) logger.error("Failed to send mail to %s", user, exc_info=True)
else: else:
logger.info("Delivered notifications %s",
" ".join(j.pk for j in i))
for j in i: for j in i:
j.status = j.STATUS.delivered j.status = j.STATUS.delivered
j.save() j.save()
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment