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