Merge "Fixes convert_to_boolean logic"

This commit is contained in:
Jenkins 2012-11-08 12:42:48 +00:00 committed by Gerrit Code Review
commit 8c280ea022
2 changed files with 37 additions and 12 deletions

View 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)

View File

@ -243,6 +243,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):