Task list now only queries the displayed fields.
Change-Id: I7dab17b691eb764db4bced5214cd327681b34360 Related-Bug: 1709308
This commit is contained in:
		| @@ -29,7 +29,7 @@ class TaskManager(base.ResourceManager): | ||||
|     resource_class = Task | ||||
|  | ||||
|     def list(self, workflow_execution_id=None, marker='', limit=None, | ||||
|              sort_keys='', sort_dirs='', **filters): | ||||
|              sort_keys='', sort_dirs='', fields=[], **filters): | ||||
|         url = '/tasks' | ||||
|  | ||||
|         if workflow_execution_id: | ||||
| @@ -51,6 +51,9 @@ class TaskManager(base.ResourceManager): | ||||
|         if sort_dirs: | ||||
|             qparams['sort_dirs'] = sort_dirs | ||||
|  | ||||
|         if fields: | ||||
|             qparams['fields'] = ",".join(fields) | ||||
|  | ||||
|         for name, val in filters.items(): | ||||
|             qparams[name] = val | ||||
|  | ||||
|   | ||||
| @@ -27,22 +27,27 @@ from mistralclient import utils | ||||
| LOG = logging.getLogger(__name__) | ||||
|  | ||||
|  | ||||
| def format_list(task=None): | ||||
|     return format(task, lister=True) | ||||
| class TaskFormatter(object): | ||||
|     COLUMNS = [ | ||||
|         ('id',                      'ID'), | ||||
|         ('name',                    'Name'), | ||||
|         ('workflow_name',           'Workflow name'), | ||||
|         ('workflow_execution_id',   'Execution ID'), | ||||
|         ('state',                   'State'), | ||||
|         ('state_info',              'State info'), | ||||
|         ('created_at',              'Created at'), | ||||
|         ('updated_at',              'Updated at'), | ||||
|     ] | ||||
|  | ||||
|     COLUMN_FIELD_NAMES = list(zip(*COLUMNS))[0] | ||||
|     COLUMN_HEADING_NAMES = list(zip(*COLUMNS))[1] | ||||
|  | ||||
| def format(task=None, lister=False): | ||||
|     columns = ( | ||||
|         'ID', | ||||
|         'Name', | ||||
|         'Workflow name', | ||||
|         'Execution ID', | ||||
|         'State', | ||||
|         'State info', | ||||
|         'Created at', | ||||
|         'Updated at' | ||||
|     ) | ||||
|     @staticmethod | ||||
|     def format_list(task=None): | ||||
|         return TaskFormatter.format(task, lister=True) | ||||
|  | ||||
|     @staticmethod | ||||
|     def format(task=None, lister=False): | ||||
|         if task: | ||||
|             state_info = (task.state_info if not lister | ||||
|                           else base.cut(task.state_info)) | ||||
| @@ -58,9 +63,9 @@ def format(task=None, lister=False): | ||||
|                 task.updated_at or '<none>' | ||||
|             ) | ||||
|         else: | ||||
|         data = (tuple('' for _ in range(len(columns))),) | ||||
|             data = (tuple('' for _ in range(len(TaskFormatter.COLUMNS))),) | ||||
|  | ||||
|     return columns, data | ||||
|         return TaskFormatter.COLUMN_HEADING_NAMES, data | ||||
|  | ||||
|  | ||||
| class List(base.MistralLister): | ||||
| @@ -92,7 +97,7 @@ class List(base.MistralLister): | ||||
|         return parser | ||||
|  | ||||
|     def _get_format_function(self): | ||||
|         return format_list | ||||
|         return TaskFormatter.format_list | ||||
|  | ||||
|     def _get_resources(self, parsed_args): | ||||
|         if parsed_args.limit is None: | ||||
| @@ -110,6 +115,7 @@ class List(base.MistralLister): | ||||
|         return mistral_client.tasks.list( | ||||
|             parsed_args.workflow_execution, | ||||
|             limit=parsed_args.limit, | ||||
|             fields=TaskFormatter.COLUMN_FIELD_NAMES, | ||||
|             **base.get_filters(parsed_args) | ||||
|         ) | ||||
|  | ||||
| @@ -128,7 +134,7 @@ class Get(command.ShowOne): | ||||
|         mistral_client = self.app.client_manager.workflow_engine | ||||
|         execution = mistral_client.tasks.get(parsed_args.task) | ||||
|  | ||||
|         return format(execution) | ||||
|         return TaskFormatter.format(execution) | ||||
|  | ||||
|  | ||||
| class GetResult(command.Command): | ||||
| @@ -223,4 +229,4 @@ class Rerun(command.ShowOne): | ||||
|             env=env | ||||
|         ) | ||||
|  | ||||
|         return format(execution) | ||||
|         return TaskFormatter.format(execution) | ||||
|   | ||||
| @@ -21,6 +21,7 @@ import mock | ||||
|  | ||||
| from mistralclient.api.v2 import tasks | ||||
| from mistralclient.commands.v2 import tasks as task_cmd | ||||
| from mistralclient.commands.v2.tasks import TaskFormatter | ||||
| from mistralclient.tests.unit import base | ||||
|  | ||||
| TASK_DICT = { | ||||
| @@ -58,6 +59,10 @@ class TestCLITasksV2(base.BaseCommandTest): | ||||
|         result = self.call(task_cmd.List) | ||||
|  | ||||
|         self.assertEqual([EXPECTED_TASK_RESULT], result[1]) | ||||
|         self.assertEqual( | ||||
|             self.client.tasks.list.call_args[1]["fields"], | ||||
|             TaskFormatter.COLUMN_FIELD_NAMES | ||||
|         ) | ||||
|  | ||||
|     def test_list_with_workflow_execution(self): | ||||
|         self.client.tasks.list.return_value = [TASK] | ||||
|   | ||||
| @@ -50,6 +50,15 @@ class TestTasksV2(base.BaseClientV2Test): | ||||
|             task.to_dict() | ||||
|         ) | ||||
|  | ||||
|     def test_list_with_fields(self): | ||||
|         field_params = "?fields=id,name" | ||||
|  | ||||
|         self.requests_mock.get(self.TEST_URL + URL_TEMPLATE + field_params, | ||||
|                                json={'tasks': [TASK]}) | ||||
|  | ||||
|         self.tasks.list(fields=["id,name"]) | ||||
|         self.assertTrue(self.requests_mock.called_once) | ||||
|  | ||||
|     def test_get(self): | ||||
|         url = self.TEST_URL + URL_TEMPLATE_ID % TASK['id'] | ||||
|         self.requests_mock.get(url, json=TASK) | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Kupai József
					Kupai József