Skip to content

Commit f870715

Browse files
authored
fix: Allow more email addresses in notification lists (ietf-tools#4792)
* fix: Allow more email addresses in notification lists Fixes ietf-tools#4736 * Do what @rjsparks suggested * Number migration * Number migration * Fix tests and apply for all doc types
1 parent 7991dad commit f870715

10 files changed

Lines changed: 75 additions & 22 deletions

ietf/doc/forms.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,13 @@ def __init__(self, *args, **kwargs):
7575
self.fields['ad'].choices = list(choices) + [("", "-------"), (ad_pk, Person.objects.get(pk=ad_pk).plain_name())]
7676

7777
class NotifyForm(forms.Form):
78-
notify = forms.CharField(max_length=255, help_text="List of email addresses to receive state notifications, separated by comma.", label="Notification list", required=False)
78+
notify = forms.CharField(
79+
widget=forms.Textarea,
80+
max_length=1023,
81+
help_text="List of email addresses to receive state notifications, separated by comma.",
82+
label="Notification list",
83+
required=False,
84+
)
7985

8086
def clean_notify(self):
8187
addrspecs = [x.strip() for x in self.cleaned_data["notify"].split(',')]
@@ -223,4 +229,4 @@ def clean(self):
223229

224230
@staticmethod
225231
def valid_resource_tags():
226-
return ExtResourceName.objects.all().order_by('slug').values_list('slug', flat=True)
232+
return ExtResourceName.objects.all().order_by('slug').values_list('slug', flat=True)
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
# Generated by Django 2.2.28 on 2022-12-05 17:53
2+
3+
from django.db import migrations, models
4+
5+
6+
class Migration(migrations.Migration):
7+
8+
dependencies = [
9+
('doc', '0047_tzaware_deletedevents'),
10+
]
11+
12+
operations = [
13+
migrations.AlterField(
14+
model_name='dochistory',
15+
name='notify',
16+
field=models.TextField(blank=True, max_length=1023),
17+
),
18+
migrations.AlterField(
19+
model_name='document',
20+
name='notify',
21+
field=models.TextField(blank=True, max_length=1023),
22+
),
23+
]

ietf/doc/models.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ class DocumentInfo(models.Model):
111111
ad = ForeignKey(Person, verbose_name="area director", related_name='ad_%(class)s_set', blank=True, null=True)
112112
shepherd = ForeignKey(Email, related_name='shepherd_%(class)s_set', blank=True, null=True)
113113
expires = models.DateTimeField(blank=True, null=True)
114-
notify = models.CharField(max_length=255, blank=True)
114+
notify = models.TextField(max_length=1023, blank=True)
115115
external_url = models.URLField(blank=True)
116116
uploaded_filename = models.TextField(blank=True)
117117
note = models.TextField(blank=True)

ietf/doc/tests_charter.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -448,8 +448,8 @@ def test_edit_notify(self):
448448
# Regenerate does not save!
449449
self.assertEqual(charter.notify,newlist)
450450
q = PyQuery(r.content)
451-
formlist = q('form input[name=notify]')[0].value
452-
self.assertEqual(formlist, None)
451+
formlist = q('form textarea[name=notify]')[0].value.strip()
452+
self.assertEqual(formlist, "")
453453

454454
def test_edit_ad(self):
455455

@@ -840,4 +840,4 @@ def test_chartering_from_bof(self):
840840
ad_role = RoleFactory(group__type_id='area',name_id='ad')
841841
charter = CharterFactory(group__type_id='wg',group__state_id='bof',group__parent=ad_role.group)
842842
e1,_ = default_review_text(charter.group, charter, Person.objects.get(name="(System)"))
843-
self.assertTrue('A new IETF WG has been proposed' in e1.text)
843+
self.assertTrue('A new IETF WG has been proposed' in e1.text)

ietf/doc/tests_conflict_review.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ def test_start_review_as_stream_owner(self):
105105
r = self.client.get(url)
106106
self.assertEqual(r.status_code, 200)
107107
q = PyQuery(r.content)
108-
self.assertEqual(len(q('form input[name=notify]')),1)
108+
self.assertEqual(len(q('form textarea[name=notify]')), 1)
109109
self.assertEqual(len(q('form select[name=ad]')),0)
110110

111111
# successfully starts a review, and notifies the secretariat
@@ -179,8 +179,8 @@ def test_edit_notices(self):
179179
r = self.client.get(url)
180180
self.assertEqual(r.status_code, 200)
181181
q = PyQuery(r.content)
182-
self.assertEqual(len(q('form input[name=notify]')),1)
183-
self.assertEqual(doc.notify,q('form input[name=notify]')[0].value)
182+
self.assertEqual(len(q('form textarea[name=notify]')), 1)
183+
self.assertEqual(doc.notify, q('form textarea[name=notify]')[0].value.strip())
184184

185185
# change notice list
186186
newlist = '"Foo Bar" <foo@bar.baz.com>'
@@ -197,7 +197,7 @@ def test_edit_notices(self):
197197
# Regenerate does not save!
198198
self.assertEqual(doc.notify,newlist)
199199
q = PyQuery(r.content)
200-
self.assertEqual(None,q('form input[name=notify]')[0].value)
200+
self.assertEqual("", q('form textarea[name=notify]')[0].value.strip())
201201

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

ietf/doc/tests_draft.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -456,7 +456,7 @@ def test_start_iesg_process_on_draft(self):
456456
self.assertEqual(r.status_code, 200)
457457
q = PyQuery(r.content)
458458
self.assertEqual(len(q('form select[name=intended_std_level]')), 1)
459-
self.assertEqual(None,q('form input[name=notify]')[0].value)
459+
self.assertEqual("", q('form textarea[name=notify]')[0].value.strip())
460460

461461
# add
462462
events_before = draft.docevent_set.count()
@@ -947,7 +947,7 @@ def test_doc_change_notify(self):
947947
r = self.client.get(url)
948948
self.assertEqual(r.status_code,200)
949949
q = PyQuery(r.content)
950-
self.assertEqual(len(q('form input[name=notify]')),1)
950+
self.assertEqual(len(q('form textarea[name=notify]')), 1)
951951

952952
# Provide a list
953953
r = self.client.post(url,dict(notify="TJ2APh2P@ietf.org",save_addresses="1"))
@@ -962,7 +962,7 @@ def test_doc_change_notify(self):
962962
# Regenerate does not save!
963963
self.assertEqual(doc.notify,'TJ2APh2P@ietf.org')
964964
q = PyQuery(r.content)
965-
self.assertEqual(None,q('form input[name=notify]')[0].value)
965+
self.assertEqual("", q('form textarea[name=notify]')[0].value.strip())
966966

967967
def test_doc_change_intended_status(self):
968968
url = urlreverse('ietf.doc.views_draft.change_intention', kwargs=dict(name=self.docname))

ietf/doc/tests_status_change.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -147,8 +147,8 @@ def test_edit_notices(self):
147147
r = self.client.get(url)
148148
self.assertEqual(r.status_code, 200)
149149
q = PyQuery(r.content)
150-
self.assertEqual(len(q('form input[name=notify]')),1)
151-
self.assertEqual(doc.notify,q('form input[name=notify]')[0].value)
150+
self.assertEqual(len(q('form textarea[name=notify]')), 1)
151+
self.assertEqual(doc.notify, q('form textarea[name=notify]')[0].value.strip())
152152

153153
# change notice list
154154
newlist = '"Foo Bar" <foo@bar.baz.com>'
@@ -169,8 +169,8 @@ def test_edit_notices(self):
169169
# Regenerate does not save!
170170
self.assertEqual(doc.notify,newlist)
171171
q = PyQuery(r.content)
172-
formlist = q('form input[name=notify]')[0].value
173-
self.assertEqual(None,formlist)
172+
formlist = q('form textarea[name=notify]')[0].value.strip()
173+
self.assertEqual("", formlist)
174174

175175
def test_edit_title(self):
176176
doc = Document.objects.get(name='status-change-imaginary-mid-review')

ietf/doc/views_conflict_review.py

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -370,13 +370,25 @@ def approve_conflict_review(request, name):
370370
))
371371

372372
class SimpleStartReviewForm(forms.Form):
373-
notify = forms.CharField(max_length=255, label="Notice emails", help_text="Separate email addresses with commas.", required=False)
373+
notify = forms.CharField(
374+
widget=forms.Textarea,
375+
max_length=1023,
376+
label="Notice emails",
377+
help_text="Separate email addresses with commas.",
378+
required=False,
379+
)
374380

375381
class StartReviewForm(forms.Form):
376382
ad = forms.ModelChoiceField(Person.objects.filter(role__name="ad", role__group__state="active",role__group__type='area').order_by('name'),
377383
label="Shepherding AD", empty_label="(None)", required=True)
378384
create_in_state = forms.ModelChoiceField(State.objects.filter(used=True, type="conflrev", slug__in=("needshep", "adrev")), empty_label=None, required=False)
379-
notify = forms.CharField(max_length=255, label="Notice emails", help_text="Separate email addresses with commas.", required=False)
385+
notify = forms.CharField(
386+
widget=forms.Textarea,
387+
max_length=1023,
388+
label="Notice emails",
389+
help_text="Separate email addresses with commas.",
390+
required=False,
391+
)
380392
telechat_date = forms.TypedChoiceField(coerce=lambda x: datetime.datetime.strptime(x, '%Y-%m-%d').date(), empty_value=None, required=False, widget=forms.Select(attrs={'onchange':'make_bold()'}))
381393

