Skip to content

Commit 186e2ae

Browse files
committed
Decorated post_submission() with @transaction.atomic, and did some slight refactoring of code related to post_submission() calls and submission events. This was triggered by a submission left in an intermediate state because of a WSGI timeout (leading to a 504 error).
- Legacy-Id: 17892
1 parent b3374fa commit 186e2ae

3 files changed

Lines changed: 24 additions & 26 deletions

File tree

ietf/submit/tests.py

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1803,7 +1803,7 @@ def tearDown(self):
18031803
settings.IDSUBMIT_REPOSITORY_PATH = self.saved_idsubmit_repository_path
18041804
settings.INTERNET_DRAFT_ARCHIVE_DIR = self.saved_archive_dir
18051805

1806-
def post_submission(self, rev, author=None, name=None, group=None, email=None, title=None, year=None):
1806+
def do_post_submission(self, rev, author=None, name=None, group=None, email=None, title=None, year=None):
18071807
url = urlreverse('ietf.submit.views.api_submit')
18081808
if author is None:
18091809
author = PersonFactory()
@@ -1831,14 +1831,14 @@ def test_api_submit_bad_method(self):
18311831
self.assertEqual(r.status_code, 405)
18321832

18331833
def test_api_submit_ok(self):
1834-
r, author, name = self.post_submission('00')
1834+
r, author, name = self.do_post_submission('00')
18351835
expected = "Upload of %s OK, confirmation requests sent to:\n %s" % (name, author.formatted_email().replace('\n',''))
18361836
self.assertContains(r, expected, status_code=200)
18371837

18381838
def test_api_submit_secondary_email_active(self):
18391839
person = PersonFactory()
18401840
email = EmailFactory(person=person)
1841-
r, author, name = self.post_submission('00', author=person, email=email.address)
1841+
r, author, name = self.do_post_submission('00', author=person, email=email.address)
18421842
for expected in [
18431843
"Upload of %s OK, confirmation requests sent to:" % (name, ),
18441844
author.formatted_email().replace('\n',''),
@@ -1851,43 +1851,43 @@ def test_api_submit_secondary_email_inactive(self):
18511851
prim.primary = True
18521852
prim.save()
18531853
email = EmailFactory(person=person, active=False)
1854-
r, author, name = self.post_submission('00', author=person, email=email.address)
1854+
r, author, name = self.do_post_submission('00', author=person, email=email.address)
18551855
expected = "No such user: %s" % email.address
18561856
self.assertContains(r, expected, status_code=400)
18571857

18581858
def test_api_submit_no_user(self):
18591859
email='nonexistant.user@example.org'
1860-
r, author, name = self.post_submission('00', email=email)
1860+
r, author, name = self.do_post_submission('00', email=email)
18611861
expected = "No such user: %s" % email
18621862
self.assertContains(r, expected, status_code=400)
18631863

18641864
def test_api_submit_no_person(self):
18651865
user = UserFactory()
18661866
email = user.username
1867-
r, author, name = self.post_submission('00', email=email)
1867+
r, author, name = self.do_post_submission('00', email=email)
18681868
expected = "No person with username %s" % email
18691869
self.assertContains(r, expected, status_code=400)
18701870

18711871
def test_api_submit_wrong_revision(self):
1872-
r, author, name = self.post_submission('01')
1872+
r, author, name = self.do_post_submission('01')
18731873
expected = "Invalid revision (revision 00 is expected)"
18741874
self.assertContains(r, expected, status_code=400)
18751875

18761876
def test_api_submit_pending_submission(self):
1877-
r, author, name = self.post_submission('00')
1877+
r, author, name = self.do_post_submission('00')
18781878
expected = "Upload of"
18791879
self.assertContains(r, expected, status_code=200)
1880-
r, author, name = self.post_submission('00', author=author, name=name)
1880+
r, author, name = self.do_post_submission('00', author=author, name=name)
18811881
expected = "A submission with same name and revision is currently being processed"
18821882
self.assertContains(r, expected, status_code=400)
18831883

18841884
def test_api_submit_no_title(self):
1885-
r, author, name = self.post_submission('00', title=" ")
1885+
r, author, name = self.do_post_submission('00', title=" ")
18861886
expected = "Could not extract a valid title from the upload"
18871887
self.assertContains(r, expected, status_code=400)
18881888

18891889
def test_api_submit_failed_idnits(self):
1890-
r, author, name = self.post_submission('00', year="2010")
1890+
r, author, name = self.do_post_submission('00', year="2010")
18911891
expected = "Document date must be within 3 days of submission date"
18921892
self.assertContains(r, expected, status_code=400)
18931893

ietf/submit/utils.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212

1313
from django.conf import settings
1414
from django.core.validators import validate_email, ValidationError
15+
from django.db import transaction
1516
from django.http import HttpRequest # pyflakes:ignore
1617
from django.utils.module_loading import import_string
1718

@@ -239,7 +240,8 @@ def post_rev00_submission_events(draft, submission, submitter):
239240
return events
240241

241242

242-
def post_submission(request, submission, approvedDesc):
243+
@transaction.atomic
244+
def post_submission(request, submission, approved_doc_desc, approved_subm_desc):
243245
system = Person.objects.get(name="(System)")
244246
submitter_parsed = submission.submitter_parsed()
245247
if submitter_parsed["name"] and submitter_parsed["email"]:
@@ -294,7 +296,7 @@ def post_submission(request, submission, approvedDesc):
294296
type="new_submission",
295297
doc=draft,
296298
by=system,
297-
desc=approvedDesc,
299+
desc=approved_doc_desc,
298300
submission=submission,
299301
rev=submission.rev,
300302
)
@@ -419,6 +421,8 @@ def post_submission(request, submission, approvedDesc):
419421
submission.draft = draft
420422
submission.save()
421423

