Allow storage systems to be local and allow for a get_local_path
method if applicable.
This commit is contained in:
parent
d07713d0b0
commit
3a89c23e7f
@ -60,6 +60,9 @@ class StorageInterface(object):
|
|||||||
StorageInterface.
|
StorageInterface.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
# Whether this file store is on the local filesystem.
|
||||||
|
local_storage = False
|
||||||
|
|
||||||
def __raise_not_implemented(self):
|
def __raise_not_implemented(self):
|
||||||
"""
|
"""
|
||||||
Raise a warning about some component not implemented by a
|
Raise a warning about some component not implemented by a
|
||||||
@ -127,12 +130,25 @@ class StorageInterface(object):
|
|||||||
else:
|
else:
|
||||||
return filepath
|
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):
|
class BasicFileStorage(StorageInterface):
|
||||||
"""
|
"""
|
||||||
Basic local filesystem implementation of storage API
|
Basic local filesystem implementation of storage API
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
local_storage = True
|
||||||
|
|
||||||
def __init__(self, base_dir, base_url=None, **kwargs):
|
def __init__(self, base_dir, base_url=None, **kwargs):
|
||||||
"""
|
"""
|
||||||
Keyword arguments:
|
Keyword arguments:
|
||||||
@ -177,6 +193,9 @@ class BasicFileStorage(StorageInterface):
|
|||||||
self.base_url,
|
self.base_url,
|
||||||
'/'.join(clean_listy_filepath(filepath)))
|
'/'.join(clean_listy_filepath(filepath)))
|
||||||
|
|
||||||
|
def get_local_path(self, filepath):
|
||||||
|
return self._resolve_filepath(filepath)
|
||||||
|
|
||||||
|
|
||||||
###########
|
###########
|
||||||
# Utilities
|
# Utilities
|
||||||
@ -187,7 +206,7 @@ def clean_listy_filepath(listy_filepath):
|
|||||||
Take a listy filepath (like ['dir1', 'dir2', 'filename.jpg']) and
|
Take a listy filepath (like ['dir1', 'dir2', 'filename.jpg']) and
|
||||||
clean out any nastiness from it.
|
clean out any nastiness from it.
|
||||||
|
|
||||||
For example:
|
|
||||||
>>> clean_listy_filepath([u'/dir1/', u'foo/../nasty', u'linooks.jpg'])
|
>>> clean_listy_filepath([u'/dir1/', u'foo/../nasty', u'linooks.jpg'])
|
||||||
[u'dir1', u'foo_.._nasty', u'linooks.jpg']
|
[u'dir1', u'foo_.._nasty', u'linooks.jpg']
|
||||||
|
|
||||||
|
@ -214,3 +214,20 @@ def test_basic_storage_url_for_file():
|
|||||||
['dir1', 'dir2', 'filename.txt'])
|
['dir1', 'dir2', 'filename.txt'])
|
||||||
expected = 'http://media.example.org/ourmedia/dir1/dir2/filename.txt'
|
expected = 'http://media.example.org/ourmedia/dir1/dir2/filename.txt'
|
||||||
assert result == expected
|
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
|
||||||
|
Loading…
x
Reference in New Issue
Block a user