Refactor: create a notification service to use it outside of the ViewSet classes

remotes/origin/enhancement/email-actions
David Barragán Merino 2014-03-26 17:26:40 +01:00
parent 292de17556
commit 420a9522c5
2 changed files with 31 additions and 17 deletions

View File

@ -1,22 +1,13 @@
# -*- coding: utf-8 -*-
from djmail import template_mail
from . import services
class NotificationSenderMixin(object):
create_notification_template = None
update_notification_template = None
destroy_notification_template = None
def _send_notification_email(self, template_method, users=None, context=None):
mails = template_mail.MagicMailBuilder()
for user in users:
email = getattr(mails, template_method)(user, context)
email.send()
def post_save(self, obj, created=False):
super().post_save(obj, created)
self._post_save_notification_sender(obj, created)
notification_service = services.NotificationService()
def _post_save_notification_sender(self, obj, created=False):
users = obj.get_watchers_to_notify(self.request.user)
@ -24,22 +15,26 @@ class NotificationSenderMixin(object):
context = {'changer': self.request.user, "comment": comment, 'object': obj}
if created:
self._send_notification_email(self.create_notification_template,
users=users, context=context)
self.notification_service.send_notification_email(self.create_notification_template,
users=users, context=context)
else:
changed_fields = obj.get_changed_fields_list(self.request.DATA)
if changed_fields:
context["changed_fields"] = changed_fields
self._send_notification_email(self.update_notification_template,
users=users, context=context)
self.notification_service.send_notification_email(self.update_notification_template,
users=users, context=context)
def post_save(self, obj, created=False):
super().post_save(obj, created)
self._post_save_notification_sender(obj, created)
def destroy(self, request, *args, **kwargs):
obj = self.get_object()
users = obj.get_watchers_to_notify(self.request.user)
context = {'changer': self.request.user, 'object': obj}
self._send_notification_email(self.destroy_notification_template,
users=users, context=context)
self.notification_service.send_notification_email(self.destroy_notification_template,
users=users, context=context)
return super().destroy(request, *args, **kwargs)

View File

@ -0,0 +1,19 @@
# -*- coding: utf-8 -*-
from djmail import template_mail
import collections
class NotificationService(object):
def send_notification_email(self, template_method, users=None, context=None):
if not users:
return
if not isinstance(users, collections.Iterable):
users = (users,)
mails = template_mail.MagicMailBuilder()
for user in users:
email = getattr(mails, template_method)(user, context)
email.send()