diff options
author | Jenkins <jenkins@review.openstack.org> | 2014-09-12 14:44:35 +0000 |
---|---|---|
committer | Gerrit Code Review <review@openstack.org> | 2014-09-12 14:44:35 +0000 |
commit | 4210497846912e37ba608f3d3be4f7cb242508ee (patch) | |
tree | 52460c5239128966bcce8ea2437ff25464a55b4f | |
parent | 5571e9f43597aa7257829f6e4bf6544abfa88880 (diff) | |
parent | 6c2495335c10744b1c583cad116bfe694c84f9d8 (diff) | |
download | oslo-vmware-4210497846912e37ba608f3d3be4f7cb242508ee.tar.gz |
Merge "Add API to enable calling module to register an exception"
-rw-r--r-- | oslo/vmware/exceptions.py | 12 | ||||
-rw-r--r-- | tests/test_api.py | 21 |
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) |