diff --git a/dav_events/emails.py b/dav_events/emails.py index 63bed32..e73e0fd 100644 --- a/dav_events/emails.py +++ b/dav_events/emails.py @@ -1,15 +1,40 @@ # -*- coding: utf-8 -*- import logging -from django.contrib.auth import get_user_model -from django.contrib.auth.models import Group from django.core.mail import EmailMessage from django.template.loader import get_template from . import config +from .utils import get_group_members logger = logging.getLogger(__name__) +def get_recipients(task, sport=None): + users = [] + if task == 'accept': + group_var_name = 'MANAGE_ALL_GROUP' + group_name = getattr(config, group_var_name, None) + if group_name: + users.extend(get_group_members(group_name, ignore_missing=True)) + + if sport: + group_var_name = 'MANAGE_{}_GROUP'.format(sport) + group_name = getattr(config, group_var_name, None) + if group_name: + users.extend(get_group_members(group_name, ignore_missing=True)) + + elif task == 'publish': + group_var_name = 'INCREMENTAL_PUBLISHER_GROUP' + group_name = getattr(config, group_var_name, None) + if group_name: + users.extend(get_group_members(group_name, ignore_missing=True)) + else: + raise ValueError('utils.get_recipients(): invalid value for task') + + for u in users: + yield '{name} <{addr}>'.format(name=u.get_full_name(), addr=u.email) + + class AbstractMail(object): _sender = config.EMAIL_SENDER _subject = 'Generic Mail' @@ -30,7 +55,6 @@ class AbstractMail(object): recipients = self._get_recipients() emo = EmailMessage(subject=subject, body=body, from_email=sender, to=recipients) - logger.debug('sending mail to %s', recipients) emo.send() @@ -74,34 +98,7 @@ class EventToAcceptMail(AbstractEventMail): return s def _get_recipients(self): - recipients = [] - - sport = self._event.sport - group_var_name = 'MANAGE_{}_GROUP'.format(sport) - group_name = getattr(config, group_var_name, None) - if group_name: - try: - group = Group.objects.get(name=group_name) - for user in group.user_set.all(): - r = '{fullname} <{email}>'.format(fullname=user.get_full_name(), - email=user.email) - recipients.append(r) - except Group.DoesNotExist: - pass - - group_var_name = 'MANAGE_ALL_GROUP' - group_name = getattr(config, group_var_name, None) - if group_name: - try: - group = Group.objects.get(name=group_name) - for user in group.user_set.all(): - r = '{fullname} <{email}>'.format(fullname=user.get_full_name(), - email=user.email) - recipients.append(r) - except Group.DoesNotExist: - pass - - return recipients + return get_recipients('accept', self._event.sport) class EventAcceptedMail(AbstractEventMail): @@ -127,18 +124,4 @@ class EventToPublishMail(AbstractEventMail): return s def _get_recipients(self): - recipients = [] - - group_var_name = 'INCREMENTAL_PUBLISHER_GROUP' - group_name = getattr(config, group_var_name, None) - if group_name: - try: - group = Group.objects.get(name=group_name) - for user in group.user_set.all(): - r = '{fullname} <{email}>'.format(fullname=user.get_full_name(), - email=user.email) - recipients.append(r) - except Group.DoesNotExist: - pass - - return recipients + return get_recipients('publish', self._event.sport) diff --git a/dav_events/utils.py b/dav_events/utils.py new file mode 100644 index 0000000..1e4048a --- /dev/null +++ b/dav_events/utils.py @@ -0,0 +1,16 @@ +import logging +from django.contrib.auth.models import Group + +logger = logging.getLogger(__name__) + + +def get_group_members(group_name, ignore_missing=False): + users = [] + try: + group = Group.objects.get(name=group_name) + users.extend(group.user_set.all()) + except Group.DoesNotExist: + if not ignore_missing: + raise + + return users