예제 #1
0
    def get(self):
        """Export a file to the format specified via the associated extension library"""

        if 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 export [{}]'.format(self.cache_file_path))
            else:
                logger.info('Cached file found; Sending downstream [{}]'.format(self.cache_file_path))
                self._set_headers()
                return (yield self.write_stream(cached_stream))

        yield from self.local_cache_provider.upload(
            (yield from self.provider.download()),
            self.source_file_path
        )

        exporter = utils.make_exporter(
            self.metadata.ext,
            self.source_file_path.full_path,
            self.output_file_path.full_path,
            self.format
        )

        loop = asyncio.get_event_loop()
        yield from loop.run_in_executor(None, exporter.export)

        with open(self.output_file_path.full_path, 'rb') as fp:
            self._set_headers()
            yield self.write_stream(waterbutler.core.streams.FileStreamReader(fp))
예제 #2
0
    def get(self):
        """Export a file to the format specified via the associated extension library"""

        if 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 export [{}]'.format(
                        self.cache_file_path))
            else:
                logger.info(
                    'Cached file found; Sending downstream [{}]'.format(
                        self.cache_file_path))
                self._set_headers()
                return (yield self.write_stream(cached_stream))

        yield from self.local_cache_provider.upload(
            (yield from self.provider.download()), self.source_file_path)

        exporter = utils.make_exporter(self.metadata.ext,
                                       self.source_file_path.full_path,
                                       self.output_file_path.full_path,
                                       self.format)

        loop = asyncio.get_event_loop()
        yield from loop.run_in_executor(None, exporter.export)

        with open(self.output_file_path.full_path, 'rb') as fp:
            self._set_headers()
            yield self.write_stream(
                waterbutler.core.streams.FileStreamReader(fp))
예제 #3
0
    async def get(self):
        """Export a file to the format specified via the associated extension library"""

        # File is already in the requested format
        if self.metadata.ext.lower() == ".{}".format(self.format.lower()):
            await self.write_stream(await self.provider.download())
            logger.info('Exported {} with no conversion.'.format(self.format))
            self.metrics.add('export.conversion', 'noop')
            return

        if settings.CACHE_ENABLED:
            try:
                cached_stream = await self.cache_provider.download(
                    self.cache_file_path)
            except DownloadError as e:
                assert e.code == 404, 'Non-404 DownloadError {!r}'.format(e)
                logger.info(
                    'No cached file found; Starting export [{}]'.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')
                self._set_headers()
                return await self.write_stream(cached_stream)

        await self.local_cache_provider.upload(await self.provider.download(),
                                               self.source_file_path)

        exporter = utils.make_exporter(
            self.metadata.ext,
            self.source_file_path.full_path,
            self.output_file_path.full_path,
            self.format,
            self.metadata,
        )

        self.extension_metrics.add('class', exporter._get_module_name())

        loop = asyncio.get_event_loop()
        await loop.run_in_executor(None, exporter.export)
        self.exporter_metrics = exporter.exporter_metrics

        with open(self.output_file_path.full_path, 'rb') as fp:
            self._set_headers()
            await self.write_stream(
                waterbutler.core.streams.FileStreamReader(fp))
예제 #4
0
    def render(self):
        if self.renderer.file_required:
            exporter = utils.make_exporter(self.metadata.ext, self.file_path,
                                           self.export_file_path,
                                           self.map['format'])
            exporter.export()

        rendition = self.renderer.render()

        if self.renderer.file_required:
            try:
                os.remove(self.export_file_path)
            except FileNotFoundError:
                pass

        return rendition
    async def get(self):
        """Export a file to the format specified via the associated extension library"""

        # File is already in the requested format
        if self.metadata.ext.lower() == ".{}".format(self.format.lower()):
            await self.write_stream(await self.provider.download())
            logger.info('Exported {} with no conversion.'.format(self.format))
            self.metrics.add('export.conversion', 'noop')
            return

        if settings.CACHE_ENABLED:
            try:
                cached_stream = await self.cache_provider.download(self.cache_file_path)
            except DownloadError as e:
                assert e.code == 404, 'Non-404 DownloadError {!r}'.format(e)
                logger.info('No cached file found; Starting export [{}]'.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')
                self._set_headers()
                return await self.write_stream(cached_stream)

        await self.local_cache_provider.upload(
            await self.provider.download(),
            self.source_file_path
        )

        exporter = utils.make_exporter(
            self.metadata.ext,
            self.source_file_path.full_path,
            self.output_file_path.full_path,
            self.format,
            self.metadata,
        )

        self.extension_metrics.add('class', exporter._get_module_name())

        loop = asyncio.get_event_loop()
        await loop.run_in_executor(None, exporter.export)
        self.exporter_metrics = exporter.exporter_metrics

        with open(self.output_file_path.full_path, 'rb') as fp:
            self._set_headers()
            await self.write_stream(waterbutler.core.streams.FileStreamReader(fp))
예제 #6
0
    def render(self):
        if self.renderer.file_required:
            exporter = utils.make_exporter(
                self.metadata.ext,
                self.file_path,
                self.export_file_path,
                self.map['format']
            )
            exporter.export()

        rendition = self.renderer.render()

        if self.renderer.file_required:
            try:
                os.remove(self.export_file_path)
            except FileNotFoundError:
                pass

        return rendition