Merge "Fix output of "tuskar plan-list --verbose""
This commit is contained in:
commit
9e051c620a
@ -12,15 +12,43 @@
|
|||||||
|
|
||||||
from __future__ import print_function
|
from __future__ import print_function
|
||||||
|
|
||||||
|
import pprint
|
||||||
import sys
|
import sys
|
||||||
|
import textwrap
|
||||||
|
|
||||||
import prettytable
|
import prettytable
|
||||||
|
import six
|
||||||
|
|
||||||
|
|
||||||
|
def value_formatter(value, width=70):
|
||||||
|
# Most values can be pretty printed for a reasonable output
|
||||||
|
if not isinstance(value, six.string_types):
|
||||||
|
return pprint.pformat(value, width=width)
|
||||||
|
|
||||||
|
# pprint doesn't touch strings, so we do them manually
|
||||||
|
|
||||||
|
# First join lines that are not indented:
|
||||||
|
joined = []
|
||||||
|
parts = []
|
||||||
|
for l in value.splitlines():
|
||||||
|
if l[0] in u' \t\r\n':
|
||||||
|
# break here
|
||||||
|
joined.append(' '.join(parts))
|
||||||
|
parts = []
|
||||||
|
parts.append(l.rstrip())
|
||||||
|
if parts:
|
||||||
|
joined.append(' '.join(parts))
|
||||||
|
|
||||||
|
result = []
|
||||||
|
for line in joined:
|
||||||
|
result.append(textwrap.fill(line, width=width))
|
||||||
|
return u"\n".join(result)
|
||||||
|
|
||||||
|
|
||||||
def attributes_formatter(attributes):
|
def attributes_formatter(attributes):
|
||||||
"""Given a simple dict format the keyvalue pairs with one on each line.
|
"""Given a simple dict format the keyvalue pairs with one on each line.
|
||||||
"""
|
"""
|
||||||
return u"".join(u"{0}={1}\n".format(k, v) for k, v in
|
return u"".join(u"{0}={1}\n".format(k, value_formatter(v)) for k, v in
|
||||||
sorted(attributes.items()))
|
sorted(attributes.items()))
|
||||||
|
|
||||||
|
|
||||||
|
@ -271,6 +271,33 @@ class PlansShellTest(BasePlansShellTest):
|
|||||||
self.shell.do_plan_show(self.tuskar, args, outfile=self.outfile)
|
self.shell.do_plan_show(self.tuskar, args, outfile=self.outfile)
|
||||||
mock_find_resource.assert_called_with(self.tuskar.plans, '5')
|
mock_find_resource.assert_called_with(self.tuskar.plans, '5')
|
||||||
|
|
||||||
|
@mock.patch('tuskarclient.common.utils.find_resource')
|
||||||
|
def test_print_plan_wrap(self, mock_find_resource):
|
||||||
|
mock_find_resource.return_value = mock_plan()
|
||||||
|
mock_find_resource.return_value.parameters.append(
|
||||||
|
{'name': 'foo',
|
||||||
|
'value': 'This is a really long parameter value with '
|
||||||
|
'multiple lines to test the output wrapping.\n'
|
||||||
|
'Indents is assumed to be code:\n'
|
||||||
|
' {\n'
|
||||||
|
' "like": "this"\n'
|
||||||
|
' }\n'}
|
||||||
|
)
|
||||||
|
|
||||||
|
args = empty_args()
|
||||||
|
args.plan = '5'
|
||||||
|
args.verbose = True
|
||||||
|
|
||||||
|
self.shell.do_plan_show(self.tuskar, args, outfile=self.outfile)
|
||||||
|
output = self.outfile.getvalue()
|
||||||
|
|
||||||
|
# Lines should not be way to long:
|
||||||
|
self.assertTrue(all(len(line) < 100 for line in output.splitlines()))
|
||||||
|
# The lines are rewraped:
|
||||||
|
self.assertIn("wrapping. Indents", output)
|
||||||
|
# But not if the start with an indent:
|
||||||
|
self.assertIn(" {", output)
|
||||||
|
|
||||||
@mock.patch('tuskarclient.common.utils.find_resource')
|
@mock.patch('tuskarclient.common.utils.find_resource')
|
||||||
def test_print_plan_detail(self, mock_find_resource):
|
def test_print_plan_detail(self, mock_find_resource):
|
||||||
mock_find_resource.return_value = mock_plan()
|
mock_find_resource.return_value = mock_plan()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user