예제 #1
0
 def merge(self, other, *args, **kwargs):
     """
     Merge one or more dict objects into current instance (deepupdate).
     Sub-dictionaries will be merged toghether.
     If overwrite is False, existing values will not be overwritten.
     """
     _merge(self, other, *args, **kwargs)
 def test_merge_with_multiple_dicts(self):
     d = {
         'a': 1,
         'b': 1,
     }
     a = {
         'b': 2,
         'c': 3,
         'd': 3,
     }
     b = {
         'd': 5,
         'e': 5,
     }
     c = {
         'd': 4,
         'f': 6,
     }
     _merge(d, a, b, c)
     r = {
         'a': 1,
         'b': 2,
         'c': 3,
         'd': 4,
         'e': 5,
         'f': 6,
     }
     self.assertEqual(d, r)
 def test_merge_with_flatten_dict(self):
     d = {
         'a': 1,
         'b': 1,
     }
     m = {
         'b': 2,
         'c': 3,
     }
     _merge(d, m)
     r = {
         'a': 1,
         'b': 2,
         'c': 3,
     }
     self.assertEqual(d, r)
 def test_merge_with_lists_and_concat(self):
     d = {
         'a': [0, 1, 2],
         'b': [5, 6, 7],
         'c': [],
         'd': [],
     }
     m = {'a': [3, 4, 5], 'b': [8, 9, 0], 'c': [-1]}
     _merge(d, m, concat=True)
     r = {
         'a': [0, 1, 2, 3, 4, 5],
         'b': [5, 6, 7, 8, 9, 0],
         'c': [-1],
         'd': [],
     }
     self.assertEqual(d, r)
 def test_merge_with_lists(self):
     d = {
         'a': [0, 1, 2],
         'b': [5, 6, 7],
         'c': [],
         'd': [],
     }
     m = {'a': [3, 4, 5], 'b': [8, 9, 0], 'c': [-1]}
     _merge(d, m)
     r = {
         'a': [3, 4, 5],
         'b': [8, 9, 0],
         'c': [-1],
         'd': [],
     }
     self.assertEqual(d, r)
 def test_merge_with_nested_dict(self):
     d = {
         'a': 1,
         'b': {
             'c': {
                 'x': 2,
                 'y': 3,
             },
             'd': {
                 'x': 4,
                 'y': 5,
             },
             'e': {
                 'x': 6,
                 'y': 7,
             },
         },
     }
     m = {
         'a': 0,
         'b': {
             'c': 1,
             'd': {
                 'y': 1,
                 'z': 2,
             },
             'e': {
                 'f': {
                     'x': 2,
                     'y': 3,
                 },
                 'g': {
                     'x': 4,
                     'y': 5,
                 },
             },
         },
     }
     _merge(d, m)
     r = {
         'a': 0,
         'b': {
             'c': 1,
             'd': {
                 'x': 4,
                 'y': 1,
                 'z': 2,
             },
             'e': {
                 'f': {
                     'x': 2,
                     'y': 3,
                 },
                 'g': {
                     'x': 4,
                     'y': 5,
                 },
                 'x': 6,
                 'y': 7,
             },
         },
     }
     self.assertEqual(d, r)
 def test_merge_without_overwrite(self):
     d = {
         'a': 1,
         'b': {
             'c': {
                 'x': 2,
                 'y': 3,
             },
             'd': {
                 'x': 4,
                 'y': 5,
             },
             'e': {
                 'x': 6,
                 'y': 7,
             },
         },
     }
     m = {
         'a': 0,
         'b': {
             'c': 1,
             'd': {
                 'y': 1,
                 'z': 2,
             },
             'e': {
                 'f': {
                     'x': 2,
                     'y': 3,
                 },
                 'g': {
                     'x': 4,
                     'y': 5,
                 },
             },
         },
     }
     _merge(d, m, overwrite=False)
     r = {
         'a': 1,
         'b': {
             'c': {
                 'x': 2,
                 'y': 3,
             },
             'd': {
                 'x': 4,
                 'y': 5,
                 'z': 2,
             },
             'e': {
                 'f': {
                     'x': 2,
                     'y': 3,
                 },
                 'g': {
                     'x': 4,
                     'y': 5,
                 },
                 'x': 6,
                 'y': 7,
             },
         },
     }
     self.assertEqual(d, r)
예제 #8
0
 def merge(self, other, *args):
     """
     Merge one or more dict objects into current instance (deepupdate).
     Sub-dictionaries will be merged toghether.
     """
     _merge(self, other, *args)