forked from DRMTalks/devine
refactor(Track): Return new path on move(), raise exceptions on errors
This commit is contained in:
parent
3ceabd0c74
commit
866de402fb
|
@ -307,33 +307,36 @@ class Track:
|
||||||
|
|
||||||
self.path = output_path
|
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.
|
Move the Track's file from current location, to target location.
|
||||||
This will overwrite anything at the target path.
|
This will overwrite anything at the target path.
|
||||||
|
|
||||||
Raises:
|
Raises:
|
||||||
TypeError: If the target argument is not the expected type.
|
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
|
Returns the new location of the track.
|
||||||
the file failed to move.
|
|
||||||
"""
|
"""
|
||||||
if not isinstance(target, (str, Path)):
|
if not isinstance(target, (str, Path)):
|
||||||
raise TypeError(f"Expected {target} to be a {Path} or {str}, not {type(target)}")
|
raise TypeError(f"Expected {target} to be a {Path} or {str}, not {type(target)}")
|
||||||
|
|
||||||
if not self.path:
|
if not self.path:
|
||||||
return False
|
raise ValueError("Track has no file to move")
|
||||||
|
|
||||||
if not isinstance(target, Path):
|
if not isinstance(target, Path):
|
||||||
target = Path(target)
|
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))
|
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
|
||||||
self.path = target
|
return target
|
||||||
|
|
||||||
return success
|
|
||||||
|
|
||||||
|
|
||||||
__all__ = ("Track",)
|
__all__ = ("Track",)
|
||||||
|
|
Loading…
Reference in New Issue