# -*- coding: utf-8 -*-
"""
Custom exceptions used by PyScaffold to identify common deviations from the
expected behavior.
"""
[docs]class ActionNotFound(KeyError):
"""Impossible to find the required action."""
def __init__(self, name, *args, **kwargs):
message = ActionNotFound.__doc__[:-1] + ": `{}`".format(name)
super().__init__(message, *args, **kwargs)
[docs]class DirectoryAlreadyExists(RuntimeError):
"""The project directory already exists, but no ``update`` or ``force``
option was used.
"""
[docs]class DirectoryDoesNotExist(RuntimeError):
"""No directory was found to be updated."""
[docs]class GitNotInstalled(RuntimeError):
"""PyScaffold requires git to run."""
DEFAULT_MESSAGE = "Make sure git is installed and working."
def __init__(self, message=DEFAULT_MESSAGE, *args, **kwargs):
super().__init__(message, *args, **kwargs)
[docs]class GitDirtyWorkspace(RuntimeError):
"""Workspace of git is empty."""
DEFAULT_MESSAGE = (
"Your working tree is dirty. Commit your changes first" " or use '--force'."
)
def __init__(self, message=DEFAULT_MESSAGE, *args, **kwargs):
super().__init__(message, *args, **kwargs)
[docs]class InvalidIdentifier(RuntimeError):
"""Python requires a specific format for its identifiers.
https://docs.python.org/3.6/reference/lexical_analysis.html#identifiers
"""
[docs]class PyScaffoldTooOld(RuntimeError):
"""PyScaffold cannot update a pre 3.0 version"""
DEFAULT_MESSAGE = (
"setup.cfg has no section [pyscaffold]! "
"Are you trying to update a pre 3.0 version?"
)
def __init__(self, message=DEFAULT_MESSAGE, *args, **kwargs):
super().__init__(message, *args, **kwargs)
[docs]class NoPyScaffoldProject(RuntimeError):
"""PyScaffold cannot update a project that it hasn't generated"""
DEFAULT_MESSAGE = "Could not update project. Was it generated with PyScaffold?"
def __init__(self, message=DEFAULT_MESSAGE, *args, **kwargs):
super().__init__(message, *args, **kwargs)
[docs]class ShellCommandException(RuntimeError):
"""Outputs proper logging when a ShellCommand fails"""
def __init__(self, message, *args, **kwargs):
super().__init__(message, *args, **kwargs)