StorageInterface.
"""
+ # Whether this file store is on the local filesystem.
+ local_storage = False
+
def __raise_not_implemented(self):
"""
Raise a warning about some component not implemented by a
else:
return filepath
+ def get_local_path(self, filepath):
+ """
+ If this is a local_storage implementation, give us a link to
+ the local filesystem reference to this file.
+
+ >>> storage_handler.get_local_path(['foo', 'bar', 'baz.jpg'])
+ u'/path/to/mounting/foo/bar/baz.jpg'
+ """
+ # Subclasses should override this method, if applicable.
+ self.__raise_not_implemented()
+
class BasicFileStorage(StorageInterface):
"""
Basic local filesystem implementation of storage API
"""
+ local_storage = True
+
def __init__(self, base_dir, base_url=None, **kwargs):
"""
Keyword arguments:
self.base_url,
'/'.join(clean_listy_filepath(filepath)))
+ def get_local_path(self, filepath):
+ return self._resolve_filepath(filepath)
+
###########
# Utilities
Take a listy filepath (like ['dir1', 'dir2', 'filename.jpg']) and
clean out any nastiness from it.
- For example:
+
>>> clean_listy_filepath([u'/dir1/', u'foo/../nasty', u'linooks.jpg'])
[u'dir1', u'foo_.._nasty', u'linooks.jpg']
['dir1', 'dir2', 'filename.txt'])
expected = 'http://media.example.org/ourmedia/dir1/dir2/filename.txt'
assert result == expected
+
+
+def test_basic_storage_get_local_path():
+ tmpdir, this_storage = get_tmp_filestorage()
+
+ result = this_storage.get_local_path(
+ ['dir1', 'dir2', 'filename.txt'])
+
+ expected = os.path.join(
+ tmpdir, 'dir1/dir2/filename.txt')
+
+ assert result == expected
+
+
+def test_basic_storage_is_local():
+ tmpdir, this_storage = get_tmp_filestorage()
+ assert this_storage.local_storage is True