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
This commit is contained in:
Ole Laursen 2012-09-17 16:06:21 +00:00
parent fa6aa1f672
commit 513c2bcf4c
2 changed files with 50 additions and 23 deletions

View file

@ -16,7 +16,7 @@ from ietf.utils.mail import outbox
from ietf.person.models import Person, Email
from ietf.group.models import Group, Role
from ietf.doc.models import Document, BallotDocEvent, BallotPositionDocEvent
from ietf.doc.models import *
from ietf.submit.models import IdSubmissionDetail, Preapproval
class SubmitTestCase(django.test.TestCase):
@ -161,6 +161,16 @@ class SubmitTestCase(django.test.TestCase):
# submit new revision of existing -> supply submitter info -> confirm
draft = make_test_data()
# pretend IANA reviewed it
draft.set_state(State.objects.get(type="draft-iana-review", slug="not-ok"))
# pretend it was approved to check that we notify the RFC Editor
e = DocEvent(type="iesg_approved", doc=draft)
e.time = draft.time
e.by = Person.objects.get(name="(System)")
e.desc = "The IESG approved the document"
e.save()
# make a discuss to see if the AD gets an email
ballot_position = BallotPositionDocEvent()
ballot_position.ballot = draft.latest_event(BallotDocEvent, type="created_ballot")
@ -214,16 +224,16 @@ class SubmitTestCase(django.test.TestCase):
draft = Document.objects.get(docalias__name=name)
self.assertEquals(draft.rev, rev)
new_revision = draft.latest_event()
self.assertEquals(new_revision.type, "new_revision")
self.assertEquals(new_revision.by.name, "Test Name")
self.assertEquals(draft.docevent_set.all()[1].type, "new_revision")
self.assertEquals(draft.docevent_set.all()[1].by.name, "Test Name")
self.assertTrue(not os.path.exists(os.path.join(self.repository_dir, "%s-%s.txt" % (name, old_rev))))
self.assertTrue(os.path.exists(os.path.join(self.archive_dir, "%s-%s.txt" % (name, old_rev))))
self.assertTrue(not os.path.exists(os.path.join(self.staging_dir, u"%s-%s.txt" % (name, rev))))
self.assertTrue(os.path.exists(os.path.join(self.repository_dir, u"%s-%s.txt" % (name, rev))))
self.assertEquals(draft.type_id, "draft")
self.assertEquals(draft.stream_id, "ietf")
self.assertEquals(draft.get_state("draft-stream-%s" % draft.stream_id).slug, "wg-doc")
self.assertEquals(draft.get_state_slug("draft-stream-%s" % draft.stream_id), "wg-doc")
self.assertEquals(draft.get_state_slug("draft-iana-review"), "changed")
self.assertEquals(draft.authors.count(), 1)
self.assertEquals(draft.authors.all()[0].get_name(), "Test Name")
self.assertEquals(draft.authors.all()[0].address, "testname@example.com")

View file

@ -17,7 +17,7 @@ from ietf.ietfauth.decorators import has_role
from ietf.doc.models import *
from ietf.person.models import Person, Alias, Email
from ietf.doc.utils import active_ballot_positions
from ietf.doc.utils import active_ballot_positions, add_state_change_event
from ietf.message.models import Message
# Some useful states
@ -133,28 +133,34 @@ def perform_postREDESIGN(request, submission):
draft.expires = datetime.datetime.now() + datetime.timedelta(settings.INTERNET_DRAFT_DAYS_TO_EXPIRE)
draft.save()
draft.set_state(State.objects.get(type="draft", slug="active"))
if draft.stream_id == "ietf" and draft.group.type_id == "wg" and draft.rev == "00":
# automatically set state "WG Document"
draft.set_state(State.objects.get(type="draft-stream-%s" % draft.stream_id, slug="wg-doc"))
DocAlias.objects.get_or_create(name=submission.filename, document=draft)
update_authors(draft, submission)
# new revision event
a = submission.tempidauthors_set.filter(author_order=0)
if a:
submitter = ensure_person_email_info_exists(a[0]).person
else:
submitter = system
draft.set_state(State.objects.get(type="draft", slug="active"))
DocAlias.objects.get_or_create(name=submission.filename, document=draft)
update_authors(draft, submission)
# new revision event
e = NewRevisionDocEvent(type="new_revision", doc=draft, rev=draft.rev)
e.time = draft.time #submission.submission_date
e.by = submitter
e.desc = "New revision available"
e.save()
if draft.stream_id == "ietf" and draft.group.type_id == "wg" and draft.rev == "00":
# automatically set state "WG Document"
draft.set_state(State.objects.get(type="draft-stream-%s" % draft.stream_id, slug="wg-doc"))
if draft.get_state_slug("draft-iana-review") in ("ok-act", "ok-noact", "not-ok"):
prev_state = draft.get_state("draft-iana-review")
next_state = State.objects.get(type="draft-iana-review", slug="changed")
draft.set_state(next_state)
add_state_change_event(draft, submitter, prev_state, next_state)
# clean up old files
if prev_rev != draft.rev:
from ietf.idrfc.expire import move_draft_files_to_archive
@ -178,8 +184,7 @@ def perform_postREDESIGN(request, submission):
submission.status_id = POSTED
announce_to_lists(request, submission)
if draft.get_state("draft-iesg") != None and not was_rfc:
announce_new_version(request, submission, draft, state_change_msg)
announce_new_version(request, submission, draft, state_change_msg)
announce_to_authors(request, submission)
submission.save()
@ -262,15 +267,27 @@ def announce_new_versionREDESIGN(request, submission, draft, state_change_msg):
if draft.ad:
to_email.append(draft.ad.role_email("ad").address)
if draft.stream_id == "iab":
to_email.append("IAB Chair <iab-chair@ietf.org>")
elif draft.stream_id == "ise":
to_email.append("Independent Submission Editor <rfc-ise@rfc-editor.org>")
elif draft.stream_id == "irtf":
to_email.append("IRSG <irsg@irtf.org>")
# if it has been sent to the RFC Editor, keep them in the loop
if draft.get_state_slug("draft-iesg") in ("ann", "rfcqueue"):
to_email.append("RFC Editor <rfc-editor@rfc-editor.org>")
for ad, pos in active_ballot_positions(draft).iteritems():
if pos and pos.pos_id == "discuss":
to_email.append(ad.role_email("ad").address)
subject = 'New Version Notification - %s-%s.txt' % (submission.filename, submission.revision)
from_email = settings.IDSUBMIT_ANNOUNCE_FROM_EMAIL
send_mail(request, to_email, from_email, subject, 'submit/announce_new_version.txt',
{'submission': submission,
'msg': state_change_msg})
if to_email:
subject = 'New Version Notification - %s-%s.txt' % (submission.filename, submission.revision)
from_email = settings.IDSUBMIT_ANNOUNCE_FROM_EMAIL
send_mail(request, to_email, from_email, subject, 'submit/announce_new_version.txt',
{'submission': submission,
'msg': state_change_msg})
if settings.USE_DB_REDESIGN_PROXY_CLASSES:
announce_new_version = announce_new_versionREDESIGN