Skip to content

Commit af8c1b4

Browse files
committed
Revamp comment handling on state changes slightly, reenable changing
substate in the IESG state interface (modeled with tags) - Legacy-Id: 3725
1 parent d79365d commit af8c1b4

6 files changed

Lines changed: 93 additions & 22 deletions

File tree

ietf/idrfc/expire.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -224,9 +224,13 @@ def move_file(f):
224224
if doc.latest_event(type='started_iesg_process'):
225225
dead_state = State.objects.get(type="draft-iesg", slug="dead")
226226
prev = doc.get_state("draft-iesg")
227+
prev_tag = doc.tags.filter(slug__in=('point', 'ad-f-up', 'need-rev', 'extpty'))
228+
prev_tag = prev_tag[0] if prev_tag else None
227229
if prev != dead_state:
228230
doc.set_state(dead_state)
229-
log_state_changed(None, doc, system, prev)
231+
if prev_tag:
232+
doc.tags.remove(prev_tag)
233+
log_state_changed(None, doc, system, prev, prev_tag)
230234

231235
e = DocEvent(doc=doc, by=system)
232236
e.type = "expired_document"

ietf/idrfc/lastcall.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,13 @@ def expire_last_callREDESIGN(doc):
8282

8383
prev = doc.get_state("draft-iesg")
8484
doc.set_state(state)
85-
e = log_state_changed(None, doc, Person.objects.get(name="(System)"), prev)
85+
86+
prev_tag = doc.tags.filter(slug__in=('point', 'ad-f-up', 'need-rev', 'extpty'))
87+
prev_tag = prev_tag[0] if prev_tag else None
88+
if prev_tag:
89+
doc.tags.remove(prev_tag)
90+
91+
e = log_state_changed(None, doc, Person.objects.get(name="(System)"), prev, prev_tag)
8692

8793
doc.time = e.time
8894
doc.save()

ietf/idrfc/testsREDESIGN.py

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -92,14 +92,21 @@ def test_change_state(self):
9292
# change state
9393
events_before = draft.docevent_set.count()
9494
mailbox_before = len(outbox)
95+
draft.tags.add("ad-f-up")
9596

96-
r = self.client.post(url, dict(state=State.objects.get(type="draft-iesg", slug="review-e").pk))
97+
r = self.client.post(url,
98+
dict(state=State.objects.get(type="draft-iesg", slug="review-e").pk,
99+
substate="point",
100+
comment="Test comment"))
97101
self.assertEquals(r.status_code, 302)
98102

99103
draft = Document.objects.get(name=draft.name)
100104
self.assertEquals(draft.get_state_slug("draft-iesg"), "review-e")
101-
self.assertEquals(draft.docevent_set.count(), events_before + 1)
102-
self.assertTrue("State changed" in draft.docevent_set.all()[0].desc)
105+
self.assertTrue(not draft.tags.filter(slug="ad-f-up"))
106+
self.assertTrue(draft.tags.filter(slug="point"))
107+
self.assertEquals(draft.docevent_set.count(), events_before + 2)
108+
self.assertTrue("Test comment" in draft.docevent_set.all()[0].desc)
109+
self.assertTrue("State changed" in draft.docevent_set.all()[1].desc)
103110
self.assertEquals(len(outbox), mailbox_before + 2)
104111
self.assertTrue("State Update Notice" in outbox[-2]['Subject'])
105112
self.assertTrue(draft.name in outbox[-1]['Subject'])

ietf/idrfc/utils.py

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -62,19 +62,23 @@ def log_state_changed(request, doc, by, email_watch_list=True, note=''):
6262

6363
return change
6464

65-
def log_state_changedREDESIGN(request, doc, by, prev_iesg_state, note=''):
65+
def log_state_changedREDESIGN(request, doc, by, prev_iesg_state, prev_iesg_tag):
6666
from doc.models import DocEvent
6767

6868
state = doc.get_state("draft-iesg")
6969

70+
state_name = state.name
71+
tags = doc.tags.filter(slug__in=('point', 'ad-f-up', 'need-rev', 'extpty'))
72+
if tags:
73+
state_name += "::" + tags[0].name
74+
75+
prev_state_name = prev_iesg_state.name if prev_iesg_state else "I-D Exists"
76+
if prev_iesg_tag:
77+
prev_state_name += "::" + prev_iesg_tag.name
78+
7079
e = DocEvent(doc=doc, by=by)
7180
e.type = "changed_document"
72-
e.desc = u"State changed to <b>%s</b> from %s" % (
73-
state.name,
74-
prev_iesg_state.name if prev_iesg_state else "I-D Exists")
75-
76-
if note:
77-
e.desc += "<br>%s" % note
81+
e.desc = u"State changed to <b>%s</b> from %s" % (state_name, prev_state_name)
7882

7983
if state.slug == "lc":
8084
writeup = doc.latest_event(WriteupDocEvent, type="changed_last_call_text")

ietf/idrfc/views_ballot.py

Lines changed: 34 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -554,7 +554,13 @@ def defer_ballotREDESIGN(request, name):
554554

555555
prev = doc.get_state("draft-iesg")
556556
doc.set_state(State.objects.get(type="draft-iesg", slug='defer'))
557-
e = log_state_changed(request, doc, login, prev)
557+
558+
prev_tag = doc.tags.filter(slug__in=('point', 'ad-f-up', 'need-rev', 'extpty'))
559+
prev_tag = prev_tag[0] if prev_tag else None
560+
if prev_tag:
561+
doc.tags.remove(prev_tag)
562+
563+
e = log_state_changed(request, doc, login, prev, prev_tag)
558564

