Task list now only queries the displayed fields.
Change-Id: I7dab17b691eb764db4bced5214cd327681b34360 Related-Bug: 1709308
This commit is contained in:
parent
88b4c21342
commit
38fcb9c45e
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)
|
||||
|
Loading…
x
Reference in New Issue
Block a user