Source code for tcutility.errors

"""Module containing errors to distinguish between tcutility-specific errors and general python errors from other packages / scripts."""

from tcutility.log import loadbar

some_list = {"a": 1, "b": 2, "c": 3}
loadbar(some_list)


[docs] class TCError(Exception): """Base class for all errors in the tcutility package.""" pass
[docs] class TCJobError(TCError): """An error that occurs when a job fails to run properly.""" def __init__(self, job_class: str, message: str): self.job_class = job_class self.message = message super().__init__(f"Error in job class {job_class}: {message}")
[docs] class TCMoleculeError(TCError): """An error that occurs when a molecule is not in a valid state.""" pass
# ----------------- # ADF-related errors # -----------------
[docs] class TCCompDetailsError(TCError): """An error that occurs when the computation details are not in a valid state. It expects a section such as a "Functional" or "Basis set" and a message.""" def __init__(self, section: str, message: str): self.section = section self.message = message super().__init__(f"Error in {section}: {message}")
# ----------------- # Package / Dependency installation errors # -----------------
[docs] class MissingOptionalPackageError(TCError): """ Missing optional package related error. This is a template taken from the PLAMS package (https://github.com/SCM-NV/PLAMS/blob/trunk/src/scm/plams/core/errors.py). """ extras_install = { "pandas": "vdd", "attrs": "vdd", "openpyxl": "vdd", "matplotlib": "plot", "scipy": "analysis", "networkx": "analysis", "h5py": "analysis", "docx": "report", "htmldocx": "report", "opencv-python": "report", "pyfmo": "adf", "requests": "cite", } def __init__(self, package_name: str): msg = f"The optional package '{package_name}' is required for this TCutility functionality, but is not available. " if (extras_name := self.extras_install.get(package_name, None)) is not None: msg += f"It can be installed using the command: pip install 'tcutility[{extras_name}]'. " msg += "Please install and try again." super().__init__(msg)