Skip to content

Commit 7e384a8

Browse files
committed
Send email to new mailtrigger controlled destinations when iana expert review state changes. Fixes ietf-tools#3121. Commit ready for merge.
- Legacy-Id: 18714
1 parent 6c953bd commit 7e384a8

File tree

6 files changed

+97
-8
lines changed

6 files changed

+97
-8
lines changed

ietf/doc/mails.py

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -643,4 +643,15 @@ def email_lc_to_yang_doctors(request, doc):
643643
'doc/mail/lc_to_yang_doctors.txt',
644644
dict(doc=doc, url=settings.IDTRACKER_BASE_URL + doc.get_absolute_url() ),
645645
cc = addrs.cc,
646-
)
646+
)
647+
648+
def email_iana_expert_review_state_changed(request, events):
649+
assert type(events) == list
650+
assert len(events) == 1
651+
addrs = gather_address_lists('iana_expert_review_state_changed', doc=events[0].doc)
652+
send_mail(request, addrs.to, settings.DEFAULT_FROM_EMAIL,
653+
f'IANA expert review state changed to {events[0].state.name} for {events[0].doc.name}',
654+
'doc/mail/iana_expert_review_state_changed.txt',
655+
dict(event=events[0], url=settings.IDTRACKER_BASE_URL + events[0].doc.get_absolute_url() ),
656+
cc = addrs.cc,
657+
)

ietf/doc/tests_draft.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -201,6 +201,26 @@ def test_change_iana_state(self):
201201
draft = Document.objects.get(name=draft.name)
202202
self.assertEqual(draft.get_state("draft-iana-review"), next_state)
203203

204+
def test_change_iana_expert_review_state(self):
205+
draft = WgDraftFactory()
206+
207+
first_state = State.objects.get(used=True, type='draft-iana-experts', slug='reviews-assigned')
208+
next_state = State.objects.get(used=True, type='draft-iana-experts', slug='reviewers-ok')
209+
210+
draft.set_state(first_state)
211+
212+
url = urlreverse('ietf.doc.views_draft.change_iana_state', kwargs=dict(name=draft.name, state_type="iana-experts"))
213+
login_testing_unauthorized(self, 'iana', url)
214+
215+
empty_outbox()
216+
r = self.client.post(url, dict(state=next_state.pk))
217+
self.assertEqual(r.status_code, 302)
218+
219+
draft = Document.objects.get(name=draft.name)
220+
self.assertEqual(draft.get_state("draft-iana-experts"), next_state)
221+
222+
self.assertEqual(len(outbox),1)
223+
204224
def test_add_expert_review_comment(self):
205225
draft = WgDraftFactory()
206226
url = urlreverse('ietf.doc.views_draft.add_iana_experts_comment',kwargs=dict(name=draft.name))

ietf/doc/views_draft.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,8 @@
3030
email_resurrection_completed, email_state_changed, email_stream_changed,
3131
email_stream_state_changed, email_stream_tags_changed, extra_automation_headers,
3232
generate_publication_request, email_adopted, email_intended_status_changed,
33-
email_iesg_processing_document, email_ad_approved_doc )
33+
email_iesg_processing_document, email_ad_approved_doc,
34+
email_iana_expert_review_state_changed )
3435
from ietf.doc.utils import ( add_state_change_event, can_adopt_draft, can_unadopt_draft,
3536
get_tags_for_stream_id, nice_consensus,
3637
update_reminder, update_telechat, make_notify_changed_event, get_initial_notify,
@@ -240,6 +241,9 @@ def change_iana_state(request, name, state_type):
240241

241242
doc.save_with_history(events)
242243

244+
if state_type == 'draft-iana-experts':
245+
email_iana_expert_review_state_changed(request, events)
246+
243247
return HttpResponseRedirect(doc.get_absolute_url())
244248

245249
else:
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
# Copyright The IETF Trust 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+
iana_er_state_changed = MailTrigger.objects.create(
10+
slug='iana_expert_review_state_changed',
11+
desc='Recipients when the IANA expert review for a document changes',
12+
)
13+
14+
iana_er_state_changed.to.set(
15+
Recipient.objects.filter(slug__in=[
16+
'doc_ad', 'doc_authors', 'doc_group_chairs', 'doc_group_responsible_directors', 'doc_notify', 'doc_shepherd'
17+
])
18+
)
19+
20+
def reverse(apps,schema_editor):
21+
MailTrigger = apps.get_model('mailtrigger', 'MailTrigger')
22+
23+
MailTrigger.objects.filter(slug='iana_expert_review_state_changed').delete()
24+
25+
26+
class Migration(migrations.Migration):
27+
28+
dependencies = [
29+
('mailtrigger', '0018_interim_approve_announce'),
30+
]
31+
32+
operations = [
33+
migrations.RunPython(forward, reverse),
34+
]

ietf/name/fixtures/names.json

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3727,6 +3727,22 @@
37273727
"model": "mailtrigger.mailtrigger",
37283728
"pk": "group_personnel_change"
37293729
},
3730+
{
3731+
"fields": {
3732+
"cc": [],
3733+
"desc": "Recipients when the IANA expert review for a document changes",
3734+
"to": [
3735+
"doc_ad",
3736+
"doc_authors",
3737+
"doc_group_chairs",
3738+
"doc_group_responsible_directors",
3739+
"doc_notify",
3740+
"doc_shepherd"
3741+
]
3742+
},
3743+
"model": "mailtrigger.mailtrigger",
3744+
"pk": "iana_expert_review_state_changed"
3745+
},
37303746
{
37313747
"fields": {
37323748
"cc": [],
@@ -15008,7 +15024,7 @@
1500815024
"fields": {
1500915025
"command": "xym",
1501015026
"switch": "--version",
15011-
"time": "2020-10-09T00:17:03.141",
15027+
"time": "2020-11-14T00:10:15.888",
1501215028
"used": true,
1501315029
"version": "xym 0.4.8"
1501415030
},
@@ -15019,9 +15035,9 @@
1501915035
"fields": {
1502015036
"command": "pyang",
1502115037
"switch": "--version",
15022-
"time": "2020-10-09T00:17:04.888",
15038+
"time": "2020-11-14T00:10:17.069",
1502315039
"used": true,
15024-
"version": "pyang 2.3.2"
15040+
"version": "pyang 2.4.0"
1502515041
},
1502615042
"model": "utils.versioninfo",
1502715043
"pk": 2
@@ -15030,7 +15046,7 @@
1503015046
"fields": {
1503115047
"command": "yanglint",
1503215048
"switch": "--version",
15033-
"time": "2020-10-09T00:17:05.228",
15049+
"time": "2020-11-14T00:10:17.405",
1503415050
"used": true,
1503515051
"version": "yanglint SO 1.6.7"
1503615052
},
@@ -15041,9 +15057,9 @@
1504115057
"fields": {
1504215058
"command": "xml2rfc",
1504315059
"switch": "--version",
15044-
"time": "2020-10-09T00:17:07.630",
15060+
"time": "2020-11-14T00:10:19.405",
1504515061
"used": true,
15046-
"version": "xml2rfc 3.2.1"
15062+
"version": "xml2rfc 3.4.0"
1504715063
},
1504815064
"model": "utils.versioninfo",
1504915065
"pk": 4
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
{% autoescape off %}The IANA expert review state for {{event.doc.name}} has changed to {{event.state.name}}.
2+
3+
For more information, see the document in the Datatracker at: {{ url }}
4+
{% endautoescape %}

0 commit comments

Comments
 (0)