Added get_uuid and get_uuid_list methods.
This commit is contained in:
parent
691f67ef1b
commit
ca0defcb38
|
@ -221,3 +221,19 @@ class ParseDict(BaseDict):
|
|||
"""
|
||||
return self._get_values_list(
|
||||
key, default, separator, parse_util.parse_str)
|
||||
|
||||
def get_uuid(self, key, default='', choices=None):
|
||||
"""
|
||||
Get value by key or keypath trying to return it as valid uuid.
|
||||
If choices and value is in choices return value otherwise default.
|
||||
"""
|
||||
return self._get_value(
|
||||
key, default, choices, parse_util.parse_uuid)
|
||||
|
||||
def get_uuid_list(self, key, default=None, separator=','):
|
||||
"""
|
||||
Get value by key or keypath trying to return it as list of valid uuid values.
|
||||
If separator is specified and value is a string it will be splitted.
|
||||
"""
|
||||
return self._get_values_list(
|
||||
key, default, separator, parse_util.parse_uuid)
|
||||
|
|
|
@ -205,3 +205,8 @@ def parse_str(val):
|
|||
val = val.strip()
|
||||
val = ' '.join(val.split())
|
||||
return val
|
||||
|
||||
|
||||
def parse_uuid(val):
|
||||
s = parse_str(val)
|
||||
return s if type_util.is_uuid(s) else None
|
||||
|
|
|
@ -7,6 +7,9 @@ from six import integer_types, string_types
|
|||
import re
|
||||
|
||||
regex = re.compile('').__class__
|
||||
uuid_re = re.compile(
|
||||
'^([0-9a-f]{32}){1}$|^([0-9a-f]{8}-([0-9a-f]{4}-){3}[0-9a-f]{12}){1}$',
|
||||
flags=re.IGNORECASE)
|
||||
|
||||
|
||||
def is_bool(val):
|
||||
|
@ -81,3 +84,7 @@ def is_string(val):
|
|||
|
||||
def is_tuple(val):
|
||||
return isinstance(val, tuple)
|
||||
|
||||
|
||||
def is_uuid(val):
|
||||
return is_string(val) and uuid_re.match(val)
|
||||
|
|
|
@ -490,3 +490,36 @@ class parse_dict_test_case(unittest.TestCase):
|
|||
self.assertEqual(b.get_str('a', choices=['Sunday', 'Saturday']), 'Sunday')
|
||||
self.assertEqual(b.get_str('b', choices=['Sunday', 'Saturday'], default='Saturday'), 'Saturday')
|
||||
self.assertEqual(b.get_str('c', choices=['Sunday', 'Saturday'], default='Saturday'), 'Saturday')
|
||||
|
||||
def test_get_uuid(self):
|
||||
d = {
|
||||
'a': 'CA761232-ED42-11CE-BACD-00AA0057B223',
|
||||
'b': ' CA761232-ED42-11CE-BACD-00AA0057B223 ',
|
||||
'c': ' CA761232ED4211CEBACD00AA0057B223 ',
|
||||
'd': ' ca761232ed4211cebacd00aa0057b223 ',
|
||||
'e': 'CA761232ED4211CEBACD00AA0057B223',
|
||||
'f': 'CA761232ED4211CEBACD00AA0057B2233', # invalid too long
|
||||
'g': 'CA761232ED4211CEBACD00AA0057B22x', # invalid chars
|
||||
'h': 'CA761232ED4211CEBACD00AA0057B22', # invalid too short
|
||||
'i': 'CA761232-ED42-11CE-BACD-00AA0057B2234', # invalid too long
|
||||
}
|
||||
b = ParseDict(d)
|
||||
self.assertEqual(b.get_uuid('a'), 'CA761232-ED42-11CE-BACD-00AA0057B223')
|
||||
self.assertEqual(b.get_uuid('b'), 'CA761232-ED42-11CE-BACD-00AA0057B223')
|
||||
self.assertEqual(b.get_uuid('c'), 'CA761232ED4211CEBACD00AA0057B223')
|
||||
self.assertEqual(b.get_uuid('d'), 'ca761232ed4211cebacd00aa0057b223')
|
||||
self.assertEqual(b.get_uuid('e'), 'CA761232ED4211CEBACD00AA0057B223')
|
||||
self.assertEqual(b.get_uuid('f'), '')
|
||||
self.assertEqual(b.get_uuid('f', 'none'), 'none')
|
||||
self.assertEqual(b.get_uuid('g'), '')
|
||||
self.assertEqual(b.get_uuid('h'), '')
|
||||
self.assertEqual(b.get_uuid('i'), '')
|
||||
|
||||
def test_get_uuid_list(self):
|
||||
d = {
|
||||
'a': ['CA761232-ED42-11CE-BACD-00AA0057B223', ' FB761232-ED42-314E-BFCA-00AA0057B118 ', 99.9],
|
||||
'b': 'Hello World, See you later, 99.9',
|
||||
}
|
||||
b = ParseDict(d)
|
||||
self.assertEqual(b.get_uuid_list('a'), ['CA761232-ED42-11CE-BACD-00AA0057B223', 'FB761232-ED42-314E-BFCA-00AA0057B118', None])
|
||||
self.assertEqual(b.get_uuid_list('b'), [None, None, None])
|
||||
|
|
|
@ -64,3 +64,7 @@ class parse_util_test_case(unittest.TestCase):
|
|||
def test_parse_str(self):
|
||||
# TODO
|
||||
pass
|
||||
|
||||
def test_parse_uuid(self):
|
||||
# TODO
|
||||
pass
|
||||
|
|
|
@ -281,3 +281,11 @@ class type_util_test_case(unittest.TestCase):
|
|||
self.assertFalse(f({'a':0, 'b':1, 'c':2}))
|
||||
self.assertFalse(f('hello world'))
|
||||
self.assertFalse(f(lambda a: a))
|
||||
|
||||
def test_is_uuid(self):
|
||||
f = type_util.is_uuid
|
||||
self.assertTrue(f('ca761232ed4211cebacd00aa0057b223'))
|
||||
self.assertTrue(f('CA761232-ED42-11CE-BACD-00AA0057B223'))
|
||||
self.assertTrue(f('CA761232-ED42-11CE-BACD-00AA0057B223'))
|
||||
self.assertFalse(f('CA761232-ED42-11CE-BACD-00AA0057B22X'))
|
||||
self.assertFalse(f('CA761232-ED42-11CE-BACD-00AA0057B22'))
|
||||
|
|
Loading…
Reference in New Issue