Pretty print parameters in stack-show

Previously, we were not using the specialized parameter class' __str__
method to print the parameters in the stack-show output with python
2.x.

Closes-Bug: #1613415
Change-Id: I44295ae567cef91eb484201099c7646cdb16fe08
This commit is contained in:
Jason Dunsmore 2016-08-19 15:03:32 -05:00 committed by Rico Lin
parent 1c8c7a7914
commit 4940fc1a2a
2 changed files with 45 additions and 9 deletions

View File

@ -290,13 +290,17 @@ class Parameter(object):
def set_default(self, value): def set_default(self, value):
self.user_default = value self.user_default = value
@classmethod
def _value_as_text(cls, value):
return six.text_type(value)
def __str__(self): def __str__(self):
"""Return a string representation of the parameter.""" """Return a string representation of the parameter."""
value = self.value() value = self.value()
if self.hidden(): if self.hidden():
return six.text_type('******') return six.text_type('******')
else: else:
return six.text_type(value) return self._value_as_text(value)
class NumberParam(Parameter): class NumberParam(Parameter):
@ -410,10 +414,9 @@ class CommaDelimitedListParam(ParsedParameter, collections.Sequence):
"""Return an item from the list.""" """Return an item from the list."""
return self.parsed[index] return self.parsed[index]
def __str__(self): @classmethod
if self.hidden(): def _value_as_text(cls, value):
return super(CommaDelimitedListParam, self).__str__() return ",".join(value)
return ",".join(self.value())
def _validate(self, val, context, template=None): def _validate(self, val, context, template=None):
try: try:
@ -460,10 +463,9 @@ class JsonParam(ParsedParameter):
def __len__(self): def __len__(self):
return len(self.parsed) return len(self.parsed)
def __str__(self): @classmethod
if self.hidden(): def _value_as_text(cls, value):
return super(JsonParam, self).__str__() return encodeutils.safe_decode(jsonutils.dumps(value))
return encodeutils.safe_decode(jsonutils.dumps(self.value()))
def _validate(self, val, context, template=None): def _validate(self, val, context, template=None):
try: try:

View File

@ -505,6 +505,40 @@ class FormatTest(common.HeatTestCase):
self.assertEqual(expected, sorted(info, key=lambda k: k['output_key'], self.assertEqual(expected, sorted(info, key=lambda k: k['output_key'],
reverse=True)) reverse=True))
def test_format_stack_params_csv(self):
tmpl = template.Template({
'heat_template_version': '2013-05-23',
'parameters': {
'foo': {
'type': 'comma_delimited_list',
'default': ['bar', 'baz']
},
}
})
stack = parser.Stack(utils.dummy_context(), 'test_stack',
tmpl, stack_id=str(uuid.uuid4()))
info = api.format_stack(stack)
# Should be 'bar,baz' NOT "[u'bar', u'baz']"
self.assertEqual('bar,baz', info['parameters']['foo'])
def test_format_stack_params_json(self):
tmpl = template.Template({
'heat_template_version': '2013-05-23',
'parameters': {
'foo': {
'type': 'json',
'default': {'bar': 'baz'}
},
}
})
stack = parser.Stack(utils.dummy_context(), 'test_stack',
tmpl, stack_id=str(uuid.uuid4()))
info = api.format_stack(stack)
# Should be '{"bar": "baz"}' NOT "{u'bar': u'baz'}"
self.assertEqual('{"bar": "baz"}', info['parameters']['foo'])
class FormatValidateParameterTest(common.HeatTestCase): class FormatValidateParameterTest(common.HeatTestCase):