Added get_list_item utlity method to ParseDict.
This commit is contained in:
parent
ec57688c8e
commit
16a1f6efec
|
@ -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.
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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 ',
|
||||||
|
|
Loading…
Reference in New Issue