Пример #1
0
    def test_delitem_with_3_valid_keys(self):
        d = {
            'a': {
                'b': {
                    'c': 1,
                    'd': 2,
                },
            }
        }
        b = KeypathDict(d)

        del b['a.b.c']
        with self.assertRaises(KeyError):
            del b['a.b.c']
        self.assertEqual(b.get('a.b'), {'d': 2})

        del b['a.b.d']
        with self.assertRaises(KeyError):
            del b['a.b.d']
        self.assertEqual(b.get('a.b'), {})

        del b['a.b']
        with self.assertRaises(KeyError):
            del b['a.b']
        self.assertEqual(b.get('a.b'), None)
Пример #2
0
 def test_get_with_1_not_str_key(self):
     d = {
         None: None,
         False: False,
     }
     b = KeypathDict(d)
     self.assertEqual(b.get(None, 1), None)
     self.assertEqual(b.get(False, True), False)
     self.assertEqual(b.get(True, True), True)
     self.assertEqual(b.get(0, 1), 0)
Пример #3
0
 def test_list_indexes_with_quotes(self):
     d = {
         'a': [1, 2, 3],
     }
     b = KeypathDict(d)
     self.assertEqual(b.get('a[\'0\']'), 1)
     self.assertEqual(b.get('a[\"0\"]'), 1)
     self.assertEqual(b.get("a[\"0\"]"), 1)
     self.assertEqual(b.get("a[\'0\']"), 1)
     self.assertEqual(b.get('a[\'\']'), None)
     self.assertEqual(b.get('a[\"\"]'), None)
     self.assertEqual(b.get("a[\"\"]"), None)
     self.assertEqual(b.get("a[\'\']"), None)
Пример #4
0
    def test_get_with_flat_list(self):
        d = {
            'a': [1, 2, 3],
        }
        b = KeypathDict(d)

        self.assertEqual(b.get('a[0]'), 1)
        self.assertEqual(b.get('a[1]'), 2)
        self.assertEqual(b.get('a[2]'), 3)

        self.assertEqual(b.get('a[-1]'), 3)
        self.assertEqual(b.get('a[-2]'), 2)
        self.assertEqual(b.get('a[-3]'), 1)
Пример #5
0
 def test_get_with_keys_list_and_no_keypath_separator(self):
     d = {
         'a': {
             'b': {
                 'c': 1,
                 'd': 2,
             },
         },
     }
     b = KeypathDict(d, keypath_separator=None)
     self.assertEqual(b.get(['a', 'b.c']), None)
     self.assertEqual(b.get(['a', 'b', 'c']), 1)
     self.assertEqual(b.get(['a', 'b', 'd']), 2)
     self.assertEqual(b.get(['a', 'b', 'e']), None)
Пример #6
0
 def test_init_with_custom_separator(self):
     d = {
         'a.b': {
             'c.d': 1,
             'e.f': 2,
         },
         'g.h': {
             'i.j': 3,
             'k.l': 4,
         },
     }
     b = KeypathDict(d, keypath_separator='/')
     self.assertEqual(b.get('a.b/c.d'), 1)
     self.assertEqual(b.get('a.b/e.f'), 2)
     self.assertEqual(b.get('g.h/i.j'), 3)
     self.assertEqual(b.get('g.h/k.l'), 4)
Пример #7
0
 def test_init_without_keypath_separator(self):
     d = {
         'a': {
             'b': 1,
             'c': 2,
         },
         'd': {
             'e': 3,
             'f': 4,
         },
     }
     b = KeypathDict(d, keypath_separator=None)
     self.assertEqual(b.get('a.b'), None)
     self.assertEqual(b.get('a.c'), None)
     self.assertEqual(b.get('d.e'), None)
     self.assertEqual(b.get('d.f'), None)
Пример #8
0
    def test_delitem_with_2_valid_keys(self):
        d = {
            'a': {
                'b': 1,
            }
        }
        b = KeypathDict(d)

        del b['a.b']
        with self.assertRaises(KeyError):
            del b['a.b']
        self.assertEqual(b.get('a'), {})

        del b['a']
        with self.assertRaises(KeyError):
            del b['a']
        self.assertEqual(b.get('a'), None)
Пример #9
0
 def test_delitem_with_1_invalid_key(self):
     d = {
         'a': 1,
     }
     b = KeypathDict(d)
     with self.assertRaises(KeyError):
         del b['b']
     self.assertEqual(b.get('b'), None)
Пример #10
0
 def test_update_with_dict_without_separator_in_keys(self):
     d1 = {
         'a': 1,
         'b': 2,
         'c': 3,
     }
     d2 = {
         'a.x': 4,
         'a.y': 5,
         'a.z': 6,
     }
     b = KeypathDict(d1, keypath_separator='/')
     b.update(d2)
     self.assertEqual(b.get('a'), 1)
     self.assertEqual(b.get('b'), 2)
     self.assertEqual(b.get('c'), 3)
     self.assertEqual(b.get('a.x'), 4)
     self.assertEqual(b.get('a.y'), 5)
     self.assertEqual(b.get('a.z'), 6)
Пример #11
0
 def test_delitem_with_2_invalid_keys(self):
     d = {
         'a': {
             'b': 1,
         }
     }
     b = KeypathDict(d)
     with self.assertRaises(KeyError):
         del b['a.c']
     self.assertEqual(b.get('a'), {'b': 1})
