Skip to content

Commit ea26114

Browse files
committed
Merged in [9875] from rjsparks@nostrum.com:
Improve the form validation for the submission replaces form. - Legacy-Id: 9877 Note: SVN reference [9875] has been migrated to Git commit 766270a
2 parents a7179d5 + 766270a commit ea26114

4 files changed

Lines changed: 89 additions & 8 deletions

File tree

changelog

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,55 @@
1+
ietfdb (6.2.0) ietf; urgency=medium
2+
3+
**XML-Only Draft Submission**
4+
5+
This release adds draft submission metadata extraction from xml files, if
6+
they are made part of a draft submission, and it permits submission of only
7+
draft XML files without an accompanying text file, as long as conversion of the
8+
submitted XML to text format succeeds. The release also contains numerous
9+
style, text and bug fixes from Lars Eggert, and improvements to the ability to
10+
accept draft replacement information at drafts submission time.
11+
12+
* Merged in [9875] from rjsparks@nostrum.com:
13+
Improved the form validation for the submission replaces form. Commit
14+
ready for merge.
15+
16+
* Merged in [9862] from rjsparks@nostrum.com:
17+
Ignore suggestions that a draft replaces itself.
18+
19+
* Merged in [9849] from lars@netapp.com:
20+
Made nav title capitalization consistent with other text. Consistently
21+
add arrows for tabs that navigate away from the site. Shorten some text.
22+
23+
* Merged in [9857] from lars@netapp.com:
24+
Applied more of the styling from the current meta tables.
25+
26+
* Merged in [9856] from lars@netapp.com:
27+
Styled the metadata tables for groups, documents, etc. like Henrik
28+
prefers.
29+
30+
* Merged in [9855] from lars@netapp.com:
31+
Fixed bugs in adding/removing documents to personal ID list.
32+
33+
* Merged in [9852] from lars@netapp.com:
34+
Fixed display of AD and shepherd names, and also fix the respective
35+
mailto: links.
36+
37+
* Merged in [9851] from lars@netapp.com:
38+
Fixed the logic, so that if there are no matches and we don't want a warning
39+
saying that, there is also no empty table being produced.
40+
41+
* Merged in [9850] from lars@netapp.com:
42+
Moved state length notification after RFC Editor status (looks better).
43+
44+
* Merged in support of xml-source only drafts submissions from
45+
personal/henrik/submitxml/.
46+
47+
* Merged in [9843] from lars@netapp.com:
48+
Converted two remaining protocol-relative URLs to https.
49+
50+
-- Henrik Levkowetz <henrik@levkowetz.com> 23 Jul 2015 05:08:02 -0700
51+
52+
153
ietfdb (6.1.0) ietf; urgency=medium
254

355
**IETF 93 Code Sprint**

ietf/submit/forms.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -325,6 +325,22 @@ def cleaned_line(self):
325325
class ReplacesForm(forms.Form):
326326
replaces = SearchableDocAliasesField(required=False, help_text="Any drafts that this document replaces (approval required for replacing a draft you are not the author of)")
327327

328+
def __init__(self, *args, **kwargs):
329+
self.name = kwargs.pop("name")
330+
super(ReplacesForm, self).__init__(*args, **kwargs)
331+
332+
def clean_replaces(self):
333+
for alias in self.cleaned_data['replaces']:
334+
if alias.document.name == self.name:
335+
raise forms.ValidationError("A draft cannot replace itself.")
336+
if alias.document.type_id != "draft":
337+
raise forms.ValidationError("A draft can only replace another draft")
338+
if alias.document.get_state_slug() == "rfc":
339+
raise forms.ValidationError("A draft cannot replace an RFC")
340+
if alias.document.get_state_slug('draft-iesg') in ('approved','ann','rfcqueue'):
341+
raise forms.ValidationError(alias.name+" is approved by the IESG and cannot be replaced")
342+
return self.cleaned_data['replaces']
343+
328344
class EditSubmissionForm(forms.ModelForm):
329345
title = forms.CharField(required=True, max_length=255)
330346
rev = forms.CharField(label=u'Revision', max_length=2, required=True)

ietf/submit/tests.py

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -113,9 +113,10 @@ def supply_extra_metadata(self, name, status_url, submitter_name, submitter_emai
113113
"replaces": replaces,
114114
})
115115

116-
submission = Submission.objects.get(name=name)
117-
self.assertEqual(submission.submitter, u"%s <%s>" % (submitter_name, submitter_email))
118-
self.assertEqual(submission.replaces, ",".join(d.name for d in DocAlias.objects.filter(pk__in=replaces.split(",") if replaces else [])))
116+
if r.status_code == 302:
117+
submission = Submission.objects.get(name=name)
118+
self.assertEqual(submission.submitter, u"%s <%s>" % (submitter_name, submitter_email))
119+
self.assertEqual(submission.replaces, ",".join(d.name for d in DocAlias.objects.filter(pk__in=replaces.split(",") if replaces else [])))
119120

