Skip to content

Commit d4e5f07

Browse files
committed
Merged in [8293] from rjsparks@nostrum.com:\n XXX: Should what is now captured in the list of STATUSCHANGE_RELATIONS instead be captured in the database in name_docrelationshipname?
Refactored editing the notify field to remove redundant code. Changed the default notification list to include .all for documents, and the wg list for wg documents. Allowed recalculating the notification list for all document types. Improved the calculated notification list value for charters, conflict-reviews, and status-changes. Adds shepherds to the notification list when they are assigned to a document. Adds the working group email list to the notification list when a document is adopted. Fixes ietf-tools#1438 - Legacy-Id: 8385 Note: SVN reference [8293] has been migrated to Git commit 640c5eb
1 parent 6f7a2cc commit d4e5f07

20 files changed

+216
-283
lines changed

ietf/doc/forms.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,4 +34,8 @@ def __init__(self, *args, **kwargs):
3434
self.fields['ad'].choices = list(choices) + [("", "-------"), (ad_pk, Person.objects.get(pk=ad_pk).plain_name())]
3535

3636
class NotifyForm(forms.Form):
37-
notify = forms.CharField(max_length=255, label="Notice emails", help_text="Separate email addresses with commas", required=False)
37+
notify = forms.CharField(max_length=255, help_text="List of email addresses to receive state notifications, separated by comma", label="Notification list", required=False)
38+
39+
def clean_notify(self):
40+
addrspecs = [x.strip() for x in self.cleaned_data["notify"].split(',')]
41+
return ', '.join(addrspecs)

ietf/doc/models.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -178,6 +178,8 @@ def meeting_related(self):
178178
class Meta:
179179
abstract = True
180180

181+
STATUSCHANGE_RELATIONS = ('tops','tois','tohist','toinf','tobcp','toexp')
182+
181183
class RelatedDocument(models.Model):
182184
source = models.ForeignKey('Document')
183185
target = models.ForeignKey('DocAlias')

ietf/doc/tests_charter.py

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -181,11 +181,23 @@ def test_edit_notify(self):
181181

182182
# post
183183
self.assertTrue(not charter.notify)
184-
r = self.client.post(url, dict(notify="someone@example.com, someoneelse@example.com"))
184+
newlist = "someone@example.com, someoneelse@example.com"
185+
r = self.client.post(url, dict(notify=newlist,save_addresses="1"))
185186
self.assertEqual(r.status_code, 302)
186187

187188
charter = Document.objects.get(name=charter.name)
188-
self.assertEqual(charter.notify, "someone@example.com, someoneelse@example.com")
189+
self.assertEqual(charter.notify, newlist)
190+
191+
# Ask the form to regenerate the list
192+
r = self.client.post(url,dict(regenerate_addresses="1"))
193+
self.assertEqual(r.status_code,200)
194+
charter= Document.objects.get(name=charter.name)
195+
# Regenerate does not save!
196+
self.assertEqual(charter.notify,newlist)
197+
q = PyQuery(r.content)
198+
formlist = q('form input[name=notify]')[0].value
199+
self.assertTrue('marschairman@ietf.org' in formlist)
200+
self.assertFalse('someone@example.com' in formlist)
189201

190202
def test_edit_ad(self):
191203
make_test_data()

ietf/doc/tests_conflict_review.py

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -176,12 +176,22 @@ def test_edit_notices(self):
176176

177177
# change notice list
178178
newlist = '"Foo Bar" <foo@bar.baz.com>'
179-
r = self.client.post(url,dict(notify=newlist))
179+
r = self.client.post(url,dict(notify=newlist,save_addresses="1"))
180180
self.assertEqual(r.status_code,302)
181181
doc = Document.objects.get(name='conflict-review-imaginary-irtf-submission')
182182
self.assertEqual(doc.notify,newlist)
183183
self.assertTrue(doc.latest_event(DocEvent,type="added_comment").desc.startswith('Notification list changed'))
184184

