Implement delete_dir in the FileStorage
plus options for deleting only empty directories and deleting them recursively. Not sure how cloudfile storage is or should be handled here. Are things such as a "directory" even a concept there?
This commit is contained in:
parent
79f7cfd900
commit
b34d7e1d9b
@ -101,14 +101,28 @@ class StorageInterface(object):
|
||||
|
||||
def delete_file(self, filepath):
|
||||
"""
|
||||
Delete or dereference the file at filepath.
|
||||
Delete or dereference the file (not directory) at filepath.
|
||||
|
||||
TODO: is the below comment correct? AFAIK, we won't clean up empty directories...
|
||||
This might need to delete directories, buckets, whatever, for
|
||||
cleanliness. (Be sure to avoid race conditions on that though)
|
||||
"""
|
||||
# Subclasses should override this method.
|
||||
self.__raise_not_implemented()
|
||||
|
||||
def delete_dir(self, dirpath, recursive=False):
|
||||
"""Delete the directory at dirpath
|
||||
|
||||
:param recursive: Usually, a directory must not contain any
|
||||
files for the delete to succeed. If True, containing files
|
||||
and subdirectories within dirpath will be recursively
|
||||
deleted.
|
||||
|
||||
:returns: True in case of success, False otherwise.
|
||||
"""
|
||||
# Subclasses should override this method.
|
||||
self.__raise_not_implemented()
|
||||
|
||||
def file_url(self, filepath):
|
||||
"""
|
||||
Get the URL for this file. This assumes our storage has been
|
||||
|
@ -62,10 +62,32 @@ class BasicFileStorage(StorageInterface):
|
||||
return open(self._resolve_filepath(filepath), mode)
|
||||
|
||||
def delete_file(self, filepath):
|
||||
# TODO: Also delete unused directories if empty (safely, with
|
||||
# checks to avoid race conditions).
|
||||
"""Delete file at filepath
|
||||
|
||||
Raises OSError in case filepath is a directory."""
|
||||
#TODO: log error
|
||||
os.remove(self._resolve_filepath(filepath))
|
||||
|
||||
def delete_dir(self, dirpath, recursive=False):
|
||||
"""returns True on succes, False on failure"""
|
||||
|
||||
dirpath = self._resolve_filepath(dirpath)
|
||||
|
||||
# Shortcut the default and simple case of nonempty=F, recursive=F
|
||||
if recursive:
|
||||
try:
|
||||
shutil.rmtree(dirpath)
|
||||
except OSError as e:
|
||||
#TODO: log something here
|
||||
return False
|
||||
else: # recursively delete everything
|
||||
try:
|
||||
os.rmdir(dirpath)
|
||||
except OSError as e:
|
||||
#TODO: log something here
|
||||
return False
|
||||
return True
|
||||
|
||||
def file_url(self, filepath):
|
||||
if not self.base_url:
|
||||
raise NoWebServing(
|
||||
|
Loading…
x
Reference in New Issue
Block a user