src/hdalab/signals.py
branchdocumentation
changeset 693 09e00f38d177
parent 530 5d3b4e1e5b34
equal deleted inserted replaced
692:b7d19cd87fcf 693:09e00f38d177
    19 
    19 
    20 
    20 
    21 logger = logging.getLogger(__name__)
    21 logger = logging.getLogger(__name__)
    22 
    22 
    23 MAIL_TEMPLATES = {
    23 MAIL_TEMPLATES = {
    24     (HdalabRenkan.MODERATED,HdalabRenkan.PUBLISHED): ("mails/published_renkan", "Renkan publié"),
    24     (HdalabRenkan.MODERATED, HdalabRenkan.PUBLISHED): ("mails/published_renkan", "Renkan publié"),
    25     (HdalabRenkan.MODERATED,HdalabRenkan.REJECTED): ("mails/rejected_renkan", "Renkan rejeté"),
    25     (HdalabRenkan.MODERATED, HdalabRenkan.REJECTED): ("mails/rejected_renkan", "Renkan rejeté"),
    26     (HdalabRenkan.PUBLISHED, HdalabRenkan.EDITION): ("mails/unpublished_renkan", "Renkan dépublié"),
    26     (HdalabRenkan.PUBLISHED, HdalabRenkan.EDITION): ("mails/unpublished_renkan", "Renkan dépublié"),
    27     (HdalabRenkan.PUBLISHED, HdalabRenkan.REJECTED): ("mails/rejected_renkan", "Renkan rejeté"),
    27     (HdalabRenkan.PUBLISHED, HdalabRenkan.REJECTED): ("mails/rejected_renkan", "Renkan rejeté"),
    28 }
    28 }
    29 
    29 
    30 
    30 
    31 #TODO put into queue
    31 #TODO put into queue
    32 def send_renkan_moderation_messages(sender, **kwargs):
    32 def send_renkan_moderation_messages(sender, **kwargs):
       
    33     """
       
    34     Envoie un email suite au changement de status d'un renkan.
       
    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é.
       
    36     Si aucun template est trouvé, aucun mail n'est envoyé.
       
    37 
       
    38     :param:instance: l'objet :class:`hdalab.models.renkan.HdalabRenkanStateTransition` venant d'être créé.
       
    39 
       
    40     """
       
    41 
    33     renkan_state = kwargs.get('instance', None)
    42     renkan_state = kwargs.get('instance', None)
    34     if not renkan_state or (renkan_state.from_state,renkan_state.to_state) not in MAIL_TEMPLATES:
    43     if not renkan_state or (renkan_state.from_state,renkan_state.to_state) not in MAIL_TEMPLATES:
    35         return
    44         return
    36 
    45 
    37     template_key = (renkan_state.from_state,renkan_state.to_state)
    46     template_key = (renkan_state.from_state,renkan_state.to_state)
    49         return
    58         return
    50 #    except Exception as e:
    59 #    except Exception as e:
    51 #        logger.error("Error rendering template %s for state %s : %r", MAIL_TEMPLATES[template_key], HdalabRenkan.STATE_CHOICES_DICT[renkan_state.to_state], e)
    60 #        logger.error("Error rendering template %s for state %s : %r", MAIL_TEMPLATES[template_key], HdalabRenkan.STATE_CHOICES_DICT[renkan_state.to_state], e)
    52 #        return
    61 #        return
    53 #        raise e
    62 #        raise e
    54     
    63 
    55     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:
    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:
    56         logger.debug("Sending following mail to %s : %s", renkan_state.renkan.renkan.owner.email, msg_txt)
    65         logger.debug("Sending following mail to %s : %s", renkan_state.renkan.renkan.owner.email, msg_txt)
    57         emsg = EmailMultiAlternatives(subject, msg_txt, settings.DEFAULT_FROM_EMAIL, [renkan_state.renkan.renkan.owner.email])
    66         emsg = EmailMultiAlternatives(subject, msg_txt, settings.DEFAULT_FROM_EMAIL, [renkan_state.renkan.renkan.owner.email])
    58         emsg.attach_alternative(msg_html, "text/html")
    67         emsg.attach_alternative(msg_html, "text/html")
    59         emsg.send(fail_silently=True)
    68         emsg.send(fail_silently=True)
    60 
    69 
    61 
    70 
    62 def queue_renkan_rendering(sender, **kwargs):
    71 def queue_renkan_rendering(sender, **kwargs):
       
    72     """
       
    73     Gère le calcul et l'effacement de la miniature d'un renkan en fonction de sont statut.
       
    74       - Si un renkan était publié et change d'état, la miniature est effacée.
       
    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`).
       
    76 
       
    77     :param:instance: l'objet :class:`hdalab.models.renkan.HdalabRenkanStateTransition` venant d'être créé.
       
    78     """
    63     renkan_state = kwargs.get('instance', None)
    79     renkan_state = kwargs.get('instance', None)
    64     if not renkan_state:
    80     if not renkan_state:
    65         return
    81         return
    66     
    82 
    67     if renkan_state.from_state == HdalabRenkan.PUBLISHED and renkan_state.renkan.renkan.image != settings.DEFAULT_RENKAN_ICON:
    83     if renkan_state.from_state == HdalabRenkan.PUBLISHED and renkan_state.renkan.renkan.image != settings.DEFAULT_RENKAN_ICON:
    68         if renkan_state.renkan.renkan.image:
    84         if renkan_state.renkan.renkan.image:
    69             renkan_state.renkan.renkan.image.delete(False)
    85             renkan_state.renkan.renkan.image.delete(False)
    70             renkan_state.renkan.renkan.image.delete_thumbnails()
    86             renkan_state.renkan.renkan.image.delete_thumbnails()
    71         renkan_state.renkan.renkan.image = settings.DEFAULT_RENKAN_ICON
    87         renkan_state.renkan.renkan.image = settings.DEFAULT_RENKAN_ICON
    73     elif renkan_state.to_state == HdalabRenkan.PUBLISHED:
    89     elif renkan_state.to_state == HdalabRenkan.PUBLISHED:
    74         from hdalab.tasks import capture_preview
    90         from hdalab.tasks import capture_preview
    75         capture_preview.delay(renkan_state.renkan.renkan.rk_id)  # @UndefinedVariable
    91         capture_preview.delay(renkan_state.renkan.renkan.rk_id)  # @UndefinedVariable
    76 
    92 
    77 def renkan_delete_image(sender, **kwargs):
    93 def renkan_delete_image(sender, **kwargs):
       
    94     """
       
    95     Efface la miniature d'un renkan si celui-ci est effacé.
       
    96 
       
    97     :param:instance: l'objet :class:`renkanmanager.models.Renkan` qui va être effacé.
       
    98 
       
    99     """
    78     renkan = kwargs.get('instance', None)
   100     renkan = kwargs.get('instance', None)
    79     if not renkan or not renkan.image or renkan.image == settings.DEFAULT_RENKAN_ICON:
   101     if not renkan or not renkan.image or renkan.image == settings.DEFAULT_RENKAN_ICON:
    80         return
   102         return
    81     renkan.image.delete(False)
   103     renkan.image.delete(False)
    82     renkan.image.delete_thumbnails()
   104     renkan.image.delete_thumbnails()
    83 
   105 
    84     
   106 
    85 RENKAN_MODERATION_UUID = "e2f84503-609b-4efa-819d-908e2efe7b1b"
   107 RENKAN_MODERATION_UUID = "e2f84503-609b-4efa-819d-908e2efe7b1b"
    86 RENKAN_RENDERING_UUID = "b8830748-be2b-479a-8aef-c8d952437b2f"
   108 RENKAN_RENDERING_UUID = "b8830748-be2b-479a-8aef-c8d952437b2f"
    87 RENKAN_DELETE_UUID = "09c23ca2-4d59-4c29-b94a-2c2672d5a89b"
   109 RENKAN_DELETE_UUID = "09c23ca2-4d59-4c29-b94a-2c2672d5a89b"
    88 
   110 
    89 post_save.connect(send_renkan_moderation_messages, sender=HdalabRenkanStateTransition, dispatch_uid=RENKAN_MODERATION_UUID)
   111 post_save.connect(send_renkan_moderation_messages, sender=HdalabRenkanStateTransition, dispatch_uid=RENKAN_MODERATION_UUID)