summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMitsuru Kanabuchi <kanabuchi.mitsuru@po.ntts.co.jp>2013-10-10 20:42:42 +0900
committerSteven Hardy <shardy@redhat.com>2013-10-12 08:09:57 +0100
commitd9efd01f1f75b663485999ce67beeeed9298010d (patch)
treeffa2d8f7acf6ee0f6cc9bc5c2cb3b5c9d28e1d63
parentb14f780a7822c24e6ed5d73d8b39c8bc28d099c2 (diff)
downloadheat-d9efd01f1f75b663485999ce67beeeed9298010d.tar.gz
Return Integer or Float casted value in NumberParam
Integer value used in parameter, so failed validation in properties. The solution here is return Integer casted value or Float casted value as value of NumberParam. The method of which type choose for cast is same of Property.str_to_num. Fixes bug #1226494 Change-Id: I9f7d894ffae8a728dce783d5881af3d377268b93
-rw-r--r--heat/engine/parameters.py10
-rw-r--r--heat/tests/test_parameters.py14
2 files changed, 15 insertions, 9 deletions
diff --git a/heat/engine/parameters.py b/heat/engine/parameters.py
index 46303983a..7088cb1f2 100644
--- a/heat/engine/parameters.py
+++ b/heat/engine/parameters.py
@@ -215,15 +215,21 @@ class NumberParam(Parameter):
def __int__(self):
'''Return an integer representation of the parameter'''
- return int(self.value())
+ return int(super(NumberParam, self).value())
def __float__(self):
'''Return a float representation of the parameter'''
- return float(self.value())
+ return float(super(NumberParam, self).value())
def validate(self, val):
self.schema.validate(self.name, val)
+ def value(self):
+ try:
+ return int(self)
+ except ValueError:
+ return float(self)
+
class StringParam(Parameter):
'''A template parameter of type "String".'''
diff --git a/heat/tests/test_parameters.py b/heat/tests/test_parameters.py
index bc77dc2fa..8f44a28d3 100644
--- a/heat/tests/test_parameters.py
+++ b/heat/tests/test_parameters.py
@@ -204,14 +204,14 @@ class ParameterTest(testtools.TestCase):
'MinValue': '3',
'MaxValue': '3'}
p = self.new_parameter('p', schema, '3')
- self.assertEqual(p.value(), '3')
+ self.assertEqual(p.value(), 3)
def test_number_float_good(self):
schema = {'Type': 'Number',
'MinValue': '3.0',
- 'MaxValue': '3.0'}
- p = self.new_parameter('p', schema, '3.0')
- self.assertEqual(p.value(), '3.0')
+ 'MaxValue': '4.0'}
+ p = self.new_parameter('p', schema, '3.5')
+ self.assertEqual(p.value(), 3.5)
def test_number_low(self):
schema = {'Type': 'Number',
@@ -241,7 +241,7 @@ class ParameterTest(testtools.TestCase):
schema = {'Type': 'Number',
'AllowedValues': ['1', '3', '5']}
p = self.new_parameter('p', schema, '5')
- self.assertEqual(p.value(), '5')
+ self.assertEqual(p.value(), 5)
def test_number_value_list_bad(self):
schema = {'Type': 'Number',
@@ -423,7 +423,7 @@ class ParametersTest(testtools.TestCase):
as_dict = dict(params)
self.assertEqual(as_dict['Foo'], 'foo')
- self.assertEqual(as_dict['Bar'], '42')
+ self.assertEqual(as_dict['Bar'], 42)
self.assertEqual(as_dict['AWS::StackName'], 'test_params')
self.assertTrue('AWS::Region' in as_dict)
@@ -444,7 +444,7 @@ class ParametersTest(testtools.TestCase):
template = {'Parameters': {'Foo': {'Type': 'String'},
'Bar': {'Type': 'Number'}}}
params = self.new_parameters('test_params', template,
- {'Foo': 'foo', 'Bar': 42})
+ {'Foo': 'foo', 'Bar': '42'})
expected = {'Foo': 'foo',
'Bar': '42',