From 91af4bd17cee5b1bc22f9475c8090737bbeeb745 Mon Sep 17 00:00:00 2001 From: Gautzilla Date: Fri, 10 Apr 2026 12:23:49 +0200 Subject: [PATCH 1/4] add (failing) file structure test in rename_transform() test --- tests/test_public_api.py | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/tests/test_public_api.py b/tests/test_public_api.py index 24be008f..016bf68f 100644 --- a/tests/test_public_api.py +++ b/tests/test_public_api.py @@ -1470,6 +1470,13 @@ def test_rename_transform( names = (first_name, second_name, second_name) # Tests both renaming and same name for old, new in itertools.pairwise(names): + files = {} + for dataset in project.get_output_by_transform_name(old): + files |= { + file.path.name: file.path.relative_to(dataset.folder) + for file in dataset.files + } + project.rename_transform_with_outputs(old, new) if old != new: @@ -1495,6 +1502,10 @@ def test_rename_transform( == 2 ) + for dataset in project.get_output_by_transform_name(new): + for file in dataset.files: + assert file.path.relative_to(dataset.folder) == files[file.path.name] + # RENAME ERRORS with pytest.raises(ValueError, match=r"You can't rename the original dataset."): project.rename_transform_with_outputs( From a254fd9536ffad0e8f10746af75b86a764dbf253 Mon Sep 17 00:00:00 2001 From: Gautzilla Date: Fri, 10 Apr 2026 12:42:00 +0200 Subject: [PATCH 2/4] add boolean parameter to allow keeping relative file destination --- src/osekit/core/base_dataset.py | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/osekit/core/base_dataset.py b/src/osekit/core/base_dataset.py index 33a749d4..5c200f34 100644 --- a/src/osekit/core/base_dataset.py +++ b/src/osekit/core/base_dataset.py @@ -151,20 +151,28 @@ def folder(self, folder: Path) -> None: """ self._folder = folder - def move_files(self, folder: Path) -> None: + def move_files(self, folder: Path, *, keep_relative_structure: bool = True) -> None: """Move the dataset files to the destination folder. Parameters ---------- folder: Path Destination folder in which the dataset files will be moved. + keep_relative_structure: bool + If True, the relative path from the dataset to the file will be preserved. + If False, the files will be moved to ``folder`` regardless of their original + relative path to the dataset folder. """ for file in tqdm( self.files, disable=os.getenv("DISABLE_TQDM", "False").lower() in ("true", "1", "t"), ): - file.move(folder) + if not keep_relative_structure: + file.move(folder) + continue + relative_folder = folder / file.path.relative_to(self.folder).parent + file.move(relative_folder) self._folder = folder @property From 5b58bc987f49dfd9146101bf89ba0ba35c8e982b Mon Sep 17 00:00:00 2001 From: Gautzilla Date: Fri, 10 Apr 2026 12:42:25 +0200 Subject: [PATCH 3/4] set new boolean parameter to false in build move_files() calls --- src/osekit/public/project.py | 5 ++++- tests/test_core_api_base.py | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/osekit/public/project.py b/src/osekit/public/project.py index dddabaad..5eb55798 100644 --- a/src/osekit/public/project.py +++ b/src/osekit/public/project.py @@ -624,7 +624,10 @@ def _sort_dataset(self, dataset: type[DatasetChild]) -> None: self._sort_spectro_dataset(dataset) def _sort_audio_dataset(self, dataset: AudioDataset) -> None: - dataset.move_files(self._get_audio_dataset_subpath(dataset)) + dataset.move_files( + self._get_audio_dataset_subpath(dataset), + keep_relative_structure=False, + ) def _sort_spectro_dataset(self, dataset: SpectroDataset | LTASDataset) -> None: raise NotImplementedError diff --git a/tests/test_core_api_base.py b/tests/test_core_api_base.py index 8a3ba3c4..062b8f24 100644 --- a/tests/test_core_api_base.py +++ b/tests/test_core_api_base.py @@ -825,7 +825,7 @@ def test_dataset_move( # Folder should be changed when dataset is moved new_destination = tmp_path / "new_destination" - dummy_dataset.move_files(new_destination) + dummy_dataset.move_files(new_destination, keep_relative_structure=False) assert new_destination.exists() assert new_destination.is_dir() From 4fe9c4c41fe11281f1a173013e2056dfdbb12317 Mon Sep 17 00:00:00 2001 From: Gautzilla Date: Tue, 12 May 2026 15:35:37 +0200 Subject: [PATCH 4/4] prevent file moving if destination already exists --- src/osekit/utils/path.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/osekit/utils/path.py b/src/osekit/utils/path.py index de14bd82..c02c831f 100644 --- a/src/osekit/utils/path.py +++ b/src/osekit/utils/path.py @@ -40,7 +40,8 @@ def move_tree( continue file_destination = destination / file.parent.relative_to(source) file_destination.mkdir(parents=True, exist_ok=True) - shutil.move(file, file_destination / file.name) + if not (file_destination / file.name).exists(): + shutil.move(file, file_destination) if not any(destination.iterdir()): destination.rmdir()