Adding a copy_locally() method to the StorageInterface and giving it a test.
This commit is contained in:
parent
3a89c23e7f
commit
6a07362dd0
@ -16,6 +16,7 @@
|
|||||||
|
|
||||||
import os
|
import os
|
||||||
import re
|
import re
|
||||||
|
import shutil
|
||||||
import urlparse
|
import urlparse
|
||||||
import uuid
|
import uuid
|
||||||
|
|
||||||
@ -141,6 +142,24 @@ class StorageInterface(object):
|
|||||||
# Subclasses should override this method, if applicable.
|
# Subclasses should override this method, if applicable.
|
||||||
self.__raise_not_implemented()
|
self.__raise_not_implemented()
|
||||||
|
|
||||||
|
def copy_locally(self, filepath, dest_path):
|
||||||
|
"""
|
||||||
|
Copy this file locally.
|
||||||
|
|
||||||
|
A basic working method for this is provided that should
|
||||||
|
function both for local_storage systems and remote storge
|
||||||
|
systems, but if more efficient systems for copying locally
|
||||||
|
apply to your system, override this method with something more
|
||||||
|
appropriate.
|
||||||
|
"""
|
||||||
|
if self.local_storage:
|
||||||
|
shutil.copy(
|
||||||
|
self.get_local_path(filepath), dest_path)
|
||||||
|
else:
|
||||||
|
with self.get_file(filepath, 'rb') as source_file:
|
||||||
|
with file(dest_path, 'wb') as dest_file:
|
||||||
|
dest_file.write(source_file.read())
|
||||||
|
|
||||||
|
|
||||||
class BasicFileStorage(StorageInterface):
|
class BasicFileStorage(StorageInterface):
|
||||||
"""
|
"""
|
||||||
@ -272,3 +291,5 @@ def storage_system_from_paste_config(paste_config, storage_prefix):
|
|||||||
|
|
||||||
storage_class = util.import_component(storage_class)
|
storage_class = util.import_component(storage_class)
|
||||||
return storage_class(**config_params)
|
return storage_class(**config_params)
|
||||||
|
|
||||||
|
|
||||||
|
@ -231,3 +231,19 @@ def test_basic_storage_get_local_path():
|
|||||||
def test_basic_storage_is_local():
|
def test_basic_storage_is_local():
|
||||||
tmpdir, this_storage = get_tmp_filestorage()
|
tmpdir, this_storage = get_tmp_filestorage()
|
||||||
assert this_storage.local_storage is True
|
assert this_storage.local_storage is True
|
||||||
|
|
||||||
|
|
||||||
|
def test_basic_storage_copy_locally():
|
||||||
|
tmpdir, this_storage = get_tmp_filestorage()
|
||||||
|
|
||||||
|
dest_tmpdir = tempfile.mkdtemp()
|
||||||
|
|
||||||
|
filepath = ['dir1', 'dir2', 'ourfile.txt']
|
||||||
|
with this_storage.get_file(filepath, 'w') as our_file:
|
||||||
|
our_file.write('Testing this file')
|
||||||
|
|
||||||
|
new_file_dest = os.path.join(dest_tmpdir, 'file2.txt')
|
||||||
|
|
||||||
|
this_storage.copy_locally(filepath, new_file_dest)
|
||||||
|
|
||||||
|
assert file(new_file_dest).read() == 'Testing this file'
|
||||||
|
Loading…
x
Reference in New Issue
Block a user