From e0479d8d13391717cc0a37c34e8d88558caf8f27 Mon Sep 17 00:00:00 2001
From: Henrik Levkowetz <henrik@levkowetz.com>
Date: Sun, 29 Sep 2019 20:00:49 +0000
Subject: [PATCH] Changed the call signature of docevent_from_submission() to
 take an optional Person object, rather than person name.  Added a type hint
 for the signature.  - Legacy-Id: 16764

---
 ietf/submit/utils.py | 13 ++++++++-----
 ietf/submit/views.py |  5 +++--
 2 files changed, 11 insertions(+), 7 deletions(-)

diff --git a/ietf/submit/utils.py b/ietf/submit/utils.py
index 958c3669d..a8671e995 100644
--- a/ietf/submit/utils.py
+++ b/ietf/submit/utils.py
@@ -10,9 +10,12 @@ import os
 import re
 import six                              # pyflakes:ignore
 import xml2rfc
+if six.PY3:
+    from typing import Callable, Optional
 
 from django.conf import settings
 from django.core.validators import validate_email, ValidationError
+from django.http import HttpRequest
 from django.utils.module_loading import import_string
 
 import debug                            # pyflakes:ignore
@@ -161,23 +164,23 @@ def create_submission_event(request, submission, desc):
 
     SubmissionEvent.objects.create(submission=submission, by=by, desc=desc)
 
-def docevent_from_submission(request, submission, desc, who=None):
-    system = Person.objects.get(name="(System)")
+def docevent_from_submission(request, submission, desc, who=None): # type: (HttpRequest, Submission, str, Optional[Person]) -> Optional[DocEvent]
+    log.assertion('who is None or isinstance(who, Person)')
 
     try:
         draft = Document.objects.get(name=submission.name)
     except Document.DoesNotExist:
         # Assume this is revision 00 - we'll do this later
-        return
+        return None
 
     if who:
-        by = Person.objects.get(name=who)
+        by = who
     else:
         submitter_parsed = submission.submitter_parsed()
         if submitter_parsed["name"] and submitter_parsed["email"]:
             by, _ = ensure_person_email_info_exists(submitter_parsed["name"], submitter_parsed["email"], submission.name)
         else:
-            by = system
+            by = Person.objects.get(name="(System)")
 
     e = SubmissionDocEvent.objects.create(
             doc=draft,
diff --git a/ietf/submit/views.py b/ietf/submit/views.py
index ab833aea5..5bc4272e1 100644
--- a/ietf/submit/views.py
+++ b/ietf/submit/views.py
@@ -26,6 +26,7 @@ from ietf.group.utils import group_features_group_filter
 from ietf.ietfauth.utils import has_role, role_required
 from ietf.mailtrigger.utils import gather_address_lists
 from ietf.message.models import Message, MessageAttachment
+from ietf.person.models import Person
 from ietf.submit.forms import ( SubmissionManualUploadForm, SubmissionAutoUploadForm, AuthorForm,
     SubmitterForm, EditSubmissionForm, PreapprovalForm, ReplacesForm, SubmissionEmailForm, MessageModelForm )
 from ietf.submit.mail import ( send_full_url, send_manual_post_request, add_submission_email, get_reply_to )
@@ -142,7 +143,7 @@ def api_submit(request):
                 sent_to, desc, docDesc = send_confirmation_emails(request, submission, requires_group_approval, requires_prev_authors_approval)
                 msg = "Set submitter to \"%s\" and %s" % (submission.submitter, desc)
                 create_submission_event(request, submission, msg)
-                docevent_from_submission(request, submission, docDesc, who="(System)")
+                docevent_from_submission(request, submission, docDesc, who=Person.objects.get(name="(System)"))
 
                 return HttpResponse(
                     "Upload of %s OK, confirmation requests sent to:\n  %s" % (submission.name, ',\n  '.join(sent_to)),
@@ -298,7 +299,7 @@ def submission_status(request, submission_id, access_token=None):
                             ", ".join(prettify_std_name(r.name) for r in replaces) if replaces else "(none)",
                             desc)
                         create_submission_event(request, submission, msg)
-                        docevent_from_submission(request, submission, docDesc, who="(System)")
+                        docevent_from_submission(request, submission, docDesc, who=Person.objects.get(name="(System)"))
     
                 if access_token:
                     return redirect("ietf.submit.views.submission_status", submission_id=submission.pk, access_token=access_token)