Skip to content

Commit

Permalink
Merge branch 'feature/override-pdf-ids' into develop
Browse files Browse the repository at this point in the history
 [SVCS-847]
  • Loading branch information
felliott committed Jun 29, 2018
2 parents 5cca53e + 9e9d6b1 commit 9fc2e52
Show file tree
Hide file tree
Showing 9 changed files with 27 additions and 48 deletions.
8 changes: 0 additions & 8 deletions mfr/extensions/pdf/export.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@
from http import HTTPStatus

from PIL import Image, TiffImagePlugin
from pdfrw import PdfReader, PdfWriter
from reportlab.pdfgen import canvas

from mfr.core import extension
Expand Down Expand Up @@ -67,13 +66,6 @@ def tiff_to_pdf(self, tiff_img, max_size):
c.save()

def export(self):
if self.ext.lower() == '.pdf':
pdf = PdfReader(self.source_file_path)
pdf.ID[0] = self.metadata.stable_id
pdf.ID[1] = self.metadata.unique_key
PdfWriter(self.output_file_path, trailer=pdf).write()
return

logger.debug('pdf-export: format::{}'.format(self.format))
parts = self.format.split('.')
export_type = parts[-1].lower()
Expand Down
6 changes: 4 additions & 2 deletions mfr/extensions/pdf/render.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,21 +28,23 @@ def render(self):
return self.TEMPLATE.render(
base=self.assets_url,
url=escape_url_for_template(download_url.geturl()),
stable_id=self.metadata.stable_id,
enable_hypothesis=settings.ENABLE_HYPOTHESIS,
)

logger.debug('Extension found in supported list!')
exported_url = furl.furl(self.export_url)
if self.metadata.ext.lower() in settings.EXPORT_NEEDS_SCALING:
if settings.EXPORT_MAXIMUM_SIZE:
exported_url.args['format'] = '{}.{}'.format(settings.EXPORT_MAXIMUM_SIZE,
settings.EXPORT_TYPE)
else:
exported_url.args['format'] = 'export.{}'.format(settings.EXPORT_TYPE)
exported_url.args['format'] = settings.EXPORT_TYPE

self.metrics.add('needs_export', True)
return self.TEMPLATE.render(
base=self.assets_url,
url=escape_url_for_template(exported_url.url),
stable_id=self.metadata.stable_id,
enable_hypothesis=settings.ENABLE_HYPOTHESIS
)

Expand Down
10 changes: 2 additions & 8 deletions mfr/extensions/pdf/settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,16 +5,10 @@

EXPORT_TYPE = config.get('EXPORT_TYPE', 'pdf')
assert EXPORT_TYPE # mandatory config
EXPORT_MAXIMUM_SIZE = config.get('EXPORT_MAXIMUM_SIZE', '1200x1200')

ENABLE_HYPOTHESIS = config.get_bool('ENABLE_HYPOTHESIS', False)

# supports multiple files in the form of a space separated string
EXPORT_SUPPORTED = config.get('EXPORT_SUPPORTED', '.pdf .tiff .tif').split(' ')
EXPORT_NEEDS_SCALING = config.get('EXPORT_NEEDS_SCALING', '.tiff .tif').split(' ')
EXPORT_SUPPORTED = config.get('EXPORT_SUPPORTED', '.tiff .tif').split(' ')
EXPORT_MAX_PAGES = int(config.get('EXPORT_MAX_PAGES', 40))
EXPORT_MAXIMUM_SIZE = config.get('EXPORT_MAXIMUM_SIZE', '1200x1200')

# scaling requires page and size limits
if EXPORT_NEEDS_SCALING:
assert EXPORT_MAX_PAGES
assert EXPORT_MAXIMUM_SIZE
3 changes: 3 additions & 0 deletions mfr/extensions/pdf/templates/viewer.mako
Original file line number Diff line number Diff line change
Expand Up @@ -424,6 +424,9 @@ http://sourceforge.net/adobe/cmap/wiki/License/
window.pymChild.sendMessage('embed', 'embed-responsive-pdf');
</script>
% if enable_hypothesis:
<script>
window.MFR_STABLE_ID = '${stable_id}';
</script>
<script src="/static/js/mfr.child.hypothesis.js"></script>
% endif
</body>
Expand Down
11 changes: 0 additions & 11 deletions mfr/extensions/unoconv/export.py
Original file line number Diff line number Diff line change
@@ -1,12 +1,6 @@
import os
import subprocess

from pdfrw import (
PdfReader,
PdfWriter
)


from mfr.core import extension
from mfr.core import exceptions

Expand Down Expand Up @@ -39,8 +33,3 @@ def export(self):
extension=extension or '',
exporter_class='unoconv',
)

pdf = PdfReader(self.output_file_path)
pdf.ID[0] = self.metadata.stable_id
pdf.ID[1] = self.metadata.unique_key
PdfWriter(self.output_file_path, trailer=pdf).write()
7 changes: 7 additions & 0 deletions mfr/server/static/js/mfr.child.hypothesis.js
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,13 @@
return;
}