185+
# Ask the form to regenerate the list
186+
r = self.client.post(url,dict(regenerate_addresses="1"))
187+
self.assertEqual(r.status_code,200)
188+
doc = Document.objects.get(name='conflict-review-imaginary-irtf-submission')
189+
# Regenerate does not save!
190+
self.assertEqual(doc.notify,newlist)
191+
q = PyQuery(r.content)
192+
self.assertTrue('draft-imaginary-irtf-submission@tools.ietf.org' in q('form input[name=notify]')[0].value)
193+
self.assertTrue('irtf-chair@ietf.org' in q('form input[name=notify]')[0].value)
194+
self.assertTrue('foo@bar.baz.com' not in q('form input[name=notify]')[0].value)
185195

186196
def test_edit_ad(self):
187197
doc = Document.objects.get(name='conflict-review-imaginary-irtf-submission')

ietf/doc/tests_draft.py

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -841,7 +841,9 @@ def test_doc_change_shepherd(self):
841841
self.assertEqual(r.status_code,302)
842842
self.doc = Document.objects.get(name=self.docname)
843843
self.assertEqual(self.doc.shepherd,plain)
844-
self.assertTrue(self.doc.latest_event(DocEvent,type="added_comment").desc.startswith('Document shepherd changed to Plain Man'))
844+
comments = '::'.join([x.desc for x in self.doc.docevent_set.filter(time=self.doc.time,type="added_comment")])
845+
self.assertTrue('Document shepherd changed to Plain Man' in comments)
846+
self.assertTrue('Notification list changed' in comments)
845847

846848
ad = Person.objects.get(name='Aread Irector')
847849
two_answers = "%s,%s" % (plain_email, ad.email_set.all()[0])
@@ -1021,16 +1023,19 @@ def test_adopt_document(self):
10211023
# adopt in mars WG
10221024
mailbox_before = len(outbox)
10231025
events_before = draft.docevent_set.count()
1026+
mars = Group.objects.get(acronym="mars")
10241027
r = self.client.post(url,
10251028
dict(comment="some comment",
1026-
group=Group.objects.get(acronym="mars").pk,
1029+
group=mars.pk,
10271030
weeks="10"))
10281031
self.assertEqual(r.status_code, 302)
10291032

10301033
draft = Document.objects.get(pk=draft.pk)
10311034
self.assertEqual(draft.group.acronym, "mars")
10321035
self.assertEqual(draft.stream_id, "ietf")
1033-
self.assertEqual(draft.docevent_set.count() - events_before, 4)
1036+
self.assertEqual(draft.docevent_set.count() - events_before, 5)
1037+
self.assertTrue(mars.list_email in draft.notify)
1038+
self.assertTrue('draft-ietf-mars-test.all@tools.ietf.org' in draft.notify)
10341039
self.assertEqual(len(outbox), mailbox_before + 1)
10351040
self.assertTrue("state changed" in outbox[-1]["Subject"].lower())
10361041
self.assertTrue("marschairman@ietf.org" in unicode(outbox[-1]))

ietf/doc/tests_status_change.py

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -139,12 +139,28 @@ def test_edit_notices(self):
139139

140140
# change notice list
141141
newlist = '"Foo Bar" <foo@bar.baz.com>'
142-
r = self.client.post(url,dict(notify=newlist))
142+
r = self.client.post(url,dict(notify=newlist,save_addresses="1"))
143143
self.assertEqual(r.status_code,302)
144144
doc = Document.objects.get(name='status-change-imaginary-mid-review')
145145
self.assertEqual(doc.notify,newlist)
146146
self.assertTrue(doc.latest_event(DocEvent,type="added_comment").desc.startswith('Notification list changed'))
147147

148+
# Some additional setup so there's something to put in a generated notify list
149+
doc.relateddocument_set.create(target=DocAlias.objects.get(name='rfc9999'),relationship_id='tois')
150+
doc.relateddocument_set.create(target=DocAlias.objects.get(name='rfc9998'),relationship_id='tohist')
151+
152+
# Ask the form to regenerate the list
153+
r = self.client.post(url,dict(regenerate_addresses="1"))
154+
self.assertEqual(r.status_code,200)
155+
doc = Document.objects.get(name='status-change-imaginary-mid-review')
156+
# Regenerate does not save!
157+
self.assertEqual(doc.notify,newlist)
158+
q = PyQuery(r.content)
159+
formlist = q('form input[name=notify]')[0].value
160+
self.assertTrue('draft-ietf-random-thing@ietf.org' in formlist)
161+
self.assertTrue('draft-ietf-random-otherthing@ietf.org' in formlist)
162+
self.assertFalse('foo@bar.baz.com' in formlist)
163+
148164
def test_edit_title(self):
149165
doc = Document.objects.get(name='status-change-imaginary-mid-review')
150166
url = urlreverse('status_change_title',kwargs=dict(name=doc.name))

