Skip to content

Commit 5b3b9c2

Browse files
committed
Reverting the previous commit
- Legacy-Id: 16857
1 parent c58f370 commit 5b3b9c2

3 files changed

Lines changed: 72 additions & 85 deletions

File tree

ietf/submit/forms.py

Lines changed: 26 additions & 82 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,6 @@
3939
from ietf.submit.parsers.plain_parser import PlainParser
4040
from ietf.submit.parsers.ps_parser import PSParser
4141
from ietf.submit.parsers.xml_parser import XMLParser
42-
from ietf.utils import log
4342
from ietf.utils.draft import Draft
4443

4544
class SubmissionBaseUploadForm(forms.Form):
@@ -146,9 +145,6 @@ def clean(self):
146145
xml_file = self.cleaned_data.get('xml')
147146
name, ext = os.path.splitext(os.path.basename(xml_file.name))
148147
tfh, tfn = tempfile.mkstemp(prefix=name+'-', suffix='.xml')
149-
file_name = {}
150-
xml2rfc.log.write_out = open(os.devnull, "w")
151-
xml2rfc.log.write_err = io.StringIO() # open(os.devnull, "w")
152148
try:
153149
# We need to write the xml file to disk in order to hand it
154150
# over to the xml parser. XXX FIXME: investigate updating
@@ -158,15 +154,33 @@ def clean(self):
158154
for chunk in xml_file.chunks():
159155
tf.write(chunk)
160156
os.environ["XML_LIBRARY"] = settings.XML_LIBRARY
161-
# --- Parse the xml ---
162157
try:
163158
parser = xml2rfc.XmlRfcParser(str(tfn), quiet=True)
164159
self.xmltree = parser.parse(normalize=True)
165-
self.xmlroot = self.xmltree.getroot()
166-
xml_version = self.xmlroot.get('version', '2')
167-
except Exception as e:
168-
raise forms.ValidationError("An exception occurred when trying to [arse the XML file: %s" % e)
169-
160+
root = self.xmltree.getroot()
161+
ver = root.get('version', '2')
162+
if ver == '2':
163+
ok, errors = self.xmltree.validate()
164+
else:
165+
# XXX TODO: Add v3 validation
166+
ok, errors = True, ''
167+
except Exception as exc:
168+
raise forms.ValidationError("An exception occurred when trying to process the XML file: %s" % exc)
169+
if not ok:
170+
# Each error has properties:
171+
#
172+
# message: the message text
173+
# domain: the domain ID (see lxml.etree.ErrorDomains)
174+
# type: the message type ID (see lxml.etree.ErrorTypes)
175+
# level: the log level ID (see lxml.etree.ErrorLevels)
176+
# line: the line at which the message originated (if applicable)
177+
# column: the character column at which the message originated (if applicable)
178+
# filename: the name of the file in which the message originated (if applicable)
179+
raise forms.ValidationError(
180+
[ forms.ValidationError("One or more XML validation errors occurred when processing the XML file:") ] +
181+
[ forms.ValidationError("%s: Line %s: %s" % (xml_file.name, e.line, e.message), code="%s"%e.type) for e in errors ]
182+
)
183+
self.xmlroot = self.xmltree.getroot()
170184
draftname = self.xmlroot.attrib.get('docName')
171185
if draftname is None:
172186
raise forms.ValidationError("No docName attribute found in the xml root element")
@@ -198,78 +212,8 @@ def clean(self):
198212
if info[item]:
199213
info[item] = info[item].strip()
200214
self.authors.append(info)
201-
202-
# --- Prep the xml ---
203-
file_name['xml'] = os.path.join(settings.IDSUBMIT_STAGING_PATH, '%s-%s.%s' % (self.filename, self.revision, ext))
204-
try:
205-
if xml_version == '3':
206-
prep = xml2rfc.PrepToolWriter(self.xmltree, quiet=True)
207-
self.xmltree.tree = prep.prep()
208-
if self.xmltree.tree == None:
209-
raise forms.ValidationError("Error from xml2rfc (prep): %s" % prep.errors)
210-
except Exception as e:
211-
raise forms.ValidationError("Error from xml2rfc (prep): %s" % e)
212-
213-
# --- Convert to txt ---
214-
if not ('txt' in self.cleaned_data and self.cleaned_data['txt']):
215-
file_name['txt'] = os.path.join(settings.IDSUBMIT_STAGING_PATH, '%s-%s.txt' % (self.filename, self.revision))
216-
debug.show("file_name['txt']")
217-
try:
218-
if xml_version != '3':
219-
pagedwriter = xml2rfc.PaginatedTextRfcWriter(self.xmltree, quiet=True)
220-
debug.show('pagedwriter')
221-
pagedwriter.write(file_name['txt'])
222-
else:
223-
writer = xml2rfc.TextWriter(self.xmltree, quiet=True)
224-
writer.write(file_name['txt'])
225-
log.log("In %s: xml2rfc %s generated %s from %s (version %s)" %
226-
( os.path.dirname(file_name['xml']),
227-
xml2rfc.__version__,
228-
os.path.basename(file_name['txt']),
229-
os.path.basename(file_name['xml']),
230-
xml_version))
231-
except Exception as e:
232-
raise
233-
debug.show('xml2rfc.log.write_err.getvalue()')
234-
debug.show('e.args')
235-
raise forms.ValidationError("Error from xml2rfc (text): %s" % e)
236-
237-
# --- Convert to xml ---
238-
if xml_version == '3':
239-
try:
240-
file_name['html'] = os.path.join(settings.IDSUBMIT_STAGING_PATH, '%s-%s.html' % (self.filename, self.revision))
241-
writer = xml2rfc.HtmlWriter(self.xmltree, quiet=True)
242-
writer.write(file_name['html'])
243-
self.file_types.append('.html')
244-
log.log("In %s: xml2rfc %s generated %s from %s (version %s)" %
245-
( os.path.dirname(file_name['xml']),
246-
xml2rfc.__version__,
247-
os.path.basename(file_name['html']),
248-
os.path.basename(file_name['xml']),
249-
xml_version))
250-
except Exception as e:
251-
raise forms.ValidationError("Error from xml2rfc (html): %s" % e)
252-
253-
if xml_version == '2':
254-
ok, errors = self.xmltree.validate()
255-
else:
256-
ok, errors = True, ''
257-
258-
if not ok:
259-
# Each error has properties:
260-
#
261-
# message: the message text
262-
# domain: the domain ID (see lxml.etree.ErrorDomains)
263-
# type: the message type ID (see lxml.etree.ErrorTypes)
264-
# level: the log level ID (see lxml.etree.ErrorLevels)
265-
# line: the line at which the message originated (if applicable)
266-
# column: the character column at which the message originated (if applicable)
267-
# filename: the name of the file in which the message originated (if applicable)
268-
raise forms.ValidationError(
269-
[ forms.ValidationError("One or more XML validation errors occurred when processing the XML file:") ] +
270-
[ forms.ValidationError("%s: Line %s: %s" % (xml_file.name, e.line, e.message), code="%s"%e.type) for e in errors ]
271-
)
272-
215+
except forms.ValidationError:
216+
raise
273217
finally:
274218
os.close(tfh)
275219
os.unlink(tfn)

