summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2016-02-24 18:32:35 +0000
committerGerrit Code Review <review@openstack.org>2016-02-24 18:32:35 +0000
commit8155d453c85260f7c30cbd719ed65d674b8fb419 (patch)
tree8d8fa714b719f1c727563c5260630981af9bb57d
parent8d1d4097002c4555f591faab7a6fb9eddaced205 (diff)
parenta26c1e67b674e20ccbe57e20fd591d8c3b545696 (diff)
downloadpython-cinderclient-8155d453c85260f7c30cbd719ed65d674b8fb419.tar.gz
Merge "Extra 'u' in output of cinder cli commands"
-rw-r--r--cinderclient/utils.py23
-rw-r--r--cinderclient/v2/shell.py14
2 files changed, 32 insertions, 5 deletions
diff --git a/cinderclient/utils.py b/cinderclient/utils.py
index 24ea134..c501e7c 100644
--- a/cinderclient/utils.py
+++ b/cinderclient/utils.py
@@ -161,6 +161,13 @@ def print_list(objs, fields, exclude_unavailable=False, formatters=None,
pt = prettytable.PrettyTable((f for f in fields), caching=False)
pt.aligns = ['l' for f in fields]
for row in rows:
+ count = 0
+ # Converts unicode values in dictionary to string
+ for part in row:
+ count = count + 1
+ if isinstance(part, dict):
+ part = unicode_key_value_to_string(part)
+ row[count - 1] = part
pt.add_row(row)
if sortby_index is None:
@@ -170,11 +177,25 @@ def print_list(objs, fields, exclude_unavailable=False, formatters=None,
_print(pt, order_by)
-def print_dict(d, property="Property"):
+def unicode_key_value_to_string(dictionary):
+ """Recursively converts dictionary keys to strings."""
+ if not isinstance(dictionary, dict):
+ return dictionary
+ return dict((str(k), str(unicode_key_value_to_string(v)))
+ for k, v in dictionary.items())
+
+
+def print_dict(d, property="Property", formatters=None):
pt = prettytable.PrettyTable([property, 'Value'], caching=False)
pt.aligns = ['l', 'l']
+ formatters = formatters or {}
+
for r in six.iteritems(d):
r = list(r)
+
+ if r[0] in formatters:
+ r[1] = unicode_key_value_to_string(r[1])
+
if isinstance(r[1], six.string_types) and "\r" in r[1]:
r[1] = r[1].replace("\r", " ")
pt.add_row(r)
diff --git a/cinderclient/v2/shell.py b/cinderclient/v2/shell.py
index 143d199..d1f78f4 100644
--- a/cinderclient/v2/shell.py
+++ b/cinderclient/v2/shell.py
@@ -293,7 +293,8 @@ def do_show(cs, args):
info.update(volume._info)
info.pop('links', None)
- utils.print_dict(info)
+ utils.print_dict(info,
+ formatters=['metadata', 'volume_image_metadata'])
class CheckSizeArgForCreate(argparse.Action):
@@ -1007,9 +1008,12 @@ def do_endpoints(cs, args):
def do_credentials(cs, args):
"""Shows user credentials returned from auth."""
catalog = cs.client.service_catalog.catalog
- utils.print_dict(catalog['user'], "User Credentials")
- utils.print_dict(catalog['token'], "Token")
+ # formatters defines field to be converted from unicode to string
+ utils.print_dict(catalog['user'], "User Credentials",
+ formatters=['domain', 'roles'])
+ utils.print_dict(catalog['token'], "Token",
+ formatters=['audit_ids', 'tenant'])
_quota_resources = ['volumes', 'snapshots', 'gigabytes',
'backups', 'backup_gigabytes',
@@ -1935,7 +1939,9 @@ def do_encryption_type_delete(cs, args):
def _print_qos_specs(qos_specs):
- utils.print_dict(qos_specs._info)
+
+ # formatters defines field to be converted from unicode to string
+ utils.print_dict(qos_specs._info, formatters=['specs'])
def _print_qos_specs_list(q_specs):