]> review.fuel-infra Code Review - openstack-build/neutron-build.git/commitdiff
Fixes convert_to_boolean logic
authorZhongyue Luo <zhongyue.nah@intel.com>
Tue, 6 Nov 2012 03:54:34 +0000 (11:54 +0800)
committerZhongyue Luo <zhongyue.nah@intel.com>
Thu, 8 Nov 2012 05:43:03 +0000 (13:43 +0800)
Clean-up to make code more intuitive.

Change-Id: If97ed089c0dfcc45b05cc7066180e6d8d32ce257

quantum/api/v2/attributes.py
quantum/tests/unit/test_attributes.py

index 80a5dae8400ae35f7c69dbbf2ddcb467023eea02..a92b2cab033ce727e15e7830457466fa46ea3d3e 100644 (file)
@@ -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)
 
 
index 08654c6d1aad4cfaf755b26c97a6ad3d658c6f72..29b69956af13141164593f1ad0cfa6bbfb95b9d8 100644 (file)
@@ -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):