From 9360a35704e40afa92d0ab386e3a420e2b426c5d Mon Sep 17 00:00:00 2001 From: Andriy Popovych Date: Thu, 5 May 2016 17:13:17 +0300 Subject: [PATCH] Use text_format_safe instead of text_format Use text_format_safe for traversing plugin attributes Change-Id: Ib21a7386fe7cea982c98cfeaaa26040463f72b9d Closes-Bug: #1576197 Closes-Bug: #1614401 (cherry picked from commit a4b427fca476da253062167671db56ce3f1ee4da) --- nailgun/nailgun/objects/cluster.py | 12 ++++++++---- nailgun/nailgun/test/unit/test_objects.py | 14 ++++++++++++++ 2 files changed, 22 insertions(+), 4 deletions(-) diff --git a/nailgun/nailgun/objects/cluster.py b/nailgun/nailgun/objects/cluster.py index 54b6d62bbb..18b0c594f1 100644 --- a/nailgun/nailgun/objects/cluster.py +++ b/nailgun/nailgun/objects/cluster.py @@ -44,6 +44,7 @@ from nailgun.policy.merge import NetworkRoleMergePolicy from nailgun.settings import settings from nailgun.utils import AttributesGenerator from nailgun.utils import dict_merge +from nailgun.utils import text_format_safe from nailgun.utils import traverse @@ -343,10 +344,13 @@ class Cluster(NailgunObject): # Merge plugins attributes into editable ones plugin_attrs = PluginManager.get_plugins_attributes( instance, all_versions=all_plugins_versions) - plugin_attrs = traverse(plugin_attrs, AttributesGenerator, { - 'cluster': instance, - 'settings': settings, - }) + + plugin_attrs = traverse( + plugin_attrs, + formatter=text_format_safe, + formatter_context={'cluster': instance, 'settings': settings}, + keywords={'generator': AttributesGenerator.evaluate} + ) attrs['editable'].update(plugin_attrs) return attrs diff --git a/nailgun/nailgun/test/unit/test_objects.py b/nailgun/nailgun/test/unit/test_objects.py index 5ebe0c0a99..3921621f38 100644 --- a/nailgun/nailgun/test/unit/test_objects.py +++ b/nailgun/nailgun/test/unit/test_objects.py @@ -1453,6 +1453,20 @@ class TestClusterObject(BaseTestCase): self.db().refresh(config) self.assertFalse(config.is_active) + def test_get_attributes_with_plugin(self): + cluster = self.env.create_cluster(api=False) + self.env.create_plugin( + name='test_plugin', + version='1.0.0', + package_version='4.0.0', + cluster=cluster, + attributes_metadata=self.env.get_default_plugin_env_config( + value='{}') + ) + attr = objects.Cluster.get_attributes(cluster, True) + plugin_attrs = attr.editable['test_plugin']['metadata']['versions'][0] + self.assertEqual('{}', plugin_attrs['plugin_name_text']['value']) + class TestClusterObjectVirtRoles(BaseTestCase):