aboutsummaryrefslogtreecommitdiffstats
path: root/mediagoblin/storage.py
diff options
context:
space:
mode:
Diffstat (limited to 'mediagoblin/storage.py')
-rw-r--r--mediagoblin/storage.py37
1 files changed, 17 insertions, 20 deletions
diff --git a/mediagoblin/storage.py b/mediagoblin/storage.py
index 3968fa29..82b7a5ff 100644
--- a/mediagoblin/storage.py
+++ b/mediagoblin/storage.py
@@ -15,7 +15,6 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
import os
-import re
import shutil
import urlparse
import uuid
@@ -255,6 +254,8 @@ class CloudFilesStorage(StorageInterface):
self.container = self.connection.get_container(
self.param_container)
+ self.container_uri = self.container.public_uri()
+
def _resolve_filepath(self, filepath):
return '/'.join(
clean_listy_filepath(filepath))
@@ -280,10 +281,13 @@ class CloudFilesStorage(StorageInterface):
def delete_file(self, filepath):
# TODO: Also delete unused directories if empty (safely, with
# checks to avoid race conditions).
- self.container.delete_object(filepath)
+ self.container.delete_object(
+ self._resolve_filepath(filepath))
def file_url(self, filepath):
- return self.get_file(filepath).public_uri()
+ return '/'.join([
+ self.container_uri,
+ self._resolve_filepath(filepath)])
class MountStorage(StorageInterface):
@@ -456,41 +460,34 @@ def clean_listy_filepath(listy_filepath):
return cleaned_filepath
-def storage_system_from_config(paste_config, storage_prefix):
+def storage_system_from_config(config_section):
"""
- Utility for setting up a storage system from the paste app config.
+ Utility for setting up a storage system from a config section.
- Note that a special argument may be passed in to the paste_config
- which is "${storage_prefix}_storage_class" which will provide an
+ Note that a special argument may be passed in to
+ the config_section which is "storage_class" which will provide an
import path to a storage system. This defaults to
"mediagoblin.storage:BasicFileStorage" if otherwise undefined.
Arguments:
- - paste_config: dictionary of config parameters
- - storage_prefix: the storage system we're setting up / will be
- getting keys/arguments from. For example 'publicstore' will
- grab all arguments that are like 'publicstore_FOO'.
+ - config_section: dictionary of config parameters
Returns:
An instantiated storage system.
Example:
storage_system_from_config(
- {'publicstore_base_url': '/media/',
- 'publicstore_base_dir': '/var/whatever/media/'},
- 'publicstore')
+ {'base_url': '/media/',
+ 'base_dir': '/var/whatever/media/'})
Will return:
BasicFileStorage(
base_url='/media/',
base_dir='/var/whatever/media')
"""
- prefix_re = re.compile('^%s_(.+)$' % re.escape(storage_prefix))
-
- config_params = dict(
- [(prefix_re.match(key).groups()[0], value)
- for key, value in paste_config.iteritems()
- if prefix_re.match(key)])
+ # This construct is needed, because dict(config) does
+ # not replace the variables in the config items.
+ config_params = dict(config_section.iteritems())
if 'storage_class' in config_params:
storage_class = config_params['storage_class']