Mercurial > hgrepos > Python > libs > ConfigMix
comparison configmix/__init__.py @ 8:7090c295c940
Two differend tree merge function implementations: not yet finished
| author | Franz Glasner <hg@dom66.de> |
|---|---|
| date | Wed, 09 Mar 2016 09:05:41 +0100 |
| parents | dc058099a4cb |
| children | 6835a5663008 |
comparison
equal
deleted
inserted
replaced
| 7:7c095c6223b8 | 8:7090c295c940 |
|---|---|
| 17 | 17 |
| 18 __version__ = "0.0.dev0" | 18 __version__ = "0.0.dev0" |
| 19 | 19 |
| 20 | 20 |
| 21 __all__ = [] | 21 __all__ = [] |
| 22 | |
| 23 | |
| 24 # | |
| 25 # From: https://github.com/jet9/python-yconfig/blob/master/yconfig.py | |
| 26 # License: BSD License | |
| 27 # | |
| 28 def dict_merge(a, b): | |
| 29 """Recursively merges dict's. not just simple a['key'] = b['key'], if | |
| 30 both a and bhave a key who's value is a dict then dict_merge is called | |
| 31 on both values and the result stored in the returned dictionary.""" | |
| 32 | |
| 33 if not isinstance(b, dict): | |
| 34 return b | |
| 35 result = deepcopy(a) | |
| 36 for k, v in b.iteritems(): | |
| 37 if k in result and isinstance(result[k], dict): | |
| 38 result[k] = dict_merge(result[k], v) | |
| 39 else: | |
| 40 result[k] = deepcopy(v) | |
| 41 return result | |
| 42 | |
| 43 | |
| 44 def merge(user, default): | |
| 45 """A simple (YAML-)tree merge. | |
| 46 | |
| 47 From http://stackoverflow.com/questions/823196/yaml-merge-in-python | |
| 48 | |
| 49 """ | |
| 50 if isinstance(user, dict) and isinstance(default, dict): | |
| 51 for k,v in default.items(): | |
| 52 if k not in user: | |
| 53 user[k] = v | |
| 54 else: | |
| 55 user[k] = merge(user[k], v) | |
| 56 return user |
