summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2014-09-12 14:44:35 +0000
committerGerrit Code Review <review@openstack.org>2014-09-12 14:44:35 +0000
commit4210497846912e37ba608f3d3be4f7cb242508ee (patch)
tree52460c5239128966bcce8ea2437ff25464a55b4f
parent5571e9f43597aa7257829f6e4bf6544abfa88880 (diff)
parent6c2495335c10744b1c583cad116bfe694c84f9d8 (diff)
downloadoslo-vmware-4210497846912e37ba608f3d3be4f7cb242508ee.tar.gz
Merge "Add API to enable calling module to register an exception"
-rw-r--r--oslo/vmware/exceptions.py12
-rw-r--r--tests/test_api.py21
2 files changed, 32 insertions, 1 deletions
diff --git a/oslo/vmware/exceptions.py b/oslo/vmware/exceptions.py
index 133fbed..a8b92c3 100644
--- a/oslo/vmware/exceptions.py
+++ b/oslo/vmware/exceptions.py
@@ -222,10 +222,20 @@ _fault_classes_registry = {
def get_fault_class(name):
- """Get a named subclass of NovaException."""
+ """Get a named subclass of VMwareDriverException."""
name = str(name)
fault_class = _fault_classes_registry.get(name)
if not fault_class:
LOG.debug('Fault %s not matched.', name)
fault_class = VMwareDriverException
return fault_class
+
+
+def register_fault_class(name, exception):
+ fault_class = _fault_classes_registry.get(name)
+ if not issubclass(exception, VMwareDriverException):
+ raise TypeError(_("exception should be a subclass of "
+ "VMwareDriverException"))
+ if fault_class:
+ LOG.debug('Overriding exception for %s', name)
+ _fault_classes_registry[name] = exception
diff --git a/tests/test_api.py b/tests/test_api.py
index 6c02051..cd24fa5 100644
--- a/tests/test_api.py
+++ b/tests/test_api.py
@@ -487,3 +487,24 @@ class VMwareAPISessionTest(base.TestCase):
for k, v in _unknown_exceptions.iteritems():
self._poll_task_well_known_exceptions(k, v)
+
+ def _create_subclass_exception(self):
+ class VimSubClass(exceptions.VMwareDriverException):
+ pass
+ return VimSubClass
+
+ def test_register_fault_class(self):
+ exc = self._create_subclass_exception()
+ exceptions.register_fault_class('ValueError', exc)
+ self.assertEqual(exc, exceptions.get_fault_class('ValueError'))
+
+ def test_register_fault_class_override(self):
+ exc = self._create_subclass_exception()
+ exceptions.register_fault_class(exceptions.ALREADY_EXISTS, exc)
+ self.assertEqual(exc,
+ exceptions.get_fault_class(exceptions.ALREADY_EXISTS))
+
+ def test_register_fault_classi_invalid(self):
+ self.assertRaises(TypeError,
+ exceptions.register_fault_class,
+ 'ValueError', ValueError)