Add is_int_like() function

Some OpenStack projects (like Cinder, Ironic, Nova) have similar
is_int_like() function so it's would be nice to keep it in common
code. oslo.utils seems to be the proper place for this.

Change-Id: Ieb76a32e8ad9fe80bbb8ce9d1c4860a594a2893e
This commit is contained in:
Victor Sergeyev 2014-10-02 18:01:12 +03:00
parent a6d9c2ecff
commit 760dbc7420
2 changed files with 39 additions and 0 deletions

View File

@ -245,3 +245,16 @@ def mask_password(message, secret="***"):
message = re.sub(pattern, substitute, message)
return message
def is_int_like(val):
"""Check if a value looks like an integer with base 10.
:param val: Value to verify
:type val: string
:returns: bool
"""
try:
return six.text_type(int(val)) == six.text_type(val)
except (TypeError, ValueError):
return False

View File

@ -550,3 +550,29 @@ class MaskPasswordTestCase(test_base.BaseTestCase):
payload = "test = cmd --password my\xe9\x80\x80pass"
expected = ("test = cmd --password ***")
self.assertEqual(expected, strutils.mask_password(payload))
class IsIntLikeTestCase(test_base.BaseTestCase):
def test_is_int_like_true(self):
self.assertTrue(strutils.is_int_like(1))
self.assertTrue(strutils.is_int_like("1"))
self.assertTrue(strutils.is_int_like("514"))
self.assertTrue(strutils.is_int_like("0"))
def test_is_int_like_false(self):
self.assertFalse(strutils.is_int_like(1.1))
self.assertFalse(strutils.is_int_like("1.1"))
self.assertFalse(strutils.is_int_like("1.1.1"))
self.assertFalse(strutils.is_int_like(None))
self.assertFalse(strutils.is_int_like("0."))
self.assertFalse(strutils.is_int_like("aaaaaa"))
self.assertFalse(strutils.is_int_like("...."))
self.assertFalse(strutils.is_int_like("1g"))
self.assertFalse(
strutils.is_int_like("0cc3346e-9fef-4445-abe6-5d2b2690ec64"))
self.assertFalse(strutils.is_int_like("a1"))
# NOTE(viktors): 12e3 - is a float number
self.assertFalse(strutils.is_int_like("12e3"))
# NOTE(viktors): Check integer numbers with base not 10
self.assertFalse(strutils.is_int_like("0o51"))
self.assertFalse(strutils.is_int_like("0xDEADBEEF"))