From 15ea9942669590a2fc1146850a5d4f30d0c0b962 Mon Sep 17 00:00:00 2001 From: Henrik Levkowetz Date: Fri, 28 Aug 2020 14:31:36 +0000 Subject: [PATCH] Added an xml_version field to Submission objects, to capture the schema version of submitted XML files (if any). Related to issue #3067. - Legacy-Id: 18440 --- ietf/submit/forms.py | 15 ++++++++------- .../migrations/0006_submission_xml_version.py | 18 ++++++++++++++++++ ietf/submit/models.py | 1 + ietf/submit/resources.py | 1 + ietf/submit/tests.py | 8 +++++++- ietf/submit/utils.py | 1 + 6 files changed, 36 insertions(+), 8 deletions(-) create mode 100644 ietf/submit/migrations/0006_submission_xml_version.py diff --git a/ietf/submit/forms.py b/ietf/submit/forms.py index 149c7524c..7d9b641db 100644 --- a/ietf/submit/forms.py +++ b/ietf/submit/forms.py @@ -64,6 +64,7 @@ class SubmissionBaseUploadForm(forms.Form): self.parsed_draft = None self.file_types = [] self.file_info = {} # indexed by file field name, e.g., 'txt', 'xml', ... + self.xml_version = None # No code currently (14 Sep 2017) uses this class directly; it is # only used through its subclasses. The two assignments below are # set to trigger an exception if it is used directly only to make @@ -182,7 +183,7 @@ class SubmissionBaseUploadForm(forms.Form): parser = xml2rfc.XmlRfcParser(str(tfn), quiet=True) self.xmltree = parser.parse(remove_comments=False, quiet=True) self.xmlroot = self.xmltree.getroot() - xml_version = self.xmlroot.get('version', '2') + self.xml_version = self.xmlroot.get('version', '2') draftname = self.xmlroot.attrib.get('docName') if draftname is None: @@ -224,7 +225,7 @@ class SubmissionBaseUploadForm(forms.Form): # --- Prep the xml --- file_name['xml'] = os.path.join(settings.IDSUBMIT_STAGING_PATH, '%s-%s%s' % (self.filename, self.revision, ext)) try: - if xml_version == '3': + if self.xml_version == '3': prep = xml2rfc.PrepToolWriter(self.xmltree, quiet=True, liberal=True, keep_pis=[xml2rfc.V3_PI_TARGET]) prep.options.accept_prepped = True self.xmltree.tree = prep.prep() @@ -238,7 +239,7 @@ class SubmissionBaseUploadForm(forms.Form): if not ('txt' in self.cleaned_data and self.cleaned_data['txt']): file_name['txt'] = os.path.join(settings.IDSUBMIT_STAGING_PATH, '%s-%s.txt' % (self.filename, self.revision)) try: - if xml_version != '3': + if self.xml_version != '3': self.xmltree = parser.parse(remove_comments=True, quiet=True) self.xmlroot = self.xmltree.getroot() pagedwriter = xml2rfc.PaginatedTextRfcWriter(self.xmltree, quiet=True) @@ -252,14 +253,14 @@ class SubmissionBaseUploadForm(forms.Form): xml2rfc.__version__, os.path.basename(file_name['txt']), os.path.basename(file_name['xml']), - xml_version)) + self.xml_version)) except Exception as e: msgs = format_messages('txt', e, xml2rfc.log) log.log('\n'.join(msgs)) self.add_error('xml', msgs) # --- Convert to html --- - if xml_version == '3': + if self.xml_version == '3': try: file_name['html'] = os.path.join(settings.IDSUBMIT_STAGING_PATH, '%s-%s.html' % (self.filename, self.revision)) writer = xml2rfc.HtmlWriter(self.xmltree, quiet=True) @@ -270,12 +271,12 @@ class SubmissionBaseUploadForm(forms.Form): xml2rfc.__version__, os.path.basename(file_name['html']), os.path.basename(file_name['xml']), - xml_version)) + self.xml_version)) except Exception as e: msgs = format_messages('html', e, xml2rfc.log) self.add_error('xml', msgs) - if xml_version == '2': + if self.xml_version == '2': ok, errors = self.xmltree.validate() else: ok, errors = True, '' diff --git a/ietf/submit/migrations/0006_submission_xml_version.py b/ietf/submit/migrations/0006_submission_xml_version.py new file mode 100644 index 000000000..da5dd6cd5 --- /dev/null +++ b/ietf/submit/migrations/0006_submission_xml_version.py @@ -0,0 +1,18 @@ +# Generated by Django 2.2.15 on 2020-08-28 07:17 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('submit', '0005_auto_20200624_1332'), + ] + + operations = [ + migrations.AddField( + model_name='submission', + name='xml_version', + field=models.CharField(default=None, max_length=4, null=True), + ), + ] diff --git a/ietf/submit/models.py b/ietf/submit/models.py index 2a71e3416..4467c4b16 100644 --- a/ietf/submit/models.py +++ b/ietf/submit/models.py @@ -53,6 +53,7 @@ class Submission(models.Model): file_size = models.IntegerField(null=True, blank=True) document_date = models.DateField(null=True, blank=True) submission_date = models.DateField(default=datetime.date.today) + xml_version = models.CharField(null=True, max_length=4, default=None) submitter = models.CharField(max_length=255, blank=True, help_text="Name and email of submitter, e.g. \"John Doe <john@example.org>\".") diff --git a/ietf/submit/resources.py b/ietf/submit/resources.py index aed899717..2d5d47308 100644 --- a/ietf/submit/resources.py +++ b/ietf/submit/resources.py @@ -63,6 +63,7 @@ class SubmissionResource(ModelResource): "document_date": ALL, "submission_date": ALL, "submitter": ALL, + "xml_version": ALL, "state": ALL_WITH_RELATIONS, "group": ALL_WITH_RELATIONS, "draft": ALL_WITH_RELATIONS, diff --git a/ietf/submit/tests.py b/ietf/submit/tests.py index a2b0af9d9..b93d1c655 100644 --- a/ietf/submit/tests.py +++ b/ietf/submit/tests.py @@ -357,6 +357,8 @@ class SubmitTests(TestCase): self.assertIn(sug_replaced_alias.name, get_payload_text(outbox[-1])) self.assertIn("ames-chairs@", outbox[-1]["To"].lower()) self.assertIn("mars-chairs@", outbox[-1]["To"].lower()) + # Check submission settings + self.assertEqual(draft.submission().xml_version, "3" if 'xml' in formats else None) # fetch the document page url = urlreverse('ietf.doc.views_doc.document_main', kwargs={'name':name}) @@ -559,7 +561,8 @@ class SubmitTests(TestCase): self.assertEqual(r.status_code, 200) self.assertContains(r, draft.name) self.assertContains(r, draft.title) - + # Check submission settings + self.assertEqual(draft.submission().xml_version, "3" if 'xml' in formats else None) def test_submit_existing_txt(self): self.submit_existing(["txt"]) @@ -682,6 +685,9 @@ class SubmitTests(TestCase): self.assertEqual(new_revision.type, "new_revision") self.assertEqual(new_revision.by.name, author.name) + # Check submission settings + self.assertEqual(draft.submission().xml_version, "3" if 'xml' in formats else None) + def test_submit_new_logged_in_txt(self): self.submit_new_individual_logged_in(["txt"]) diff --git a/ietf/submit/utils.py b/ietf/submit/utils.py index 8ec4aff2c..a633e4d28 100644 --- a/ietf/submit/utils.py +++ b/ietf/submit/utils.py @@ -769,6 +769,7 @@ def fill_in_submission(form, submission, authors, abstract, file_size): submission.first_two_pages = ''.join(form.parsed_draft.pages[:2]) submission.file_size = file_size submission.file_types = ','.join(form.file_types) + submission.xml_version = form.xml_version submission.submission_date = datetime.date.today() submission.document_date = form.parsed_draft.get_creation_date() submission.replaces = ""