382394
def __init__(self, *args, **kwargs):
@@ -523,4 +535,4 @@ def start_review_as_stream_owner(request, name):
523535
{'form': form,
524536
'doc_to_review': doc_to_review,
525537
},
526-
)
538+
)

ietf/doc/views_draft.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -515,7 +515,13 @@ class EditInfoForm(forms.Form):
515515
area = forms.ModelChoiceField(Group.objects.filter(type="area", state="active"), empty_label="(None - individual submission)", required=False, label="Assigned to area")
516516
ad = forms.ModelChoiceField(Person.objects.filter(role__name="ad", role__group__state="active",role__group__type='area').order_by('name'), label="Responsible AD", empty_label="(None)", required=True)
517517
create_in_state = forms.ModelChoiceField(State.objects.filter(used=True, type="draft-iesg", slug__in=("pub-req", "watching")), empty_label=None, required=False)
518-
notify = forms.CharField(max_length=255, label="Notice emails", help_text="Separate email addresses with commas.", required=False)
518+
notify = forms.CharField(
519+
widget=forms.Textarea,
520+
max_length=1023,
521+
label="Notice emails",
522+
help_text="Separate email addresses with commas.",
523+
required=False,
524+
)
519525
note = forms.CharField(widget=forms.Textarea, label="IESG note", required=False, strip=False)
520526
telechat_date = forms.TypedChoiceField(coerce=lambda x: datetime.datetime.strptime(x, '%Y-%m-%d').date(), empty_value=None, required=False, widget=forms.Select(attrs={'onchange':'make_bold()'}))
521527
returning_item = forms.BooleanField(required=False)

ietf/doc/views_status_change.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -468,7 +468,13 @@ class StartStatusChangeForm(forms.Form):
468468
ad = forms.ModelChoiceField(Person.objects.filter(role__name="ad", role__group__state="active",role__group__type='area').order_by('name'),
469469
label="Shepherding AD", empty_label="(None)", required=False)
470470
create_in_state = forms.ModelChoiceField(State.objects.filter(type="statchg", slug__in=("needshep", "adrev")), empty_label=None, required=False)
471-
notify = forms.CharField(max_length=255, label="Notice emails", help_text="Separate email addresses with commas.", required=False)
471+
notify = forms.CharField(
472+
widget=forms.Textarea,
473+
max_length=1023,
474+
label="Notice emails",
475+
help_text="Separate email addresses with commas.",
476+
required=False,
477+
)
472478
telechat_date = forms.TypedChoiceField(coerce=lambda x: datetime.datetime.strptime(x, '%Y-%m-%d').date(), empty_value=None, required=False, widget=forms.Select(attrs={'onchange':'make_bold()'}))
473479
relations={} # type: Dict[str, str]
474480

0 commit comments

Comments
 (0)