Skip to content

Commit 513c2bc

Browse files
committed
Handle IANA Review state intelligently upon draft submission, email
IRSG/ISE/IAB on uploads to alternate streams, email RFC Editor in case a draft under publication has a new upload - Legacy-Id: 4855
1 parent fa6aa1f commit 513c2bc

2 files changed

Lines changed: 50 additions & 23 deletions

File tree

ietf/submit/tests.py

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616

1717
from ietf.person.models import Person, Email
1818
from ietf.group.models import Group, Role
19-
from ietf.doc.models import Document, BallotDocEvent, BallotPositionDocEvent
19+
from ietf.doc.models import *
2020
from ietf.submit.models import IdSubmissionDetail, Preapproval
2121

2222
class SubmitTestCase(django.test.TestCase):
@@ -161,6 +161,16 @@ def test_submit_existing(self):
161161
# submit new revision of existing -> supply submitter info -> confirm
162162
draft = make_test_data()
163163

164+
# pretend IANA reviewed it
165+
draft.set_state(State.objects.get(type="draft-iana-review", slug="not-ok"))
166+
167+
# pretend it was approved to check that we notify the RFC Editor
168+
e = DocEvent(type="iesg_approved", doc=draft)
169+
e.time = draft.time
170+
e.by = Person.objects.get(name="(System)")
171+
e.desc = "The IESG approved the document"
172+
e.save()
173+
164174
# make a discuss to see if the AD gets an email
165175
ballot_position = BallotPositionDocEvent()
166176
ballot_position.ballot = draft.latest_event(BallotDocEvent, type="created_ballot")
@@ -214,16 +224,16 @@ def test_submit_existing(self):
214224

215225
draft = Document.objects.get(docalias__name=name)
216226
self.assertEquals(draft.rev, rev)
217-
new_revision = draft.latest_event()
218-
self.assertEquals(new_revision.type, "new_revision")
219-
self.assertEquals(new_revision.by.name, "Test Name")
227+
self.assertEquals(draft.docevent_set.all()[1].type, "new_revision")
228+
self.assertEquals(draft.docevent_set.all()[1].by.name, "Test Name")
220229
self.assertTrue(not os.path.exists(os.path.join(self.repository_dir, "%s-%s.txt" % (name, old_rev))))
221230
self.assertTrue(os.path.exists(os.path.join(self.archive_dir, "%s-%s.txt" % (name, old_rev))))
222231
self.assertTrue(not os.path.exists(os.path.join(self.staging_dir, u"%s-%s.txt" % (name, rev))))
223232
self.assertTrue(os.path.exists(os.path.join(self.repository_dir, u"%s-%s.txt" % (name, rev))))
224233
self.assertEquals(draft.type_id, "draft")
225234
self.assertEquals(draft.stream_id, "ietf")
226-
self.assertEquals(draft.get_state("draft-stream-%s" % draft.stream_id).slug, "wg-doc")
235+
self.assertEquals(draft.get_state_slug("draft-stream-%s" % draft.stream_id), "wg-doc")
236+
self.assertEquals(draft.get_state_slug("draft-iana-review"), "changed")
227237
self.assertEquals(draft.authors.count(), 1)
228238
self.assertEquals(draft.authors.all()[0].get_name(), "Test Name")
229239
self.assertEquals(draft.authors.all()[0].address, "testname@example.com")

ietf/submit/utils.py

Lines changed: 35 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717

1818
from ietf.doc.models import *
1919
from ietf.person.models import Person, Alias, Email
20-
from ietf.doc.utils import active_ballot_positions
20+
from ietf.doc.utils import active_ballot_positions, add_state_change_event
2121
from ietf.message.models import Message
2222

2323
# Some useful states
@@ -133,28 +133,34 @@ def perform_postREDESIGN(request, submission):
133133
draft.expires = datetime.datetime.now() + datetime.timedelta(settings.INTERNET_DRAFT_DAYS_TO_EXPIRE)
134134
draft.save()
135135

