Only parse complex types if there is a value

This tries to bring it inline with the other value() methods.

Change-Id: Ib749c44127862b054a01ee74b3e1a716f7b637e8
Closes-bug: 1424600
This commit is contained in:
Angus Salkeld 2015-02-24 12:23:06 +10:00
parent 69a3599767
commit f604953985
3 changed files with 32 additions and 8 deletions

View File

@ -340,7 +340,10 @@ class CommaDelimitedListParam(Parameter, collections.Sequence):
def __init__(self, name, schema, value=None):
super(CommaDelimitedListParam, self).__init__(name, schema, value)
self.parsed = self.parse(self.user_value or self.default())
if self.has_value():
self.parsed = self.parse(self.user_value or self.default())
else:
self.parsed = []
def parse(self, value):
# only parse when value is not already a list
@ -357,7 +360,10 @@ class CommaDelimitedListParam(Parameter, collections.Sequence):
return value
def value(self):
return self.parsed
if self.has_value():
return self.parsed
raise exception.UserParameterMissing(key=self.name)
def __len__(self):
'''Return the length of the list.'''
@ -382,7 +388,10 @@ class JsonParam(Parameter):
def __init__(self, name, schema, value=None):
super(JsonParam, self).__init__(name, schema, value)
self.parsed = self.parse(self.user_value or self.default())
if self.has_value():
self.parsed = self.parse(self.user_value or self.default())
else:
self.parsed = {}
def parse(self, value):
try:
@ -397,7 +406,10 @@ class JsonParam(Parameter):
return value
def value(self):
return self.parsed
if self.has_value():
return self.parsed
raise exception.UserParameterMissing(key=self.name)
def __getitem__(self, key):
return self.parsed[key]

View File

@ -363,12 +363,24 @@ class ParameterTest(testtools.TestCase):
self.new_parameter, 'bo', schema, 'foo')
self.assertIn("Unrecognized value 'foo'", six.text_type(err))
def test_missing_param(self):
def test_missing_param_str(self):
'''Test missing user parameter.'''
self.assertRaises(exception.UserParameterMissing,
self.new_parameter, 'p',
{'Type': 'String'})
def test_missing_param_list(self):
'''Test missing user parameter.'''
self.assertRaises(exception.UserParameterMissing,
self.new_parameter, 'p',
{'Type': 'CommaDelimitedList'})
def test_missing_param_map(self):
'''Test missing user parameter.'''
self.assertRaises(exception.UserParameterMissing,
self.new_parameter, 'p',
{'Type': 'Json'})
def test_param_name_in_error_message(self):
schema = {'Type': 'String',
'AllowedPattern': '[a-z]*'}

View File

@ -70,7 +70,7 @@ parameters:
InstanceType: {type: string}
SecurityGroups: {type: comma_delimited_list}
UserData: {type: string}
Tags: {type: comma_delimited_list}
Tags: {type: comma_delimited_list, default: "x,y"}
resources:
random1:
@ -93,7 +93,7 @@ parameters:
InstanceType: {type: string}
SecurityGroups: {type: comma_delimited_list}
UserData: {type: string}
Tags: {type: comma_delimited_list}
Tags: {type: comma_delimited_list, default: "x,y"}
resources:
random1:
@ -612,7 +612,7 @@ parameters:
InstanceType: {type: string}
SecurityGroups: {type: comma_delimited_list}
UserData: {type: string}
Tags: {type: comma_delimited_list}
Tags: {type: comma_delimited_list, default: "x,y"}
resources:
outputs: