diff options
Diffstat (limited to 'nova/exception.py')
-rw-r--r-- | nova/exception.py | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/nova/exception.py b/nova/exception.py new file mode 100644 index 0000000000..dc7b16cdbb --- /dev/null +++ b/nova/exception.py @@ -0,0 +1,53 @@ +# vim: tabstop=4 shiftwidth=4 softtabstop=4 +# Copyright [2010] [Anso Labs, LLC] +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +""" +Nova base exception handling, including decorator for re-raising +Nova-type exceptions. SHOULD include dedicated exception logging. +""" + +import logging +import traceback +import sys + +class Error(Exception): + pass + +class ApiError(Error): + def __init__(self, message='Unknown', code='Unknown'): + self.message = message + self.code = code + +class NotFound(Error): + pass + +class NotAuthorized(Error): + pass + +def wrap_exception(f): + def _wrap(*args, **kw): + try: + return f(*args, **kw) + except Exception, e: + if not isinstance(e, Error): + # exc_type, exc_value, exc_traceback = sys.exc_info() + logging.exception('Uncaught exception') + # logging.debug(traceback.extract_stack(exc_traceback)) + raise Error(str(e)) + raise + _wrap.func_name = f.func_name + return _wrap + + |