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:
parent
fa6aa1f672
commit
513c2bcf4c
|
@ -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")
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue