When group secretary email addresses occurred in some mailtrigger To: entries, they were given with both name and address parts, while when occurring in Cc: entries, no names were present. Fixed one case of this, and adjusted a test case for consistency. Also added a more general utility function to exclude selected email addresses from email address lists.
- Legacy-Id: 17107
This commit is contained in:
parent
5cf2cac8d0
commit
2c28cb3eb0
|
@ -1152,7 +1152,7 @@ class ReviewTests(TestCase):
|
|||
review_req = reload_db_objects(review_req)
|
||||
self.assertEqual(review_req.deadline,new_deadline)
|
||||
self.assertEqual(len(outbox), 1)
|
||||
self.assertIn('reviewsecretary@example.com', outbox[0]["Cc"])
|
||||
self.assertIn('<reviewsecretary@example.com>', outbox[0]["Cc"])
|
||||
self.assertIn('<reviewer@example.com>', outbox[0]["To"])
|
||||
self.assertIn('Deadline changed', outbox[0]['Subject'])
|
||||
|
||||
|
|
|
@ -182,7 +182,8 @@ class Recipient(models.Model):
|
|||
if rts and rts.secr_mail_alias and len(rts.secr_mail_alias) > 1:
|
||||
addrs = get_email_addresses_from_text(rts.secr_mail_alias)
|
||||
else:
|
||||
addrs.extend(group.role_set.filter(name='secr').values_list('email__address',flat=True))
|
||||
for role in group.role_set.filter(name='secr'):
|
||||
addrs.append(role.person.formatted_email())
|
||||
return addrs
|
||||
|
||||
def gather_review_req_reviewers(self, **kwargs):
|
||||
|
|
|
@ -6,6 +6,7 @@ import debug # pyflakes:ignore
|
|||
|
||||
from ietf.mailtrigger.models import MailTrigger, Recipient
|
||||
from ietf.submit.models import Submission
|
||||
from ietf.utils.mail import excludeaddrs
|
||||
|
||||
class AddrLists(namedtuple('AddrLists',['to','cc'])):
|
||||
|
||||
|
@ -29,18 +30,17 @@ def gather_address_lists(slug, skipped_recipients=None, create_from_slug_if_not_
|
|||
to.update(recipient.gather(**kwargs))
|
||||
to.discard('')
|
||||
if skipped_recipients:
|
||||
to -= set(skipped_recipients)
|
||||
to = excludeaddrs(to, skipped_recipients)
|
||||
|
||||
cc = set()
|
||||
for recipient in mailtrigger.cc.all():
|
||||
cc.update(recipient.gather(**kwargs))
|
||||
cc.discard('')
|
||||
if skipped_recipients:
|
||||
cc -= set(skipped_recipients)
|
||||
cc = excludeaddrs(cc, skipped_recipients)
|
||||
|
||||
return AddrLists(to=list(to),cc=list(cc))
|
||||
|
||||
|
||||
def get_mailtrigger(slug, create_from_slug_if_not_exists, desc_if_not_exists):
|
||||
try:
|
||||
mailtrigger = MailTrigger.objects.get(slug=slug)
|
||||
|
|
|
@ -249,6 +249,19 @@ def parseaddr(addr):
|
|||
name, addr = simple_parseaddr(addr)
|
||||
return name, addr
|
||||
|
||||
def excludeaddrs(addrlist, exlist):
|
||||
"""
|
||||
Takes a list or set of email address strings in 2822 format, and
|
||||
eliminates entries whose address part occurs in the given exclusion list.
|
||||
"""
|
||||
exlist = set([ parseaddr(a)[1] for a in exlist ])
|
||||
filtered = []
|
||||
for a in addrlist:
|
||||
if not parseaddr(a)[1] in exlist:
|
||||
filtered.append(a)
|
||||
filtered = type(addrlist)(filtered)
|
||||
return filtered
|
||||
|
||||
def condition_message(to, frm, subject, msg, cc, extra):
|
||||
if extra:
|
||||
assertion("isinstance(extra, (dict, Message))")
|
||||
|
|
Loading…
Reference in a new issue