From 75c774aed908595b1c83a1a05ead260ce0cad5ed Mon Sep 17 00:00:00 2001 From: Ryan Reed Date: Wed, 29 Jun 2022 18:40:17 -0400 Subject: [PATCH] Moving exceptions and creating TransposeError --- transpose/exceptions.py | 2 ++ transpose/transpose.py | 78 ++++++++--------------------------------- transpose/utils.py | 44 ++++++++++------------- 3 files changed, 35 insertions(+), 89 deletions(-) create mode 100644 transpose/exceptions.py diff --git a/transpose/exceptions.py b/transpose/exceptions.py new file mode 100644 index 0000000..0fe2fbc --- /dev/null +++ b/transpose/exceptions.py @@ -0,0 +1,2 @@ +class TransposeError(Exception): + pass diff --git a/transpose/transpose.py b/transpose/transpose.py index 11410e7..bf9ebd3 100644 --- a/transpose/transpose.py +++ b/transpose/transpose.py @@ -1,5 +1,6 @@ from pathlib import Path, PurePath +from .exceptions import TransposeError from .utils import check_path, create_cache, get_cache, move, remove, symlink @@ -26,53 +27,28 @@ class Transpose: a. Remove if true 4. Verify `original_path` doesn't exist 5. Move `target_path` to `original_path` based on cache file settings - - Args: - None - - Returns: - None - - Raises: - ValueError: Any paths not existing - RuntimeError: Any error during the actual path changes """ if not self.cache_path.exists(): - raise ValueError( + raise TransposeError( f"Cache file does not exist indicating target is not managed by Transpose: {self.cache_path}" ) if not self.target_path.exists(): - raise ValueError(f"Target path does not exist: {self.target_path}") + raise TransposeError(f"Target path does not exist: {self.target_path}") cache = get_cache(self.cache_path) original_path = Path(cache["original_path"]) if original_path.is_symlink(): - try: - remove(original_path) - except: # noqa: E722 # TODO - raise RuntimeError( - f"Failed to remove symlink in original path: {original_path}" - ) + remove(original_path) elif original_path.exists(): - raise ValueError( + raise TransposeError( f"Original path in cache file already exists: {original_path}" ) - try: - move(source=self.target_path, destination=original_path) - except: # noqa: E722 # TODO - raise RuntimeError( - f"Failed to move target to original location: {self.target_path} -> {original_path}" - ) + move(source=self.target_path, destination=original_path) new_cache_path = Path(PurePath(original_path, self.cache_filename)) - try: - remove(new_cache_path) - except: # noqa: E722 # TODO - raise RuntimeError( - f"Failed to remove previous cache file: {new_cache_path}" - ) + remove(new_cache_path) def store(self, name: str) -> None: """ @@ -84,46 +60,22 @@ class Transpose: 3. Create the cache file 4. Move the `target_path` to `store_path/name` 5. Create symlink `target_path` -> `store_path/name` - - Args: - name: The directory name to give the new location - - Returns: - None - - Raises - ValueError: Any paths not existing - RuntimeError: Any error during the actual path changes """ new_location = Path(PurePath(self.store_path, name)) if not check_path(path=self.target_path): - raise ValueError( + raise TransposeError( f"Target path, {self.target_path}, does not exist. Cannot continue." ) if check_path(path=new_location): - raise ValueError( + raise TransposeError( f"Store path, {new_location}, already exists. Cannot continue." ) - try: - create_cache( - cache_path=self.cache_path, - original_path=self.target_path, - ) - except: # noqa: E722 # TODO - raise RuntimeError("Failed to create cache file: {self.cache_path}") - - try: - move(source=self.target_path, destination=new_location) - except: # noqa: E722 # TODO - raise RuntimeError( - f"Failed to move target to store path: {self.target_path} -> {self.new_location}" - ) + create_cache( + cache_path=self.cache_path, + original_path=self.target_path, + ) - try: - symlink(target_path=new_location, symlink_path=self.target_path) - except: # noqa: E722 # TODO - raise RuntimeError( - f"Failed to symlink store path to target: {new_location} -> {self.target_path}" - ) + move(source=self.target_path, destination=new_location) + symlink(target_path=new_location, symlink_path=self.target_path) diff --git a/transpose/utils.py b/transpose/utils.py index 6109512..78e168f 100644 --- a/transpose/utils.py +++ b/transpose/utils.py @@ -4,6 +4,7 @@ from typing import Dict import json from . import version +from .exceptions import TransposeError def check_path(path: Path, is_symlink: bool = False) -> bool: @@ -61,42 +62,33 @@ def get_cache(cache_path: Path) -> Dict: def move(source: Path, destination: Path) -> None: """ Move a file using pathlib - - Args: - source: Path to original source of the file/directory - destination: Path to new destination - - Returns: - None """ - source.rename(destination) + try: + source.rename(destination) + except FileExistsError: + raise TransposeError(f"Destination already exists: {destination}") def remove(path: Path) -> None: """ Remove a file or symlink - - Does not support directories as a precaution and lack of need - - Args: - path: Path to the file or symlink - - Returns: - None """ - if path.is_symlink() or path.is_file(): + if not path.is_symlink() and not path.is_file(): + return + + try: path.unlink() + except FileNotFoundError: + raise TransposeError(f"Could not locate file or symlink: {path}") def symlink(target_path: Path, symlink_path: Path) -> None: """ - Symlinks a file or directory - - Args: - target_path: Path to the target that is being symlinked to - symlink_path: Path to the symlink - - Returns: - None + Symlink a file or directory """ - symlink_path.symlink_to(target_path) + try: + symlink_path.symlink_to(target_path) + except FileNotFoundError: + raise TransposeError( + f"Could not create symlink: {symlink_path} -> {target_path}" + )