from __future__ import annotations import subprocess import types class BuildException(Exception): """ Exception raised by :class:`build.ProjectBuilder`. """ class BuildBackendException(Exception): """ Exception raised when a backend operation fails. """ def __init__( self, exception: Exception, description: str | None = None, exc_info: tuple[type[BaseException], BaseException, types.TracebackType] | tuple[None, None, None] = ( None, None, None, ), ) -> None: super().__init__() self.exception = exception self.exc_info = exc_info self._description = description def __str__(self) -> str: if self._description: return self._description return f'Backend operation failed: {self.exception!r}' class BuildSystemTableValidationError(BuildException): """ Exception raised when the ``[build-system]`` table in pyproject.toml is invalid. """ def __str__(self) -> str: return f'Failed to validate `build-system` in pyproject.toml: {self.args[0]}' class FailedProcessError(Exception): """ Exception raised when a setup or preparation operation fails. """ def __init__(self, exception: subprocess.CalledProcessError, description: str) -> None: super().__init__() self.exception = exception self._description = description def __str__(self) -> str: return self._description class TypoWarning(Warning): """ Warning raised when a possible typo is found. """