def test_multiple_lookups_accepted(self): d = {'a': {'b': 5, 'z': 20}, 'c': {'d': 3}, 'x': 40} self.assertEqual( pluck(d, 'a.b', 'c.e', 'c.d', 'x', default=None), (5, None, 3, 40), )
def test_pluck_top_level(self): d = {'a': {'b': 5, 'z': 20}, 'c': {'d': 3}, 'x': 40} self.assertEqual(pluck(d, 'x'), 40) self.assertEqual(pluck(d, 'c'), {'d': 3})
def test_specifying_default_value(self): d = {'a': {'b': 5, 'z': 20}, 'c': {'d': 3}, 'x': 40} self.assertEqual(pluck(d, 'c.e', default=None), None) self.assertEqual(pluck(d, 'y.z', default=0), 0)
def test_specifying_separator(self): d = {'a': {'b': 5, 'z': 20}, 'c': {'d': 3}, 'x': 40} self.assertEqual(pluck(d, 'c/d', sep='/'), 3) self.assertEqual(pluck(d, 'a.b', sep='.'), 5) self.assertEqual(pluck(d, 'a z', sep=' '), 20)
def test_exception_on_missing_item(self): d = {'a': {'b': 5, 'z': 20}, 'c': {'d': 3}, 'x': 40} with self.assertRaises(KeyError): pluck(d, 'c.e') with self.assertRaises(KeyError): pluck(d, 'z')
def test_pluck_many_levels_deep(self): d = {'a': {'b': {'c': {'d': {'e': 4}}}}} self.assertEqual(pluck(d, 'a.b.c'), {'d': {'e': 4}}) self.assertEqual(pluck(d, 'a.b.c.d'), {'e': 4}) self.assertEqual(pluck(d, 'a.b.c.d.e'), 4)
def test_pluck_one_level_deep(self): d = {'a': {'b': 5, 'z': 20}, 'c': {'d': 3}, 'x': 40} self.assertEqual(pluck(d, 'a.b'), 5) self.assertEqual(pluck(d, 'c.d'), 3)