summaryrefslogtreecommitdiffstats
path: root/nova
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2012-05-08 17:24:26 +0000
committerGerrit Code Review <review@openstack.org>2012-05-08 17:24:26 +0000
commita517891b1d33f647bd552f2d2ac6bf15a1440bd5 (patch)
tree8483cbb8edbfe46d4bd42a61d4ec439265e15676 /nova
parent99f3822fd3341eecb4bc8d699b9721fdf59aeee8 (diff)
parentc95162e52899618fc269fb536f6a2d3b26b7794d (diff)
Merge "Fix bug 983206 : _try_convert parsing string"
Diffstat (limited to 'nova')
-rw-r--r--nova/api/ec2/ec2utils.py35
-rw-r--r--nova/tests/test_api.py12
2 files changed, 23 insertions, 24 deletions
diff --git a/nova/api/ec2/ec2utils.py b/nova/api/ec2/ec2utils.py
index 045ee12d3..9006da93e 100644
--- a/nova/api/ec2/ec2utils.py
+++ b/nova/api/ec2/ec2utils.py
@@ -220,6 +220,10 @@ def _try_convert(value):
* try conversion to int, float, complex, fallback value
"""
+ def _negative_zero(value):
+ epsilon = 1e-7
+ return 0 if abs(value) < epsilon else value
+
if len(value) == 0:
return ''
if value == 'None':
@@ -229,31 +233,14 @@ def _try_convert(value):
return True
if lowered_value == 'false':
return False
- valueneg = value[1:] if value[0] == '-' else value
- if valueneg == '0':
- return 0
- if valueneg == '':
- return value
- if valueneg[0] == '0':
- if valueneg[1] in 'xX':
- return int(value, 16)
- elif valueneg[1] in 'bB':
- return int(value, 2)
- else:
- try:
- return int(value, 8)
- except ValueError:
- pass
- try:
- return int(value)
- except ValueError:
- pass
- try:
- return float(value)
- except ValueError:
- pass
+ for prefix, base in [('0x', 16), ('0b', 2), ('0', 8), ('', 10)]:
+ try:
+ if lowered_value.startswith((prefix, "-" + prefix)):
+ return int(lowered_value, base)
+ except ValueError:
+ pass
try:
- return complex(value)
+ return _negative_zero(float(value))
except ValueError:
return value
diff --git a/nova/tests/test_api.py b/nova/tests/test_api.py
index d4be082b6..25678df83 100644
--- a/nova/tests/test_api.py
+++ b/nova/tests/test_api.py
@@ -96,8 +96,10 @@ class XmlConversionTestCase(test.TestCase):
conv = ec2utils._try_convert
self.assertEqual(conv('None'), None)
self.assertEqual(conv('True'), True)
+ self.assertEqual(conv('TRUE'), True)
self.assertEqual(conv('true'), True)
self.assertEqual(conv('False'), False)
+ self.assertEqual(conv('FALSE'), False)
self.assertEqual(conv('false'), False)
self.assertEqual(conv('0'), 0)
self.assertEqual(conv('42'), 42)
@@ -107,6 +109,16 @@ class XmlConversionTestCase(test.TestCase):
self.assertEqual(conv('-0x57'), -0x57)
self.assertEqual(conv('-'), '-')
self.assertEqual(conv('-0'), 0)
+ self.assertEqual(conv('0.0'), 0.0)
+ self.assertEqual(conv('1e-8'), 0.0)
+ self.assertEqual(conv('-1e-8'), 0.0)
+ self.assertEqual(conv('0xDD8G'), '0xDD8G')
+ self.assertEqual(conv('0XDD8G'), '0XDD8G')
+ self.assertEqual(conv('-stringy'), '-stringy')
+ self.assertEqual(conv('stringy'), 'stringy')
+ self.assertEqual(conv('add'), 'add')
+ self.assertEqual(conv('remove'), 'remove')
+ self.assertEqual(conv(''), '')
class Ec2utilsTestCase(test.TestCase):