// If a pdf is being rendered and MFR has provided a stable identifier, override the
// documentFingerprint with it before loading the hypothes.is client. The client
// will use this ID to identify the document when fetching/saving annotations.
if (window.MFR_STABLE_ID && window.PDFViewerApplication) {
window.PDFViewerApplication.documentFingerprint = window.MFR_STABLE_ID;
}

var script = window.document.createElement('script');
script.type = 'text/javascript';
script.src = 'https://hypothes.is/embed.js';
Expand Down
1 change: 0 additions & 1 deletion requirements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,6 @@ mistune==0.7

# Pdf
reportlab==3.4.0
pdfrw==0.4.0

# Pptx
# python-pptx==0.5.7
Expand Down
7 changes: 2 additions & 5 deletions setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -57,16 +57,13 @@ def parse_requirements(requirements):
'.bmp = mfr.extensions.image:ImageExporter',
'.gif = mfr.extensions.image:ImageExporter',
'.psd = mfr.extensions.image:ImageExporter',
'.tif = mfr.extensions.pdf:PdfExporter',
'.tiff = mfr.extensions.pdf:PdfExporter',

# jsc3d
'.stp = mfr.extensions.jsc3d:JSC3DExporter',
'.step = mfr.extensions.jsc3d:JSC3DExporter',

# pdf
'.pdf = mfr.extensions.pdf:PdfExporter',
'.tif = mfr.extensions.pdf:PdfExporter',
'.tiff = mfr.extensions.pdf:PdfExporter',

# unoconv
# '.bib = mfr.extensions.unoconv:UnoconvExporter',
# '.bmp = mfr.extensions.unoconv:UnoconvExporter',
Expand Down
22 changes: 9 additions & 13 deletions tests/extensions/pdf/test_renderer.py
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ def assets_url():

@pytest.fixture
def export_url():
return 'http://mfr.osf.io/export?url=http://osf.io/file/test.pdf&format=export.pdf'
return 'http://mfr.osf.io/export?url=http://osf.io/file/test.pdf'


@pytest.fixture
Expand All @@ -60,22 +60,18 @@ def tif_renderer(tif_metadata, tif_file_path, tif_url, assets_url, export_url):

class TestPdfRenderer:

def test_render_pdf(self, renderer, assets_url, export_url):
def test_render_pdf(self, renderer, metadata, assets_url):
body = renderer.render()
assert '<base href="{}/{}/web/" target="_blank">'.format(assets_url, 'pdf') in body
assert '<div id="viewer" class="pdfViewer"></div>' in body
assert 'DEFAULT_URL = \'{}\''.format(export_url) in body
assert 'DEFAULT_URL = \'{}\''.format(metadata.download_url) in body

def test_render_pdf_with_single_quote_in_name(self, assets_url):

bad_download_url = 'http://osf.io/file/te\'st.pdf'
safe_download_url = 'http://osf.io/file/te%27st.pdf'
download_url = 'http://wb.osf.io/file/te\'st.pdf?token=1234'
safe_download_url = 'http://wb.osf.io/file/te%27st.pdf?token=1234'

base_export_url = 'http://mfr.osf.io/export?url={}&format=export.pdf'
bad_export_url = base_export_url.format(bad_download_url)
safe_export_url = base_export_url.format(safe_download_url)

metadata = ProviderMetadata('te\'st', '.pdf', 'text/plain', '1234', bad_download_url)
metadata = ProviderMetadata('te\'st', '.pdf', 'text/plain', '1234', download_url)
renderer = PdfRenderer(metadata, '/tmp/te\'st.pdf', 'http://osf.io/file/te\'st.pdf',
assets_url,
'http://mfr.osf.io/export?url=http://osf.io/file/te\'st.pdf')
Expand All @@ -84,13 +80,13 @@ def test_render_pdf_with_single_quote_in_name(self, assets_url):

assert '<base href="{}/{}/web/" target="_blank">'.format(assets_url, 'pdf') in body
assert '<div id="viewer" class="pdfViewer"></div>' in body
assert 'DEFAULT_URL = \'{}\''.format(bad_export_url) not in body
assert 'DEFAULT_URL = \'{}\''.format(safe_export_url) in body
assert 'DEFAULT_URL = \'{}\''.format(download_url) not in body
assert 'DEFAULT_URL = \'{}\''.format(safe_download_url) in body

def test_render_tif(self, tif_renderer, assets_url):
exported_url = furl.furl(tif_renderer.export_url)
exported_url.args['format'] = '{}.{}'.format(settings.EXPORT_MAXIMUM_SIZE,
settings.EXPORT_TYPE)
settings.EXPORT_TYPE)

body = tif_renderer.render()
assert '<base href="{}/{}/web/" target="_blank">'.format(assets_url, 'pdf') in body
Expand Down

0 comments on commit 9fc2e52

Please sign in to comment.