src/hdalab/signals.py
author ymh <ymh.work@gmail.com>
Fri, 13 Apr 2018 12:43:08 +0200
branchdocumentation
changeset 696 06825f3aa213
parent 693 09e00f38d177
permissions -rw-r--r--
Add missing info on signals and renkan thumbnails
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
492
19220d52bce7 add preview calculation
ymh <ymh.work@gmail.com>
parents:
diff changeset
     1
# -*- coding: utf-8 -*-
19220d52bce7 add preview calculation
ymh <ymh.work@gmail.com>
parents:
diff changeset
     2
'''
19220d52bce7 add preview calculation
ymh <ymh.work@gmail.com>
parents:
diff changeset
     3
Created on Mar 8, 2015
19220d52bce7 add preview calculation
ymh <ymh.work@gmail.com>
parents:
diff changeset
     4
19220d52bce7 add preview calculation
ymh <ymh.work@gmail.com>
parents:
diff changeset
     5
@author: ymh
19220d52bce7 add preview calculation
ymh <ymh.work@gmail.com>
parents:
diff changeset
     6
'''
19220d52bce7 add preview calculation
ymh <ymh.work@gmail.com>
parents:
diff changeset
     7
import logging
530
5d3b4e1e5b34 correct email formatting
ymh <ymh.work@gmail.com>
parents: 492
diff changeset
     8
import os
5d3b4e1e5b34 correct email formatting
ymh <ymh.work@gmail.com>
parents: 492
diff changeset
     9
from renkanmanager.models import Renkan
492
19220d52bce7 add preview calculation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    10
19220d52bce7 add preview calculation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    11
from django.conf import settings
19220d52bce7 add preview calculation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    12
from django.core.mail.message import EmailMultiAlternatives
19220d52bce7 add preview calculation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    13
from django.db.models.signals import post_save, pre_delete
19220d52bce7 add preview calculation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    14
from django.template.base import TemplateDoesNotExist
19220d52bce7 add preview calculation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    15
from django.template.loader import render_to_string
530
5d3b4e1e5b34 correct email formatting
ymh <ymh.work@gmail.com>
parents: 492
diff changeset
    16
import premailer
492
19220d52bce7 add preview calculation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    17
19220d52bce7 add preview calculation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    18
from hdalab.models.renkan import HdalabRenkan, HdalabRenkanStateTransition
19220d52bce7 add preview calculation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    19
19220d52bce7 add preview calculation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    20
19220d52bce7 add preview calculation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    21
logger = logging.getLogger(__name__)
19220d52bce7 add preview calculation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    22
19220d52bce7 add preview calculation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    23
MAIL_TEMPLATES = {
693
09e00f38d177 Add hdabo/hdalab documentations
ymh <ymh.work@gmail.com>
parents: 530
diff changeset
    24
    (HdalabRenkan.MODERATED, HdalabRenkan.PUBLISHED): ("mails/published_renkan", "Renkan publié"),
09e00f38d177 Add hdabo/hdalab documentations
ymh <ymh.work@gmail.com>
parents: 530
diff changeset
    25
    (HdalabRenkan.MODERATED, HdalabRenkan.REJECTED): ("mails/rejected_renkan", "Renkan rejeté"),
492
19220d52bce7 add preview calculation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    26
    (HdalabRenkan.PUBLISHED, HdalabRenkan.EDITION): ("mails/unpublished_renkan", "Renkan dépublié"),
530
5d3b4e1e5b34 correct email formatting
ymh <ymh.work@gmail.com>
parents: 492
diff changeset
    27
    (HdalabRenkan.PUBLISHED, HdalabRenkan.REJECTED): ("mails/rejected_renkan", "Renkan rejeté"),
492
19220d52bce7 add preview calculation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    28
}
19220d52bce7 add preview calculation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    29
19220d52bce7 add preview calculation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    30
19220d52bce7 add preview calculation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    31
#TODO put into queue
19220d52bce7 add preview calculation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    32
def send_renkan_moderation_messages(sender, **kwargs):
693
09e00f38d177 Add hdabo/hdalab documentations
ymh <ymh.work@gmail.com>
parents: 530
diff changeset
    33
    """
09e00f38d177 Add hdabo/hdalab documentations
ymh <ymh.work@gmail.com>
parents: 530
diff changeset
    34
    Envoie un email suite au changement de status d'un renkan.
09e00f38d177 Add hdabo/hdalab documentations
ymh <ymh.work@gmail.com>
parents: 530
diff changeset
    35
    Le template à utiliser pour l'email est donné par la constante `MAIL_TEMPLATES` et est fonction du statut de dépard et du status d'arrivé.
09e00f38d177 Add hdabo/hdalab documentations
ymh <ymh.work@gmail.com>
parents: 530
diff changeset
    36
    Si aucun template est trouvé, aucun mail n'est envoyé.
09e00f38d177 Add hdabo/hdalab documentations
ymh <ymh.work@gmail.com>
parents: 530
diff changeset
    37
09e00f38d177 Add hdabo/hdalab documentations
ymh <ymh.work@gmail.com>
parents: 530
diff changeset
    38
    :param:instance: l'objet :class:`hdalab.models.renkan.HdalabRenkanStateTransition` venant d'être créé.
09e00f38d177 Add hdabo/hdalab documentations
ymh <ymh.work@gmail.com>
parents: 530
diff changeset
    39
09e00f38d177 Add hdabo/hdalab documentations
ymh <ymh.work@gmail.com>
parents: 530
diff changeset
    40
    """
