diff options
author | Mitsuru Kanabuchi <kanabuchi.mitsuru@po.ntts.co.jp> | 2013-10-10 20:42:42 +0900 |
---|---|---|
committer | Steven Hardy <shardy@redhat.com> | 2013-10-12 08:09:57 +0100 |
commit | d9efd01f1f75b663485999ce67beeeed9298010d (patch) | |
tree | ffa2d8f7acf6ee0f6cc9bc5c2cb3b5c9d28e1d63 | |
parent | b14f780a7822c24e6ed5d73d8b39c8bc28d099c2 (diff) | |
download | heat-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.py | 10 | ||||
-rw-r--r-- | heat/tests/test_parameters.py | 14 |
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', |