src/hdalab/management/commands/send_moderation_mail.py
author ymh <ymh.work@gmail.com>
Fri, 03 Jul 2015 00:19:58 +0200
changeset 634 6bdb0e1c0b84
parent 632 eff2287e93fb
child 693 09e00f38d177
permissions -rw-r--r--
make sure to exit send_moderation_email when there is no renkan to moderate
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
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
efd1aaee4b0c add moderation command
ymh <ymh.work@gmail.com>
parents:
diff changeset
    17
from django.template.base import TemplateDoesNotExist
efd1aaee4b0c add moderation command
ymh <ymh.work@gmail.com>
parents:
diff changeset
    18
from django.template.loader import render_to_string
530
5d3b4e1e5b34 correct email formatting
ymh <ymh.work@gmail.com>
parents: 481
diff changeset
    19
import premailer
481
efd1aaee4b0c add moderation command
ymh <ymh.work@gmail.com>
parents:
diff changeset
    20
efd1aaee4b0c add moderation command
ymh <ymh.work@gmail.com>
parents:
diff changeset
    21
from hdalab.models.renkan import HdalabRenkan
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
efd1aaee4b0c add moderation command
ymh <ymh.work@gmail.com>
parents:
diff changeset
    24
User = get_user_model()
efd1aaee4b0c add moderation command
ymh <ymh.work@gmail.com>
parents:
diff changeset
    25
logger = logging.getLogger(__name__)
efd1aaee4b0c add moderation command
ymh <ymh.work@gmail.com>
parents:
diff changeset
    26
efd1aaee4b0c add moderation command
ymh <ymh.work@gmail.com>
parents:
diff changeset
    27
TEMPLATE_NAME = "mails/moderation_notice"
efd1aaee4b0c add moderation command
ymh <ymh.work@gmail.com>
parents:
diff changeset
    28
class Command(NoArgsCommand):
efd1aaee4b0c add moderation command
ymh <ymh.work@gmail.com>
parents:
diff changeset
    29
    
efd1aaee4b0c add moderation command
ymh <ymh.work@gmail.com>
parents:
diff changeset
    30
    def handle_noargs(self, **options):
efd1aaee4b0c add moderation command
ymh <ymh.work@gmail.com>
parents:
diff changeset
    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
efd1aaee4b0c add moderation command
ymh <ymh.work@gmail.com>
parents:
diff changeset
    34
        renkan_query = HdalabRenkan.objects.filter(state=HdalabRenkan.MODERATED)
efd1aaee4b0c add moderation command
ymh <ymh.work@gmail.com>
parents:
diff changeset
    35
        
efd1aaee4b0c add moderation command
ymh <ymh.work@gmail.com>
parents:
diff changeset
    36
        renkan_count = renkan_query.count()
efd1aaee4b0c add moderation command
ymh <ymh.work@gmail.com>
parents:
diff changeset
    37
        
efd1aaee4b0c add moderation command
ymh <ymh.work@gmail.com>
parents:
diff changeset
    38
        if renkan_count == 0:
efd1aaee4b0c add moderation command
ymh <ymh.work@gmail.com>
parents:
diff changeset
    39
            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
    40
            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
    41
481
efd1aaee4b0c add moderation command
ymh <ymh.work@gmail.com>
parents:
diff changeset
    42
        logger.debug("Send moderation email : %d renkan(s) to moderate", renkan_count)
efd1aaee4b0c add moderation command
ymh <ymh.work@gmail.com>
parents:
diff changeset
    43
        
efd1aaee4b0c add moderation command
ymh <ymh.work@gmail.com>
parents:
diff changeset
    44
        renkan_list = list(renkan_query.select_related()[:20])
efd1aaee4b0c add moderation command
ymh <ymh.work@gmail.com>
parents:
diff changeset
    45
        
efd1aaee4b0c add moderation command
ymh <ymh.work@gmail.com>
parents:
diff changeset
    46
        connection = mail.get_connection()
efd1aaee4b0c add moderation command
ymh <ymh.work@gmail.com>
parents:
diff changeset
    47
        try:
efd1aaee4b0c add moderation command
ymh <ymh.work@gmail.com>
parents:
diff changeset
    48
            connection.open()
