Skip to content

Commit cb58810

Browse files
committed
Send extra mail to yangdoctors chairs when a draft with yang checks goes into IETF LC. Fixes ietf-tools#2419. Commit ready to merge.
- Legacy-Id: 18324
2 parents 3ba391d + b6c3a8f commit cb58810

9 files changed

Lines changed: 15005 additions & 14886 deletions

File tree

ietf/doc/mails.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -623,3 +623,12 @@ def email_charter_internal_review(request, charter):
623623
cc=addrs.cc,
624624
extra={'Reply-To': ["irsg@irtf.org" if charter.group.type_id == 'rg' else "iesg@ietf.org", ]},
625625
)
626+
627+
def email_lc_to_yang_doctors(request, doc):
628+
addrs = gather_address_lists('last_call_of_doc_with_yang_issued')
629+
send_mail(request, addrs.to, settings.DEFAULT_FROM_EMAIL,
630+
'Attn YangDoctors: IETF LC issued for %s' % doc.name ,
631+
'doc/mail/lc_to_yang_doctors.txt',
632+
dict(doc=doc, url=settings.IDTRACKER_BASE_URL + doc.get_absolute_url() ),
633+
cc = addrs.cc,
634+
)

ietf/doc/tests.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1220,6 +1220,7 @@ class EmailAliasesTests(TestCase):
12201220
def setUp(self):
12211221
WgDraftFactory(name='draft-ietf-mars-test',group__acronym='mars')
12221222
WgDraftFactory(name='draft-ietf-ames-test',group__acronym='ames')
1223+
RoleFactory(group__type_id='review', group__acronym='yangdoctors', name_id='secr')
12231224
self.doc_alias_file = NamedTemporaryFile(delete=False, mode='w+')
12241225
self.doc_alias_file.write("""# Generated by hand at 2015-02-12_16:26:45
12251226
virtual.ietf.org anything

ietf/doc/tests_ballot.py

Lines changed: 37 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
from ietf.doc.factories import DocumentFactory, IndividualDraftFactory, IndividualRfcFactory, WgDraftFactory
1717
from ietf.doc.utils import create_ballot_if_not_open
1818
from ietf.group.models import Group, Role
19-
from ietf.group.factories import GroupFactory, RoleFactory
19+
from ietf.group.factories import GroupFactory, RoleFactory, ReviewTeamFactory
2020
from ietf.ipr.factories import HolderIprDisclosureFactory
2121
from ietf.name.models import BallotPositionName
2222
from ietf.iesg.models import TelechatDate
@@ -804,6 +804,42 @@ def test_make_last_call(self):
804804

805805
self.assertTrue("Last Call" in draft.message_set.order_by("-time")[0].subject)
806806

807+
def test_make_last_call_yang_document(self):
808+
yd = ReviewTeamFactory(acronym='yangdoctors')
809+
secr_email = RoleFactory(group=yd,name_id='secr').person.email().address
810+
draft = WgDraftFactory()
811+
submission = draft.submission_set.create(
812+
state_id = 'posted',
813+
name = draft.name,
814+
group = draft.group,
815+
rev = draft.rev,
816+
authors = '[]',
817+
)
818+
submission.checks.create(
819+
checker = 'yang validation',
820+
passed = True,
821+
)
822+
823+
824+
url = urlreverse('ietf.doc.views_ballot.make_last_call', kwargs=dict(name=draft.name))
825+
login_testing_unauthorized(self, 'secretary', url)
826+
827+
mailbox_before = len(outbox)
828+
829+
last_call_sent_date = datetime.date.today()
830+
expire_date = last_call_sent_date+datetime.timedelta(days=14)
831+
832+
r = self.client.post(url,
833+
dict(last_call_sent_date=last_call_sent_date,
834+
last_call_expiration_date=expire_date
835+
))
836+
self.assertEqual(r.status_code, 302)
837+
self.assertEqual(len(outbox), mailbox_before + 3)
838+
self.assertIn("ietf-announce@", outbox[-3]['To'])
839+
self.assertIn("drafts-lastcall@icann.org", outbox[-2]['To'])
840+
self.assertIn(secr_email, outbox[-1]['To'])
841+
842+
807843
class DeferUndeferTestCase(TestCase):
808844
def helper_test_defer(self,name):
809845

ietf/doc/views_ballot.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,8 @@
2626
from ietf.doc.mails import ( email_ballot_deferred, email_ballot_undeferred,
2727
extra_automation_headers, generate_last_call_announcement,
2828
generate_issue_ballot_mail, generate_ballot_writeup, generate_ballot_rfceditornote,
29-
generate_approval_mail, email_irsg_ballot_closed, email_irsg_ballot_issued )
29+
generate_approval_mail, email_irsg_ballot_closed, email_irsg_ballot_issued,
30+
email_lc_to_yang_doctors )
3031
from ietf.doc.lastcall import request_last_call
3132
from ietf.iesg.models import TelechatDate
3233
from ietf.ietfauth.utils import has_role, role_required, is_authorized_in_doc_stream
@@ -1045,6 +1046,10 @@ def make_last_call(request, name):
10451046

10461047
doc.save_with_history(events)
10471048

1049+
sub = doc.submission()
1050+
if sub and sub.has_yang():
1051+
email_lc_to_yang_doctors(request, doc)
1052+
10481053
return HttpResponseRedirect(doc.get_absolute_url())
10491054
else:
10501055
initial = {}
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
# Copyright The IETF Trust 2019-2020, All Rights Reserved
2+
3+
from django.db import migrations
4+
5+
def forward(apps, schema_editor):
6+
MailTrigger = apps.get_model('mailtrigger', 'MailTrigger')
7+
Recipient = apps.get_model('mailtrigger', 'Recipient')
8+
9+
Recipient.objects.create(
10+
slug = 'yang_doctors_secretaries',
11+
desc = 'Yang Doctors Secretaries',
12+
template = ''
13+
)
14+
15+
lc_to_yang_doctors = MailTrigger.objects.create(
16+
slug='last_call_of_doc_with_yang_issued',
17+
desc='Recipients when IETF LC is issued on a document with yang checks',
18+
)
19+
20+
lc_to_yang_doctors.to.set(Recipient.objects.filter(slug='yang_doctors_secretaries'))
21+
22+
def reverse(apps, schema_editor):
23+
MailTrigger = apps.get_model('mailtrigger', 'MailTrigger')
24+
Recipient = apps.get_model('mailtrigger', 'Recipient')
25+
26+
MailTrigger.objects.filter(slug='last_call_of_doc_with_yang_issued').delete()
27+
Recipient.objects.filter(slug='yang_doctors_secretaries').delete()
28+
29+
30+
class Migration(migrations.Migration):
31+
32+
dependencies = [
33+
('mailtrigger', '0016_add_irsg_ballot_issued'),
34+
]
35+
36+
operations = [
37+
migrations.RunPython(forward, reverse),
38+
]

ietf/mailtrigger/models.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77

88
from email.utils import parseaddr
99
from ietf.utils.mail import formataddr, get_email_addresses_from_text
10+
from ietf.group.models import Group
1011
from ietf.person.models import Email, Alias
1112
from ietf.review.models import ReviewTeamSettings
1213

@@ -367,3 +368,6 @@ def gather_review_team_ads(self, **kwargs):
367368
for role in review_req.team.parent.role_set.filter(name='ad'):
368369
addrs.append(role.email.address)
369370
return addrs
371+
372+
def gather_yang_doctors_secretaries(self, **kwargs):
373+
return self.gather_group_secretaries(group=Group.objects.get(acronym='yangdoctors'))

0 commit comments

Comments
 (0)