diff options
author | Christopher Allan Webber <cwebber@dustycloud.org> | 2011-09-05 21:14:22 -0500 |
---|---|---|
committer | Christopher Allan Webber <cwebber@dustycloud.org> | 2011-09-05 21:14:22 -0500 |
commit | 949c7afd3762137b24c8a5e0c6cc6101de37eda7 (patch) | |
tree | c53beb11a0fd7b04dfced820380e56eb2f791b96 /mediagoblin/storage.py | |
parent | e8b517924ea5586c3249e4fbcf8b96c4dbeba49a (diff) | |
parent | 213285cd856359ad4429af8b2b93614eb6709558 (diff) | |
download | mediagoblin-949c7afd3762137b24c8a5e0c6cc6101de37eda7.tar.lz mediagoblin-949c7afd3762137b24c8a5e0c6cc6101de37eda7.tar.xz mediagoblin-949c7afd3762137b24c8a5e0c6cc6101de37eda7.zip |
Merge remote branch 'remotes/jwandborg/f571_closing_storage_objects'
Diffstat (limited to 'mediagoblin/storage.py')
-rw-r--r-- | mediagoblin/storage.py | 31 |
1 files changed, 29 insertions, 2 deletions
diff --git a/mediagoblin/storage.py b/mediagoblin/storage.py index e3df72be..f9563031 100644 --- a/mediagoblin/storage.py +++ b/mediagoblin/storage.py @@ -291,7 +291,7 @@ class CloudFilesStorage(StorageInterface): if mimetype: obj.content_type = mimetype[0] - return StorageObjectWrapper(obj, *args, **kwargs) + return CloudFilesStorageObjectWrapper(obj, *args, **kwargs) def delete_file(self, filepath): # TODO: Also delete unused directories if empty (safely, with @@ -305,7 +305,7 @@ class CloudFilesStorage(StorageInterface): self._resolve_filepath(filepath)]) -class StorageObjectWrapper(): +class CloudFilesStorageObjectWrapper(): """ Wrapper for python-cloudfiles's cloudfiles.storage_object.Object used to circumvent the mystic `medium.jpg` corruption issue, where @@ -322,11 +322,38 @@ class StorageObjectWrapper(): return self.storage_object.read(*args, **kwargs) def write(self, data, *args, **kwargs): + """ + write data to the cloudfiles storage object + + The original motivation for this wrapper is to ensure + that buffered writing to a cloudfiles storage object does not overwrite + any preexisting data. + + Currently this method does not support any write modes except "append". + However if we should need it it would be easy implement. + """ if self.storage_object.size and type(data) == str: data = self.read() + data self.storage_object.write(data, *args, **kwargs) + def close(self): + pass + + def __enter__(self): + """ + Context Manager API implementation + http://docs.python.org/library/stdtypes.html#context-manager-types + """ + return self + + def __exit__(self, *exc_info): + """ + Context Manger API implementation + see self.__enter__() + """ + self.close() + # ------------ # MountStorage |