Summary: Be more careful when generating writeups so that we wait with
saving newly generated writeups until we see a POST (problem found by the test crawler) - Legacy-Id: 10137
This commit is contained in:
parent
63d96e0354
commit
ec54a59cc6
|
@ -13,12 +13,15 @@ from ietf.doc.mails import send_last_call_request, email_last_call_expired
|
|||
|
||||
def request_last_call(request, doc):
|
||||
if not doc.latest_event(type="changed_ballot_writeup_text"):
|
||||
generate_ballot_writeup(request, doc)
|
||||
e = generate_ballot_writeup(request, doc)
|
||||
e.save()
|
||||
if not doc.latest_event(type="changed_ballot_approval_text"):
|
||||
generate_approval_mail(request, doc)
|
||||
e = generate_approval_mail(request, doc)
|
||||
e.save()
|
||||
if not doc.latest_event(type="changed_last_call_text"):
|
||||
generate_last_call_announcement(request, doc)
|
||||
|
||||
e = generate_last_call_announcement(request, doc)
|
||||
e.save()
|
||||
|
||||
send_last_call_request(request, doc)
|
||||
|
||||
e = DocEvent()
|
||||
|
|
|
@ -112,8 +112,8 @@ def generate_ballot_writeup(request, doc):
|
|||
e.doc = doc
|
||||
e.desc = u"Ballot writeup was generated"
|
||||
e.text = unicode(render_to_string("doc/mail/ballot_writeup.txt", {'iana': iana}))
|
||||
e.save()
|
||||
|
||||
|
||||
# caller is responsible for saving, if necessary
|
||||
return e
|
||||
|
||||
def generate_last_call_announcement(request, doc):
|
||||
|
@ -154,8 +154,8 @@ def generate_last_call_announcement(request, doc):
|
|||
e.doc = doc
|
||||
e.desc = u"Last call announcement was generated"
|
||||
e.text = unicode(mail)
|
||||
e.save()
|
||||
|
||||
# caller is responsible for saving, if necessary
|
||||
return e
|
||||
|
||||
|
||||
|
@ -173,8 +173,8 @@ def generate_approval_mail(request, doc):
|
|||
e.doc = doc
|
||||
e.desc = u"Ballot approval text was generated"
|
||||
e.text = unicode(mail)
|
||||
e.save()
|
||||
|
||||
# caller is responsible for saving, if necessary
|
||||
return e
|
||||
|
||||
def generate_approval_mail_approved(request, doc):
|
||||
|
|
|
@ -211,8 +211,8 @@ class BallotWriteupsTests(TestCase):
|
|||
regenerate_last_call_text="1"))
|
||||
self.assertEqual(r.status_code, 200)
|
||||
q = PyQuery(r.content)
|
||||
draft = Document.objects.get(name=draft.name)
|
||||
self.assertTrue("Subject: Last Call" in draft.latest_event(WriteupDocEvent, type="changed_last_call_text").text)
|
||||
text = q("[name=last_call_text]").text()
|
||||
self.assertTrue("Subject: Last Call" in text)
|
||||
|
||||
|
||||
def test_request_last_call(self):
|
||||
|
@ -223,12 +223,14 @@ class BallotWriteupsTests(TestCase):
|
|||
# give us an announcement to send
|
||||
r = self.client.post(url, dict(regenerate_last_call_text="1"))
|
||||
self.assertEqual(r.status_code, 200)
|
||||
|
||||
q = PyQuery(r.content)
|
||||
text = q("[name=last_call_text]").text()
|
||||
|
||||
mailbox_before = len(outbox)
|
||||
|
||||
# send
|
||||
r = self.client.post(url, dict(
|
||||
last_call_text=draft.latest_event(WriteupDocEvent, type="changed_last_call_text").text,
|
||||
last_call_text=text,
|
||||
send_last_call_request="1"))
|
||||
draft = Document.objects.get(name=draft.name)
|
||||
self.assertEqual(draft.get_state_slug("draft-iesg"), "lc-req")
|
||||
|
@ -341,7 +343,6 @@ class BallotWriteupsTests(TestCase):
|
|||
# test regenerate
|
||||
r = self.client.post(url, dict(regenerate_approval_text="1"))
|
||||
self.assertEqual(r.status_code, 200)
|
||||
draft = Document.objects.get(name=draft.name)
|
||||
self.assertTrue("Subject: Protocol Action" in draft.latest_event(WriteupDocEvent, type="changed_ballot_approval_text").text)
|
||||
|
||||
# test regenerate when it's a disapprove
|
||||
|
@ -349,7 +350,6 @@ class BallotWriteupsTests(TestCase):
|
|||
|
||||
r = self.client.post(url, dict(regenerate_approval_text="1"))
|
||||
self.assertEqual(r.status_code, 200)
|
||||
draft = Document.objects.get(name=draft.name)
|
||||
self.assertTrue("NOT be published" in draft.latest_event(WriteupDocEvent, type="changed_ballot_approval_text").text)
|
||||
|
||||
# test regenerate when it's a conflict review
|
||||
|
@ -360,7 +360,6 @@ class BallotWriteupsTests(TestCase):
|
|||
|
||||
r = self.client.post(url, dict(regenerate_approval_text="1"))
|
||||
self.assertEqual(r.status_code, 200)
|
||||
draft = Document.objects.get(name=draft.name)
|
||||
self.assertTrue("Subject: Results of IETF-conflict review" in draft.latest_event(WriteupDocEvent, type="changed_ballot_approval_text").text)
|
||||
|
||||
|
||||
|
|
|
@ -150,8 +150,8 @@ def generate_ballot_writeup(request, doc):
|
|||
e.doc = doc
|
||||
e.desc = u"Ballot writeup was generated"
|
||||
e.text = unicode(render_to_string("doc/charter/ballot_writeup.txt"))
|
||||
e.save()
|
||||
|
||||
|
||||
# caller is responsible for saving, if necessary
|
||||
return e
|
||||
|
||||
def default_action_text(group, charter, by):
|
||||
|
|
|
@ -451,6 +451,8 @@ def lastcalltext(request, name):
|
|||
e.desc = "Last call announcement was changed"
|
||||
e.text = t
|
||||
e.save()
|
||||
elif existing.pk == None:
|
||||
existing.save()
|
||||
|
||||
if "send_last_call_request" in request.POST:
|
||||
prev_state = doc.get_state("draft-iesg")
|
||||
|
@ -477,7 +479,8 @@ def lastcalltext(request, name):
|
|||
|
||||
if "regenerate_last_call_text" in request.POST:
|
||||
e = generate_last_call_announcement(request, doc)
|
||||
|
||||
e.save()
|
||||
|
||||
# make sure form has the updated text
|
||||
form = LastCallTextForm(initial=dict(last_call_text=e.text))
|
||||
|
||||
|
@ -530,6 +533,8 @@ def ballot_writeupnotes(request, name):
|
|||
e.desc = "Ballot writeup was changed"
|
||||
e.text = t
|
||||
e.save()
|
||||
elif existing.pk == None:
|
||||
existing.save()
|
||||
|
||||
if "issue_ballot" in request.POST:
|
||||
create_ballot_if_not_open(doc, login, "approve")
|
||||
|
@ -548,6 +553,7 @@ def ballot_writeupnotes(request, name):
|
|||
approval = doc.latest_event(WriteupDocEvent, type="changed_ballot_approval_text")
|
||||
if not approval:
|
||||
approval = generate_approval_mail(request, doc)
|
||||
approval.save()
|
||||
|
||||
msg = generate_issue_ballot_mail(request, doc, ballot)
|
||||
send_mail_preformatted(request, msg)
|
||||
|
@ -612,9 +618,12 @@ def ballot_approvaltext(request, name):
|
|||
e.desc = "Ballot approval text was changed"
|
||||
e.text = t
|
||||
e.save()
|
||||
elif existing.pk == None:
|
||||
existing.save()
|
||||
|
||||
if "regenerate_approval_text" in request.POST:
|
||||
e = generate_approval_mail(request, doc)
|
||||
e.save()
|
||||
|
||||
# make sure form has the updated text
|
||||
form = ApprovalTextForm(initial=dict(approval_text=e.text))
|
||||
|
@ -642,15 +651,15 @@ def approve_ballot(request, name):
|
|||
|
||||
login = request.user.person
|
||||
|
||||
e = doc.latest_event(WriteupDocEvent, type="changed_ballot_approval_text")
|
||||
if not e:
|
||||
e = generate_approval_mail(request, doc)
|
||||
approval_text = e.text
|
||||
approval_mail_event = doc.latest_event(WriteupDocEvent, type="changed_ballot_approval_text")
|
||||
if not approval_mail_event:
|
||||
approval_mail_event = generate_approval_mail(request, doc)
|
||||
approval_text = approval_mail_event.text
|
||||
|
||||
e = doc.latest_event(WriteupDocEvent, type="changed_ballot_writeup_text")
|
||||
if not e:
|
||||
e = generate_ballot_writeup(request, doc)
|
||||
ballot_writeup = e.text
|
||||
ballot_writeup_event = doc.latest_event(WriteupDocEvent, type="changed_ballot_writeup_text")
|
||||
if not ballot_writeup_event:
|
||||
ballot_writeup_event = generate_ballot_writeup(request, doc)
|
||||
ballot_writeup = ballot_writeup_event.text
|
||||
|
||||
if "NOT be published" in approval_text:
|
||||
action = "do_not_publish"
|
||||
|
@ -675,6 +684,11 @@ def approve_ballot(request, name):
|
|||
prev_tags = doc.tags.filter(slug__in=IESG_SUBSTATE_TAGS)
|
||||
events = []
|
||||
|
||||
if approval_mail_event.pk == None:
|
||||
approval_mail_event.save()
|
||||
if ballot_writeup_event.pk == None:
|
||||
ballot_writeup_event.save()
|
||||
|
||||
if new_state.slug == "ann" and new_state.slug != prev_state.slug and not request.REQUEST.get("skiprfceditorpost"):
|
||||
# start by notifying the RFC Editor
|
||||
import ietf.sync.rfceditor
|
||||
|
@ -748,16 +762,19 @@ def make_last_call(request, name):
|
|||
|
||||
login = request.user.person
|
||||
|
||||
e = doc.latest_event(WriteupDocEvent, type="changed_last_call_text")
|
||||
if not e:
|
||||
if doc.type.slug != 'draft':
|
||||
announcement_event = doc.latest_event(WriteupDocEvent, type="changed_last_call_text")
|
||||
if not announcement_event:
|
||||
if doc.type_id != 'draft':
|
||||
raise Http404
|
||||
e = generate_last_call_announcement(request, doc)
|
||||
announcement = e.text
|
||||
announcement_event = generate_last_call_announcement(request, doc)
|
||||
announcement = announcement_event.text
|
||||
|
||||
if request.method == 'POST':
|
||||
form = MakeLastCallForm(request.POST)
|
||||
if form.is_valid():
|
||||
if announcement_event.pk == None:
|
||||
announcement_event.save()
|
||||
|
||||
send_mail_preformatted(request, announcement)
|
||||
if doc.type.slug == 'draft':
|
||||
send_mail_preformatted(request, announcement, extra=extra_automation_headers(doc),
|
||||
|
|
|
@ -554,6 +554,8 @@ def ballot_writeupnotes(request, name):
|
|||
e.save()
|
||||
|
||||
existing = e
|
||||
elif existing.pk == None:
|
||||
existing.save()
|
||||
|
||||
if "send_ballot" in request.POST and approval:
|
||||
if has_role(request.user, "Area Director") and not charter.latest_event(BallotPositionDocEvent, type="changed_ballot_position", ad=by, ballot=ballot):
|
||||
|
|
Loading…
Reference in a new issue