mirror of
https://github.com/Garmelon/PFERD.git
synced 2023-12-21 10:23:01 +01:00
Extract Location into separate file
This commit is contained in:
parent
f3f4be2690
commit
5ef5a56e69
37
PFERD/location.py
Normal file
37
PFERD/location.py
Normal 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
|
@ -9,7 +9,8 @@ import shutil
|
|||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from typing import List, Set
|
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__)
|
LOGGER = logging.getLogger(__name__)
|
||||||
PRETTY = PrettyLogger(LOGGER)
|
PRETTY = PrettyLogger(LOGGER)
|
||||||
|
@ -5,10 +5,10 @@ from .cookie_jar import CookieJar
|
|||||||
from .ilias import (IliasAuthenticator, IliasCrawler, IliasDirectoryFilter,
|
from .ilias import (IliasAuthenticator, IliasCrawler, IliasDirectoryFilter,
|
||||||
IliasDownloader, KitShibbolethAuthenticator)
|
IliasDownloader, KitShibbolethAuthenticator)
|
||||||
from .ilias.download_strategies import DownloadStrategy, download_everything
|
from .ilias.download_strategies import DownloadStrategy, download_everything
|
||||||
|
from .location import Location
|
||||||
from .organizer import Organizer
|
from .organizer import Organizer
|
||||||
from .tmp_dir import TmpDir
|
from .tmp_dir import TmpDir
|
||||||
from .transform import Transform, apply_transform
|
from .transform import Transform, apply_transform
|
||||||
from .utils import Location
|
|
||||||
|
|
||||||
# TODO save known-good cookies as soon as possible
|
# TODO save known-good cookies as soon as possible
|
||||||
# TODO print synchronizer name before beginning synchronization
|
# TODO print synchronizer name before beginning synchronization
|
||||||
|
@ -6,7 +6,7 @@ from pathlib import Path
|
|||||||
from types import TracebackType
|
from types import TracebackType
|
||||||
from typing import Optional, Type
|
from typing import Optional, Type
|
||||||
|
|
||||||
from .utils import Location
|
from .location import Location
|
||||||
|
|
||||||
LOGGER = logging.getLogger(__name__)
|
LOGGER = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
@ -78,41 +78,6 @@ def prompt_yes_no(question: str, default: Optional[bool] = None) -> bool:
|
|||||||
print(wrong_reply)
|
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:
|
class PrettyLogger:
|
||||||
"""
|
"""
|
||||||
A logger that prints some specially formatted log messages in color.
|
A logger that prints some specially formatted log messages in color.
|
||||||
|
Loading…
Reference in New Issue
Block a user