class TripleoCommonException(Exception): """Base Tripleo-Common Exception. To correctly use this class, inherit from it and define a 'msg_fmt' property. That msg_fmt will get printf'd with the keyword arguments provided to the constructor. """ message = _("An unknown exception occurred.") def __init__(self, **kwargs): self.kwargs = kwargs try: self.message = self.msg_fmt % kwargs except KeyError: exc_info = sys.exc_info() # kwargs doesn't match a variable in the message # log the issue and the kwargs LOG.exception('Exception in string format operation') for name, value in kwargs.items(): LOG.error("%(name)s: %(value)s", { 'name': name, 'value': value }) # noqa if _FATAL_EXCEPTION_FORMAT_ERRORS: raise_(exc_info[0], exc_info[1], exc_info[2]) def __str__(self): return self.message def __deepcopy__(self, memo): return self.__class__(**self.kwargs)
class StackInUseError(TripleoCommonException): msg_fmt = _("Cannot delete a plan that has an associated stack.")
class HeatValidationFailedError(TripleoCommonException): msg_fmt = _("The plan failed to validate via the Heat service. %(msg)s")
class ContainerAlreadyExistsError(TripleoCommonException): msg_fmt = _("A container with the name %(name)s already exists.")