09e00f38d177 Add hdabo/hdalab documentations
ymh <ymh.work@gmail.com>
parents: 530
diff changeset
    41
492
19220d52bce7 add preview calculation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    42
    renkan_state = kwargs.get('instance', None)
19220d52bce7 add preview calculation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    43
    if not renkan_state or (renkan_state.from_state,renkan_state.to_state) not in MAIL_TEMPLATES:
19220d52bce7 add preview calculation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    44
        return
19220d52bce7 add preview calculation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    45
19220d52bce7 add preview calculation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    46
    template_key = (renkan_state.from_state,renkan_state.to_state)
19220d52bce7 add preview calculation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    47
    msg_txt = ""
19220d52bce7 add preview calculation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    48
    msg_html = ""
19220d52bce7 add preview calculation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    49
    subject = ""
19220d52bce7 add preview calculation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    50
    try:
19220d52bce7 add preview calculation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    51
        template_name, subject = MAIL_TEMPLATES[template_key]
19220d52bce7 add preview calculation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    52
#        template = loader.get_template(template_name)
19220d52bce7 add preview calculation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    53
        context = {'renkan_state': renkan_state, 'WEB_URL': settings.WEB_URL}
530
5d3b4e1e5b34 correct email formatting
ymh <ymh.work@gmail.com>
parents: 492
diff changeset
    54
        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: 492
diff changeset
    55
        msg_txt = render_to_string(template_name+".txt", context)
492
19220d52bce7 add preview calculation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    56
    except TemplateDoesNotExist:
19220d52bce7 add preview calculation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    57
        logger.error("Mail template %s for state %s not found", MAIL_TEMPLATES[template_key], HdalabRenkan.STATE_CHOICES_DICT[renkan_state.to_state])
19220d52bce7 add preview calculation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    58
        return
530
5d3b4e1e5b34 correct email formatting
ymh <ymh.work@gmail.com>
parents: 492
diff changeset
    59
#    except Exception as e:
5d3b4e1e5b34 correct email formatting
ymh <ymh.work@gmail.com>
parents: 492
diff changeset
    60
#        logger.error("Error rendering template %s for state %s : %r", MAIL_TEMPLATES[template_key], HdalabRenkan.STATE_CHOICES_DICT[renkan_state.to_state], e)
5d3b4e1e5b34 correct email formatting
ymh <ymh.work@gmail.com>
parents: 492
diff changeset
    61
#        return
5d3b4e1e5b34 correct email formatting
ymh <ymh.work@gmail.com>
parents: 492
diff changeset
    62
#        raise e
693
09e00f38d177 Add hdabo/hdalab documentations
ymh <ymh.work@gmail.com>
parents: 530
diff changeset
    63
492
19220d52bce7 add preview calculation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    64
    if msg_txt and msg_html and renkan_state.renkan and renkan_state.renkan.renkan and renkan_state.renkan.renkan.owner and renkan_state.renkan.renkan.owner.email:
19220d52bce7 add preview calculation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    65
        logger.debug("Sending following mail to %s : %s", renkan_state.renkan.renkan.owner.email, msg_txt)
530
5d3b4e1e5b34 correct email formatting
ymh <ymh.work@gmail.com>
parents: 492
diff changeset
    66
        emsg = EmailMultiAlternatives(subject, msg_txt, settings.DEFAULT_FROM_EMAIL, [renkan_state.renkan.renkan.owner.email])
492
19220d52bce7 add preview calculation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    67
        emsg.attach_alternative(msg_html, "text/html")
19220d52bce7 add preview calculation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    68
        emsg.send(fail_silently=True)
19220d52bce7 add preview calculation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    69
19220d52bce7 add preview calculation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    70
19220d52bce7 add preview calculation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    71
def queue_renkan_rendering(sender, **kwargs):
693
09e00f38d177 Add hdabo/hdalab documentations
ymh <ymh.work@gmail.com>
parents: 530
diff changeset
    72
    """
09e00f38d177 Add hdabo/hdalab documentations
ymh <ymh.work@gmail.com>
parents: 530
diff changeset
    73
    Gère le calcul et l'effacement de la miniature d'un renkan en fonction de sont statut.
09e00f38d177 Add hdabo/hdalab documentations
ymh <ymh.work@gmail.com>
parents: 530
diff changeset
    74
      - Si un renkan était publié et change d'état, la miniature est effacée.
09e00f38d177 Add hdabo/hdalab documentations
ymh <ymh.work@gmail.com>
parents: 530
diff changeset
    75
      - Si un renkan devient publié, une demande de calcul de miniature est mise en file d'attente (c.f. :func:`hdalab.tasks.capture_preview`).
09e00f38d177 Add hdabo/hdalab documentations
ymh <ymh.work@gmail.com>
parents: 530
diff changeset
    76
09e00f38d177 Add hdabo/hdalab documentations
ymh <ymh.work@gmail.com>
parents: 530
diff changeset
    77
    :param:instance: l'objet :class:`hdalab.models.renkan.HdalabRenkanStateTransition` venant d'être créé.
09e00f38d177 Add hdabo/hdalab documentations
ymh <ymh.work@gmail.com>
parents: 530
diff changeset
    78
    """
