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

View File

@ -505,6 +505,40 @@ class FormatTest(common.HeatTestCase):
self.assertEqual(expected, sorted(info, key=lambda k: k['output_key'],
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):