feat: introduce scan method to storage interface

pull/18835/head
kurokobo 1 year ago
parent f6305858a5
commit b651770148

@ -102,6 +102,9 @@ class Storage:
def delete(self, filename):
return self.storage_runner.delete(filename)
def scan(self, path: str, files: bool = True, directories: bool = False) -> list[str]:
return self.storage_runner.scan(path, files=files, directories=directories)
storage = Storage()

@ -30,3 +30,7 @@ class BaseStorage(ABC):
@abstractmethod
def delete(self, filename):
raise NotImplementedError
@abstractmethod
def scan(self, path, files, directories) -> list[str]:
raise NotImplementedError

@ -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")

Loading…
Cancel
Save