make print_dict split strings with newlines into multiple rows
When printing a dict e.g. "nova show" one of the properties is "fault". When the user is admin, "details" of the fault is shown, which includes a backtrace. This causes the printing of the table to be unreadable as the backtrace overflows the table row. This patch adds a separate row for each substring after splitting on newlines. Change-Id: I4c1bc8725a2bb6970be2c884c5e044d9eade8302
This commit is contained in:
parent
5b8099cd0e
commit
f9aa5ec834
@ -167,8 +167,21 @@ def print_list(objs, fields, formatters={}, sortby_index=0):
|
|||||||
def print_dict(d, dict_property="Property"):
|
def print_dict(d, dict_property="Property"):
|
||||||
pt = prettytable.PrettyTable([dict_property, 'Value'], caching=False)
|
pt = prettytable.PrettyTable([dict_property, 'Value'], caching=False)
|
||||||
pt.align = 'l'
|
pt.align = 'l'
|
||||||
[pt.add_row(list(r)) for r in d.iteritems()]
|
for k, v in d.iteritems():
|
||||||
print pt.get_string(sortby=dict_property)
|
# convert dict to str to check length
|
||||||
|
if isinstance(v, dict):
|
||||||
|
v = str(v)
|
||||||
|
# if value has a newline, add in multiple rows
|
||||||
|
# e.g. fault with stacktrace
|
||||||
|
if v and isinstance(v, basestring) and r'\n' in v:
|
||||||
|
lines = v.strip().split(r'\n')
|
||||||
|
col1 = k
|
||||||
|
for line in lines:
|
||||||
|
pt.add_row([col1, line])
|
||||||
|
col1 = ''
|
||||||
|
else:
|
||||||
|
pt.add_row([k, v])
|
||||||
|
print pt.get_string()
|
||||||
|
|
||||||
|
|
||||||
def find_resource(manager, name_or_id):
|
def find_resource(manager, name_or_id):
|
||||||
|
Loading…
x
Reference in New Issue
Block a user