diff --git a/mistral/actions/action_factory.py b/mistral/actions/action_factory.py index 077e52ec0..438e744d6 100644 --- a/mistral/actions/action_factory.py +++ b/mistral/actions/action_factory.py @@ -19,7 +19,10 @@ def construct_action_class(action_class_str, attributes): # Rebuild action class and restore attributes. action_class = importutils.import_class(action_class_str) - for name, value in attributes.items(): - setattr(action_class, name, value) + unique_action_class = type( + action_class.__name__, + (action_class,), + attributes + ) - return action_class + return unique_action_class diff --git a/mistral/tests/unit/actions/test_action_manager.py b/mistral/tests/unit/actions/test_action_manager.py index 31a0b268e..5c6dc79d4 100644 --- a/mistral/tests/unit/actions/test_action_manager.py +++ b/mistral/tests/unit/actions/test_action_manager.py @@ -23,7 +23,7 @@ from mistral.tests import base LOG = logging.getLogger(__name__) -class ActionFactoryTest(base.DbTestCase): +class ActionManagerTest(base.DbTestCase): def test_register_standard_actions(self): action_list = a_m.get_registered_actions() @@ -44,17 +44,24 @@ class ActionFactoryTest(base.DbTestCase): self._assert_single_item(action_list, name="glance.images_delete") def test_get_action_class(self): - self.assertEqual(std.EchoAction, a_m.get_action_class("std.echo")) - self.assertEqual(std.HTTPAction, a_m.get_action_class("std.http")) - self.assertEqual( - std.MistralHTTPAction, - a_m.get_action_class("std.mistral_http") + self.assertTrue( + issubclass(a_m.get_action_class("std.echo"), std.EchoAction) ) - self.assertEqual( - std.SendEmailAction, - a_m.get_action_class("std.email") + self.assertTrue( + issubclass(a_m.get_action_class("std.http"), std.HTTPAction) ) - self.assertEqual( - std.JavaScriptAction, - a_m.get_action_class("std.javascript") + self.assertTrue( + issubclass( + a_m.get_action_class("std.mistral_http"), + std.MistralHTTPAction + ) + ) + self.assertTrue( + issubclass(a_m.get_action_class("std.email"), std.SendEmailAction) + ) + self.assertTrue( + issubclass( + a_m.get_action_class("std.javascript"), + std.JavaScriptAction + ) )