Пример #12
0
 def test_get_with_keys_list(self):
     d = {
         'a': {
             'b': {
                 'c': 1,
                 'd': 2,
             },
         },
     }
     b = KeypathDict(d)
     self.assertEqual(b.get([]), None)
     self.assertEqual(b.get(['a']), {
         'b': {
             'c': 1,
             'd': 2,
         },
     })
     self.assertEqual(b.get(['a', 'b.c']), 1)
     self.assertEqual(b.get(['a', 'b', 'c']), 1)
     self.assertEqual(b.get(['a', 'b', 'd']), 2)
     self.assertEqual(b.get(['a', 'b', 'e']), None)
Пример #13
0
 def test_delitem_with_3_invalid_keys(self):
     d = {
         'a': {
             'b': {
                 'c': 1,
                 'd': 2,
             },
         }
     }
     b = KeypathDict(d)
     with self.assertRaises(KeyError):
         del b['a.b.c.d']
     self.assertEqual(b.get('a.b.c'), 1)
Пример #14
0
 def test_delitem_with_keys_list_and_no_keypath_separator(self):
     d = {
         'a': {
             'b': {
                 'c': 1,
                 'd': 2,
             },
         }
     }
     b = KeypathDict(d, keypath_separator=None)
     with self.assertRaises(KeyError):
         del b['a', 'b', 'c', 'd']
     del b['a', 'b', 'c']
     self.assertEqual(b.get('a.b.c', 3), 3)
Пример #15
0
    def test_pop_with_2_invalid_keys(self):
        d = {
            'a': {
                'b': 1,
            }
        }
        b = KeypathDict(d)

        val = b.pop('a.c', 2)
        self.assertEqual(val, 2)
        with self.assertRaises(KeyError):
            val = b.pop('a.c')
        self.assertEqual(b.get('a'), {'b': 1})

        val = b.pop('x.y', 1)
        self.assertEqual(val, 1)
        with self.assertRaises(KeyError):
            val = b.pop('x.y')
Пример #16
0
    def test_pop_with_keys_list_and_no_keypath_separator(self):
        d = {
            'a': {
                'b': 1,
            }
        }
        b = KeypathDict(d, keypath_separator=None)

        val = b.pop(['a', 'c'], 2)
        self.assertEqual(val, 2)
        with self.assertRaises(KeyError):
            val = b.pop(['a', 'c'])
        self.assertEqual(b.get('a'), {'b': 1})

        val = b.pop(['x', 'y'], 1)
        self.assertEqual(val, 1)
        with self.assertRaises(KeyError):
            val = b.pop(['x', 'y'])

        val = b.pop(['a', 'b'])
        self.assertEqual(val, 1)
Пример #17
0
 def test_get_with_1_invalid_key(self):
     d = {
         'a': 1,
     }
     b = KeypathDict(d)
     self.assertEqual(b.get('b', 2), 2)
Пример #18
0
    def test_get_with_nested_list(self):
        d = {
            'a': {
                'b': [
                    {
                        'c': 1,
                        'd': [
                            1,
                            2,
                            3,
                            [0],
                        ],
                    },
                    {
                        'c': 2,
                        'd': [
                            4,
                            5,
                            6,
                            [0],
                        ],
                    },
                    {
                        'c': 3,
                        'd': [
                            7,
                            8,
                            9,
                            [0],
                        ],
                    },
                ],
            },
        }
        b = KeypathDict(d)

        self.assertEqual(b.get('a.b[0].c'), 1)
        self.assertEqual(b.get('a.b[0].d'), [1, 2, 3, [0]])
        self.assertEqual(b.get('a.b[0].d[0]'), 1)
        self.assertEqual(b.get('a.b[0].d[1]'), 2)
        self.assertEqual(b.get('a.b[0].d[2]'), 3)
        self.assertEqual(b.get('a.b[0].d[3][0]'), 0)

        self.assertEqual(b.get('a.b[1].c'), 2)
        self.assertEqual(b.get('a.b[1].d'), [4, 5, 6, [0]])
        self.assertEqual(b.get('a.b[1].d[0]'), 4)
        self.assertEqual(b.get('a.b[1].d[1]'), 5)
        self.assertEqual(b.get('a.b[1].d[2]'), 6)
        self.assertEqual(b.get('a.b[1].d[3][0]'), 0)

        self.assertEqual(b.get('a.b[2].c'), 3)
        self.assertEqual(b.get('a.b[2].d'), [7, 8, 9, [0]])
        self.assertEqual(b.get('a.b[2].d[0]'), 7)
        self.assertEqual(b.get('a.b[2].d[1]'), 8)
        self.assertEqual(b.get('a.b[2].d[2]'), 9)
        self.assertEqual(b.get('a.b[2].d[3][0]'), 0)
Пример #19
0
 def test_get_with_2_valid_keys(self):
     d = {'a': {'b': 1}}
     b = KeypathDict(d)
     self.assertEqual(b.get('a.b', 2), 1)
Пример #20
0
 def test_get_with_1_valid_key(self):
     d = {'a': 1, 1: 1}
     b = KeypathDict(d)
     self.assertEqual(b.get('a', 2), 1)
     self.assertEqual(b.get(1, 2), 1)
Пример #21
0
 def test_get_with_wrong_index(self):
     d = {
         'a': [1, 2, 3],
     }
     b = KeypathDict(d)
     self.assertEqual(b.get('a[3]', 1), 1)
Пример #22
0
 def test_get_with_empty_keys_list(self):
     d = {
         'a': 1,
     }
     b = KeypathDict(d)
     self.assertEqual(b.get([]), None)
Пример #23
0
 def test_get_with_3_invalid_keys(self):
     d = {'a': {'b': {'c': 1}}}
     b = KeypathDict(d)
     self.assertEqual(b.get('c.b.a', 2), 2)