src/hdalab/management/commands/send_moderation_mail.py
author ymh <ymh.work@gmail.com>
Fri, 19 Jul 2024 09:38:03 +0200
changeset 704 b5835dca2624
parent 634 6bdb0e1c0b84
child 693 09e00f38d177
permissions -rw-r--r--
Adapt renkan preview to uses chrome headless/puppeteer

# -*- coding: utf-8 -*-
'''
Created on Mar 5, 2015

@author: ymh
'''

import logging
import os

from django.conf import settings
from django.contrib.auth import get_user_model
from django.core import mail
from django.core.mail.message import EmailMultiAlternatives
from django.core.management.base import NoArgsCommand
from django.core.urlresolvers import set_script_prefix
from django.template.base import TemplateDoesNotExist
from django.template.loader import render_to_string
import premailer

from hdalab.models.renkan import HdalabRenkan


User = get_user_model()
logger = logging.getLogger(__name__)

TEMPLATE_NAME = "mails/moderation_notice"
class Command(NoArgsCommand):
    
    def handle_noargs(self, **options):
        # query renkan to moderate
        set_script_prefix(settings.SCRIPT_PREFIX)
        
        renkan_query = HdalabRenkan.objects.filter(state=HdalabRenkan.MODERATED)
        
        renkan_count = renkan_query.count()
        
        if renkan_count == 0:
            logger.info("Send moderation email : no renkan to moderate. exiting")
            return

        logger.debug("Send moderation email : %d renkan(s) to moderate", renkan_count)
        
        renkan_list = list(renkan_query.select_related()[:20])
        
        connection = mail.get_connection()
        try:
            connection.open()
            for email_recipient in User.objects.filter(is_staff=True):
                if not email_recipient.email:
                    continue
    
                msg_html = ""
                msg_txt = ""
                try:
                    context = {
                        'renkan_count': renkan_count,
                        'renkan_list': renkan_list,
                        'WEB_URL': settings.WEB_URL,
                        'email_recipient': email_recipient
                    }
                    msg_html = premailer.transform(render_to_string(TEMPLATE_NAME+".html", context), base_url=os.path.join(settings.STATIC_ROOT,'site'))
                    msg_txt = render_to_string(TEMPLATE_NAME+".txt", context)
                except TemplateDoesNotExist:
                    logger.error("Mail template %s not found", TEMPLATE_NAME)
                    return
                except Exception as e:
                    logger.error("Error rendering template %s : %r", TEMPLATE_NAME, e)
                    raise e
        
                if not msg_html and not msg_txt:
                    logger.info("Send moderation email: nothing to email exiting")
                    continue
                emsg = EmailMultiAlternatives("Moderation Renkan", msg_txt, settings.DEFAULT_FROM_EMAIL, [email_recipient.email], connection=connection)
                emsg.attach_alternative(msg_html, "text/html")
                emsg.send(fail_silently=True)
        finally:
            connection.close()