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