def __init__(self, metadata, file_path, url, assets_url, export_url): super().__init__(metadata, file_path, url, assets_url, export_url) try: self.map = settings.RENDER_MAP[self.metadata.ext] except KeyError: self.map = settings.DEFAULT_RENDER self.export_file_path = self.file_path + self.map['renderer'] exported_url = furl.furl(export_url) exported_url.args['format'] = self.map['format'] exported_metadata = self.metadata exported_metadata.download_url = exported_url.url self.renderer = utils.make_renderer(self.map['renderer'], exported_metadata, self.export_file_path, exported_url.url, assets_url, export_url) # can't call file_required until renderer is built self.renderer_metrics.add('file_required', self.file_required) self.renderer_metrics.add('cache_result', self.cache_result) self.metrics.merge({ 'map': { 'renderer': self.map['renderer'], 'format': self.map['format'], }, })
def __init__(self, metadata, file_path, url, assets_url, export_url): super().__init__(metadata, file_path, url, assets_url, export_url) try: self.map = settings.RENDER_MAP[self.metadata.ext] except KeyError: self.map = settings.DEFAULT_RENDER self.export_file_path = self.file_path + self.map['renderer'] exported_url = furl.furl(export_url) exported_url.args['format'] = self.map['format'] exported_metadata = self.metadata exported_metadata.download_url = exported_url.url self.renderer = utils.make_renderer( self.map['renderer'], exported_metadata, self.export_file_path, exported_url.url, assets_url, export_url ) # can't call file_required until renderer is built self.renderer_metrics.add('file_required', self.file_required) self.renderer_metrics.add('cache_result', self.cache_result) self.metrics.merge({ 'map': { 'renderer': self.map['renderer'], 'format': self.map['format'], }, })
async def get(self): """Return HTML that will display the given file.""" renderer = utils.make_renderer( self.metadata.ext, self.metadata, self.source_file_path.full_path, self.url, '{}://{}/assets'.format(self.request.protocol, self.request.host), self.request.uri.replace('/render?', '/export?', 1) ) self.extension_metrics.add('class', renderer._get_module_name()) if renderer.cache_result and settings.CACHE_ENABLED: try: cached_stream = await self.cache_provider.download(self.cache_file_path) except waterbutler.core.exceptions.DownloadError as e: assert e.code == 404, 'Non-404 DownloadError {!r}'.format(e) logger.info('No cached file found; Starting render [{}]'.format(self.cache_file_path)) self.metrics.add('cache_file.result', 'miss') else: logger.info('Cached file found; Sending downstream [{}]'.format(self.cache_file_path)) self.metrics.add('cache_file.result', 'hit') return await self.write_stream(cached_stream) if renderer.file_required: await self.local_cache_provider.upload( await self.provider.download(), self.source_file_path ) else: self.metrics.add('source_file.upload.required', False) loop = asyncio.get_event_loop() rendition = await loop.run_in_executor(None, renderer.render) self.renderer_metrics = renderer.renderer_metrics # Spin off upload into non-blocking operation if renderer.cache_result and settings.CACHE_ENABLED: asyncio.ensure_future( self.cache_provider.upload( waterbutler.core.streams.StringStream(rendition), self.cache_file_path ) ) await self.write_stream(waterbutler.core.streams.StringStream(rendition))
async def get(self): """Return HTML that will display the given file.""" renderer = utils.make_renderer( self.metadata.ext, self.metadata, self.source_file_path.full_path, self.url, '{}://{}/assets'.format(self.request.protocol, self.request.host), self.request.uri.replace('/render?', '/export?', 1)) self.extension_metrics.add('class', renderer._get_module_name()) if renderer.cache_result and settings.CACHE_ENABLED: try: cached_stream = await self.cache_provider.download( self.cache_file_path) except waterbutler.core.exceptions.DownloadError as e: assert e.code == 404, 'Non-404 DownloadError {!r}'.format(e) logger.info( 'No cached file found; Starting render [{}]'.format( self.cache_file_path)) self.metrics.add('cache_file.result', 'miss') else: logger.info( 'Cached file found; Sending downstream [{}]'.format( self.cache_file_path)) self.metrics.add('cache_file.result', 'hit') return await self.write_stream(cached_stream) if renderer.file_required: await self.local_cache_provider.upload( await self.provider.download(), self.source_file_path) else: self.metrics.add('source_file.upload.required', False) loop = asyncio.get_event_loop() rendition = await loop.run_in_executor(None, renderer.render) self.renderer_metrics = renderer.renderer_metrics # Spin off upload into non-blocking operation if renderer.cache_result and settings.CACHE_ENABLED: asyncio.ensure_future( self.cache_provider.upload( waterbutler.core.streams.StringStream(rendition), self.cache_file_path)) await self.write_stream( waterbutler.core.streams.StringStream(rendition))
def __init__(self, metadata, file_path, url, assets_url, export_url): super().__init__(metadata, file_path, url, assets_url, export_url) try: self.map = settings.RENDER_MAP[self.metadata.ext] except KeyError: self.map = settings.DEFAULT_RENDER self.export_file_path = self.file_path + self.map['renderer'] exported_url = furl.furl(export_url) exported_url.args['format'] = self.map['format'] exported_metadata = self.metadata exported_metadata.download_url = exported_url.url self.renderer = utils.make_renderer(self.map['renderer'], exported_metadata, self.export_file_path, exported_url.url, assets_url, export_url)
def get(self): """Render a file with the extension""" renderer = utils.make_renderer( self.metadata.ext, self.metadata, self.source_file_path.full_path, self.url, '{}://{}/assets'.format(self.request.protocol, self.request.host), self.request.uri.replace('/render?', '/export?', 1) ) if renderer.cache_result and settings.CACHE_ENABLED: try: cached_stream = yield from self.cache_provider.download(self.cache_file_path) except waterbutler.core.exceptions.DownloadError as e: assert e.code == 404, 'Non-404 DownloadError {!r}'.format(e) logger.info('No cached file found; Starting render [{}]'.format(self.cache_file_path)) else: logger.info('Cached file found; Sending downstream [{}]'.format(self.cache_file_path)) return (yield self.write_stream(cached_stream)) if renderer.file_required: yield from self.local_cache_provider.upload( (yield from self.provider.download()), self.source_file_path ) loop = asyncio.get_event_loop() rendition = (yield from loop.run_in_executor(None, renderer.render)) # Spin off upload into non-blocking operation if renderer.cache_result and settings.CACHE_ENABLED: loop.call_soon( asyncio.async, self.cache_provider.upload(waterbutler.core.streams.StringStream(rendition), self.cache_file_path) ) yield self.write_stream(waterbutler.core.streams.StringStream(rendition))
def __init__(self, metadata, file_path, url, assets_url, export_url): super().__init__(metadata, file_path, url, assets_url, export_url) try: self.map = settings.RENDER_MAP[self.metadata.ext] except KeyError: self.map = settings.DEFAULT_RENDER self.export_file_path = self.file_path + self.map['renderer'] exported_url = furl.furl(export_url) exported_url.args['format'] = self.map['format'] exported_metadata = self.metadata exported_metadata.download_url = exported_url.url self.renderer = utils.make_renderer( self.map['renderer'], exported_metadata, self.export_file_path, exported_url.url, assets_url, export_url )