ietf/doc/urls.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@
7474

7575
url(r'^(?P<name>[A-Za-z0-9._+-]+)/edit/stream/$', views_draft.change_stream, name='doc_change_stream'),
7676
url(r'^(?P<name>[A-Za-z0-9._+-]+)/edit/replaces/$', views_draft.replaces, name='doc_change_replaces'),
77-
url(r'^(?P<name>[A-Za-z0-9._+-]+)/edit/notify/$', views_draft.edit_notices, name='doc_change_notify'),
77+
url(r'^(?P<name>[A-Za-z0-9._+-]+)/edit/notify/$', views_doc.edit_notify, name='doc_change_notify'),
7878
url(r'^(?P<name>[A-Za-z0-9._+-]+)/edit/status/$', views_draft.change_intention, name='doc_change_intended_status'),
7979
url(r'^(?P<name>[A-Za-z0-9._+-]+)/edit/telechat/$', views_doc.telechat_date, name='doc_change_telechat_date'),
8080
url(r'^(?P<name>[A-Za-z0-9._+-]+)/edit/iesgnote/$', views_draft.edit_iesg_note, name='doc_change_iesg_note'),

ietf/doc/urls_charter.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
url(r'^state/$', "ietf.doc.views_charter.change_state", name='charter_change_state'),
77
url(r'^(?P<option>initcharter|recharter|abandon)/$', "ietf.doc.views_charter.change_state", name='charter_startstop_process'),
88
url(r'^telechat/$', "ietf.doc.views_doc.telechat_date", name='charter_telechat_date'),
9-
url(r'^notify/$', "ietf.doc.views_charter.edit_notify", name='charter_edit_notify'),
9+
url(r'^notify/$', "ietf.doc.views_doc.edit_notify", name='charter_edit_notify'),
1010
url(r'^ad/$', "ietf.doc.views_charter.edit_ad", name='charter_edit_ad'),
1111
url(r'^(?P<ann>action|review)/$', "ietf.doc.views_charter.announcement_text", name="charter_edit_announcement"),
1212
url(r'^ballotwriteupnotes/$', "ietf.doc.views_charter.ballot_writeupnotes"),

ietf/doc/urls_conflict_review.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,14 @@
33
urlpatterns = patterns('ietf.doc.views_conflict_review',
44
url(r'^state/$', "change_state", name='conflict_review_change_state'),
55
url(r'^submit/$', "submit", name='conflict_review_submit'),
6-
url(r'^notices/$', "edit_notices", name='conflict_review_notices'),
76
url(r'^ad/$', "edit_ad", name='conflict_review_ad'),
87
url(r'^approve/$', "approve", name='conflict_review_approve'),
98
url(r'^start_conflict_review/$', "start_review", name='conflict_review_start'),
109
)
1110

1211
urlpatterns += patterns('ietf.doc.views_doc',
1312
url(r'^telechat/$', "telechat_date", name='conflict_review_telechat_date'),
13+
url(r'^notices/$', "edit_notify", name='conflict_review_notices'),
1414
)
1515

1616

ietf/doc/urls_status_change.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
urlpatterns = patterns('ietf.doc.views_status_change',
44
url(r'^state/$', "change_state", name='status_change_change_state'),
55
url(r'^submit/$', "submit", name='status_change_submit'),
6-
url(r'^notices/$', "edit_notices", name='status_change_notices'),
76
url(r'^ad/$', "edit_ad", name='status_change_ad'),
87
url(r'^title/$', "edit_title", name='status_change_title'),
98
url(r'^approve/$', "approve", name='status_change_approve'),
@@ -13,6 +12,7 @@
1312

1413
urlpatterns += patterns('ietf.doc.views_doc',
1514
url(r'^telechat/$', "telechat_date", name='status_change_telechat_date'),
15+
url(r'^notices/$', "edit_notify", name='status_change_notices'),
1616
)
1717

1818

0 commit comments

Comments
 (0)