From 98f6efb06898dc86398a742bddbf3a06e63355d7 Mon Sep 17 00:00:00 2001 From: Christopher Allan Webber Date: Sun, 20 Nov 2011 22:01:43 -0600 Subject: [PATCH] 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. --- mediagoblin/storage/__init__.py | 8 ++++++++ mediagoblin/storage/filestorage.py | 14 ++++++++++++++ 2 files changed, 22 insertions(+) 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)) -- 2.25.1