diff options
Diffstat (limited to 'yardstick/common/exceptions.py')
-rw-r--r-- | yardstick/common/exceptions.py | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/yardstick/common/exceptions.py b/yardstick/common/exceptions.py index 9c0ec2c19..4780822a4 100644 --- a/yardstick/common/exceptions.py +++ b/yardstick/common/exceptions.py @@ -12,8 +12,48 @@ # See the License for the specific language governing permissions and # limitations under the License. +from oslo_utils import excutils + class ProcessExecutionError(RuntimeError): def __init__(self, message, returncode): super(ProcessExecutionError, self).__init__(message) self.returncode = returncode + + +class YardstickException(Exception): + """Base Yardstick Exception. + + To correctly use this class, inherit from it and define + a 'message' property. That message will get printf'd + with the keyword arguments provided to the constructor. + + Based on NeutronException class. + """ + message = "An unknown exception occurred." + + def __init__(self, **kwargs): + try: + super(YardstickException, self).__init__(self.message % kwargs) + self.msg = self.message % kwargs + except Exception: # pylint: disable=broad-except + with excutils.save_and_reraise_exception() as ctxt: + if not self.use_fatal_exceptions(): + ctxt.reraise = False + # at least get the core message out if something happened + super(YardstickException, self).__init__(self.message) + + def __str__(self): + return self.msg + + def use_fatal_exceptions(self): + """Is the instance using fatal exceptions. + + :returns: Always returns False. + """ + return False + + +class FunctionNotImplemented(YardstickException): + message = ('The function "%(function_name)s" is not implemented in ' + '"%(class_name)" class.') |