Task list now only queries the displayed fields.

Change-Id: I7dab17b691eb764db4bced5214cd327681b34360
Related-Bug: 1709308
This commit is contained in:
Kupai József 2017-08-04 16:36:52 +02:00
parent 88b4c21342
commit 38fcb9c45e
4 changed files with 56 additions and 33 deletions
mistralclient

@ -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,40 +27,45 @@ 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)
if task:
state_info = (task.state_info if not lister
else base.cut(task.state_info))
@staticmethod
def format(task=None, lister=False):
if task:
state_info = (task.state_info if not lister
else base.cut(task.state_info))
data = (
task.id,
task.name,
task.workflow_name,
task.workflow_execution_id,
task.state,
state_info,
task.created_at,
task.updated_at or '<none>'
)
else:
data = (tuple('' for _ in range(len(columns))),)
data = (
task.id,
task.name,
task.workflow_name,
task.workflow_execution_id,
task.state,
state_info,
task.created_at,
task.updated_at or '<none>'
)
else:
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)