aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSebastian Spaeth <Sebastian@SSpaeth.de>2012-12-19 14:18:03 +0100
committerSebastian Spaeth <Sebastian@SSpaeth.de>2013-01-08 14:51:41 +0100
commit5018a3557cb4bff707966bddf8c086a6ed10f53b (patch)
treea2adbf45e87645f4c44016e75991f700bcbb35b9
parent7f4e42b0b15aefcc885c9aacefac3a76f2f7b5ad (diff)
downloadmediagoblin-5018a3557cb4bff707966bddf8c086a6ed10f53b.tar.lz
mediagoblin-5018a3557cb4bff707966bddf8c086a6ed10f53b.tar.xz
mediagoblin-5018a3557cb4bff707966bddf8c086a6ed10f53b.zip
Don't read full image media into RAM on copying (#419)
We copy uploaded media from the queue store to the local workbench and then to its final destination. The latter was done by simply: dst.write(src.read()) which is of course evil as it reads the whole file content into RAM. Which *might* arguably still be OK for images, but you never know. Make use of the provided storage() methods that offer chunked copying rather than opening and fudging with files ourselves. Signed-off-by: Sebastian Spaeth <Sebastian@SSpaeth.de>
-rw-r--r--mediagoblin/media_types/image/processing.py13
1 files changed, 3 insertions, 10 deletions
diff --git a/mediagoblin/media_types/image/processing.py b/mediagoblin/media_types/image/processing.py
index bdb2290f..bf464069 100644
--- a/mediagoblin/media_types/image/processing.py
+++ b/mediagoblin/media_types/image/processing.py
@@ -120,17 +120,10 @@ def process_image(entry):
else:
medium_filepath = None
- # we have to re-read because unlike PIL, not everything reads
- # things in string representation :)
- queued_file = file(queued_filename, 'rb')
-
- with queued_file:
- original_filepath = create_pub_filepath(
+ # Copy our queued local workbench to its final destination
+ original_filepath = create_pub_filepath(
entry, name_builder.fill('{basename}{ext}'))
-
- with mgg.public_store.get_file(original_filepath, 'wb') \
- as original_file:
- original_file.write(queued_file.read())
+ mgg.public_store.copy_local_to_storage(queued_filename, original_filepath)
# Remove queued media file from storage and database
mgg.queue_store.delete_file(queued_filepath)