efd1aaee4b0c add moderation command
ymh <ymh.work@gmail.com>
parents:
diff changeset
    49
            for email_recipient in User.objects.filter(is_staff=True):
efd1aaee4b0c add moderation command
ymh <ymh.work@gmail.com>
parents:
diff changeset
    50
                if not email_recipient.email:
efd1aaee4b0c add moderation command
ymh <ymh.work@gmail.com>
parents:
diff changeset
    51
                    continue
efd1aaee4b0c add moderation command
ymh <ymh.work@gmail.com>
parents:
diff changeset
    52
    
efd1aaee4b0c add moderation command
ymh <ymh.work@gmail.com>
parents:
diff changeset
    53
                msg_html = ""
efd1aaee4b0c add moderation command
ymh <ymh.work@gmail.com>
parents:
diff changeset
    54
                msg_txt = ""
efd1aaee4b0c add moderation command
ymh <ymh.work@gmail.com>
parents:
diff changeset
    55
                try:
efd1aaee4b0c add moderation command
ymh <ymh.work@gmail.com>
parents:
diff changeset
    56
                    context = {
efd1aaee4b0c add moderation command
ymh <ymh.work@gmail.com>
parents:
diff changeset
    57
                        'renkan_count': renkan_count,
efd1aaee4b0c add moderation command
ymh <ymh.work@gmail.com>
parents:
diff changeset
    58
                        'renkan_list': renkan_list,
efd1aaee4b0c add moderation command
ymh <ymh.work@gmail.com>
parents:
diff changeset
    59
                        'WEB_URL': settings.WEB_URL,
efd1aaee4b0c add moderation command
ymh <ymh.work@gmail.com>
parents:
diff changeset
    60
                        'email_recipient': email_recipient
efd1aaee4b0c add moderation command
ymh <ymh.work@gmail.com>
parents:
diff changeset
    61
                    }
530
5d3b4e1e5b34 correct email formatting
ymh <ymh.work@gmail.com>
parents: 481
diff changeset
    62
                    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
    63
                    msg_txt = render_to_string(TEMPLATE_NAME+".txt", context)
481
efd1aaee4b0c add moderation command
ymh <ymh.work@gmail.com>
parents:
diff changeset
    64
                except TemplateDoesNotExist:
efd1aaee4b0c add moderation command
ymh <ymh.work@gmail.com>
parents:
diff changeset
    65
                    logger.error("Mail template %s not found", TEMPLATE_NAME)
efd1aaee4b0c add moderation command
ymh <ymh.work@gmail.com>
parents:
diff changeset
    66
                    return
efd1aaee4b0c add moderation command
ymh <ymh.work@gmail.com>
parents:
diff changeset
    67
                except Exception as e:
efd1aaee4b0c add moderation command
ymh <ymh.work@gmail.com>
parents:
diff changeset
    68
                    logger.error("Error rendering template %s : %r", TEMPLATE_NAME, e)
efd1aaee4b0c add moderation command
ymh <ymh.work@gmail.com>
parents:
diff changeset
    69
                    raise e
efd1aaee4b0c add moderation command
ymh <ymh.work@gmail.com>
parents:
diff changeset
    70
        
efd1aaee4b0c add moderation command
ymh <ymh.work@gmail.com>
parents:
diff changeset
    71
                if not msg_html and not msg_txt:
efd1aaee4b0c add moderation command
ymh <ymh.work@gmail.com>
parents:
diff changeset
    72
                    logger.info("Send moderation email: nothing to email exiting")
efd1aaee4b0c add moderation command
ymh <ymh.work@gmail.com>
parents:
diff changeset
    73
                    continue
efd1aaee4b0c add moderation command
ymh <ymh.work@gmail.com>
parents:
diff changeset
    74
                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
    75
                emsg.attach_alternative(msg_html, "text/html")
efd1aaee4b0c add moderation command
ymh <ymh.work@gmail.com>
parents:
diff changeset
    76
                emsg.send(fail_silently=True)
efd1aaee4b0c add moderation command
ymh <ymh.work@gmail.com>
parents:
diff changeset
    77
        finally:
efd1aaee4b0c add moderation command
ymh <ymh.work@gmail.com>
parents:
diff changeset
    78
            connection.close()
efd1aaee4b0c add moderation command
ymh <ymh.work@gmail.com>
parents:
diff changeset
    79