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
This commit is contained in:
Henrik Levkowetz 2020-08-28 14:31:36 +00:00
parent b3128842c9
commit 15ea994266
6 changed files with 36 additions and 8 deletions

View file

@ -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, ''

View file

@ -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),
),
]

View file

@ -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>\".")

View file

@ -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,

View file

@ -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"])

View file

@ -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 = ""