diff --git a/devine/core/tracks/track.py b/devine/core/tracks/track.py index 47fe1e3..17b189c 100644 --- a/devine/core/tracks/track.py +++ b/devine/core/tracks/track.py @@ -307,33 +307,36 @@ class Track: self.path = output_path - def move(self, target: Union[Path, str]) -> bool: + def move(self, target: Union[Path, str]) -> Path: """ Move the Track's file from current location, to target location. This will overwrite anything at the target path. Raises: TypeError: If the target argument is not the expected type. + ValueError: If track has no file to move, or the target does not exist. + OSError: If the file somehow failed to move. - Returns True if the move succeeded, or False if there was no file to move, or - the file failed to move. + Returns the new location of the track. """ if not isinstance(target, (str, Path)): raise TypeError(f"Expected {target} to be a {Path} or {str}, not {type(target)}") if not self.path: - return False + raise ValueError("Track has no file to move") if not isinstance(target, Path): target = Path(target) + if not target.exists(): + raise ValueError(f"Target file {repr(target)} does not exist") + moved_to = Path(shutil.move(self.path, target)) - success = moved_to.resolve() == target.resolve() + if moved_to.resolve() != target.resolve(): + raise OSError(f"Failed to move {self.path} to {target}") - if success: - self.path = target - - return success + self.path = target + return target __all__ = ("Track",)