diff --git a/watcherclient/tests/unit/v1/test_action_plan_shell.py b/watcherclient/tests/unit/v1/test_action_plan_shell.py index 4a05d4f..655a8ff 100644 --- a/watcherclient/tests/unit/v1/test_action_plan_shell.py +++ b/watcherclient/tests/unit/v1/test_action_plan_shell.py @@ -33,12 +33,16 @@ ACTION_PLAN_1 = { 'unit': '%'}], 'created_at': datetime.datetime.now().isoformat(), 'updated_at': None, - 'global_efficacy': { - "value": 99, - "unit": "%", - "name": "dummy_global_efficacy", - "description": "Dummy Global Efficacy", - }, + 'global_efficacy': [ + {"value": 99, + "unit": "%", + "name": "dummy_global_efficacy", + "description": "Dummy Global Efficacy"}, + {"value": 75, + "unit": "%", + "name": "dummy_global_efficacy2", + "description": "Dummy Global Efficacy2"} + ], 'deleted_at': None, } @@ -52,12 +56,12 @@ ACTION_PLAN_2 = { 'name': 'indicator2', 'unit': '%'}], 'updated_at': None, - 'global_efficacy': { + 'global_efficacy': [{ "value": 87, "unit": "%", "name": "dummy_global_efficacy", "description": "Dummy Global Efficacy", - }, + }], 'deleted_at': None, } @@ -69,6 +73,7 @@ class ActionPlanShellTest(base.CommandTestCase): resource_fields.ACTION_PLAN_SHORT_LIST_FIELD_LABELS) FIELDS = resource_fields.ACTION_PLAN_FIELDS FIELD_LABELS = resource_fields.ACTION_PLAN_FIELD_LABELS + GLOBAL_EFFICACY_FIELDS = resource_fields.GLOBAL_EFFICACY_FIELDS def setUp(self): super(self.__class__, self).setUp() @@ -114,6 +119,11 @@ class ActionPlanShellTest(base.CommandTestCase): self.SHORT_LIST_FIELD_LABELS)], results) + self.assertEqual(action_plan1.global_efficacy, + results[0]['Global efficacy']) + self.assertEqual(action_plan2.global_efficacy, + results[1]['Global efficacy']) + self.m_action_plan_mgr.list.assert_called_once_with(detail=False) def test_do_action_plan_list_detail(self): @@ -131,6 +141,10 @@ class ActionPlanShellTest(base.CommandTestCase): self.resource_as_dict(action_plan2, self.FIELDS, self.FIELD_LABELS)], results) + self.assertEqual(action_plan1.global_efficacy, + results[0]['Global efficacy']) + self.assertEqual(action_plan2.global_efficacy, + results[1]['Global efficacy']) self.m_action_plan_mgr.list.assert_called_once_with(detail=True) @@ -165,6 +179,8 @@ class ActionPlanShellTest(base.CommandTestCase): self.resource_as_dict( action_plan, self.FIELDS, self.FIELD_LABELS), result) + self.assertEqual(action_plan.global_efficacy, + result['Global efficacy']) self.m_action_plan_mgr.get.assert_called_once_with( 'd9d9978e-6db5-4a05-8eab-1531795d7004') diff --git a/watcherclient/v1/action_plan_shell.py b/watcherclient/v1/action_plan_shell.py index 5f5af88..4ee5bd6 100644 --- a/watcherclient/v1/action_plan_shell.py +++ b/watcherclient/v1/action_plan_shell.py @@ -26,16 +26,16 @@ from watcherclient.v1 import resource_fields as res_fields def format_global_efficacy(global_efficacy): - formatted_global_efficacy = None - if (global_efficacy.get('value') is not None and - global_efficacy.get('unit')): - formatted_global_efficacy = "%(value).2f %(unit)s" % dict( - unit=global_efficacy.get('unit'), - value=global_efficacy.get('value')) - elif global_efficacy.get('value') is not None: - formatted_global_efficacy = global_efficacy.get('value') - - return formatted_global_efficacy + formatted_global_eff = {} + for eff in global_efficacy: + if (eff.get('value') is not None and eff.get('unit')): + eff_name = eff.get('name') + formatted_global_eff[eff_name] = "%(value).2f %(unit)s" % dict( + unit=eff.get('unit'), + value=eff.get('value')) + elif eff.get('value') is not None: + formatted_global_eff[eff_name] = eff.get('value') + return formatted_global_eff class ShowActionPlan(command.ShowOne): @@ -64,6 +64,18 @@ class ShowActionPlan(command.ShowOne): ) return out.getvalue() or '' + def _format_global_efficacy(self, global_efficacy, parsed_args): + formatted_global_efficacy = format_global_efficacy(global_efficacy) + out = six.StringIO() + yaml_format.YAMLFormatter().emit_one( + column_names=list(resource.capitalize() + for resource in formatted_global_efficacy), + data=[value for value in formatted_global_efficacy.itervalues()], + stdout=out, + parsed_args=parsed_args, + ) + return out.getvalue() or '' + def take_action(self, parsed_args): client = getattr(self.app.client_manager, "infra-optim") @@ -83,8 +95,8 @@ class ShowActionPlan(command.ShowOne): self._format_indicators(action_plan, parsed_args)) # Update the raw global efficacy with the formatted one - action_plan.global_efficacy = format_global_efficacy( - action_plan.global_efficacy) + action_plan.global_efficacy = self._format_global_efficacy( + action_plan.global_efficacy, parsed_args) columns = res_fields.ACTION_PLAN_FIELDS column_headers = res_fields.ACTION_PLAN_FIELD_LABELS @@ -139,6 +151,18 @@ class ListActionPlan(command.Lister): ) return out.getvalue() or '' + def _format_global_efficacy(self, global_efficacy, parsed_args): + formatted_global_efficacy = format_global_efficacy(global_efficacy) + out = six.StringIO() + yaml_format.YAMLFormatter().emit_one( + column_names=list(resource.capitalize() + for resource in formatted_global_efficacy), + data=[value for value in formatted_global_efficacy.itervalues()], + stdout=out, + parsed_args=parsed_args, + ) + return out.getvalue() or '' + def take_action(self, parsed_args): client = getattr(self.app.client_manager, "infra-optim") @@ -164,8 +188,8 @@ class ListActionPlan(command.Lister): self._format_indicators(action_plan, parsed_args)) # Update the raw global efficacy with the formatted one - action_plan.global_efficacy = format_global_efficacy( - action_plan.global_efficacy) + action_plan.global_efficacy = self._format_global_efficacy( + action_plan.global_efficacy, parsed_args) return (field_labels, (utils.get_item_properties(item, fields) for item in data)) diff --git a/watcherclient/v1/resource_fields.py b/watcherclient/v1/resource_fields.py index 7ef9802..1e2ce6b 100755 --- a/watcherclient/v1/resource_fields.py +++ b/watcherclient/v1/resource_fields.py @@ -61,6 +61,8 @@ ACTION_PLAN_SHORT_LIST_FIELDS = ['uuid', 'audit_uuid', 'state', ACTION_PLAN_SHORT_LIST_FIELD_LABELS = ['UUID', 'Audit', 'State', 'Updated At', 'Global efficacy'] +GLOBAL_EFFICACY_FIELDS = ['value', 'unit', 'name', 'description'] + # Action ACTION_FIELDS = ['uuid', 'created_at', 'updated_at', 'deleted_at', 'parents', 'state', 'action_plan_uuid', 'action_type',