From: Zhongyue Luo Date: Thu, 14 Jun 2012 08:09:34 +0000 (+0800) Subject: Use openstack.common.exception X-Git-Url: https://review.fuel-infra.org/gitweb?a=commitdiff_plain;h=0d3cfea2e193a17afbf65c765dabbbb5cf18fa9c;p=openstack-build%2Fneutron-build.git Use openstack.common.exception Fixes bug #1013040 1. Edit openstack-common.conf and import openstack.common.exception 2. Remove redundant code Change-Id: Ia440422e283f8e6796d9a1f720d73b3bcf2f981e --- diff --git a/openstack-common.conf b/openstack-common.conf index d451e1ef9..85566c365 100644 --- a/openstack-common.conf +++ b/openstack-common.conf @@ -1,7 +1,7 @@ [DEFAULT] # The list of modules to copy from openstack-common -modules=cfg,importutils,iniparser,jsonutils,setup +modules=cfg,exception,importutils,iniparser,jsonutils,setup # The base module to hold the copy of openstack.common base=quantum diff --git a/quantum/common/exceptions.py b/quantum/common/exceptions.py index b3fef044c..bcad16e96 100644 --- a/quantum/common/exceptions.py +++ b/quantum/common/exceptions.py @@ -19,11 +19,13 @@ Quantum base exception handling. """ +from quantum.openstack.common.exception import Error +from quantum.openstack.common.exception import OpenstackException -class QuantumException(Exception): + +class QuantumException(OpenstackException): """Base Quantum Exception - Taken from nova.exception.NovaException 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. @@ -31,17 +33,6 @@ class QuantumException(Exception): """ message = _("An unknown exception occurred.") - def __init__(self, **kwargs): - try: - self._error_string = self.message % kwargs - - except Exception: - # at least get the core message out if something happened - self._error_string = self.message - - def __str__(self): - return self._error_string - class NotFound(QuantumException): pass @@ -97,23 +88,6 @@ class AlreadyAttached(QuantumException): "already plugged into port %(att_port_id)s") -class ProcessExecutionError(IOError): - def __init__(self, stdout=None, stderr=None, exit_code=None, cmd=None, - description=None): - if description is None: - description = "Unexpected error while running command." - if exit_code is None: - exit_code = '-' - message = "%s\nCommand: %s\nExit code: %s\nStdout: %r\nStderr: %r" % ( - description, cmd, exit_code, stdout, stderr) - IOError.__init__(self, message) - - -class Error(Exception): - def __init__(self, message=None): - super(Error, self).__init__(message) - - class MalformedRequestBody(QuantumException): message = _("Malformed request body: %(reason)s") diff --git a/quantum/common/utils.py b/quantum/common/utils.py index 931a82c41..f71a41051 100644 --- a/quantum/common/utils.py +++ b/quantum/common/utils.py @@ -31,8 +31,8 @@ import subprocess import sys from quantum.common import exceptions as exception -from quantum.common.exceptions import ProcessExecutionError from quantum.common import flags +from quantum.openstack.common.exception import ProcessExecutionError TIME_FORMAT = "%Y-%m-%dT%H:%M:%SZ" diff --git a/quantum/openstack/common/exception.py b/quantum/openstack/common/exception.py new file mode 100644 index 000000000..ba32da550 --- /dev/null +++ b/quantum/openstack/common/exception.py @@ -0,0 +1,147 @@ +# vim: tabstop=4 shiftwidth=4 softtabstop=4 + +# Copyright 2011 OpenStack LLC. +# All Rights Reserved. +# +# 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. + +""" +Exceptions common to OpenStack projects +""" + +import logging + + +class ProcessExecutionError(IOError): + def __init__(self, stdout=None, stderr=None, exit_code=None, cmd=None, + description=None): + if description is None: + description = "Unexpected error while running command." + if exit_code is None: + exit_code = '-' + message = "%s\nCommand: %s\nExit code: %s\nStdout: %r\nStderr: %r" % ( + description, cmd, exit_code, stdout, stderr) + IOError.__init__(self, message) + + +class Error(Exception): + def __init__(self, message=None): + super(Error, self).__init__(message) + + +class ApiError(Error): + def __init__(self, message='Unknown', code='Unknown'): + self.message = message + self.code = code + super(ApiError, self).__init__('%s: %s' % (code, message)) + + +class NotFound(Error): + pass + + +class UnknownScheme(Error): + + msg = "Unknown scheme '%s' found in URI" + + def __init__(self, scheme): + msg = self.__class__.msg % scheme + super(UnknownScheme, self).__init__(msg) + + +class BadStoreUri(Error): + + msg = "The Store URI %s was malformed. Reason: %s" + + def __init__(self, uri, reason): + msg = self.__class__.msg % (uri, reason) + super(BadStoreUri, self).__init__(msg) + + +class Duplicate(Error): + pass + + +class NotAuthorized(Error): + pass + + +class NotEmpty(Error): + pass + + +class Invalid(Error): + pass + + +class BadInputError(Exception): + """Error resulting from a client sending bad input to a server""" + pass + + +class MissingArgumentError(Error): + pass + + +class DatabaseMigrationError(Error): + pass + + +class ClientConnectionError(Exception): + """Error resulting from a client connecting to a server""" + 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.error(traceback.extract_stack(exc_traceback)) + raise Error(str(e)) + raise + _wrap.func_name = f.func_name + return _wrap + + +class OpenstackException(Exception): + """ + Base 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. + """ + message = "An unknown exception occurred" + + def __init__(self, **kwargs): + try: + self._error_string = self.message % kwargs + + except Exception: + # at least get the core message out if something happened + self._error_string = self.message + + def __str__(self): + return self._error_string + + +class MalformedRequestBody(OpenstackException): + message = "Malformed message body: %(reason)s" + + +class InvalidContentType(OpenstackException): + message = "Invalid content type %(content_type)s"