PDF uploading fails when page.MediaBox is not present
When uploading a PDF that is exported from a Jupyter notebook, it fails to upload and returns 500. The following error is thrown:
[2019-06-05 11:48:42,336] ERROR in app: Exception on /api/exams [POST]
Traceback (most recent call last):
File "/home/hugo/miniconda3/envs/zesje-dev/lib/python3.6/site-packages/flask/app.py", line 1813, in full_dispatch_request
rv = self.dispatch_request()
File "/home/hugo/miniconda3/envs/zesje-dev/lib/python3.6/site-packages/flask/app.py", line 1799, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "/home/hugo/miniconda3/envs/zesje-dev/lib/python3.6/site-packages/flask_restful/__init__.py", line 458, in wrapper
resp = resource(*args, **kwargs)
File "/home/hugo/miniconda3/envs/zesje-dev/lib/python3.6/site-packages/flask/views.py", line 88, in view
return self.dispatch_request(*args, **kwargs)
File "/home/hugo/miniconda3/envs/zesje-dev/lib/python3.6/site-packages/flask_restful/__init__.py", line 573, in dispatch_request
resp = meth(*args, **kwargs)
File "/home/hugo/Documents/zesje/zesje/api/exams.py", line 203, in post
if not page_is_size(pdf_data, PAGE_FORMATS[format], tolerance=0.01):
File "/home/hugo/Documents/zesje/zesje/pdf_generation.py", line 328, in page_is_size
invalid = any(page_is_bad(p) for p in exam_pdf.pages)
File "/home/hugo/Documents/zesje/zesje/pdf_generation.py", line 328, in <genexpr>
invalid = any(page_is_bad(p) for p in exam_pdf.pages)
File "/home/hugo/Documents/zesje/zesje/pdf_generation.py", line 325, in page_is_bad
return (abs(float(page.MediaBox[2]) - shape[0]) > tol[0]
TypeError: 'NoneType' object is not subscriptable
The property MediaBox
is not present on the pages in such a PDF. The error is thrown
here in pdf_generation.py
To replicate:
- Export a Jupyter notebook as PDF
- Upload it to Zesje
My backend for PDF generation is XeTeX 0.99996