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:
parent
b3128842c9
commit
15ea994266
|
@ -64,6 +64,7 @@ class SubmissionBaseUploadForm(forms.Form):
|
||||||
self.parsed_draft = None
|
self.parsed_draft = None
|
||||||
self.file_types = []
|
self.file_types = []
|
||||||
self.file_info = {} # indexed by file field name, e.g., 'txt', 'xml', ...
|
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
|
# No code currently (14 Sep 2017) uses this class directly; it is
|
||||||
# only used through its subclasses. The two assignments below are
|
# only used through its subclasses. The two assignments below are
|
||||||
# set to trigger an exception if it is used directly only to make
|
# 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)
|
parser = xml2rfc.XmlRfcParser(str(tfn), quiet=True)
|
||||||
self.xmltree = parser.parse(remove_comments=False, quiet=True)
|
self.xmltree = parser.parse(remove_comments=False, quiet=True)
|
||||||
self.xmlroot = self.xmltree.getroot()
|
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')
|
draftname = self.xmlroot.attrib.get('docName')
|
||||||
if draftname is None:
|
if draftname is None:
|
||||||
|
@ -224,7 +225,7 @@ class SubmissionBaseUploadForm(forms.Form):
|
||||||
# --- Prep the xml ---
|
# --- Prep the xml ---
|
||||||
file_name['xml'] = os.path.join(settings.IDSUBMIT_STAGING_PATH, '%s-%s%s' % (self.filename, self.revision, ext))
|
file_name['xml'] = os.path.join(settings.IDSUBMIT_STAGING_PATH, '%s-%s%s' % (self.filename, self.revision, ext))
|
||||||
try:
|
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 = xml2rfc.PrepToolWriter(self.xmltree, quiet=True, liberal=True, keep_pis=[xml2rfc.V3_PI_TARGET])
|
||||||
prep.options.accept_prepped = True
|
prep.options.accept_prepped = True
|
||||||
self.xmltree.tree = prep.prep()
|
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']):
|
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))
|
file_name['txt'] = os.path.join(settings.IDSUBMIT_STAGING_PATH, '%s-%s.txt' % (self.filename, self.revision))
|
||||||
try:
|
try:
|
||||||
if xml_version != '3':
|
if self.xml_version != '3':
|
||||||
self.xmltree = parser.parse(remove_comments=True, quiet=True)
|
self.xmltree = parser.parse(remove_comments=True, quiet=True)
|
||||||
self.xmlroot = self.xmltree.getroot()
|
self.xmlroot = self.xmltree.getroot()
|
||||||
pagedwriter = xml2rfc.PaginatedTextRfcWriter(self.xmltree, quiet=True)
|
pagedwriter = xml2rfc.PaginatedTextRfcWriter(self.xmltree, quiet=True)
|
||||||
|
@ -252,14 +253,14 @@ class SubmissionBaseUploadForm(forms.Form):
|
||||||
xml2rfc.__version__,
|
xml2rfc.__version__,
|
||||||
os.path.basename(file_name['txt']),
|
os.path.basename(file_name['txt']),
|
||||||
os.path.basename(file_name['xml']),
|
os.path.basename(file_name['xml']),
|
||||||
xml_version))
|
self.xml_version))
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
msgs = format_messages('txt', e, xml2rfc.log)
|
msgs = format_messages('txt', e, xml2rfc.log)
|
||||||
log.log('\n'.join(msgs))
|
log.log('\n'.join(msgs))
|
||||||
self.add_error('xml', msgs)
|
self.add_error('xml', msgs)
|
||||||
|
|
||||||
# --- Convert to html ---
|
# --- Convert to html ---
|
||||||
if xml_version == '3':
|
if self.xml_version == '3':
|
||||||
try:
|
try:
|
||||||
file_name['html'] = os.path.join(settings.IDSUBMIT_STAGING_PATH, '%s-%s.html' % (self.filename, self.revision))
|
file_name['html'] = os.path.join(settings.IDSUBMIT_STAGING_PATH, '%s-%s.html' % (self.filename, self.revision))
|
||||||
writer = xml2rfc.HtmlWriter(self.xmltree, quiet=True)
|
writer = xml2rfc.HtmlWriter(self.xmltree, quiet=True)
|
||||||
|
@ -270,12 +271,12 @@ class SubmissionBaseUploadForm(forms.Form):
|
||||||
xml2rfc.__version__,
|
xml2rfc.__version__,
|
||||||
os.path.basename(file_name['html']),
|
os.path.basename(file_name['html']),
|
||||||
os.path.basename(file_name['xml']),
|
os.path.basename(file_name['xml']),
|
||||||
xml_version))
|
self.xml_version))
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
msgs = format_messages('html', e, xml2rfc.log)
|
msgs = format_messages('html', e, xml2rfc.log)
|
||||||
self.add_error('xml', msgs)
|
self.add_error('xml', msgs)
|
||||||
|
|
||||||
if xml_version == '2':
|
if self.xml_version == '2':
|
||||||
ok, errors = self.xmltree.validate()
|
ok, errors = self.xmltree.validate()
|
||||||
else:
|
else:
|
||||||
ok, errors = True, ''
|
ok, errors = True, ''
|
||||||
|
|
18
ietf/submit/migrations/0006_submission_xml_version.py
Normal file
18
ietf/submit/migrations/0006_submission_xml_version.py
Normal 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),
|
||||||
|
),
|
||||||
|
]
|
|
@ -53,6 +53,7 @@ class Submission(models.Model):
|
||||||
file_size = models.IntegerField(null=True, blank=True)
|
file_size = models.IntegerField(null=True, blank=True)
|
||||||
document_date = models.DateField(null=True, blank=True)
|
document_date = models.DateField(null=True, blank=True)
|
||||||
submission_date = models.DateField(default=datetime.date.today)
|
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>\".")
|
submitter = models.CharField(max_length=255, blank=True, help_text="Name and email of submitter, e.g. \"John Doe <john@example.org>\".")
|
||||||
|
|
||||||
|
|
|
@ -63,6 +63,7 @@ class SubmissionResource(ModelResource):
|
||||||
"document_date": ALL,
|
"document_date": ALL,
|
||||||
"submission_date": ALL,
|
"submission_date": ALL,
|
||||||
"submitter": ALL,
|
"submitter": ALL,
|
||||||
|
"xml_version": ALL,
|
||||||
"state": ALL_WITH_RELATIONS,
|
"state": ALL_WITH_RELATIONS,
|
||||||
"group": ALL_WITH_RELATIONS,
|
"group": ALL_WITH_RELATIONS,
|
||||||
"draft": ALL_WITH_RELATIONS,
|
"draft": ALL_WITH_RELATIONS,
|
||||||
|
|
|
@ -357,6 +357,8 @@ class SubmitTests(TestCase):
|
||||||
self.assertIn(sug_replaced_alias.name, get_payload_text(outbox[-1]))
|
self.assertIn(sug_replaced_alias.name, get_payload_text(outbox[-1]))
|
||||||
self.assertIn("ames-chairs@", outbox[-1]["To"].lower())
|
self.assertIn("ames-chairs@", outbox[-1]["To"].lower())
|
||||||
self.assertIn("mars-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
|
# fetch the document page
|
||||||
url = urlreverse('ietf.doc.views_doc.document_main', kwargs={'name':name})
|
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.assertEqual(r.status_code, 200)
|
||||||
self.assertContains(r, draft.name)
|
self.assertContains(r, draft.name)
|
||||||
self.assertContains(r, draft.title)
|
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):
|
def test_submit_existing_txt(self):
|
||||||
self.submit_existing(["txt"])
|
self.submit_existing(["txt"])
|
||||||
|
@ -682,6 +685,9 @@ class SubmitTests(TestCase):
|
||||||
self.assertEqual(new_revision.type, "new_revision")
|
self.assertEqual(new_revision.type, "new_revision")
|
||||||
self.assertEqual(new_revision.by.name, author.name)
|
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):
|
def test_submit_new_logged_in_txt(self):
|
||||||
self.submit_new_individual_logged_in(["txt"])
|
self.submit_new_individual_logged_in(["txt"])
|
||||||
|
|
||||||
|
|
|
@ -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.first_two_pages = ''.join(form.parsed_draft.pages[:2])
|
||||||
submission.file_size = file_size
|
submission.file_size = file_size
|
||||||
submission.file_types = ','.join(form.file_types)
|
submission.file_types = ','.join(form.file_types)
|
||||||
|
submission.xml_version = form.xml_version
|
||||||
submission.submission_date = datetime.date.today()
|
submission.submission_date = datetime.date.today()
|
||||||
submission.document_date = form.parsed_draft.get_creation_date()
|
submission.document_date = form.parsed_draft.get_creation_date()
|
||||||
submission.replaces = ""
|
submission.replaces = ""
|
||||||
|
|
Loading…
Reference in a new issue