Added get_uuid and get_uuid_list methods.

This commit is contained in:
Fabio Caccamo 2020-10-15 14:18:02 +02:00
parent 691f67ef1b
commit ca0defcb38
6 changed files with 73 additions and 0 deletions

View File

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

View File

@ -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

View File

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

View File

@ -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])

View File

@ -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

View File

@ -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'))