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:
parent
69a3599767
commit
f604953985
|
@ -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]
|
||||
|
|
|
@ -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]*'}
|
||||
|
|
|
@ -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:
|
||||
|
|
Loading…
Reference in New Issue