From ec1c1acc17b038cb1ceff9735cac91dcb9c4196c Mon Sep 17 00:00:00 2001 From: Nikolay Mahotkin Date: Tue, 16 Sep 2014 15:46:11 +0400 Subject: [PATCH] Add task-get-parameters command * Task parameters can be a huge size and getting them should be the separate command. Otherwise table task-list become unreadable. * Unit tests on task-get-result and task-get-output Change-Id: If86a69d24786f73d3b3c297d0b8288336a1a5433 --- mistralclient/commands/v2/tasks.py | 26 ++++++++- mistralclient/shell.py | 2 + mistralclient/tests/unit/v2/test_cli_tasks.py | 54 ++++++++++++++++--- 3 files changed, 74 insertions(+), 8 deletions(-) diff --git a/mistralclient/commands/v2/tasks.py b/mistralclient/commands/v2/tasks.py index fff0ae48..c8eebe3f 100644 --- a/mistralclient/commands/v2/tasks.py +++ b/mistralclient/commands/v2/tasks.py @@ -33,7 +33,6 @@ def format(task=None): 'Workflow name', 'Execution ID', 'State', - 'Parameters', ) if task: @@ -43,7 +42,6 @@ def format(task=None): task.wf_name, task.execution_id, task.state, - task.parameters, ) else: data = (tuple('' for _ in range(len(columns))),) @@ -152,3 +150,27 @@ class GetResult(command.Command): LOG.debug("Task result is not JSON.") self.app.stdout.write(result or "\n") + + +class GetParameters(command.Command): + """Show task parameters.""" + + def get_parser(self, prog_name): + parser = super(GetParameters, self).get_parser(prog_name) + parser.add_argument( + 'id', + help='Task ID') + + return parser + + def take_action(self, parsed_args): + result = tasks.TaskManager(self.app.client)\ + .get(parsed_args.id).parameters + + try: + result = json.loads(result) + result = json.dumps(result, indent=4) + "\n" + except: + LOG.debug("Task result is not JSON.") + + self.app.stdout.write(result or "\n") diff --git a/mistralclient/shell.py b/mistralclient/shell.py index 1db23932..d62ed88e 100644 --- a/mistralclient/shell.py +++ b/mistralclient/shell.py @@ -248,6 +248,8 @@ class MistralShell(app.App): 'task-list': mistralclient.commands.v2.tasks.List, 'task-get': mistralclient.commands.v2.tasks.Get, 'task-get-output': mistralclient.commands.v2.tasks.GetOutput, + 'task-get-parameters': + mistralclient.commands.v2.tasks.GetParameters, 'task-get-result': mistralclient.commands.v2.tasks.GetResult, 'task-update': mistralclient.commands.v2.tasks.Update, 'workflow-list': mistralclient.commands.v2.workflows.List, diff --git a/mistralclient/tests/unit/v2/test_cli_tasks.py b/mistralclient/tests/unit/v2/test_cli_tasks.py index 4958dca8..31d3e433 100644 --- a/mistralclient/tests/unit/v2/test_cli_tasks.py +++ b/mistralclient/tests/unit/v2/test_cli_tasks.py @@ -14,6 +14,7 @@ # under the License. # +import json import mock from mistralclient.tests.unit import base @@ -21,14 +22,28 @@ from mistralclient.tests.unit import base from mistralclient.commands.v2 import tasks as task_cmd from mistralclient.api.v2 import tasks -TASK = tasks.Task(mock, { +TASK_DICT = { 'id': '123', 'name': 'some', 'wf_name': 'thing', 'execution_id': '321', 'state': 'RUNNING', - 'parameters': {}, -}) +} + +TASK_RESULT = {"test": "is", "passed": "successfully"} +TASK_PARAMETERS = {"param1": "val1", "param2": 2} + +TASK_WITH_RESULT_DICT = TASK_DICT.copy() +TASK_WITH_RESULT_DICT.update({'result': json.dumps(TASK_RESULT)}) +TASK_WITH_OUTPUT_DICT = TASK_DICT.copy() +TASK_WITH_OUTPUT_DICT.update({'output': json.dumps(TASK_RESULT)}) +TASK_WITH_PARAMETERS_DICT = TASK_DICT.copy() +TASK_WITH_PARAMETERS_DICT.update({'parameters': json.dumps(TASK_PARAMETERS)}) + +TASK = tasks.Task(mock, TASK_DICT) +TASK_WITH_RESULT = tasks.Task(mock, TASK_WITH_RESULT_DICT) +TASK_WITH_OUTPUT = tasks.Task(mock, TASK_WITH_OUTPUT_DICT) +TASK_WITH_PARAMETERS = tasks.Task(mock, TASK_WITH_PARAMETERS_DICT) class TestCLIT1asksV2(base.BaseCommandTest): @@ -39,7 +54,7 @@ class TestCLIT1asksV2(base.BaseCommandTest): result = self.call(task_cmd.Update, app_args=['id', 'ERROR']) - self.assertEqual(('123', 'some', 'thing', '321', 'RUNNING', {}), + self.assertEqual(('123', 'some', 'thing', '321', 'RUNNING'), result[1]) @mock.patch('mistralclient.api.v2.tasks.TaskManager.list') @@ -48,7 +63,7 @@ class TestCLIT1asksV2(base.BaseCommandTest): result = self.call(task_cmd.List) - self.assertEqual([('123', 'some', 'thing', '321', 'RUNNING', {})], + self.assertEqual([('123', 'some', 'thing', '321', 'RUNNING')], result[1]) @mock.patch('mistralclient.api.v2.tasks.TaskManager.get') @@ -57,5 +72,32 @@ class TestCLIT1asksV2(base.BaseCommandTest): result = self.call(task_cmd.Get, app_args=['id']) - self.assertEqual(('123', 'some', 'thing', '321', 'RUNNING', {}), + self.assertEqual(('123', 'some', 'thing', '321', 'RUNNING'), result[1]) + + @mock.patch('mistralclient.api.v2.tasks.TaskManager.get') + def test_get_result(self, mock): + mock.return_value = TASK_WITH_RESULT + + self.call(task_cmd.GetResult, app_args=['id']) + + self.app.stdout.write.assert_called_with( + json.dumps(TASK_RESULT, indent=4) + "\n") + + @mock.patch('mistralclient.api.v2.tasks.TaskManager.get') + def test_get_output(self, mock): + mock.return_value = TASK_WITH_OUTPUT + + self.call(task_cmd.GetOutput, app_args=['id']) + + self.app.stdout.write.assert_called_with( + json.dumps(TASK_RESULT, indent=4) + "\n") + + @mock.patch('mistralclient.api.v2.tasks.TaskManager.get') + def test_get_parameters(self, mock): + mock.return_value = TASK_WITH_PARAMETERS + + self.call(task_cmd.GetParameters, app_args=['id']) + + self.app.stdout.write.assert_called_with( + json.dumps(TASK_PARAMETERS, indent=4) + "\n")