diff --git a/src/osekit/public/project.py b/src/osekit/public/project.py index c60e8680..dddabaad 100644 --- a/src/osekit/public/project.py +++ b/src/osekit/public/project.py @@ -396,10 +396,13 @@ def run( """ if transform.name in self.transforms: message = ( - f"Output {transform.name} already exists. " - f"Please choose a different transform name, " - f"or delete the existing output with the " - f"Project.delete_output() method." + f"A transform with the name {transform.name} has already been run. " + f"Please do either one of the following:" + f"\n\t- Choose a different name for the current transform," + f"\n\t- Rename the previously run transform with the " + f"``Project.rename_transform_with_outputs()`` method," + f"\n\t- Delete the previously run transform with the " + f"``Project.delete_transform_with_outputs()`` method." ) raise ValueError(message) @@ -671,39 +674,46 @@ def get_output_by_transform_name( if dataset_values["transform"] == transform_name ] - def rename_output(self, output_name: str, new_output_name: str) -> None: - """Rename an already ran transform. + def rename_transform_with_outputs( + self, + transform_name: str, + new_transform_name: str, + ) -> None: + """Rename an already run transform. + + All outputs of the transform will be renamed as if the tranform + had been originally ran with the ``new_transform_name`` name. Parameters ---------- - output_name: str + transform_name: str Name of the transform to rename. - new_output_name: str + new_transform_name: str New name of the transform to rename. """ - if output_name == new_output_name: + if transform_name == new_transform_name: return - if output_name == "original": + if transform_name == "original": msg = "You can't rename the original dataset." raise ValueError(msg) - if output_name not in self.outputs: - msg = f"Unknown output {output_name}." + if transform_name not in self.outputs: + msg = f"Unknown output {transform_name}." raise ValueError(msg) - if new_output_name in self.outputs: - msg = f"{new_output_name} already exists." + if new_transform_name in self.outputs: + msg = f"{new_transform_name} already exists." raise ValueError(msg) keys_to_rename = {} for output_dataset in self.outputs.values(): - if output_dataset["transform"] == output_name: - output_dataset["transform"] = new_output_name + if output_dataset["transform"] == transform_name: + output_dataset["transform"] = new_transform_name ds = output_dataset["dataset"] old_name, new_name = ( ds.name, - new_output_name + (f"_{ds.suffix}" if ds.suffix else ""), + new_transform_name + (f"_{ds.suffix}" if ds.suffix else ""), ) - ds.base_name = new_output_name + ds.base_name = new_transform_name old_folder = ds.folder new_folder = ds.folder.parent / new_name keys_to_rename[old_name] = new_name @@ -722,20 +732,20 @@ def rename_output(self, output_name: str, new_output_name: str) -> None: self.write_json() - def delete_output(self, output_name: str) -> None: - """Delete all output datasets from a given ran transform name. + def delete_transform_with_outputs(self, transform_name: str) -> None: + """Delete all output datasets from a given run transform name. WARNING: all the output files will be deleted. Parameters ---------- - output_name: str + transform_name: str Name of the transform whose output to delete. """ for dataset_to_delete in self.get_output_by_transform_name( - output_name, + transform_name, ): self._delete_output(dataset_to_delete.name) diff --git a/tests/test_public_api.py b/tests/test_public_api.py index 6f6e99f3..9f442db2 100644 --- a/tests/test_public_api.py +++ b/tests/test_public_api.py @@ -1364,7 +1364,7 @@ def test_delete_output( assert all(ds.folder.exists() for ds in (datasets_to_keep + datasets_to_delete)) - project.delete_output(transform_to_delete.name) + project.delete_transform_with_outputs(transform_to_delete.name) assert transform_to_keep.name in project.transforms assert transform_to_delete.name not in project.transforms @@ -1406,7 +1406,10 @@ def test_existing_output_warning( ), ) - with pytest.raises(ValueError, match="my_transform already exists"): + with pytest.raises( + ValueError, + match="A transform with the name my_transform has already been run", + ): project.run( Transform( output_type=OutputType.SPECTROGRAM, @@ -1417,7 +1420,7 @@ def test_existing_output_warning( ), ) - project.delete_output("my_transform") + project.delete_transform_with_outputs("my_transform") project.run( Transform( @@ -1455,7 +1458,7 @@ def test_rename_transform( names = (first_name, second_name, second_name) # Tests both renaming and same name for old, new in itertools.pairwise(names): - project.rename_output(old, new) + project.rename_transform_with_outputs(old, new) if old != new: assert old not in project.transforms @@ -1482,23 +1485,23 @@ def test_rename_transform( # RENAME ERRORS with pytest.raises(ValueError, match=r"You can't rename the original dataset."): - project.rename_output( - output_name="original", - new_output_name="vampire", + project.rename_transform_with_outputs( + transform_name="original", + new_transform_name="vampire", ) with pytest.raises(ValueError, match=r"original already exists."): - project.rename_output( - output_name=second_name, - new_output_name="original", + project.rename_transform_with_outputs( + transform_name=second_name, + new_transform_name="original", ) unknown_name = "white" target_name = "sky" with pytest.raises(ValueError, match=f"Unknown output {unknown_name}."): - project.rename_output( - output_name=unknown_name, - new_output_name=target_name, + project.rename_transform_with_outputs( + transform_name=unknown_name, + new_transform_name=target_name, )