ietf/submit/utils.py

Lines changed: 45 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -649,14 +649,57 @@ def get_draft_meta(form, saved_files):
649649
file_name = saved_files
650650
abstract = None
651651
file_size = None
652+
xml2rfc.log.write_out = open(os.devnull, "w")
653+
xml2rfc.log.write_err = open(os.devnull, "w")
652654
if form.cleaned_data['xml']:
655+
try:
656+
xmlroot = form.xmltree.getroot()
657+
xml_version = xmlroot.get('version', '2')
658+
if xml_version == '3':
659+
prep = xml2rfc.PrepToolWriter(form.xmltree, quiet=True)
660+
form.xmltree.tree = prep.prep()
661+
if form.xmltree.tree == None:
662+
raise ValidationError("Error from xml2rfc (prep): %s" % prep.errors)
663+
except Exception as e:
664+
raise ValidationError("Error from xml2rfc (prep): %s" % e)
665+
if not ('txt' in form.cleaned_data and form.cleaned_data['txt']):
666+
file_name['txt'] = os.path.join(settings.IDSUBMIT_STAGING_PATH, '%s-%s.txt' % (form.filename, form.revision))
667+
try:
668+
if xml_version != '3':
669+
pagedwriter = xml2rfc.PaginatedTextRfcWriter(form.xmltree, quiet=True)
670+
pagedwriter.write(file_name['txt'])
671+
else:
672+
writer = xml2rfc.TextWriter(form.xmltree, quiet=True)
673+
writer.write(file_name['txt'])
674+
log.log("In %s: xml2rfc %s generated %s from %s (version %s)" %
675+
( os.path.dirname(file_name['xml']),
676+
xml2rfc.__version__,
677+
os.path.basename(file_name['txt']),
678+
os.path.basename(file_name['xml']),
679+
xml_version))
680+
except Exception as e:
681+
raise ValidationError("Error from xml2rfc (text): %s" % e)
682+
file_size = os.stat(file_name['txt']).st_size
683+
if xml_version == '3':
684+
try:
685+
file_name['html'] = os.path.join(settings.IDSUBMIT_STAGING_PATH, '%s-%s.html' % (form.filename, form.revision))
686+
writer = xml2rfc.HtmlWriter(form.xmltree, quiet=True)
687+
writer.write(file_name['html'])
688+
form.file_types.append('.html')
689+
log.log("In %s: xml2rfc %s generated %s from %s (version %s)" %
690+
( os.path.dirname(file_name['xml']),
691+
xml2rfc.__version__,
692+
os.path.basename(file_name['html']),
693+
os.path.basename(file_name['xml']),
694+
xml_version))
695+
except Exception as e:
696+
raise ValidationError("Error from xml2rfc (html): %s" % e)
653697
# Some meta-information, such as the page-count, can only
654698
# be retrieved from the generated text file. Provide a
655699
# parsed draft object to get at that kind of information.
656-
file_name['txt'] = os.path.join(settings.IDSUBMIT_STAGING_PATH, '%s-%s.txt' % (form.filename, form.revision))
657-
file_size = os.stat(file_name['txt']).st_size
658700
with io.open(file_name['txt']) as txt_file:
659701
form.parsed_draft = Draft(txt_file.read(), txt_file.name)
702+
660703
else:
661704
file_size = form.cleaned_data['txt'].size
662705

requirements3.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ jwcrypto>=0.4.0 # for signed notifications
3636
#lxml>=3.4.0 # from PyQuery;
3737
markdown2>=2.3.8
3838
mock>=2.0.0
39-
mypy # Version requirements determined by django-stubs.
39+
mypy==0.720
4040
mysqlclient>=1.3.13
4141
oauth2client>=4.0.0 # required by google-api-python-client, but not always pulled in
4242
patch>=1.16,<2.0

0 commit comments

Comments
 (0)