From: Christopher Allan Webber Date: Mon, 21 Nov 2011 04:01:43 +0000 (-0600) Subject: copy_local_to_storage, both general and specialized-for-BasicFileStorage versions X-Git-Url: https://vcs.fsf.org/?a=commitdiff_plain;h=98f6efb06898dc86398a742bddbf3a06e63355d7;p=mediagoblin.git copy_local_to_storage, both general and specialized-for-BasicFileStorage versions This utility should allow for easy copying from a local filesystem to the storage instance. --- diff --git a/mediagoblin/storage/__init__.py b/mediagoblin/storage/__init__.py index 9e592b9e..b76e18af 100644 --- a/mediagoblin/storage/__init__.py +++ b/mediagoblin/storage/__init__.py @@ -169,6 +169,14 @@ class StorageInterface(object): with file(dest_path, 'wb') as dest_file: dest_file.write(source_file.read()) + def copy_local_to_storage(self, filename, filepath): + """ + Copy this file from locally to the storage system. + """ + with self.get_file(filepath, 'wb') as dest_file: + with file(filename, 'rb') as source_file: + dest_file.write(source_file.read()) + ########### # Utilities diff --git a/mediagoblin/storage/filestorage.py b/mediagoblin/storage/filestorage.py index 22d6eb5a..a904865f 100644 --- a/mediagoblin/storage/filestorage.py +++ b/mediagoblin/storage/filestorage.py @@ -20,6 +20,7 @@ from mediagoblin.storage import ( NoWebServing) import os +import shutil import urlparse @@ -76,3 +77,16 @@ class BasicFileStorage(StorageInterface): def get_local_path(self, filepath): return self._resolve_filepath(filepath) + + def copy_local_to_storage(self, filename, filepath): + """ + Copy this file from locally to the storage system. + """ + # Make directories if necessary + if len(filepath) > 1: + directory = self._resolve_filepath(filepath[:-1]) + if not os.path.exists(directory): + os.makedirs(directory) + + shutil.copy( + filename, self.get_local_path(filepath))