diff options
| author | Jenkins <jenkins@review.openstack.org> | 2012-05-08 17:24:26 +0000 |
|---|---|---|
| committer | Gerrit Code Review <review@openstack.org> | 2012-05-08 17:24:26 +0000 |
| commit | a517891b1d33f647bd552f2d2ac6bf15a1440bd5 (patch) | |
| tree | 8483cbb8edbfe46d4bd42a61d4ec439265e15676 | |
| parent | 99f3822fd3341eecb4bc8d699b9721fdf59aeee8 (diff) | |
| parent | c95162e52899618fc269fb536f6a2d3b26b7794d (diff) | |
Merge "Fix bug 983206 : _try_convert parsing string"
| -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 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): |
