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