136-
draft.set_state(State.objects.get(type="draft", slug="active"))
137-
if draft.stream_id == "ietf" and draft.group.type_id == "wg" and draft.rev == "00":
138-
# automatically set state "WG Document"
139-
draft.set_state(State.objects.get(type="draft-stream-%s" % draft.stream_id, slug="wg-doc"))
140-
141-
DocAlias.objects.get_or_create(name=submission.filename, document=draft)
142-
143-
update_authors(draft, submission)
144-
145-
# new revision event
146136
a = submission.tempidauthors_set.filter(author_order=0)
147137
if a:
148138
submitter = ensure_person_email_info_exists(a[0]).person
149139
else:
150140
submitter = system
151141

142+
draft.set_state(State.objects.get(type="draft", slug="active"))
143+
DocAlias.objects.get_or_create(name=submission.filename, document=draft)
144+
145+
update_authors(draft, submission)
146+
147+
# new revision event
152148
e = NewRevisionDocEvent(type="new_revision", doc=draft, rev=draft.rev)
153149
e.time = draft.time #submission.submission_date
154150
e.by = submitter
155151
e.desc = "New revision available"
156152
e.save()
157153

154+
if draft.stream_id == "ietf" and draft.group.type_id == "wg" and draft.rev == "00":
155+
# automatically set state "WG Document"
156+
draft.set_state(State.objects.get(type="draft-stream-%s" % draft.stream_id, slug="wg-doc"))
157+
158+
if draft.get_state_slug("draft-iana-review") in ("ok-act", "ok-noact", "not-ok"):
159+
prev_state = draft.get_state("draft-iana-review")
160+
next_state = State.objects.get(type="draft-iana-review", slug="changed")
161+
draft.set_state(next_state)
162+
add_state_change_event(draft, submitter, prev_state, next_state)
163+
158164
# clean up old files
159165
if prev_rev != draft.rev:
160166
from ietf.idrfc.expire import move_draft_files_to_archive
@@ -178,8 +184,7 @@ def perform_postREDESIGN(request, submission):
178184
submission.status_id = POSTED
179185

180186
announce_to_lists(request, submission)
181-
if draft.get_state("draft-iesg") != None and not was_rfc:
182-
announce_new_version(request, submission, draft, state_change_msg)
187+
announce_new_version(request, submission, draft, state_change_msg)
183188
announce_to_authors(request, submission)
184189

185190
submission.save()
@@ -262,15 +267,27 @@ def announce_new_versionREDESIGN(request, submission, draft, state_change_msg):
262267
if draft.ad:
263268
to_email.append(draft.ad.role_email("ad").address)
264269

270+
if draft.stream_id == "iab":
271+
to_email.append("IAB Chair <iab-chair@ietf.org>")
272+
elif draft.stream_id == "ise":
273+
to_email.append("Independent Submission Editor <rfc-ise@rfc-editor.org>")
274+
elif draft.stream_id == "irtf":
275+
to_email.append("IRSG <irsg@irtf.org>")
276+
277+
# if it has been sent to the RFC Editor, keep them in the loop
278+
if draft.get_state_slug("draft-iesg") in ("ann", "rfcqueue"):
279+
to_email.append("RFC Editor <rfc-editor@rfc-editor.org>")
280+
265281
for ad, pos in active_ballot_positions(draft).iteritems():
266282
if pos and pos.pos_id == "discuss":
267283
to_email.append(ad.role_email("ad").address)
268284

269-
subject = 'New Version Notification - %s-%s.txt' % (submission.filename, submission.revision)
270-
from_email = settings.IDSUBMIT_ANNOUNCE_FROM_EMAIL
271-
send_mail(request, to_email, from_email, subject, 'submit/announce_new_version.txt',
272-
{'submission': submission,
273-
'msg': state_change_msg})
285+
if to_email:
286+
subject = 'New Version Notification - %s-%s.txt' % (submission.filename, submission.revision)
287+
from_email = settings.IDSUBMIT_ANNOUNCE_FROM_EMAIL
288+
send_mail(request, to_email, from_email, subject, 'submit/announce_new_version.txt',
289+
{'submission': submission,
290+
'msg': state_change_msg})
274291

275292
if settings.USE_DB_REDESIGN_PROXY_CLASSES:
276293
announce_new_version = announce_new_versionREDESIGN

0 commit comments

Comments
 (0)