diff options
author | Jenkins <jenkins@review.openstack.org> | 2012-05-11 22:54:23 +0000 |
---|---|---|
committer | Gerrit Code Review <review@openstack.org> | 2012-05-11 22:54:23 +0000 |
commit | b59776ea27dd0201d95f0c3e3f6e6e719fcda22e (patch) | |
tree | a41bd09af8f9fa9a7a2f4cdec91859711511bbe4 | |
parent | 0b719284c6b8d8f20cc9b131598809f873badc62 (diff) | |
parent | 21e918a8f6e0fd144287ff7fc2ab3d262ac9edd7 (diff) | |
download | nova-b59776ea27dd0201d95f0c3e3f6e6e719fcda22e.tar.gz |
Merge "Fix bug 983206 : _try_convert parsing string" into stable/essex
-rw-r--r-- | nova/api/ec2/ec2utils.py | 35 | ||||
-rw-r--r-- | nova/tests/test_api.py | 12 |
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): |