Update common.importutils from openstack-common.
This patch updates common.importutils from openstack-common. The change was to remove the usage of common.exception. The rest of the patch includes the changes required in nova to no longer use common.exception, as well. Change-Id: Iacd186b2c466cba84248ae10589ffbb5a9cec0ba
This commit is contained in:
@@ -16,7 +16,6 @@
|
|||||||
from nova import flags
|
from nova import flags
|
||||||
from nova import log as logging
|
from nova import log as logging
|
||||||
from nova.openstack.common import cfg
|
from nova.openstack.common import cfg
|
||||||
from nova.openstack.common import exception as common_exception
|
|
||||||
from nova.openstack.common import importutils
|
from nova.openstack.common import importutils
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,147 +0,0 @@
|
|||||||
# 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"
|
|
||||||
@@ -21,8 +21,6 @@ Import related utilities and helper functions.
|
|||||||
|
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
from nova.openstack.common import exception
|
|
||||||
|
|
||||||
|
|
||||||
def import_class(import_str):
|
def import_class(import_str):
|
||||||
"""Returns a class from a string including module and class"""
|
"""Returns a class from a string including module and class"""
|
||||||
@@ -30,8 +28,9 @@ def import_class(import_str):
|
|||||||
try:
|
try:
|
||||||
__import__(mod_str)
|
__import__(mod_str)
|
||||||
return getattr(sys.modules[mod_str], class_str)
|
return getattr(sys.modules[mod_str], class_str)
|
||||||
except (ImportError, ValueError, AttributeError):
|
except (ImportError, ValueError, AttributeError), exc:
|
||||||
raise exception.NotFound('Class %s cannot be found' % class_str)
|
raise ImportError('Class %s cannot be found (%s)' %
|
||||||
|
(class_str, str(exc)))
|
||||||
|
|
||||||
|
|
||||||
def import_object(import_str, *args, **kwargs):
|
def import_object(import_str, *args, **kwargs):
|
||||||
|
|||||||
@@ -25,7 +25,6 @@ from nova import exception
|
|||||||
from nova import flags
|
from nova import flags
|
||||||
from nova import log as logging
|
from nova import log as logging
|
||||||
from nova.notifier import api as notifier
|
from nova.notifier import api as notifier
|
||||||
from nova.openstack.common import exception as common_exception
|
|
||||||
from nova.openstack.common import importutils
|
from nova.openstack.common import importutils
|
||||||
from nova.scheduler import driver
|
from nova.scheduler import driver
|
||||||
from nova.scheduler import least_cost
|
from nova.scheduler import least_cost
|
||||||
@@ -245,7 +244,7 @@ class FilterScheduler(driver.Scheduler):
|
|||||||
# the weighing function can be any non-class callable
|
# the weighing function can be any non-class callable
|
||||||
# (i.e., no 'self')
|
# (i.e., no 'self')
|
||||||
cost_fn = importutils.import_class(cost_fn_str)
|
cost_fn = importutils.import_class(cost_fn_str)
|
||||||
except common_exception.NotFound:
|
except ImportError:
|
||||||
raise exception.SchedulerCostFunctionNotFound(
|
raise exception.SchedulerCostFunctionNotFound(
|
||||||
cost_fn_str=cost_fn_str)
|
cost_fn_str=cost_fn_str)
|
||||||
|
|
||||||
|
|||||||
@@ -20,7 +20,6 @@ import json
|
|||||||
from nova import context
|
from nova import context
|
||||||
from nova import exception
|
from nova import exception
|
||||||
from nova import flags
|
from nova import flags
|
||||||
from nova.openstack.common import exception as common_exception
|
|
||||||
from nova.scheduler import filters
|
from nova.scheduler import filters
|
||||||
from nova import test
|
from nova import test
|
||||||
from nova.tests.scheduler import fakes
|
from nova.tests.scheduler import fakes
|
||||||
@@ -65,7 +64,7 @@ class HostFiltersTestCase(test.TestCase):
|
|||||||
self.assertEqual(len(classes), 1 + len(self.class_map))
|
self.assertEqual(len(classes), 1 + len(self.class_map))
|
||||||
|
|
||||||
def test_get_filter_classes_raises_on_invalid_classes(self):
|
def test_get_filter_classes_raises_on_invalid_classes(self):
|
||||||
self.assertRaises(common_exception.NotFound,
|
self.assertRaises(ImportError,
|
||||||
filters.get_filter_classes,
|
filters.get_filter_classes,
|
||||||
['nova.tests.scheduler.test_host_filters.NoExist'])
|
['nova.tests.scheduler.test_host_filters.NoExist'])
|
||||||
self.assertRaises(exception.ClassNotFound,
|
self.assertRaises(exception.ClassNotFound,
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
[DEFAULT]
|
[DEFAULT]
|
||||||
|
|
||||||
# The list of modules to copy from openstack-common
|
# The list of modules to copy from openstack-common
|
||||||
modules=cfg,exception,local,importutils,iniparser
|
modules=cfg,local,importutils,iniparser
|
||||||
|
|
||||||
# The base module to hold the copy of openstack.common
|
# The base module to hold the copy of openstack.common
|
||||||
base=nova
|
base=nova
|
||||||
|
|||||||
Reference in New Issue
Block a user