Extract Location into separate file

This commit is contained in:
Joscha 2020-04-23 17:38:28 +00:00
parent f3f4be2690
commit 5ef5a56e69
5 changed files with 41 additions and 38 deletions

37
PFERD/location.py Normal file
View File

@ -0,0 +1,37 @@
from pathlib import Path, PurePath
class ResolveException(Exception):
"""An exception while resolving a file."""
# TODO take care of this when doing exception handling
class Location:
"""
An object that has an inherent path.
"""
def __init__(self, path: Path):
self._path = path.resolve()
@property
def path(self) -> Path:
"""
This object's location.
"""
return self._path
def resolve(self, target: PurePath) -> Path:
"""
Resolve a file relative to the path of this location.
Raises a [ResolveException] if the file is outside the given directory.
"""
absolute_path = self.path.joinpath(target).resolve()
# TODO Make this less inefficient
if self.path not in absolute_path.parents:
raise ResolveException(f"Path {target} is not inside directory {self.path}")
return absolute_path

View File

@ -9,7 +9,8 @@ import shutil
from pathlib import Path
from typing import List, Set
from .utils import Location, PrettyLogger, prompt_yes_no
from .location import Location
from .utils import PrettyLogger, prompt_yes_no
LOGGER = logging.getLogger(__name__)
PRETTY = PrettyLogger(LOGGER)

View File

@ -5,10 +5,10 @@ from .cookie_jar import CookieJar
from .ilias import (IliasAuthenticator, IliasCrawler, IliasDirectoryFilter,
IliasDownloader, KitShibbolethAuthenticator)
from .ilias.download_strategies import DownloadStrategy, download_everything
from .location import Location
from .organizer import Organizer
from .tmp_dir import TmpDir
from .transform import Transform, apply_transform
from .utils import Location
# TODO save known-good cookies as soon as possible
# TODO print synchronizer name before beginning synchronization

View File

@ -6,7 +6,7 @@ from pathlib import Path
from types import TracebackType
from typing import Optional, Type
from .utils import Location
from .location import Location
LOGGER = logging.getLogger(__name__)

View File

@ -78,41 +78,6 @@ def prompt_yes_no(question: str, default: Optional[bool] = None) -> bool:
print(wrong_reply)
class ResolveException(Exception):
"""An exception while resolving a file."""
class Location:
"""
An object that has an inherent path.
"""
def __init__(self, path: Path):
self._path = path.resolve()
@property
def path(self) -> Path:
"""
This object's location.
"""
return self._path
def resolve(self, target: Path) -> Path:
"""
Resolve a file relative to the path of this location.
Raises a [ResolveException] if the file is outside the given directory.
"""
absolute_path = self.path.joinpath(target).resolve()
# TODO Make this less inefficient
if self.path not in absolute_path.parents:
raise ResolveException(f"Path {target} is not inside directory {self.path}")
return absolute_path
class PrettyLogger:
"""
A logger that prints some specially formatted log messages in color.