refactor(Track): Return new path on move(), raise exceptions on errors

This commit is contained in:
rlaphoenix 2024-03-01 04:14:44 +00:00
parent 3ceabd0c74
commit 866de402fb
1 changed files with 12 additions and 9 deletions

View File

@ -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",)