From fb310e5ce209ca3ce1b5e557e8beb795d9b75a02 Mon Sep 17 00:00:00 2001 From: Jennifer Richards Date: Fri, 21 Feb 2025 11:49:16 -0400 Subject: [PATCH] feat: useful error when submission has inconsistent date (#8576) * chore: handle errors in app-configure-blobstore.py * feat: sensible error for inconsistent --- ietf/submit/utils.py | 9 +++++++-- ietf/utils/xmldraft.py | 15 ++++++++++++++- 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/ietf/submit/utils.py b/ietf/submit/utils.py index 3e06f45c5..61274c011 100644 --- a/ietf/submit/utils.py +++ b/ietf/submit/utils.py @@ -58,7 +58,7 @@ from ietf.utils.draft import PlaintextDraft from ietf.utils.mail import is_valid_email from ietf.utils.text import parse_unicode, normalize_text from ietf.utils.timezone import date_today -from ietf.utils.xmldraft import XMLDraft +from ietf.utils.xmldraft import InvalidMetadataError, XMLDraft from ietf.person.name import unidecode_name @@ -1201,6 +1201,11 @@ def process_submission_xml(filename, revision): if not title: raise SubmissionError("Could not extract a valid title from the XML") + try: + document_date = xml_draft.get_creation_date() + except InvalidMetadataError as err: + raise SubmissionError(str(err)) from err + return { "filename": xml_draft.filename, "rev": xml_draft.revision, @@ -1210,7 +1215,7 @@ def process_submission_xml(filename, revision): for auth in xml_draft.get_author_list() ], "abstract": None, # not supported from XML - "document_date": xml_draft.get_creation_date(), + "document_date": document_date, "pages": None, # not supported from XML "words": None, # not supported from XML "first_two_pages": None, # not supported from XML diff --git a/ietf/utils/xmldraft.py b/ietf/utils/xmldraft.py index c39c4d0a0..73baf917d 100644 --- a/ietf/utils/xmldraft.py +++ b/ietf/utils/xmldraft.py @@ -159,7 +159,16 @@ class XMLDraft(Draft): day = today.day else: day = 15 - return datetime.date(year, month, day) + try: + creation_date = datetime.date(year, month, day) + except Exception: + raise InvalidMetadataError( + "The element in the section specified an incomplete date " + "that was not consistent with today's date. If you specify only a year, " + "it must be the four-digit current year. To use today's date, omit the " + "date tag or use ." + ) + return creation_date def get_creation_date(self): return self.parse_creation_date(self.xmlroot.find("front/date")) @@ -269,3 +278,7 @@ class XMLParseError(Exception): class InvalidXMLError(Exception): """File is not valid XML""" pass + + +class InvalidMetadataError(Exception): + """XML is well-formed but has invalid metadata"""