Revamp comment handling on state changes slightly, reenable changing

substate in the IESG state interface (modeled with tags)
 - Legacy-Id: 3725
This commit is contained in:
Ole Laursen 2011-11-29 18:46:42 +00:00
parent d79365d25f
commit af8c1b4bf8
6 changed files with 93 additions and 22 deletions

View file

@ -224,9 +224,13 @@ def expire_idREDESIGN(doc):
if doc.latest_event(type='started_iesg_process'):
dead_state = State.objects.get(type="draft-iesg", slug="dead")
prev = doc.get_state("draft-iesg")
prev_tag = doc.tags.filter(slug__in=('point', 'ad-f-up', 'need-rev', 'extpty'))
prev_tag = prev_tag[0] if prev_tag else None
if prev != dead_state:
doc.set_state(dead_state)
log_state_changed(None, doc, system, prev)
if prev_tag:
doc.tags.remove(prev_tag)
log_state_changed(None, doc, system, prev, prev_tag)
e = DocEvent(doc=doc, by=system)
e.type = "expired_document"

View file

@ -82,7 +82,13 @@ def expire_last_callREDESIGN(doc):
prev = doc.get_state("draft-iesg")
doc.set_state(state)
e = log_state_changed(None, doc, Person.objects.get(name="(System)"), prev)
prev_tag = doc.tags.filter(slug__in=('point', 'ad-f-up', 'need-rev', 'extpty'))
prev_tag = prev_tag[0] if prev_tag else None
if prev_tag:
doc.tags.remove(prev_tag)
e = log_state_changed(None, doc, Person.objects.get(name="(System)"), prev, prev_tag)
doc.time = e.time
doc.save()

View file

@ -92,14 +92,21 @@ class ChangeStateTestCase(django.test.TestCase):
# change state
events_before = draft.docevent_set.count()
mailbox_before = len(outbox)
draft.tags.add("ad-f-up")
r = self.client.post(url, dict(state=State.objects.get(type="draft-iesg", slug="review-e").pk))
r = self.client.post(url,
dict(state=State.objects.get(type="draft-iesg", slug="review-e").pk,
substate="point",
comment="Test comment"))
self.assertEquals(r.status_code, 302)
draft = Document.objects.get(name=draft.name)
self.assertEquals(draft.get_state_slug("draft-iesg"), "review-e")
self.assertEquals(draft.docevent_set.count(), events_before + 1)
self.assertTrue("State changed" in draft.docevent_set.all()[0].desc)
self.assertTrue(not draft.tags.filter(slug="ad-f-up"))
self.assertTrue(draft.tags.filter(slug="point"))
self.assertEquals(draft.docevent_set.count(), events_before + 2)
self.assertTrue("Test comment" in draft.docevent_set.all()[0].desc)
self.assertTrue("State changed" in draft.docevent_set.all()[1].desc)
self.assertEquals(len(outbox), mailbox_before + 2)
self.assertTrue("State Update Notice" in outbox[-2]['Subject'])
self.assertTrue(draft.name in outbox[-1]['Subject'])

View file

@ -62,19 +62,23 @@ def log_state_changed(request, doc, by, email_watch_list=True, note=''):
return change
def log_state_changedREDESIGN(request, doc, by, prev_iesg_state, note=''):
def log_state_changedREDESIGN(request, doc, by, prev_iesg_state, prev_iesg_tag):
from doc.models import DocEvent
state = doc.get_state("draft-iesg")
state_name = state.name
tags = doc.tags.filter(slug__in=('point', 'ad-f-up', 'need-rev', 'extpty'))
if tags:
state_name += "::" + tags[0].name
prev_state_name = prev_iesg_state.name if prev_iesg_state else "I-D Exists"
if prev_iesg_tag:
prev_state_name += "::" + prev_iesg_tag.name
e = DocEvent(doc=doc, by=by)
e.type = "changed_document"
e.desc = u"State changed to <b>%s</b> from %s" % (
state.name,
prev_iesg_state.name if prev_iesg_state else "I-D Exists")
if note:
e.desc += "<br>%s" % note
e.desc = u"State changed to <b>%s</b> from %s" % (state_name, prev_state_name)
if state.slug == "lc":
writeup = doc.latest_event(WriteupDocEvent, type="changed_last_call_text")

View file

