diff --git a/dashboard/libs/repository/fs_repository.py b/dashboard/libs/repository/fs_repository.py index c74ac51..2d9d78c 100644 --- a/dashboard/libs/repository/fs_repository.py +++ b/dashboard/libs/repository/fs_repository.py @@ -10,55 +10,60 @@ class FSRepository(AbstractRepository): self.name = name self.basepath = Path(basepath) + assert self.basepath.exists() self._metadata_engine = metadata_engine - def ls(self, dir, only_files=False, only_directories=False, recursive=False) -> list[str]: - dirpath = Path(dir) + def ls( + self, dir="", only_files=False, only_directories=False, recursive=False + ) -> list[str]: + dirpath = self.basepath / dir if only_files: - return [str(f.relative_to(dirpath)) for f in dirpath.iterdir() if not f.is_dir()] + return [ + str(f.relative_to(dirpath)) for f in dirpath.iterdir() if not f.is_dir() + ] if only_directories: if recursive: return [str(f[0].relative_to(dirpath)) for f in dirpath.walk()] - return [str(f.relative_to(dirpath)) for f in dirpath.iterdir() if f.is_dir()] + return [ + str(f.relative_to(dirpath)) for f in dirpath.iterdir() if f.is_dir() + ] return [str(f.relative_to(dirpath)) for f in dirpath.iterdir()] def schemas(self, recursive=True) -> list[str]: - dirpath = self.basepath - return self.ls(dirpath, only_directories=True, recursive=True) + return self.ls("", only_directories=True, recursive=True) - def tables(self, schema:str) -> list[str]: - dirpath = self.basepath / schema - return self.ls(dirpath, only_files=True) + def tables(self, schema: str = ".") -> list[str]: + return self.ls(schema, only_files=True) - def build_table_path(self, table:str, schema:str): + def build_table_path(self, table: str, schema: str): table_path = self.basepath - if schema == '.': + if schema == ".": return table_path / table return table_path / schema / table - def info(self, table:str, schema:str='.'): + def infos(self, table: str, schema: str = "."): table_path = self.build_table_path(table, schema) pass - def read(self, table:str, schema:str='.', read_options={}): + def read(self, table: str, schema: str = ".", read_options={}): table_path = self.build_table_path(table, schema) extension = table_path.suffix - if extension == '.csv': + if extension == ".csv": return pd.read_csv(table_path, **read_options) - if extension == '.xlsx': + if extension == ".xlsx": return pd.read_excel(table_path, **read_options) raise ValueError("Can't open the table") - def write(self, content, table:str, schema:str='.'): + def write(self, content, table: str, schema: str = "."): table_path = self.build_table_path(table, schema) pass - def delete(self, table:str, schema:str='.'): + def delete_table(self, table: str, schema: str = "."): table_path = self.build_table_path(table, schema) pass diff --git a/tests/repository/__init__.py b/tests/repository/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/tests/repository/fs_examples/salary.pdf b/tests/repository/fs_examples/salary.pdf new file mode 100644 index 0000000..0cbd711 Binary files /dev/null and b/tests/repository/fs_examples/salary.pdf differ diff --git a/tests/repository/fs_examples/username-password-recovery-code.xlsx b/tests/repository/fs_examples/username-password-recovery-code.xlsx new file mode 100644 index 0000000..1723d5c Binary files /dev/null and b/tests/repository/fs_examples/username-password-recovery-code.xlsx differ diff --git a/tests/repository/fs_examples/username.csv b/tests/repository/fs_examples/username.csv new file mode 100644 index 0000000..006ac8e --- /dev/null +++ b/tests/repository/fs_examples/username.csv @@ -0,0 +1,7 @@ +Username; Identifier;First name;Last name +booker12;9012;Rachel;Booker +grey07;2070;Laura;Grey +johnson81;4081;Craig;Johnson +jenkins46;9346;Mary;Jenkins +smith79;5079;Jamie;Smith + diff --git a/tests/repository/test_fs_repository.py b/tests/repository/test_fs_repository.py new file mode 100644 index 0000000..c005fed --- /dev/null +++ b/tests/repository/test_fs_repository.py @@ -0,0 +1,46 @@ +import shutil +from pathlib import Path + +import pytest + +from dashboard.libs.repository.fs_repository import FSRepository + +EXAMPLE_DIR = "./tests/repository/fs_examples/" + + +@pytest.fixture +def location(tmp_path): + loc = tmp_path + username_loc = loc / "username" + username_loc.mkdir() + salary_loc = loc / "salary" + salary_loc.mkdir() + example_src = Path(EXAMPLE_DIR) + + for f in example_src.glob("*"): + if "username" in str(f): + shutil.copy(f, username_loc) + else: + shutil.copy(f, salary_loc) + + return loc + + +def test_init(location): + repo = FSRepository("example", location) + assert repo.ls() == [ + "username", + "salary", + ] + assert repo.schemas() == [ + ".", + "username", + "salary", + ] + + assert repo.tables() == [] + assert repo.tables("username") == [ + "username.csv", + "username-password-recovery-code.xlsx", + ] + assert repo.tables("salary") == ["salary.pdf"]