559565
doc.time = e.time
560566
doc.save()
@@ -619,7 +625,13 @@ def undefer_ballotREDESIGN(request, name):
619625

620626
prev = doc.get_state("draft-iesg")
621627
doc.set_state(State.objects.get(type="draft-iesg", slug='iesg-eva'))
622-
e = log_state_changed(request, doc, login, prev)
628+
629+
prev_tag = doc.tags.filter(slug__in=('point', 'ad-f-up', 'need-rev', 'extpty'))
630+
prev_tag = prev_tag[0] if prev_tag else None
631+
if prev_tag:
632+
doc.tags.remove(prev_tag)
633+
634+
e = log_state_changed(request, doc, login, prev, prev_tag)
623635

624636
doc.time = e.time
625637
doc.save()
@@ -777,7 +789,13 @@ def lastcalltextREDESIGN(request, name):
777789

778790
prev = doc.get_state("draft-iesg")
779791
doc.set_state(State.objects.get(type="draft-iesg", slug='lc-req'))
780-
e = log_state_changed(request, doc, login, prev)
792+
793+
prev_tag = doc.tags.filter(slug__in=('point', 'ad-f-up', 'need-rev', 'extpty'))
794+
prev_tag = prev_tag[0] if prev_tag else None
795+
if prev_tag:
796+
doc.tags.remove(prev_tag)
797+
798+
e = log_state_changed(request, doc, login, prev, prev_tag)
781799

782800
doc.time = e.time
783801
doc.save()
@@ -1199,6 +1217,11 @@ def approve_ballotREDESIGN(request, name):
11991217
prev = doc.get_state("draft-iesg")
12001218
doc.set_state(new_state)
12011219

1220+
prev_tag = doc.tags.filter(slug__in=('point', 'ad-f-up', 'need-rev', 'extpty'))
1221+
prev_tag = prev_tag[0] if prev_tag else None
1222+
if prev_tag:
1223+
doc.tags.remove(prev_tag)
1224+
12021225
e = DocEvent(doc=doc, by=login)
12031226
if action == "do_not_publish":
12041227
e.type = "iesg_disapproved"
@@ -1211,7 +1234,7 @@ def approve_ballotREDESIGN(request, name):
12111234

12121235
change_description = e.desc + " and state has been changed to %s" % doc.get_state("draft-iesg").name
12131236

1214-
e = log_state_changed(request, doc, login, prev)
1237+
e = log_state_changed(request, doc, login, prev, prev_tag)
12151238

12161239
doc.time = e.time
12171240
doc.save()
@@ -1317,7 +1340,13 @@ def make_last_callREDESIGN(request, name):
13171340

13181341
prev = doc.get_state("draft-iesg")
13191342
doc.set_state(State.objects.get(type="draft-iesg", slug='lc'))
1320-
e = log_state_changed(request, doc, login, prev)
1343+
1344+
prev_tag = doc.tags.filter(slug__in=('point', 'ad-f-up', 'need-rev', 'extpty'))
1345+
prev_tag = prev_tag[0] if prev_tag else None
1346+
if prev_tag:
1347+
doc.tags.remove(prev_tag)
1348+
1349+
e = log_state_changed(request, doc, login, prev, prev_tag)
13211350

13221351
doc.time = e.time
13231352
doc.save()

ietf/idrfc/views_edit.py

Lines changed: 26 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -105,8 +105,7 @@ def change_state(request, name):
105105

106106
class ChangeStateFormREDESIGN(forms.Form):
107107
state = forms.ModelChoiceField(State.objects.filter(type="draft-iesg"), empty_label=None, required=True)
108-
# FIXME: no tags yet
109-
#substate = forms.ModelChoiceField(IDSubState.objects.all(), required=False)
108+
substate = forms.ModelChoiceField(DocTagName.objects.filter(slug__in=('point', 'ad-f-up', 'need-rev', 'extpty')), required=False)
110109
comment = forms.CharField(widget=forms.Textarea, required=False)
111110

112111
@group_required('Area_Director','Secretariat')
@@ -123,14 +122,36 @@ def change_stateREDESIGN(request, name):
123122
form = ChangeStateForm(request.POST)
124123
if form.is_valid():
125124
state = form.cleaned_data['state']
126-
comment = form.cleaned_data['comment']
125+
tag = form.cleaned_data['substate']
126+
comment = form.cleaned_data['comment'].strip()
127127
prev = doc.get_state("draft-iesg")
128-
if state != prev:
128+
129+
# tag handling is a bit awkward since the UI still works
130+
# as if IESG tags are a substate
131+
prev_tag = doc.tags.filter(slug__in=('point', 'ad-f-up', 'need-rev', 'extpty'))
132+
prev_tag = prev_tag[0] if prev_tag else None
133+
134+
if state != prev or tag != prev_tag:
129135
save_document_in_history(doc)
130136

131137
doc.set_state(state)
132138

133-
e = log_state_changed(request, doc, login, prev, comment)
139+
if prev_tag:
140+
doc.tags.remove(prev_tag)
141+
142+
if tag:
143+
doc.tags.add(tag)
144+
145+
e = log_state_changed(request, doc, login, prev, prev_tag)
146+
147+
if comment:
148+
c = DocEvent(type="added_comment")
149+
c.doc = doc
150+
c.by = login
151+
c.desc = comment
152+
c.save()
153+
154+
e.desc += "<br>" + comment
134155

135156
doc.time = e.time
136157
doc.save()

0 commit comments

Comments
 (0)