From 16eeb9f09921767eb5ed24ca325dfd5a74344792 Mon Sep 17 00:00:00 2001 From: Nikolay Mahotkin Date: Mon, 27 Apr 2015 15:18:06 +0300 Subject: [PATCH] Fix bug with action class attributes * Need to write an integration test for it. Closes-Bug: #1448403 Change-Id: I7f477f6c87b21ff0f8c9a31ae72086830c7fa9b4 (cherry picked from commit f8d2d5c164fd193c8d97cd35c046f512a070352b) --- mistral/actions/action_factory.py | 9 ++++-- .../tests/unit/actions/test_action_manager.py | 31 ++++++++++++------- 2 files changed, 25 insertions(+), 15 deletions(-) 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 + ) )