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 /nova/api | |
| parent | 99f3822fd3341eecb4bc8d699b9721fdf59aeee8 (diff) | |
| parent | c95162e52899618fc269fb536f6a2d3b26b7794d (diff) | |
Merge "Fix bug 983206 : _try_convert parsing string"
Diffstat (limited to 'nova/api')
| -rw-r--r-- | nova/api/ec2/ec2utils.py | 35 |
1 files changed, 11 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 |
