Skip to content

Commit 2c28cb3

Browse files
committed
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
1 parent 5cf2cac commit 2c28cb3

4 files changed

Lines changed: 19 additions & 5 deletions

File tree

ietf/doc/tests_review.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1152,7 +1152,7 @@ def test_edit_deadline(self):
11521152
review_req = reload_db_objects(review_req)
11531153
self.assertEqual(review_req.deadline,new_deadline)
11541154
self.assertEqual(len(outbox), 1)
1155-
self.assertIn('reviewsecretary@example.com', outbox[0]["Cc"])
1155+
self.assertIn('<reviewsecretary@example.com>', outbox[0]["Cc"])
11561156
self.assertIn('<reviewer@example.com>', outbox[0]["To"])
11571157
self.assertIn('Deadline changed', outbox[0]['Subject'])
11581158

ietf/mailtrigger/models.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -182,7 +182,8 @@ def gather_group_secretaries(self, **kwargs):
182182
if rts and rts.secr_mail_alias and len(rts.secr_mail_alias) > 1:
183183
addrs = get_email_addresses_from_text(rts.secr_mail_alias)
184184
else:
185-
addrs.extend(group.role_set.filter(name='secr').values_list('email__address',flat=True))
185+
for role in group.role_set.filter(name='secr'):
186+
addrs.append(role.person.formatted_email())
186187
return addrs
187188

188189
def gather_review_req_reviewers(self, **kwargs):

ietf/mailtrigger/utils.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
from ietf.mailtrigger.models import MailTrigger, Recipient
88
from ietf.submit.models import Submission
9+
from ietf.utils.mail import excludeaddrs
910

1011
class AddrLists(namedtuple('AddrLists',['to','cc'])):
1112

@@ -29,18 +30,17 @@ def gather_address_lists(slug, skipped_recipients=None, create_from_slug_if_not_
2930
to.update(recipient.gather(**kwargs))
3031
to.discard('')
3132
if skipped_recipients:
32-
to -= set(skipped_recipients)
33+
to = excludeaddrs(to, skipped_recipients)
3334

3435
cc = set()
3536
for recipient in mailtrigger.cc.all():
3637
cc.update(recipient.gather(**kwargs))
3738
cc.discard('')
3839
if skipped_recipients:
39-
cc -= set(skipped_recipients)
40+
cc = excludeaddrs(cc, skipped_recipients)
4041

4142
return AddrLists(to=list(to),cc=list(cc))
4243

43-
4444
def get_mailtrigger(slug, create_from_slug_if_not_exists, desc_if_not_exists):
4545
try:
4646
mailtrigger = MailTrigger.objects.get(slug=slug)

ietf/utils/mail.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -249,6 +249,19 @@ def parseaddr(addr):
249249
name, addr = simple_parseaddr(addr)
250250
return name, addr
251251

252+
def excludeaddrs(addrlist, exlist):
253+
"""
254+
Takes a list or set of email address strings in 2822 format, and
255+
eliminates entries whose address part occurs in the given exclusion list.
256+
"""
257+
exlist = set([ parseaddr(a)[1] for a in exlist ])
258+
filtered = []
259+
for a in addrlist:
260+
if not parseaddr(a)[1] in exlist:
261+
filtered.append(a)
262+
filtered = type(addrlist)(filtered)
263+
return filtered
264+
252265
def condition_message(to, frm, subject, msg, cc, extra):
253266
if extra:
254267
assertion("isinstance(extra, (dict, Message))")

0 commit comments

Comments
 (0)