| author | ymh <ymh.work@gmail.com> |
| Fri, 24 Jan 2020 16:49:22 +0100 | |
| branch | documentation |
| changeset 701 | bf0820deea40 |
| parent 693 | 09e00f38d177 |
| permissions | -rw-r--r-- |
| 481 | 1 |
# -*- coding: utf-8 -*- |
2 |
''' |
|
| 693 | 3 |
Envoie un mail récapitulatif des renkan à modérer. |
4 |
Aucun mail n'est envoyé si aucune modération n'est demandée. |
|
5 |
||
6 |
L'envoi est fait aux utilisateurs marqués comme `staff <https://docs.djangoproject.com/en/1.8/ref/contrib/auth/#django.contrib.auth.models.User.is_staff>`_. |
|
| 481 | 7 |
|
| 693 | 8 |
cette commande est typiquement prévue pour être lancée à partir d'une tâche ``cron`` périodique (1 fois par jour par exemple). |
9 |
||
10 |
**Usage**: ``django-admin send_moderation_mail [options]`` |
|
11 |
||
| 481 | 12 |
''' |
13 |
||
14 |
import logging |
|
| 530 | 15 |
import os |
| 481 | 16 |
|
17 |
from django.conf import settings |
|
18 |
from django.contrib.auth import get_user_model |
|
19 |
from django.core import mail |
|
20 |
from django.core.mail.message import EmailMultiAlternatives |
|
21 |
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
|
22 |
from django.core.urlresolvers import set_script_prefix |
| 481 | 23 |
from django.template.base import TemplateDoesNotExist |
24 |
from django.template.loader import render_to_string |
|
| 530 | 25 |
import premailer |
| 481 | 26 |
|
27 |
from hdalab.models.renkan import HdalabRenkan |
|
28 |
||
29 |
||
30 |
User = get_user_model() |
|
31 |
logger = logging.getLogger(__name__) |
|
32 |
||
33 |
TEMPLATE_NAME = "mails/moderation_notice" |
|
34 |
class Command(NoArgsCommand): |
|
| 693 | 35 |
|
| 481 | 36 |
def handle_noargs(self, **options): |
37 |
# 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
|
38 |
set_script_prefix(settings.SCRIPT_PREFIX) |
| 693 | 39 |
|
| 481 | 40 |
renkan_query = HdalabRenkan.objects.filter(state=HdalabRenkan.MODERATED) |
| 693 | 41 |
|
| 481 | 42 |
renkan_count = renkan_query.count() |
| 693 | 43 |
|
| 481 | 44 |
if renkan_count == 0: |
45 |
logger.info("Send moderation email : no renkan to moderate. exiting") |
|
|
634
6bdb0e1c0b84
make sure to exit send_moderation_email when there is no renkan to moderate
ymh <ymh.work@gmail.com>
parents:
632
diff
changeset
|
46 |
return |
|
6bdb0e1c0b84
make sure to exit send_moderation_email when there is no renkan to moderate
ymh <ymh.work@gmail.com>
parents:
632
diff
changeset
|
47 |
|
| 481 | 48 |
logger.debug("Send moderation email : %d renkan(s) to moderate", renkan_count) |
| 693 | 49 |
|
| 481 | 50 |
renkan_list = list(renkan_query.select_related()[:20]) |
| 693 | 51 |
|
| 481 | 52 |
connection = mail.get_connection() |
53 |
try: |
|
54 |
connection.open() |
|
55 |
for email_recipient in User.objects.filter(is_staff=True): |
|
56 |
if not email_recipient.email: |
|
57 |
continue |
|
| 693 | 58 |
|
| 481 | 59 |
msg_html = "" |
60 |
msg_txt = "" |
|
61 |
try: |
|
62 |
context = { |
|
63 |
'renkan_count': renkan_count, |
|
64 |
'renkan_list': renkan_list, |
|
65 |
'WEB_URL': settings.WEB_URL, |
|
66 |
'email_recipient': email_recipient |
|
67 |
} |
|
| 530 | 68 |
msg_html = premailer.transform(render_to_string(TEMPLATE_NAME+".html", context), base_url=os.path.join(settings.STATIC_ROOT,'site')) |
69 |
msg_txt = render_to_string(TEMPLATE_NAME+".txt", context) |
|
| 481 | 70 |
except TemplateDoesNotExist: |
71 |
logger.error("Mail template %s not found", TEMPLATE_NAME) |
|
72 |
return |
|
73 |
except Exception as e: |
|
74 |
logger.error("Error rendering template %s : %r", TEMPLATE_NAME, e) |
|
75 |
raise e |
|
| 693 | 76 |
|
| 481 | 77 |
if not msg_html and not msg_txt: |
78 |
logger.info("Send moderation email: nothing to email exiting") |
|
79 |
continue |
|
80 |
emsg = EmailMultiAlternatives("Moderation Renkan", msg_txt, settings.DEFAULT_FROM_EMAIL, [email_recipient.email], connection=connection) |
|
81 |
emsg.attach_alternative(msg_html, "text/html") |
|
82 |
emsg.send(fail_silently=True) |
|
83 |
finally: |
|
84 |
connection.close() |