From 09bc16ecef3edb4852d211f3536cc2f6d2599734 Mon Sep 17 00:00:00 2001 From: Natalia Juszka Date: Fri, 23 Mar 2018 17:11:40 +0100 Subject: [PATCH] Storage/S3: Override get_local_path method --- storage_s3/indico_storage_s3/plugin.py | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/storage_s3/indico_storage_s3/plugin.py b/storage_s3/indico_storage_s3/plugin.py index dcc9d47..9356e79 100644 --- a/storage_s3/indico_storage_s3/plugin.py +++ b/storage_s3/indico_storage_s3/plugin.py @@ -16,10 +16,15 @@ from __future__ import unicode_literals +from contextlib import contextmanager +from tempfile import NamedTemporaryFile + import boto3 + +from indico.core import signals +from indico.core.config import config from indico.core.plugins import IndicoPlugin from indico.core.storage import Storage -from indico.core import signals from indico.web.flask.util import send_file @@ -57,6 +62,13 @@ class S3Storage(Storage): def open(self, file_id): return self.client.get_object(Bucket=self.bucket, Key=file_id)['Body'] + @contextmanager + def get_local_path(self, file_id): + with NamedTemporaryFile(suffix='indico.tmp', dir=config.TEMP_DIR) as tmpfile: + self._copy_file(self.open(file_id), tmpfile) + tmpfile.flush() + yield tmpfile.name + def save(self, name, content_type, filename, fileobj): self.client.upload_fileobj(fileobj, self.bucket, name) return name, ''