| author | ymh <ymh.work@gmail.com> |
| Thu, 02 Jul 2015 19:48:57 +0200 | |
| changeset 632 | eff2287e93fb |
| parent 530 | 5d3b4e1e5b34 |
| child 634 | 6bdb0e1c0b84 |
| permissions | -rw-r--r-- |
| 481 | 1 |
# -*- coding: utf-8 -*- |
2 |
''' |
|
3 |
Created on Mar 5, 2015 |
|
4 |
||
5 |
@author: ymh |
|
6 |
''' |
|
7 |
||
8 |
import logging |
|
| 530 | 9 |
import os |
| 481 | 10 |
|
11 |
from django.conf import settings |
|
12 |
from django.contrib.auth import get_user_model |
|
13 |
from django.core import mail |
|
14 |
from django.core.mail.message import EmailMultiAlternatives |
|
15 |
from django.core.management.base import NoArgsCommand |
|
|
632
eff2287e93fb
correct some small problems with urls in mails. set final version
ymh <ymh.work@gmail.com>
parents:
530
diff
changeset
|
16 |
from django.core.urlresolvers import set_script_prefix |
| 481 | 17 |
from django.template.base import TemplateDoesNotExist |
18 |
from django.template.loader import render_to_string |
|
| 530 | 19 |
import premailer |
| 481 | 20 |
|
21 |
from hdalab.models.renkan import HdalabRenkan |
|
22 |
||
23 |
||
24 |
User = get_user_model() |
|
25 |
logger = logging.getLogger(__name__) |
|
26 |
||
27 |
TEMPLATE_NAME = "mails/moderation_notice" |
|
28 |
class Command(NoArgsCommand): |
|
29 |
||
30 |
def handle_noargs(self, **options): |
|
31 |
# query renkan to moderate |
|
|
632
eff2287e93fb
correct some small problems with urls in mails. set final version
ymh <ymh.work@gmail.com>
parents:
530
diff
changeset
|
32 |
set_script_prefix(settings.SCRIPT_PREFIX) |
|
eff2287e93fb
correct some small problems with urls in mails. set final version
ymh <ymh.work@gmail.com>
parents:
530
diff
changeset
|
33 |
|
| 481 | 34 |
renkan_query = HdalabRenkan.objects.filter(state=HdalabRenkan.MODERATED) |
35 |
||
36 |
renkan_count = renkan_query.count() |
|
37 |
||
38 |
if renkan_count == 0: |
|
39 |
logger.info("Send moderation email : no renkan to moderate. exiting") |
|
40 |
logger.debug("Send moderation email : %d renkan(s) to moderate", renkan_count) |
|
41 |
||
42 |
renkan_list = list(renkan_query.select_related()[:20]) |
|
43 |
||
44 |
connection = mail.get_connection() |
|
45 |
try: |
|
46 |
connection.open() |
|
47 |
for email_recipient in User.objects.filter(is_staff=True): |
|
48 |
if not email_recipient.email: |
|
49 |
continue |
|
50 |
||
51 |
msg_html = "" |
|
52 |
msg_txt = "" |
|
53 |
try: |
|
54 |
context = { |
|
55 |
'renkan_count': renkan_count, |
|
56 |
'renkan_list': renkan_list, |
|
57 |
'WEB_URL': settings.WEB_URL, |
|
58 |
'email_recipient': email_recipient |
|
59 |
} |
|
| 530 | 60 |
msg_html = premailer.transform(render_to_string(TEMPLATE_NAME+".html", context), base_url=os.path.join(settings.STATIC_ROOT,'site')) |
61 |
msg_txt = render_to_string(TEMPLATE_NAME+".txt", context) |
|
| 481 | 62 |
except TemplateDoesNotExist: |
63 |
logger.error("Mail template %s not found", TEMPLATE_NAME) |
|
64 |
return |
|
65 |
except Exception as e: |
|
66 |
logger.error("Error rendering template %s : %r", TEMPLATE_NAME, e) |
|
67 |
raise e |
|
68 |
||
69 |
if not msg_html and not msg_txt: |
|
70 |
logger.info("Send moderation email: nothing to email exiting") |
|
71 |
continue |
|
72 |
emsg = EmailMultiAlternatives("Moderation Renkan", msg_txt, settings.DEFAULT_FROM_EMAIL, [email_recipient.email], connection=connection) |
|
73 |
emsg.attach_alternative(msg_html, "text/html") |
|
74 |
emsg.send(fail_silently=True) |
|
75 |
finally: |
|
76 |
connection.close() |
|
77 |