@ -554,7 +554,13 @@ def defer_ballotREDESIGN(request, name):
prev = doc.get_state("draft-iesg")
doc.set_state(State.objects.get(type="draft-iesg", slug='defer'))
e = log_state_changed(request, doc, login, prev)
prev_tag = doc.tags.filter(slug__in=('point', 'ad-f-up', 'need-rev', 'extpty'))
prev_tag = prev_tag[0] if prev_tag else None
if prev_tag:
doc.tags.remove(prev_tag)
e = log_state_changed(request, doc, login, prev, prev_tag)
doc.time = e.time
doc.save()
@ -619,7 +625,13 @@ def undefer_ballotREDESIGN(request, name):
prev = doc.get_state("draft-iesg")
doc.set_state(State.objects.get(type="draft-iesg", slug='iesg-eva'))
e = log_state_changed(request, doc, login, prev)
prev_tag = doc.tags.filter(slug__in=('point', 'ad-f-up', 'need-rev', 'extpty'))
prev_tag = prev_tag[0] if prev_tag else None
if prev_tag:
doc.tags.remove(prev_tag)
e = log_state_changed(request, doc, login, prev, prev_tag)
doc.time = e.time
doc.save()
@ -777,7 +789,13 @@ def lastcalltextREDESIGN(request, name):
prev = doc.get_state("draft-iesg")
doc.set_state(State.objects.get(type="draft-iesg", slug='lc-req'))
e = log_state_changed(request, doc, login, prev)
prev_tag = doc.tags.filter(slug__in=('point', 'ad-f-up', 'need-rev', 'extpty'))
prev_tag = prev_tag[0] if prev_tag else None
if prev_tag:
doc.tags.remove(prev_tag)
e = log_state_changed(request, doc, login, prev, prev_tag)
doc.time = e.time
doc.save()
@ -1199,6 +1217,11 @@ def approve_ballotREDESIGN(request, name):
prev = doc.get_state("draft-iesg")
doc.set_state(new_state)
prev_tag = doc.tags.filter(slug__in=('point', 'ad-f-up', 'need-rev', 'extpty'))
prev_tag = prev_tag[0] if prev_tag else None
if prev_tag:
doc.tags.remove(prev_tag)
e = DocEvent(doc=doc, by=login)
if action == "do_not_publish":
e.type = "iesg_disapproved"
@ -1211,7 +1234,7 @@ def approve_ballotREDESIGN(request, name):
change_description = e.desc + " and state has been changed to %s" % doc.get_state("draft-iesg").name
e = log_state_changed(request, doc, login, prev)
e = log_state_changed(request, doc, login, prev, prev_tag)
doc.time = e.time
doc.save()
@ -1317,7 +1340,13 @@ def make_last_callREDESIGN(request, name):
prev = doc.get_state("draft-iesg")
doc.set_state(State.objects.get(type="draft-iesg", slug='lc'))
e = log_state_changed(request, doc, login, prev)
prev_tag = doc.tags.filter(slug__in=('point', 'ad-f-up', 'need-rev', 'extpty'))
prev_tag = prev_tag[0] if prev_tag else None
if prev_tag:
doc.tags.remove(prev_tag)
e = log_state_changed(request, doc, login, prev, prev_tag)
doc.time = e.time
doc.save()

View file

@ -105,8 +105,7 @@ def change_state(request, name):
class ChangeStateFormREDESIGN(forms.Form):
state = forms.ModelChoiceField(State.objects.filter(type="draft-iesg"), empty_label=None, required=True)
# FIXME: no tags yet
#substate = forms.ModelChoiceField(IDSubState.objects.all(), required=False)
substate = forms.ModelChoiceField(DocTagName.objects.filter(slug__in=('point', 'ad-f-up', 'need-rev', 'extpty')), required=False)
comment = forms.CharField(widget=forms.Textarea, required=False)
@group_required('Area_Director','Secretariat')
@ -123,14 +122,36 @@ def change_stateREDESIGN(request, name):
form = ChangeStateForm(request.POST)
if form.is_valid():
state = form.cleaned_data['state']
comment = form.cleaned_data['comment']
tag = form.cleaned_data['substate']
comment = form.cleaned_data['comment'].strip()
prev = doc.get_state("draft-iesg")
if state != prev:
# tag handling is a bit awkward since the UI still works
# as if IESG tags are a substate
prev_tag = doc.tags.filter(slug__in=('point', 'ad-f-up', 'need-rev', 'extpty'))
prev_tag = prev_tag[0] if prev_tag else None
if state != prev or tag != prev_tag:
save_document_in_history(doc)
doc.set_state(state)
e = log_state_changed(request, doc, login, prev, comment)
if prev_tag:
doc.tags.remove(prev_tag)
if tag:
doc.tags.add(tag)
e = log_state_changed(request, doc, login, prev, prev_tag)
if comment:
c = DocEvent(type="added_comment")
c.doc = doc
c.by = login
c.desc = comment
c.save()
e.desc += "<br>" + comment
doc.time = e.time
doc.save()