summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2012-05-11 22:54:23 +0000
committerGerrit Code Review <review@openstack.org>2012-05-11 22:54:23 +0000
commitb59776ea27dd0201d95f0c3e3f6e6e719fcda22e (patch)
treea41bd09af8f9fa9a7a2f4cdec91859711511bbe4
parent0b719284c6b8d8f20cc9b131598809f873badc62 (diff)
parent21e918a8f6e0fd144287ff7fc2ab3d262ac9edd7 (diff)
downloadnova-b59776ea27dd0201d95f0c3e3f6e6e719fcda22e.tar.gz
Merge "Fix bug 983206 : _try_convert parsing string" into stable/essex
-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 1a6bb96bde..0f4aeb061a 100644
--- a/nova/api/ec2/ec2utils.py
+++ b/nova/api/ec2/ec2utils.py
@@ -166,6 +166,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':
@@ -175,31 +179,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 baaee98577..a52319f620 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):