comparison configmix/__init__.py @ 10:58af59d5af40

A "safe_merge" that makes (shallow) copies instead of directly manipulating given containers
author Franz Glasner <f.glasner@feldmann-mg.com>
date Wed, 09 Mar 2016 11:19:20 +0100
parents 6835a5663008
children aecb36d4025f
comparison
equal deleted inserted replaced
9:6835a5663008 10:58af59d5af40
4 :Author: Franz Glasner 4 :Author: Franz Glasner
5 :License: BSD License. 5 :License: BSD License.
6 See LICENSE for details. 6 See LICENSE for details.
7 7
8 """ 8 """
9 #
10 # NOTE: ONLY STANDARDLIB-IMPORTS IN THIS MODULE.
11 # ITS JUST FOR BOOTSTRAPPING WITH PYTHON2 and PYTHON3.
12 # NO `future`, `six`, ...
13 #
14 9
15 from __future__ import division, print_function, absolute_import 10 from __future__ import division, print_function, absolute_import
16 11
17 12
18 __version__ = "0.0.dev0" 13 __version__ = "0.0.dev0"
14
15
16 import copy
19 17
20 18
21 __all__ = [] 19 __all__ = []
22 20
23 21
52 if k not in user: 50 if k not in user:
53 user[k] = v 51 user[k] = v
54 else: 52 else:
55 user[k] = merge(user[k], v) 53 user[k] = merge(user[k], v)
56 return user 54 return user
55
56
57 def safe_merge(user, default):
58 """A more safe version of `merge()` that makes shallow copies of
59 the container objects.
60
61 """
62 user = copy.copy(user)
63 if isinstance(user, dict) and isinstance(default, dict):
64 for k, v in default.items():
65 if k not in user:
66 user[k] = copy.copy(v)
67 else:
68 user[k] = merge(user[k], v)
69 return user