120121
return r
121122

@@ -396,14 +397,26 @@ def test_submit_new_individual_xml(self):
396397
def test_submit_new_individual_txt_xml(self):
397398
self.submit_new_individual(["txt", "xml"])
398399

399-
def test_submit_update_replacing_self(self):
400+
def test_submit_update_individual(self):
400401
draft = make_test_data()
401402
name = draft.name
402403
rev = '%02d'%(int(draft.rev)+1)
403404
status_url = self.do_submission(name,rev)
404405
mailbox_before = len(outbox)
405406
replaced_alias = draft.docalias_set.first()
406407
r = self.supply_extra_metadata(name, status_url, "Submitter Name", "author@example.com", replaces=str(replaced_alias.pk))
408+
self.assertEqual(r.status_code, 200)
409+
self.assertTrue('cannot replace itself' in r.content)
410+
replaced_alias = DocAlias.objects.get(name='draft-ietf-random-thing')
411+
r = self.supply_extra_metadata(name, status_url, "Submitter Name", "author@example.com", replaces=str(replaced_alias.pk))
412+
self.assertEqual(r.status_code, 200)
413+
self.assertTrue('cannot replace an RFC' in r.content)
414+
replaced_alias.document.set_state(State.objects.get(type='draft-iesg',slug='approved'))
415+
replaced_alias.document.set_state(State.objects.get(type='draft',slug='active'))
416+
r = self.supply_extra_metadata(name, status_url, "Submitter Name", "author@example.com", replaces=str(replaced_alias.pk))
417+
self.assertEqual(r.status_code, 200)
418+
self.assertTrue('approved by the IESG and cannot' in r.content)
419+
r = self.supply_extra_metadata(name, status_url, "Submitter Name", "author@example.com", replaces='')
407420
self.assertEqual(r.status_code, 302)
408421
status_url = r["Location"]
409422
r = self.client.get(status_url)

ietf/submit/views.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -199,7 +199,7 @@ def submission_status(request, submission_id, access_token=None):
199199

200200

201201
submitter_form = NameEmailForm(initial=submission.submitter_parsed(), prefix="submitter")
202-
replaces_form = ReplacesForm(initial=DocAlias.objects.filter(name__in=submission.replaces.split(",")))
202+
replaces_form = ReplacesForm(name=submission.name,initial=DocAlias.objects.filter(name__in=submission.replaces.split(",")))
203203

204204
if request.method == 'POST':
205205
action = request.POST.get('action')
@@ -208,7 +208,7 @@ def submission_status(request, submission_id, access_token=None):
208208
return HttpResponseForbidden("You do not have permission to perfom this action")
209209

210210
submitter_form = NameEmailForm(request.POST, prefix="submitter")
211-
replaces_form = ReplacesForm(request.POST)
211+
replaces_form = ReplacesForm(request.POST, name=submission.name)
212212
validations = [submitter_form.is_valid(), replaces_form.is_valid()]
213213
if all(validations):
214214
submission.submitter = submitter_form.cleaned_line()
@@ -345,7 +345,7 @@ def edit_submission(request, submission_id, access_token=None):
345345

346346
edit_form = EditSubmissionForm(request.POST, instance=submission, prefix="edit")
347347
submitter_form = NameEmailForm(request.POST, prefix="submitter")
348-
replaces_form = ReplacesForm(request.POST)
348+
replaces_form = ReplacesForm(request.POST,name=submission.name)
349349
author_forms = [ NameEmailForm(request.POST, email_required=False, prefix=prefix)
350350
for prefix in request.POST.getlist("authors-prefix")
351351
if prefix != "authors-" ]
@@ -386,7 +386,7 @@ def edit_submission(request, submission_id, access_token=None):
386386
else:
387387
edit_form = EditSubmissionForm(instance=submission, prefix="edit")
388388
submitter_form = NameEmailForm(initial=submission.submitter_parsed(), prefix="submitter")
389-
replaces_form = ReplacesForm(initial=DocAlias.objects.filter(name__in=submission.replaces.split(",")))
389+
replaces_form = ReplacesForm(name=submission.name,initial=DocAlias.objects.filter(name__in=submission.replaces.split(",")))
390390
author_forms = [ NameEmailForm(initial=author, email_required=False, prefix="authors-%s" % i)
391391
for i, author in enumerate(submission.authors_parsed()) ]
392392

0 commit comments

Comments
 (0)