feat: add administrative commands to free up storage space by removing unused files (#18835)
This commit is contained in:
@@ -30,3 +30,11 @@ class BaseStorage(ABC):
|
||||
@abstractmethod
|
||||
def delete(self, filename):
|
||||
raise NotImplementedError
|
||||
|
||||
def scan(self, path, files=True, directories=False) -> list[str]:
|
||||
"""
|
||||
Scan files and directories in the given path.
|
||||
This method is implemented only in some storage backends.
|
||||
If a storage backend doesn't support scanning, it will raise NotImplementedError.
|
||||
"""
|
||||
raise NotImplementedError("This storage backend doesn't support scanning")
|
||||
|
@@ -80,3 +80,20 @@ class OpenDALStorage(BaseStorage):
|
||||
logger.debug(f"file {filename} deleted")
|
||||
return
|
||||
logger.debug(f"file {filename} not found, skip delete")
|
||||
|
||||
def scan(self, path: str, files: bool = True, directories: bool = False) -> list[str]:
|
||||
if not self.exists(path):
|
||||
raise FileNotFoundError("Path not found")
|
||||
|
||||
all_files = self.op.scan(path=path)
|
||||
if files and directories:
|
||||
logger.debug(f"files and directories on {path} scanned")
|
||||
return [f.path for f in all_files]
|
||||
if files:
|
||||
logger.debug(f"files on {path} scanned")
|
||||
return [f.path for f in all_files if not f.path.endswith("/")]
|
||||
elif directories:
|
||||
logger.debug(f"directories on {path} scanned")
|
||||
return [f.path for f in all_files if f.path.endswith("/")]
|
||||
else:
|
||||
raise ValueError("At least one of files or directories must be True")
|
||||
|
Reference in New Issue
Block a user