diff options
author | Christopher Allan Webber <cwebber@dustycloud.org> | 2015-03-05 16:49:06 -0600 |
---|---|---|
committer | Christopher Allan Webber <cwebber@dustycloud.org> | 2015-03-05 16:49:06 -0600 |
commit | 50f12414df260de9605489ec0ca5427cff0813bf (patch) | |
tree | d4d21fbd8b5de4e91599b1b23d1d7dfd549d7f09 | |
parent | 2d0511c49991118aedaffbaae19954ab03469cca (diff) | |
parent | 2b4c339de6a5762c59054182034793e3b6002ee4 (diff) | |
download | mediagoblin-50f12414df260de9605489ec0ca5427cff0813bf.tar.lz mediagoblin-50f12414df260de9605489ec0ca5427cff0813bf.tar.xz mediagoblin-50f12414df260de9605489ec0ca5427cff0813bf.zip |
Merge remote-tracking branch 'refs/remotes/breton/bug/647'
-rw-r--r-- | mediagoblin/media_types/tools.py | 12 | ||||
-rw-r--r-- | mediagoblin/storage/cloudfiles.py | 21 | ||||
-rw-r--r-- | mediagoblin/storage/filestorage.py | 12 | ||||
-rw-r--r-- | mediagoblin/submit/lib.py | 2 |
4 files changed, 19 insertions, 28 deletions
diff --git a/mediagoblin/media_types/tools.py b/mediagoblin/media_types/tools.py index c3b3a3f0..3bc56e2c 100644 --- a/mediagoblin/media_types/tools.py +++ b/mediagoblin/media_types/tools.py @@ -17,11 +17,6 @@ import logging from mediagoblin import mg_globals -import gi -gi.require_version('Gst', '1.0') -from gi.repository import GObject, Gst, GstPbutils, GLib -Gst.init(None) - _log = logging.getLogger(__name__) @@ -36,6 +31,13 @@ def discover(src): ''' Discover properties about a media file ''' + # GStreamer might be not installed, so it should not be initialized on + # import, or an exception will be raised. + import gi + gi.require_version('Gst', '1.0') + from gi.repository import GObject, Gst, GstPbutils, GLib + Gst.init(None) + _log.info('Discovering {0}...'.format(src)) uri = 'file://{0}'.format(src) discoverer = GstPbutils.Discoverer.new(60 * Gst.SECOND) diff --git a/mediagoblin/storage/cloudfiles.py b/mediagoblin/storage/cloudfiles.py index 532e5bac..61665ea0 100644 --- a/mediagoblin/storage/cloudfiles.py +++ b/mediagoblin/storage/cloudfiles.py @@ -193,27 +193,6 @@ class CloudFilesStorageObjectWrapper(): 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. - """ - _log.warn( - '{0}.write() has bad performance! Use .send instead for now'\ - .format(self.__class__.__name__)) - - if self.storage_object.size and type(data) == str: - _log.debug('{0} is > 0 in size, appending data'.format( - self.storage_object.name)) - data = self.read() + data - - _log.debug('Writing {0}'.format( - self.storage_object.name)) self.storage_object.write(data, *args, **kwargs) def send(self, *args, **kw): diff --git a/mediagoblin/storage/filestorage.py b/mediagoblin/storage/filestorage.py index f989539c..89f43276 100644 --- a/mediagoblin/storage/filestorage.py +++ b/mediagoblin/storage/filestorage.py @@ -14,6 +14,7 @@ # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. +import io import os import shutil @@ -24,6 +25,15 @@ from mediagoblin.storage import ( clean_listy_filepath, NoWebServing) +class FileObjectAwareFile(io.FileIO): + def write(self, data): + if hasattr(data, 'read'): + # We can call data.read(). It means that the data is a file-like + # object, which should be saved RAM-friendly way + shutil.copyfileobj(data, self) + else: + super(FileObjectAwareFile, self).write(data) + class BasicFileStorage(StorageInterface): """ @@ -60,7 +70,7 @@ class BasicFileStorage(StorageInterface): os.makedirs(directory) # Grab and return the file in the mode specified - return open(self._resolve_filepath(filepath), mode) + return FileObjectAwareFile(self._resolve_filepath(filepath), mode) def delete_file(self, filepath): """Delete file at filepath diff --git a/mediagoblin/submit/lib.py b/mediagoblin/submit/lib.py index 541447e4..a0e1cf90 100644 --- a/mediagoblin/submit/lib.py +++ b/mediagoblin/submit/lib.py @@ -157,7 +157,7 @@ def submit_media(mg_app, user, submitted_file, filename, queue_file = prepare_queue_task(mg_app, entry, filename) with queue_file: - queue_file.write(submitted_file.read()) + queue_file.write(submitted_file) # Get file size and round to 2 decimal places file_size = mg_app.queue_store.get_file_size( |