|
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 |
|
|
16 |
from django.template.base import TemplateDoesNotExist |
|
|
17 |
from django.template.loader import render_to_string |
|
530
|
18 |
import premailer |
|
481
|
19 |
|
|
|
20 |
from hdalab.models.renkan import HdalabRenkan |
|
|
21 |
|
|
|
22 |
|
|
|
23 |
User = get_user_model() |
|
|
24 |
logger = logging.getLogger(__name__) |
|
|
25 |
|
|
|
26 |
TEMPLATE_NAME = "mails/moderation_notice" |
|
|
27 |
class Command(NoArgsCommand): |
|
|
28 |
|
|
|
29 |
def handle_noargs(self, **options): |
|
|
30 |
# query renkan to moderate |
|
|
31 |
renkan_query = HdalabRenkan.objects.filter(state=HdalabRenkan.MODERATED) |
|
|
32 |
|
|
|
33 |
renkan_count = renkan_query.count() |
|
|
34 |
|
|
|
35 |
if renkan_count == 0: |
|
|
36 |
logger.info("Send moderation email : no renkan to moderate. exiting") |
|
|
37 |
logger.debug("Send moderation email : %d renkan(s) to moderate", renkan_count) |
|
|
38 |
|
|
|
39 |
renkan_list = list(renkan_query.select_related()[:20]) |
|
|
40 |
|
|
|
41 |
connection = mail.get_connection() |
|
|
42 |
try: |
|
|
43 |
connection.open() |
|
|
44 |
for email_recipient in User.objects.filter(is_staff=True): |
|
|
45 |
if not email_recipient.email: |
|
|
46 |
continue |
|
|
47 |
|
|
|
48 |
msg_html = "" |
|
|
49 |
msg_txt = "" |
|
|
50 |
try: |
|
|
51 |
context = { |
|
|
52 |
'renkan_count': renkan_count, |
|
|
53 |
'renkan_list': renkan_list, |
|
|
54 |
'WEB_URL': settings.WEB_URL, |
|
|
55 |
'email_recipient': email_recipient |
|
|
56 |
} |
|
530
|
57 |
msg_html = premailer.transform(render_to_string(TEMPLATE_NAME+".html", context), base_url=os.path.join(settings.STATIC_ROOT,'site')) |
|
|
58 |
msg_txt = render_to_string(TEMPLATE_NAME+".txt", context) |
|
481
|
59 |
except TemplateDoesNotExist: |
|
|
60 |
logger.error("Mail template %s not found", TEMPLATE_NAME) |
|
|
61 |
return |
|
|
62 |
except Exception as e: |
|
|
63 |
logger.error("Error rendering template %s : %r", TEMPLATE_NAME, e) |
|
|
64 |
raise e |
|
|
65 |
|
|
|
66 |
if not msg_html and not msg_txt: |
|
|
67 |
logger.info("Send moderation email: nothing to email exiting") |
|
|
68 |
continue |
|
|
69 |
emsg = EmailMultiAlternatives("Moderation Renkan", msg_txt, settings.DEFAULT_FROM_EMAIL, [email_recipient.email], connection=connection) |
|
|
70 |
emsg.attach_alternative(msg_html, "text/html") |
|
|
71 |
emsg.send(fail_silently=True) |
|
|
72 |
finally: |
|
|
73 |
connection.close() |
|
|
74 |
|