"""
Module for custom resistics errors
"""
from typing import Collection, Optional, List, Union
from pathlib import Path
###
# general errors
###
[docs]class PathError(Exception):
"""Use for a general error with paths"""
def __init__(self, path: Path):
self.path = path
def __str__(self) -> str:
return f"Error with path {self.path}"
[docs]class PathNotFoundError(PathError):
"""Use if path does not exist"""
def __str__(self) -> str:
return f"Path {self.path} does not exist"
[docs]class NotFileError(PathError):
"""Use if expected a file and got a directory"""
def __str__(self) -> str:
return f"Path {self.path} is not a file"
[docs]class NotDirectoryError(PathError):
"""Use if expected a directory and got a file"""
def __str__(self) -> str:
return f"Path {self.path} is not a directory"
[docs]class WriteError(Exception):
def __init__(self, path: Path, message: str = ""):
self.path = path
self.message = message
def __str__(self) -> str:
return f"Error with path {self.path}. {self.message}."
[docs]class ReadError(Exception):
def __init__(self, path: Path, message: str = ""):
self.path = path
self.message = message
def __str__(self) -> str:
return f"Unable to read from {self.path}. {self.message}."
###
# metadata data errors
###
###
# project and site errors
###
[docs]class ProjectPathError(Exception):
"""Use for a general error with a project path"""
def __init__(self, project_dir: Path, message: str):
self.project_dir = project_dir
self.message = message
def __str__(self):
return f"{self.project_dir}, {self.message}"
[docs]class ProjectCreateError(ProjectPathError):
"""Use if encounter an error creating a project"""
def __str__(self) -> str:
return f"Error creating project in {self.project_dir}. {self.message}."
[docs]class ProjectLoadError(ProjectPathError):
"""Use if error on project load"""
def __str__(self) -> str:
return f"Error loading project {self.project_dir}. {self.message}."
[docs]class MeasurementNotFoundError(Exception):
"""Use if unable to find a measurement"""
def __init__(self, site_name: str, meas_name: str):
self.site_name = site_name
self.meas_name = meas_name
def __str__(self) -> str:
return f"Measurement {self.meas_name} not found in Site {self.site_name}"
[docs]class SiteNotFoundError(Exception):
"""Use if unable to find a site"""
def __init__(self, site_name: str):
self.site_name = site_name
def __str__(self) -> str:
return f"Site {self.site_name} not found in project"
###
# time data errors
###
[docs]class TimeDataReadError(Exception):
"""Use when encounter an error reading time series data"""
def __init__(self, dir_path: Path, message: str):
self.dir_path = dir_path
self.message = message
def __str__(self) -> str:
return f"Failed to read time series data from {self.dir_path}\n{self.message}"
[docs]class ChannelNotFoundError(Exception):
"""Use when a channel is not found"""
def __init__(self, chan: str, chans: Collection[str]):
self.chan = chan
self.chans = chans
def __str__(self) -> str:
chans_string = "', '".join(self.chans)
return f"'{self.chan}' not found in channels '{chans_string}'"
###
# calibration data errors
###
[docs]class CalibrationFileNotFound(Exception):
"""Use when calibration files are not found"""
def __init__(
self, dir_path: Path, file_paths: Union[Path, List[Path]], message: str = ""
):
self.dir_path = dir_path
self.file_paths = file_paths
self.message = message
def __str__(self) -> str:
outstr = f"Failed to find calibration files {self.file_paths}"
outstr += f" in calibration data folder {self.dir_path}."
if self.message != "":
outstr += f" {self.message}"
return outstr
[docs]class CalibrationFileReadError(Exception):
"""Use if encounter an error reading a calibration file"""
def __init__(self, calibration_path: Path, message: str = ""):
self.calibration_path = calibration_path
self.message = message
def __str__(self) -> str:
outstr = f"Failed to read calibration file {self.calibration_path}."
if self.message != "":
outstr += f" {self.message}"
return outstr
###
# for running processes
###
[docs]class ProcessRunError(Exception):
"""Use when a error is encountered during a process run"""
def __init__(self, process: str, message: str):
self.process = process
self.message = message
def __str__(self) -> str:
return f"Run error encounted in {self.process}. {self.message}."