424+
create_submission_event(request, submission, approved_subm_desc)
425+
422426
def update_replaces_from_submission(request, submission, draft):
423427
if not submission.replaces:
424428
return [], []

ietf/submit/views.py

Lines changed: 7 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -304,8 +304,8 @@ def submission_status(request, submission_id, access_token=None):
304304
docevent_from_submission(request, submission, desc="Uploaded new revision")
305305

306306
desc = "Secretariat manually posting. Approvals already received"
307-
post_submission(request, submission, desc)
308-
create_submission_event(request, submission, desc)
307+
post_submission(request, submission, desc, desc)
308+
309309
else:
310310
doc = submission.existing_document()
311311
prev_authors = [] if not doc else [ author.person for author in doc.documentauthor_set.all() ]
@@ -316,8 +316,8 @@ def submission_status(request, submission_id, access_token=None):
316316
docevent_from_submission(request, submission, desc="Uploaded new revision", who=request.user.person) # type: ignore
317317

318318
desc = "New version accepted (logged-in submitter: %s)" % request.user.person # type: ignore
319-
post_submission(request, submission, desc)
320-
create_submission_event(request, submission, desc)
319+
post_submission(request, submission, desc, desc)
320+
321321
else:
322322
sent_to, desc, docDesc = send_confirmation_emails(request, submission, requires_group_approval, requires_prev_authors_approval)
323323
msg = "Set submitter to \"%s\", replaces to %s and %s" % (
@@ -360,9 +360,7 @@ def submission_status(request, submission_id, access_token=None):
360360
if not can_group_approve:
361361
return HttpResponseForbidden('You do not have permission to perform this action')
362362

363-
post_submission(request, submission, "WG -00 approved")
364-
365-
create_submission_event(request, submission, "Approved and posted submission")
363+
post_submission(request, submission, "WG -00 approved", "Approved and posted submission")
366364

367365
return redirect("ietf.doc.views_doc.document_main", name=submission.name)
368366

@@ -376,9 +374,7 @@ def submission_status(request, submission_id, access_token=None):
376374
else:
377375
desc = "Forced post of submission"
378376

379-
post_submission(request, submission, desc)
380-
381-
create_submission_event(request, submission, desc)
377+
post_submission(request, submission, desc, desc)
382378

383379
return redirect("ietf.doc.views_doc.document_main", name=submission.name)
384380

@@ -523,9 +519,7 @@ def confirm_submission(request, submission_id, auth_token):
523519
else:
524520
desc = "New version approved by previous author"
525521

526-
post_submission(request, submission, desc)
527-
528-
create_submission_event(request, submission, "Confirmed and posted submission")
522+
post_submission(request, submission, desc, "Confirmed and posted submission")
529523

530524
return redirect("ietf.doc.views_doc.document_main", name=submission.name)
531525

0 commit comments

Comments
 (0)