From 52c3aebe79502a3d6f5aa15154fd5820619ac845 Mon Sep 17 00:00:00 2001 From: Zhongyue Luo Date: Tue, 6 Nov 2012 11:54:34 +0800 Subject: [PATCH] Fixes convert_to_boolean logic Clean-up to make code more intuitive. Change-Id: If97ed089c0dfcc45b05cc7066180e6d8d32ce257 --- quantum/api/v2/attributes.py | 24 ++++++++++++------------ quantum/tests/unit/test_attributes.py | 25 +++++++++++++++++++++++++ 2 files changed, 37 insertions(+), 12 deletions(-) diff --git a/quantum/api/v2/attributes.py b/quantum/api/v2/attributes.py index 80a5dae84..a92b2cab0 100644 --- a/quantum/api/v2/attributes.py +++ b/quantum/api/v2/attributes.py @@ -258,20 +258,20 @@ def _validate_uuid(data, valid_values=None): def convert_to_boolean(data): - try: - i = int(data) - if i in [True, False]: - # Ensure that the value is True or False - if i: - return True - else: - return False - except (ValueError, TypeError): - if (data == "True" or data == "true"): + if isinstance(data, basestring): + val = data.lower() + if val == "true" or val == "1": return True - if (data == "False" or data == "false"): + if val == "false" or val == "0": return False - msg = _("'%s' is not boolean") % data + elif isinstance(data, bool): + return data + elif isinstance(data, int): + if data == 0: + return False + elif data == 1: + return True + msg = _("'%s' cannot be converted to boolean") % data raise q_exc.InvalidInput(error_message=msg) diff --git a/quantum/tests/unit/test_attributes.py b/quantum/tests/unit/test_attributes.py index 08654c6d1..29b69956a 100644 --- a/quantum/tests/unit/test_attributes.py +++ b/quantum/tests/unit/test_attributes.py @@ -203,6 +203,31 @@ class TestAttributes(unittest2.TestCase): self.assertEquals(msg, error) +class TestConvertToBoolean(unittest2.TestCase): + + def test_convert_to_boolean_bool(self): + self.assertIs(attributes.convert_to_boolean(True), True) + self.assertIs(attributes.convert_to_boolean(False), False) + + def test_convert_to_boolean_int(self): + self.assertIs(attributes.convert_to_boolean(0), False) + self.assertIs(attributes.convert_to_boolean(1), True) + self.assertRaises(q_exc.InvalidInput, + attributes.convert_to_boolean, + 7) + + def test_convert_to_boolean_str(self): + self.assertIs(attributes.convert_to_boolean('True'), True) + self.assertIs(attributes.convert_to_boolean('true'), True) + self.assertIs(attributes.convert_to_boolean('False'), False) + self.assertIs(attributes.convert_to_boolean('false'), False) + self.assertIs(attributes.convert_to_boolean('0'), False) + self.assertIs(attributes.convert_to_boolean('1'), True) + self.assertRaises(q_exc.InvalidInput, + attributes.convert_to_boolean, + '7') + + class TestConvertKvp(unittest2.TestCase): def test_convert_kvp_list_to_dict_succeeds_for_missing_values(self): -- 2.45.2