Made a wrapper for cloudfiles.storage_object.Object
- `medium.jpg` issue should no longer exist.
This commit is contained in:
parent
13b9f054f9
commit
b5e7b967bb
@ -142,8 +142,8 @@ def process_image(entry):
|
|||||||
thumb = thumb.convert("RGB")
|
thumb = thumb.convert("RGB")
|
||||||
|
|
||||||
thumb_filepath = create_pub_filepath(entry, 'thumbnail.jpg')
|
thumb_filepath = create_pub_filepath(entry, 'thumbnail.jpg')
|
||||||
|
|
||||||
thumb_file = mgg.public_store.get_file(thumb_filepath, 'w')
|
thumb_file = mgg.public_store.get_file(thumb_filepath, 'w')
|
||||||
|
|
||||||
with closing(thumb_file):
|
with closing(thumb_file):
|
||||||
thumb.save(thumb_file, "JPEG", quality=90)
|
thumb.save(thumb_file, "JPEG", quality=90)
|
||||||
|
|
||||||
@ -160,8 +160,8 @@ def process_image(entry):
|
|||||||
medium = medium.convert("RGB")
|
medium = medium.convert("RGB")
|
||||||
|
|
||||||
medium_filepath = create_pub_filepath(entry, 'medium.jpg')
|
medium_filepath = create_pub_filepath(entry, 'medium.jpg')
|
||||||
|
|
||||||
medium_file = mgg.public_store.get_file(medium_filepath, 'w')
|
medium_file = mgg.public_store.get_file(medium_filepath, 'w')
|
||||||
|
|
||||||
with closing(medium_file):
|
with closing(medium_file):
|
||||||
medium.save(medium_file, "JPEG", quality=90)
|
medium.save(medium_file, "JPEG", quality=90)
|
||||||
medium_processed = True
|
medium_processed = True
|
||||||
|
@ -20,6 +20,7 @@ import urlparse
|
|||||||
import uuid
|
import uuid
|
||||||
import cloudfiles
|
import cloudfiles
|
||||||
import mimetypes
|
import mimetypes
|
||||||
|
import tempfile
|
||||||
|
|
||||||
from werkzeug.utils import secure_filename
|
from werkzeug.utils import secure_filename
|
||||||
|
|
||||||
@ -228,6 +229,27 @@ class BasicFileStorage(StorageInterface):
|
|||||||
|
|
||||||
|
|
||||||
class CloudFilesStorage(StorageInterface):
|
class CloudFilesStorage(StorageInterface):
|
||||||
|
class StorageObjectWrapper():
|
||||||
|
"""
|
||||||
|
Wrapper for python-cloudfiles's cloudfiles.storage_object.Object
|
||||||
|
used to circumvent the mystic `medium.jpg` corruption issue.
|
||||||
|
|
||||||
|
This wrapper currently meets mediagoblin's needs for a public_store
|
||||||
|
file-like object.
|
||||||
|
"""
|
||||||
|
def __init__(self, storage_object):
|
||||||
|
self.storage_object = storage_object
|
||||||
|
|
||||||
|
def read(self, *args, **kwargs):
|
||||||
|
return self.storage_object.read(*args, **kwargs)
|
||||||
|
|
||||||
|
def write(self, data, *args, **kwargs):
|
||||||
|
if self.storage_object.size and type(data) == str:
|
||||||
|
data = self.read() + data
|
||||||
|
|
||||||
|
self.storage_object.write(data, *args, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
def __init__(self, **kwargs):
|
def __init__(self, **kwargs):
|
||||||
self.param_container = kwargs.get('cloudfiles_container')
|
self.param_container = kwargs.get('cloudfiles_container')
|
||||||
self.param_user = kwargs.get('cloudfiles_user')
|
self.param_user = kwargs.get('cloudfiles_user')
|
||||||
@ -269,7 +291,10 @@ class CloudFilesStorage(StorageInterface):
|
|||||||
except cloudfiles.errors.NoSuchObject:
|
except cloudfiles.errors.NoSuchObject:
|
||||||
return False
|
return False
|
||||||
|
|
||||||
def get_file(self, filepath, mode='r'):
|
def get_file(self, filepath, *args):
|
||||||
|
"""
|
||||||
|
- Doesn't care about the "mode" argument
|
||||||
|
"""
|
||||||
try:
|
try:
|
||||||
obj = self.container.get_object(
|
obj = self.container.get_object(
|
||||||
self._resolve_filepath(filepath))
|
self._resolve_filepath(filepath))
|
||||||
@ -283,7 +308,7 @@ class CloudFilesStorage(StorageInterface):
|
|||||||
if mimetype:
|
if mimetype:
|
||||||
obj.content_type = mimetype[0]
|
obj.content_type = mimetype[0]
|
||||||
|
|
||||||
return obj
|
return self.StorageObjectWrapper(obj)
|
||||||
|
|
||||||
def delete_file(self, filepath):
|
def delete_file(self, filepath):
|
||||||
# TODO: Also delete unused directories if empty (safely, with
|
# TODO: Also delete unused directories if empty (safely, with
|
||||||
|
Loading…
x
Reference in New Issue
Block a user