Show More
@@ -200,14 +200,14 class Config(dict): | |||
|
200 | 200 | to_update = {} |
|
201 | 201 | for k, v in iteritems(other): |
|
202 | 202 | if k not in self: |
|
203 | to_update[k] = v | |
|
203 | to_update[k] = copy.deepcopy(v) | |
|
204 | 204 | else: # I have this key |
|
205 | 205 | if isinstance(v, Config) and isinstance(self[k], Config): |
|
206 | 206 | # Recursively merge common sub Configs |
|
207 | 207 | self[k].merge(v) |
|
208 | 208 | else: |
|
209 | 209 | # Plain updates for non-Configs |
|
210 | to_update[k] = v | |
|
210 | to_update[k] = copy.deepcopy(v) | |
|
211 | 211 | |
|
212 | 212 | self.update(to_update) |
|
213 | 213 |
@@ -357,4 +357,19 class TestConfigContainers(TestCase): | |||
|
357 | 357 | obj = Containers(config=c) |
|
358 | 358 | self.assertEqual(obj.d, {'a':'b', 'c':'d', 'e':'f'}) |
|
359 | 359 | |
|
360 | def test_update_twice(self): | |
|
361 | c = Config() | |
|
362 | c.MyConfigurable.a = 5 | |
|
363 | m = MyConfigurable(config=c) | |
|
364 | self.assertEqual(m.a, 5) | |
|
365 | ||
|
366 | c2 = Config() | |
|
367 | c2.MyConfigurable.a = 10 | |
|
368 | m.update_config(c2) | |
|
369 | self.assertEqual(m.a, 10) | |
|
370 | ||
|
371 | c2.MyConfigurable.a = 15 | |
|
372 | m.update_config(c2) | |
|
373 | self.assertEqual(m.a, 15) | |
|
374 | ||
|
360 | 375 |
@@ -324,4 +324,14 class TestConfig(TestCase): | |||
|
324 | 324 | foo = cfg['foo'] |
|
325 | 325 | assert isinstance(foo, LazyConfigValue) |
|
326 | 326 | self.assertIn('foo', cfg) |
|
327 | ||
|
328 | def test_merge_copies(self): | |
|
329 | c = Config() | |
|
330 | c2 = Config() | |
|
331 | c2.Foo.trait = [] | |
|
332 | c.merge(c2) | |
|
333 | c2.Foo.trait.append(1) | |
|
334 | self.assertIsNot(c.Foo, c2.Foo) | |
|
335 | self.assertEqual(c.Foo.trait, []) | |
|
336 | self.assertEqual(c2.Foo.trait, [1]) | |
|
327 | 337 |
General Comments 0
You need to be logged in to leave comments.
Login now