mirror of
https://github.com/Garmelon/PFERD.git
synced 2023-12-21 10:23:01 +01:00
42 lines
1013 B
Python
42 lines
1013 B
Python
"""
|
|
Contains a Location class for objects with an inherent path.
|
|
"""
|
|
|
|
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
|