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 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() 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(