Allow specifying a table header for the value column in print_dict

If you can provide a customer header label for the property (first)
column in the print_dict output you should also be able to provide a
customer header label for the value (second) column.

Partial-Bug: #1503841

Change-Id: Iaa96b80249389fdf12ffbaf84073debebca4b5a4
This commit is contained in:
Matt Riedemann 2015-10-07 12:31:18 -07:00
parent e5fdc54200
commit 075379920e
2 changed files with 21 additions and 2 deletions

View File

@ -186,14 +186,15 @@ def print_list(objs, fields, formatters=None, sortby_index=0,
print(encodeutils.safe_encode(pt.get_string(**kwargs)))
def print_dict(dct, dict_property="Property", wrap=0):
def print_dict(dct, dict_property="Property", wrap=0, dict_value='Value'):
"""Print a `dict` as a table of two columns.
:param dct: `dict` to print
:param dict_property: name of the first column
:param wrap: wrapping for the second column
:param dict_value: header label for the value (second) column
"""
pt = prettytable.PrettyTable([dict_property, 'Value'])
pt = prettytable.PrettyTable([dict_property, dict_value])
pt.align = 'l'
for k, v in six.iteritems(dct):
# convert dict to str to check length

View File

@ -588,6 +588,24 @@ class PrintResultStringTestCase(test_base.BaseTestCase):
| K | k |
| Key | Value |
+----------+-------+
'''
self.assertEqual(expected, out)
def test_print_dict_string_custom_headers(self):
orig = sys.stdout
sys.stdout = six.StringIO()
cliutils.print_dict({"K": "k", "Key": "Value"}, dict_property='Foo',
dict_value='Bar')
out = sys.stdout.getvalue()
sys.stdout.close()
sys.stdout = orig
expected = '''\
+-----+-------+
| Foo | Bar |
+-----+-------+
| K | k |
| Key | Value |
+-----+-------+
'''
self.assertEqual(expected, out)