From d6560fb4986f43a2f2e64e14bb4effc969cc4ecd Mon Sep 17 00:00:00 2001 From: xialinjuan Date: Wed, 13 Jan 2016 17:31:10 +0800 Subject: [PATCH] change the dict output format to make consistency under py27 and py34 For the command output in ceilometer cli, if it is a dict and it has items which is list type, originally it won't handle the items in the list. As to under py27, the string type in the list is unicode, the string always look like u"http://alarm", while under py34 the string is "http://alarm", this cause output inconsistency. This patch will handle this inconsistency. Change-Id: I5e7cf4052f68e5a434bcf86242b11365b34750a0 --- ceilometerclient/common/utils.py | 2 +- ceilometerclient/tests/unit/test_utils.py | 65 +++++++++++++++++------ 2 files changed, 49 insertions(+), 18 deletions(-) diff --git a/ceilometerclient/common/utils.py b/ceilometerclient/common/utils.py index d1ac7203..84dcac89 100644 --- a/ceilometerclient/common/utils.py +++ b/ceilometerclient/common/utils.py @@ -89,7 +89,7 @@ def print_dict(d, dict_property="Property", wrap=0): pt.align = 'l' for k, v in sorted(six.iteritems(d)): # convert dict to str to check length - if isinstance(v, dict): + if isinstance(v, (list, dict)): v = jsonutils.dumps(v) # if value has a newline, add in multiple rows # e.g. fault with stacktrace diff --git a/ceilometerclient/tests/unit/test_utils.py b/ceilometerclient/tests/unit/test_utils.py index a7e7584b..5ef35e91 100644 --- a/ceilometerclient/tests/unit/test_utils.py +++ b/ceilometerclient/tests/unit/test_utils.py @@ -50,6 +50,14 @@ class UtilsTest(test_utils.BaseTestCase): 'type': 'threshold', 'threshold': '1.0', 'statistic': 'avg', + 'alarm_actions': [u'http://something/alarm1', + u'http://something/alarm2'], + 'ok_actions': [{"get_attr1": + [u"web_server_scaleup_policy1", + u"alarm_url1"]}, + {"get_attr2": + [u"web_server_scaleup_policy2", + u"alarm_url2"]}], 'time_constraints': '[{name: c1,' '\\n description: test,' '\\n start: 0 18 * * *,' @@ -57,23 +65,46 @@ class UtilsTest(test_utils.BaseTestCase): '\\n timezone: US}]'}, wrap=72) expected = u'''\ -+------------------+----------------------------------+ -| Property | Value | -+------------------+----------------------------------+ -| alarm_id | 262567fd-d79a-4bbb-a9d0-59d879b6 | -| description | \u6d4b\u8bd5 | -| name | \u6d4b\u8bd5 | -| repeat_actions | False | -| state | insufficient data | -| statistic | avg | -| threshold | 1.0 | -| time_constraints | [{name: c1, | -| | description: test, | -| | start: 0 18 * * *, | -| | duration: 1, | -| | timezone: US}] | -| type | threshold | -+------------------+----------------------------------+ ++------------------+-------------------------------------------------------\ +--------+ +| Property | Value \ + | ++------------------+-------------------------------------------------------\ +--------+ +| alarm_actions | ["http://something/alarm1", "http://something/alarm2"]\ + | +| alarm_id | 262567fd-d79a-4bbb-a9d0-59d879b6 \ + | +| description | \u6d4b\u8bd5 \ + | +| name | \u6d4b\u8bd5 \ + | +| ok_actions | [{"get_attr1": ["web_server_scaleup_policy1", "alarm_u\ +rl1"]}, | +| | {"get_attr2": ["web_server_scaleup_policy2", "alarm_ur\ +l2"]}] | +| repeat_actions | False \ + | +| state | insufficient data \ + | +| statistic | avg \ + | +| threshold | 1.0 \ + | +| time_constraints | [{name: c1, \ + | +| | description: test, \ + | +| | start: 0 18 * * *, \ + | +| | duration: 1, \ + | +| | timezone: US}] \ + | +| type | threshold \ + | ++------------------+-------------------------------------------------------\ +--------+ ''' # py2 prints str type, py3 prints unicode type if six.PY2: