Mercurial > hgrepos > Python > libs > ConfigMix
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 |
