From db69ed2017d5ace4fa90b02e3d1f2868702fc520 Mon Sep 17 00:00:00 2001 From: Julien Danjou <julien.danjou@enovance.com> Date: Thu, 6 Oct 2011 17:15:32 +0200 Subject: [PATCH] Include original exception in ClassNotFound exception By doing this, we allow the error messages to be more useful. When an import of a class fails because of a missing module dependency, it would have fail that way for example: $ nova-manage Traceback (most recent call last): File "./bin/nova-manage", line 84, in <module> from nova import image File "/home/jd/Work/src/nova/nova/image/__init__.py", line 22, in <module> from nova.image import glance File "/home/jd/Work/src/nova/nova/image/glance.py", line 42, in <module> GlanceClient = utils.import_class('glance.client.Client') File "/home/jd/Work/src/nova/nova/utils.py", line 66, in import_class raise exception.ClassNotFound(class_name=class_str) nova.exception.ClassNotFound: Class Client could not be found This does not help the user, since it indicates the class Client cannot be found, even if it is actually found but fail to import. With this commit, the error message is better: nova-manage Traceback (most recent call last): File "./bin/nova-manage", line 84, in <module> from nova import image File "/home/jd/Work/src/nova/nova/image/__init__.py", line 22, in <module> from nova.image import glance File "/home/jd/Work/src/nova/nova/image/glance.py", line 42, in <module> GlanceClient = utils.import_class('glance.client.Client') File "/home/jd/Work/src/nova/nova/utils.py", line 66, in import_class raise exception.ClassNotFound(class_name=class_str, exception=exc) nova.exception.ClassNotFound: Class Client could not be found: No module named kombu.connection This helps to know that in this kombu is missing. It would probably even better to rename ClassNotFound to ClassCannotBeImported or something like that too. Change-Id: I4100d931a0a825fa0729d5467d2f9268fdd2a261 Signed-off-by: Julien Danjou <julien.danjou@enovance.com> --- nova/utils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nova/utils.py b/nova/utils.py index c1862f316..1d2063798 100644 --- a/nova/utils.py +++ b/nova/utils.py @@ -63,7 +63,7 @@ def import_class(import_str): return getattr(sys.modules[mod_str], class_str) except (ImportError, ValueError, AttributeError), exc: LOG.debug(_('Inner Exception: %s'), exc) - raise exception.ClassNotFound(class_name=class_str) + raise exception.ClassNotFound(class_name=class_str, exception=exc) def import_object(import_str):