diff --git a/ietf/submit/models.py b/ietf/submit/models.py index bb3a7fbf5..bdffda06c 100644 --- a/ietf/submit/models.py +++ b/ietf/submit/models.py @@ -4,6 +4,8 @@ import datetime from django.db import models import jsonfield +import debug # pyflakes:ignore + from ietf.doc.models import Document from ietf.person.models import Person from ietf.group.models import Group @@ -52,12 +54,18 @@ class Submission(models.Model): return u"%s-%s" % (self.name, self.rev) def authors_parsed(self): - res = [] - for line in self.authors.replace("\r", "").split("\n"): - line = line.strip() - if line: - res.append(parse_email_line(line)) - return res + if not hasattr(self._meta, '_cached_authors_parsed'): + from ietf.submit.utils import ensure_person_email_info_exists + res = [] + for line in self.authors.replace("\r", "").split("\n"): + line = line.strip() + if line: + parsed = parse_email_line(line) + if not parsed["email"]: + parsed["email"] = ensure_person_email_info_exists(**parsed).address + res.append(parsed) + self._meta._cached_authors_parsed = res + return self._meta._cached_authors_parsed def submitter_parsed(self): return parse_email_line(self.submitter) diff --git a/ietf/submit/utils.py b/ietf/submit/utils.py index 8fcfc857d..07eab6120 100644 --- a/ietf/submit/utils.py +++ b/ietf/submit/utils.py @@ -3,6 +3,8 @@ import datetime from django.conf import settings +import debug # pyflakes:ignore + from ietf.doc.models import ( Document, State, DocAlias, DocEvent, DocumentAuthor, AddedMessageEvent ) from ietf.doc.models import NewRevisionDocEvent @@ -395,7 +397,7 @@ def ensure_person_email_info_exists(name, email): else: # we're in trouble, use a fake one active = False - addr = u"unknown-email-%s" % person.name.replace(" ", "-") + addr = u"unknown-email-%s" % person.plain_name().replace(" ", "-") try: email = person.email_set.get(address=addr) @@ -421,10 +423,8 @@ def update_authors(draft, submission): for order, author in enumerate(submission.authors_parsed()): email = ensure_person_email_info_exists(author["name"], author["email"]) - a = DocumentAuthor.objects.filter(document=draft, author=email) - if a: - a = a[0] - else: + a = DocumentAuthor.objects.filter(document=draft, author=email).first() + if not a: a = DocumentAuthor(document=draft, author=email) a.order = order diff --git a/ietf/submit/views.py b/ietf/submit/views.py index ffb21cc73..3fe6552bb 100644 --- a/ietf/submit/views.py +++ b/ietf/submit/views.py @@ -27,10 +27,9 @@ from ietf.submit.mail import ( send_full_url, send_approval_request_to_group, from ietf.submit.models import (Submission, SubmissionCheck, Preapproval, DraftSubmissionStateName, SubmissionEmailEvent ) from ietf.submit.utils import ( approvable_submissions_for_user, preapprovals_for_user, - recently_approved_by_user ) -from ietf.submit.utils import validate_submission, create_submission_event -from ietf.submit.utils import docevent_from_submission -from ietf.submit.utils import post_submission, cancel_submission, rename_submission_files + recently_approved_by_user, validate_submission, create_submission_event, + docevent_from_submission, post_submission, cancel_submission, rename_submission_files, + get_person_from_name_email ) from ietf.utils.accesstoken import generate_random_key, generate_access_token from ietf.utils.draft import Draft from ietf.utils.log import log @@ -275,8 +274,8 @@ def submission_status(request, submission_id, access_token=None): group_authors_changed = False doc = submission.existing_document() if doc and doc.group: - old_authors = [i.author.formatted_email() for i in doc.documentauthor_set.all() if not i.author.invalid_address()] - new_authors = [u'"%s" <%s>' % (author["name"], author["email"]) for author in submission.authors_parsed() if author["email"]] + old_authors = [ i.author.person for i in doc.documentauthor_set.all() ] + new_authors = [ get_person_from_name_email(**p) for p in submission.authors_parsed() ] group_authors_changed = set(old_authors)!=set(new_authors) message = None