Added get_list_item utlity method to ParseDict.

This commit is contained in:
Fabio Caccamo 2019-06-10 15:50:54 +02:00
parent ec57688c8e
commit 16a1f6efec
3 changed files with 45 additions and 0 deletions

View File

@ -148,6 +148,21 @@ class ParseDict(dict):
key, default or [], None, parse_util.parse_list, key, default or [], None, parse_util.parse_list,
{'separator': separator}) {'separator': separator})
def get_list_item(self, key, index=0, default=None, separator=','):
"""
Get list by key or keypath and return value at the specified index.
If separator is specified and list value is a string it will be splitted.
"""
values = self.get_list(key, None, separator)
if values:
try:
value = values[index]
return value
except IndexError:
return default
else:
return default
def get_slug(self, key, default='', options=None): def get_slug(self, key, default='', options=None):
""" """
Get value by key or keypath trying to return it as slug. Get value by key or keypath trying to return it as slug.

View File

@ -124,6 +124,19 @@ class BenedictTestCase(unittest.TestCase):
self.assertTrue(isinstance(b.get_dict('a'), benedict)) self.assertTrue(isinstance(b.get_dict('a'), benedict))
self.assertEqual(b.get('a.x'), 1) self.assertEqual(b.get('a.x'), 1)
def test_get_list_item(self):
d = {
'a': {
'b': {
'c': 1,
}
},
}
b = benedict(d)
self.assertTrue(isinstance(b.get_dict('a'), benedict))
self.assertTrue(isinstance(b.get_dict('a.b'), benedict))
self.assertEqual(b.get('a.b.c'), 1)
def test_get(self): def test_get(self):
d = { d = {
'a': 1, 'a': 1,

View File

@ -300,6 +300,23 @@ class ParseDictTestCase(unittest.TestCase):
self.assertEqual(b.get_list('d', separator=','), []) self.assertEqual(b.get_list('d', separator=','), [])
self.assertEqual(b.get_list('e', [0], separator=','), [0]) self.assertEqual(b.get_list('e', [0], separator=','), [0])
def test_get_list_item(self):
d = {
'a': (1, 2, 3, 4, 5, ),
'b': [6, 7, 8, 9, 0],
'c': {},
}
b = ParseDict(d)
self.assertEqual(b.get_list_item('a'), 1)
self.assertEqual(b.get_list_item('a', index=1), 2)
self.assertEqual(b.get_list_item('a', index=-1), 5)
self.assertEqual(b.get_list_item('a', index=10), None)
self.assertEqual(b.get_list_item('b'), 6)
self.assertEqual(b.get_list_item('b', index=1), 7)
self.assertEqual(b.get_list_item('b', index=-1), 0)
self.assertEqual(b.get_list_item('b', index=10), None)
self.assertEqual(b.get_list_item('c', index=1), None)
def test_get_slug(self): def test_get_slug(self):
d = { d = {
'a': ' Hello World ', 'a': ' Hello World ',