492
19220d52bce7 add preview calculation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    79
    renkan_state = kwargs.get('instance', None)
19220d52bce7 add preview calculation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    80
    if not renkan_state:
19220d52bce7 add preview calculation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    81
        return
693
09e00f38d177 Add hdabo/hdalab documentations
ymh <ymh.work@gmail.com>
parents: 530
diff changeset
    82
492
19220d52bce7 add preview calculation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    83
    if renkan_state.from_state == HdalabRenkan.PUBLISHED and renkan_state.renkan.renkan.image != settings.DEFAULT_RENKAN_ICON:
19220d52bce7 add preview calculation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    84
        if renkan_state.renkan.renkan.image:
19220d52bce7 add preview calculation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    85
            renkan_state.renkan.renkan.image.delete(False)
19220d52bce7 add preview calculation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    86
            renkan_state.renkan.renkan.image.delete_thumbnails()
19220d52bce7 add preview calculation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    87
        renkan_state.renkan.renkan.image = settings.DEFAULT_RENKAN_ICON
19220d52bce7 add preview calculation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    88
        renkan_state.renkan.renkan.save()
19220d52bce7 add preview calculation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    89
    elif renkan_state.to_state == HdalabRenkan.PUBLISHED:
19220d52bce7 add preview calculation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    90
        from hdalab.tasks import capture_preview
19220d52bce7 add preview calculation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    91
        capture_preview.delay(renkan_state.renkan.renkan.rk_id)  # @UndefinedVariable
19220d52bce7 add preview calculation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    92
19220d52bce7 add preview calculation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    93
def renkan_delete_image(sender, **kwargs):
693
09e00f38d177 Add hdabo/hdalab documentations
ymh <ymh.work@gmail.com>
parents: 530
diff changeset
    94
    """
09e00f38d177 Add hdabo/hdalab documentations
ymh <ymh.work@gmail.com>
parents: 530
diff changeset
    95
    Efface la miniature d'un renkan si celui-ci est effacé.
09e00f38d177 Add hdabo/hdalab documentations
ymh <ymh.work@gmail.com>
parents: 530
diff changeset
    96
09e00f38d177 Add hdabo/hdalab documentations
ymh <ymh.work@gmail.com>
parents: 530
diff changeset
    97
    :param:instance: l'objet :class:`renkanmanager.models.Renkan` qui va être effacé.
09e00f38d177 Add hdabo/hdalab documentations
ymh <ymh.work@gmail.com>
parents: 530
diff changeset
    98
09e00f38d177 Add hdabo/hdalab documentations
ymh <ymh.work@gmail.com>
parents: 530
diff changeset
    99
    """
492
19220d52bce7 add preview calculation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   100
    renkan = kwargs.get('instance', None)
19220d52bce7 add preview calculation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   101
    if not renkan or not renkan.image or renkan.image == settings.DEFAULT_RENKAN_ICON:
19220d52bce7 add preview calculation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   102
        return
19220d52bce7 add preview calculation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   103
    renkan.image.delete(False)
19220d52bce7 add preview calculation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   104
    renkan.image.delete_thumbnails()
19220d52bce7 add preview calculation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   105
693
09e00f38d177 Add hdabo/hdalab documentations
ymh <ymh.work@gmail.com>
parents: 530
diff changeset
   106
492
19220d52bce7 add preview calculation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   107
RENKAN_MODERATION_UUID = "e2f84503-609b-4efa-819d-908e2efe7b1b"
19220d52bce7 add preview calculation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   108
RENKAN_RENDERING_UUID = "b8830748-be2b-479a-8aef-c8d952437b2f"
19220d52bce7 add preview calculation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   109
RENKAN_DELETE_UUID = "09c23ca2-4d59-4c29-b94a-2c2672d5a89b"
19220d52bce7 add preview calculation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   110
19220d52bce7 add preview calculation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   111
post_save.connect(send_renkan_moderation_messages, sender=HdalabRenkanStateTransition, dispatch_uid=RENKAN_MODERATION_UUID)
19220d52bce7 add preview calculation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   112
post_save.connect(queue_renkan_rendering, sender=HdalabRenkanStateTransition, dispatch_uid=RENKAN_RENDERING_UUID)
19220d52bce7 add preview calculation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   113
pre_delete.connect(renkan_delete_image, sender=Renkan, dispatch_uid=RENKAN_DELETE_UUID)
19220d52bce7 add preview calculation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   114