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
This commit is contained in:
parent
b3374fa351
commit
186e2ae67b
|
@ -1803,7 +1803,7 @@ class ApiSubmitTests(TestCase):
|
|||
settings.IDSUBMIT_REPOSITORY_PATH = self.saved_idsubmit_repository_path
|
||||
settings.INTERNET_DRAFT_ARCHIVE_DIR = self.saved_archive_dir
|
||||
|
||||
def post_submission(self, rev, author=None, name=None, group=None, email=None, title=None, year=None):
|
||||
def do_post_submission(self, rev, author=None, name=None, group=None, email=None, title=None, year=None):
|
||||
url = urlreverse('ietf.submit.views.api_submit')
|
||||
if author is None:
|
||||
author = PersonFactory()
|
||||
|
@ -1831,14 +1831,14 @@ class ApiSubmitTests(TestCase):
|
|||
self.assertEqual(r.status_code, 405)
|
||||
|
||||
def test_api_submit_ok(self):
|
||||
r, author, name = self.post_submission('00')
|
||||
r, author, name = self.do_post_submission('00')
|
||||
expected = "Upload of %s OK, confirmation requests sent to:\n %s" % (name, author.formatted_email().replace('\n',''))
|
||||
self.assertContains(r, expected, status_code=200)
|
||||
|
||||
def test_api_submit_secondary_email_active(self):
|
||||
person = PersonFactory()
|
||||
email = EmailFactory(person=person)
|
||||
r, author, name = self.post_submission('00', author=person, email=email.address)
|
||||
r, author, name = self.do_post_submission('00', author=person, email=email.address)
|
||||
for expected in [
|
||||
"Upload of %s OK, confirmation requests sent to:" % (name, ),
|
||||
author.formatted_email().replace('\n',''),
|
||||
|
@ -1851,43 +1851,43 @@ class ApiSubmitTests(TestCase):
|
|||
prim.primary = True
|
||||
prim.save()
|
||||
email = EmailFactory(person=person, active=False)
|
||||
r, author, name = self.post_submission('00', author=person, email=email.address)
|
||||
r, author, name = self.do_post_submission('00', author=person, email=email.address)
|
||||
expected = "No such user: %s" % email.address
|
||||
self.assertContains(r, expected, status_code=400)
|
||||
|
||||
def test_api_submit_no_user(self):
|
||||
email='nonexistant.user@example.org'
|
||||
r, author, name = self.post_submission('00', email=email)
|
||||
r, author, name = self.do_post_submission('00', email=email)
|
||||
expected = "No such user: %s" % email
|
||||
self.assertContains(r, expected, status_code=400)
|
||||
|
||||
def test_api_submit_no_person(self):
|
||||
user = UserFactory()
|
||||
email = user.username
|
||||
r, author, name = self.post_submission('00', email=email)
|
||||
r, author, name = self.do_post_submission('00', email=email)
|
||||
expected = "No person with username %s" % email
|
||||
self.assertContains(r, expected, status_code=400)
|
||||
|
||||
def test_api_submit_wrong_revision(self):
|
||||
r, author, name = self.post_submission('01')
|
||||
r, author, name = self.do_post_submission('01')
|
||||
expected = "Invalid revision (revision 00 is expected)"
|
||||
self.assertContains(r, expected, status_code=400)
|
||||
|
||||
def test_api_submit_pending_submission(self):
|
||||
r, author, name = self.post_submission('00')
|
||||
r, author, name = self.do_post_submission('00')
|
||||
expected = "Upload of"
|
||||
self.assertContains(r, expected, status_code=200)
|
||||
r, author, name = self.post_submission('00', author=author, name=name)
|
||||
r, author, name = self.do_post_submission('00', author=author, name=name)
|
||||
expected = "A submission with same name and revision is currently being processed"
|
||||
self.assertContains(r, expected, status_code=400)
|
||||
|
||||
def test_api_submit_no_title(self):
|
||||
r, author, name = self.post_submission('00', title=" ")
|
||||
r, author, name = self.do_post_submission('00', title=" ")
|
||||
expected = "Could not extract a valid title from the upload"
|
||||
self.assertContains(r, expected, status_code=400)
|
||||
|
||||
def test_api_submit_failed_idnits(self):
|
||||
r, author, name = self.post_submission('00', year="2010")
|
||||
r, author, name = self.do_post_submission('00', year="2010")
|
||||
expected = "Document date must be within 3 days of submission date"
|
||||
self.assertContains(r, expected, status_code=400)
|
||||
|
||||
|
|
|
@ -12,6 +12,7 @@ from typing import Callable, Optional # pyflakes:ignore
|
|||
|
||||
from django.conf import settings
|
||||
from django.core.validators import validate_email, ValidationError
|
||||
from django.db import transaction
|
||||
from django.http import HttpRequest # pyflakes:ignore
|
||||
from django.utils.module_loading import import_string
|
||||
|
||||
|
@ -239,7 +240,8 @@ def post_rev00_submission_events(draft, submission, submitter):
|
|||
return events
|
||||
|
||||
|
||||
def post_submission(request, submission, approvedDesc):
|
||||
@transaction.atomic
|
||||
def post_submission(request, submission, approved_doc_desc, approved_subm_desc):
|
||||
system = Person.objects.get(name="(System)")
|
||||
submitter_parsed = submission.submitter_parsed()
|
||||
if submitter_parsed["name"] and submitter_parsed["email"]:
|
||||
|
@ -294,7 +296,7 @@ def post_submission(request, submission, approvedDesc):
|
|||
type="new_submission",
|
||||
doc=draft,
|
||||
by=system,
|
||||
desc=approvedDesc,
|
||||
desc=approved_doc_desc,
|
||||
submission=submission,
|
||||
rev=submission.rev,
|
||||
)
|
||||
|
@ -419,6 +421,8 @@ def post_submission(request, submission, approvedDesc):
|
|||
submission.draft = draft
|
||||
submission.save()
|
||||
|
||||
create_submission_event(request, submission, approved_subm_desc)
|
||||
|
||||
def update_replaces_from_submission(request, submission, draft):
|
||||
if not submission.replaces:
|
||||
return [], []
|
||||
|
|
|
@ -304,8 +304,8 @@ def submission_status(request, submission_id, access_token=None):
|
|||
docevent_from_submission(request, submission, desc="Uploaded new revision")
|
||||
|
||||
desc = "Secretariat manually posting. Approvals already received"
|
||||
post_submission(request, submission, desc)
|
||||
create_submission_event(request, submission, desc)
|
||||
post_submission(request, submission, desc, desc)
|
||||
|
||||
else:
|
||||
doc = submission.existing_document()
|
||||
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):
|
|||
docevent_from_submission(request, submission, desc="Uploaded new revision", who=request.user.person) # type: ignore
|
||||
|
||||
desc = "New version accepted (logged-in submitter: %s)" % request.user.person # type: ignore
|
||||
post_submission(request, submission, desc)
|
||||
create_submission_event(request, submission, desc)
|
||||
post_submission(request, submission, desc, desc)
|
||||
|
||||
else:
|
||||
sent_to, desc, docDesc = send_confirmation_emails(request, submission, requires_group_approval, requires_prev_authors_approval)
|
||||
msg = "Set submitter to \"%s\", replaces to %s and %s" % (
|
||||
|
@ -360,9 +360,7 @@ def submission_status(request, submission_id, access_token=None):
|
|||
if not can_group_approve:
|
||||
return HttpResponseForbidden('You do not have permission to perform this action')
|
||||
|
||||
post_submission(request, submission, "WG -00 approved")
|
||||
|
||||
create_submission_event(request, submission, "Approved and posted submission")
|
||||
post_submission(request, submission, "WG -00 approved", "Approved and posted submission")
|
||||
|
||||
return redirect("ietf.doc.views_doc.document_main", name=submission.name)
|
||||
|
||||
|
@ -376,9 +374,7 @@ def submission_status(request, submission_id, access_token=None):
|
|||
else:
|
||||
desc = "Forced post of submission"
|
||||
|
||||
post_submission(request, submission, desc)
|
||||
|
||||
create_submission_event(request, submission, desc)
|
||||
post_submission(request, submission, desc, desc)
|
||||
|
||||
return redirect("ietf.doc.views_doc.document_main", name=submission.name)
|
||||
|
||||
|
@ -523,9 +519,7 @@ def confirm_submission(request, submission_id, auth_token):
|
|||
else:
|
||||
desc = "New version approved by previous author"
|
||||
|
||||
post_submission(request, submission, desc)
|
||||
|
||||
create_submission_event(request, submission, "Confirmed and posted submission")
|
||||
post_submission(request, submission, desc, "Confirmed and posted submission")
|
||||
|
||||
return redirect("ietf.doc.views_doc.document_main", name=submission.name)
|
||||
|
||||
|
|
Loading…
Reference in a new issue