Mercurial > hgrepos > Python > libs > ConfigMix
annotate configmix/__init__.py @ 107:2ee042791197
Don't read the first configuration file a second time.
Because of merging nothing bad happend with the old implementation.
| author | Franz Glasner <hg@dom66.de> |
|---|---|
| date | Sat, 24 Mar 2018 15:34:52 +0100 |
| parents | d6ba53ce2091 |
| children | 2196362c0467 |
| rev | line source |
|---|---|
|
0
53ea2bc254e7
Begin a package to abstract some of the important configuration handling stuff.
Franz Glasner <hg@dom66.de>
parents:
diff
changeset
|
1 # -*- coding: utf-8 -*- |
|
82
218807d7d883
Remove header markup from the Python files and put them into the doc .rst files
Franz Glasner <hg@dom66.de>
parents:
79
diff
changeset
|
2 """A library for helping with configuration files. |
|
4
f76d85ccc5b9
Switch to the "New BSD License"
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
0
diff
changeset
|
3 |
|
73
6216c561532a
Put a Copyright and License notice into the package's __init__.py
Franz Glasner <hg@dom66.de>
parents:
69
diff
changeset
|
4 :Author: Franz Glasner |
|
84
6b6acc50a19d
Remove duplicate "Copyright" output
Franz Glasner <hg@dom66.de>
parents:
82
diff
changeset
|
5 :Copyright: (c) 2015–2018, Franz Glasner. |
|
73
6216c561532a
Put a Copyright and License notice into the package's __init__.py
Franz Glasner <hg@dom66.de>
parents:
69
diff
changeset
|
6 All rights reserved. |
|
78
3a8f712d27df
Put copyright and license into the README.txt
Franz Glasner <hg@dom66.de>
parents:
73
diff
changeset
|
7 :License: 3-clause BSD License. |
|
73
6216c561532a
Put a Copyright and License notice into the package's __init__.py
Franz Glasner <hg@dom66.de>
parents:
69
diff
changeset
|
8 See LICENSE.txt for details. |
|
6216c561532a
Put a Copyright and License notice into the package's __init__.py
Franz Glasner <hg@dom66.de>
parents:
69
diff
changeset
|
9 :ID: $Header$ |
|
4
f76d85ccc5b9
Switch to the "New BSD License"
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
0
diff
changeset
|
10 |
|
f76d85ccc5b9
Switch to the "New BSD License"
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
0
diff
changeset
|
11 """ |
|
0
53ea2bc254e7
Begin a package to abstract some of the important configuration handling stuff.
Franz Glasner <hg@dom66.de>
parents:
diff
changeset
|
12 |
|
53ea2bc254e7
Begin a package to abstract some of the important configuration handling stuff.
Franz Glasner <hg@dom66.de>
parents:
diff
changeset
|
13 from __future__ import division, print_function, absolute_import |
|
53ea2bc254e7
Begin a package to abstract some of the important configuration handling stuff.
Franz Glasner <hg@dom66.de>
parents:
diff
changeset
|
14 |
|
53ea2bc254e7
Begin a package to abstract some of the important configuration handling stuff.
Franz Glasner <hg@dom66.de>
parents:
diff
changeset
|
15 |
|
96
778c3bb1fb41
Bump development version to 0.6.0.dev1
Franz Glasner <hg@dom66.de>
parents:
85
diff
changeset
|
16 __version__ = "0.6.0.dev1" |
|
0
53ea2bc254e7
Begin a package to abstract some of the important configuration handling stuff.
Franz Glasner <hg@dom66.de>
parents:
diff
changeset
|
17 |
|
52
6c7f90dbce98
Adjusted the Copyright and change the RCS keywords in accordance with "kwarchive"
Franz Glasner <hg@dom66.de>
parents:
45
diff
changeset
|
18 __revision__ = "$Revision$" |
|
6c7f90dbce98
Adjusted the Copyright and change the RCS keywords in accordance with "kwarchive"
Franz Glasner <hg@dom66.de>
parents:
45
diff
changeset
|
19 |
|
0
53ea2bc254e7
Begin a package to abstract some of the important configuration handling stuff.
Franz Glasner <hg@dom66.de>
parents:
diff
changeset
|
20 |
|
10
58af59d5af40
A "safe_merge" that makes (shallow) copies instead of directly manipulating given containers
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
9
diff
changeset
|
21 import copy |
|
58af59d5af40
A "safe_merge" that makes (shallow) copies instead of directly manipulating given containers
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
9
diff
changeset
|
22 |
|
22
6a91db2c2469
A convenience function to load and merge a list of configuration files with different styles
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
13
diff
changeset
|
23 from .config import Configuration |
|
10
58af59d5af40
A "safe_merge" that makes (shallow) copies instead of directly manipulating given containers
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
9
diff
changeset
|
24 |
|
22
6a91db2c2469
A convenience function to load and merge a list of configuration files with different styles
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
13
diff
changeset
|
25 |
|
6a91db2c2469
A convenience function to load and merge a list of configuration files with different styles
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
13
diff
changeset
|
26 __all__ = ["load", "Configuration"] |
|
6a91db2c2469
A convenience function to load and merge a list of configuration files with different styles
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
13
diff
changeset
|
27 |
|
6a91db2c2469
A convenience function to load and merge a list of configuration files with different styles
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
13
diff
changeset
|
28 |
|
6a91db2c2469
A convenience function to load and merge a list of configuration files with different styles
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
13
diff
changeset
|
29 def load(*files): |
|
6a91db2c2469
A convenience function to load and merge a list of configuration files with different styles
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
13
diff
changeset
|
30 """Load the given configuration files, merge them in the given order |
|
98
d6ba53ce2091
Better documentation of the core function in "configmix"
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
96
diff
changeset
|
31 and return the resulting :class:`configmix.config.Configuration` |
|
d6ba53ce2091
Better documentation of the core function in "configmix"
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
96
diff
changeset
|
32 dictionary. |
|
22
6a91db2c2469
A convenience function to load and merge a list of configuration files with different styles
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
13
diff
changeset
|
33 |
|
6a91db2c2469
A convenience function to load and merge a list of configuration files with different styles
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
13
diff
changeset
|
34 """ |
|
6a91db2c2469
A convenience function to load and merge a list of configuration files with different styles
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
13
diff
changeset
|
35 if not files: |
|
6a91db2c2469
A convenience function to load and merge a list of configuration files with different styles
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
13
diff
changeset
|
36 return Configuration() |
|
6a91db2c2469
A convenience function to load and merge a list of configuration files with different styles
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
13
diff
changeset
|
37 else: |
|
6a91db2c2469
A convenience function to load and merge a list of configuration files with different styles
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
13
diff
changeset
|
38 ex = merge(None, _load_cfg_from_file(files[0])) |
|
107
2ee042791197
Don't read the first configuration file a second time.
Franz Glasner <hg@dom66.de>
parents:
98
diff
changeset
|
39 for f in files[1:]: |
|
22
6a91db2c2469
A convenience function to load and merge a list of configuration files with different styles
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
13
diff
changeset
|
40 ex = merge(_load_cfg_from_file(f), ex) |
|
6a91db2c2469
A convenience function to load and merge a list of configuration files with different styles
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
13
diff
changeset
|
41 return Configuration(ex) |
|
6a91db2c2469
A convenience function to load and merge a list of configuration files with different styles
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
13
diff
changeset
|
42 |
|
6a91db2c2469
A convenience function to load and merge a list of configuration files with different styles
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
13
diff
changeset
|
43 |
|
6a91db2c2469
A convenience function to load and merge a list of configuration files with different styles
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
13
diff
changeset
|
44 def _load_cfg_from_file(filename): |
|
6a91db2c2469
A convenience function to load and merge a list of configuration files with different styles
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
13
diff
changeset
|
45 fnl = filename.lower() |
|
6a91db2c2469
A convenience function to load and merge a list of configuration files with different styles
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
13
diff
changeset
|
46 if fnl.endswith(".yml") or fnl.endswith("yaml"): |
|
6a91db2c2469
A convenience function to load and merge a list of configuration files with different styles
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
13
diff
changeset
|
47 from . import yaml |
|
6a91db2c2469
A convenience function to load and merge a list of configuration files with different styles
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
13
diff
changeset
|
48 with open(filename, "rb") as yf: |
|
6a91db2c2469
A convenience function to load and merge a list of configuration files with different styles
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
13
diff
changeset
|
49 return yaml.safe_load(yf) |
|
6a91db2c2469
A convenience function to load and merge a list of configuration files with different styles
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
13
diff
changeset
|
50 elif fnl.endswith(".py"): |
|
6a91db2c2469
A convenience function to load and merge a list of configuration files with different styles
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
13
diff
changeset
|
51 from . import py |
|
6a91db2c2469
A convenience function to load and merge a list of configuration files with different styles
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
13
diff
changeset
|
52 return py.load(filename) |
|
6a91db2c2469
A convenience function to load and merge a list of configuration files with different styles
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
13
diff
changeset
|
53 elif fnl.endswith(".ini"): |
|
6a91db2c2469
A convenience function to load and merge a list of configuration files with different styles
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
13
diff
changeset
|
54 from . import ini |
|
6a91db2c2469
A convenience function to load and merge a list of configuration files with different styles
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
13
diff
changeset
|
55 return ini.load(filename) |
|
6a91db2c2469
A convenience function to load and merge a list of configuration files with different styles
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
13
diff
changeset
|
56 else: |
|
6a91db2c2469
A convenience function to load and merge a list of configuration files with different styles
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
13
diff
changeset
|
57 raise ValueError("Unknown configuration file type for filename " |
|
6a91db2c2469
A convenience function to load and merge a list of configuration files with different styles
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
13
diff
changeset
|
58 "%r" % filename) |
|
8
7090c295c940
Two differend tree merge function implementations: not yet finished
Franz Glasner <hg@dom66.de>
parents:
5
diff
changeset
|
59 |
|
7090c295c940
Two differend tree merge function implementations: not yet finished
Franz Glasner <hg@dom66.de>
parents:
5
diff
changeset
|
60 |
|
11
aecb36d4025f
Deactivate the "dict_merge()" function from yconfig
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
10
diff
changeset
|
61 if 0: |
|
aecb36d4025f
Deactivate the "dict_merge()" function from yconfig
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
10
diff
changeset
|
62 # |
|
aecb36d4025f
Deactivate the "dict_merge()" function from yconfig
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
10
diff
changeset
|
63 # From: https://github.com/jet9/python-yconfig/blob/master/yconfig.py |
|
aecb36d4025f
Deactivate the "dict_merge()" function from yconfig
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
10
diff
changeset
|
64 # License: BSD License |
|
aecb36d4025f
Deactivate the "dict_merge()" function from yconfig
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
10
diff
changeset
|
65 # |
|
aecb36d4025f
Deactivate the "dict_merge()" function from yconfig
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
10
diff
changeset
|
66 def dict_merge(a, b): |
|
aecb36d4025f
Deactivate the "dict_merge()" function from yconfig
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
10
diff
changeset
|
67 """Recursively merges dict's. not just simple a['key'] = b['key'], if |
|
aecb36d4025f
Deactivate the "dict_merge()" function from yconfig
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
10
diff
changeset
|
68 both a and bhave a key who's value is a dict then dict_merge is called |
|
aecb36d4025f
Deactivate the "dict_merge()" function from yconfig
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
10
diff
changeset
|
69 on both values and the result stored in the returned dictionary.""" |
|
8
7090c295c940
Two differend tree merge function implementations: not yet finished
Franz Glasner <hg@dom66.de>
parents:
5
diff
changeset
|
70 |
|
11
aecb36d4025f
Deactivate the "dict_merge()" function from yconfig
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
10
diff
changeset
|
71 if not isinstance(b, dict): |
|
aecb36d4025f
Deactivate the "dict_merge()" function from yconfig
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
10
diff
changeset
|
72 return b |
|
aecb36d4025f
Deactivate the "dict_merge()" function from yconfig
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
10
diff
changeset
|
73 result = deepcopy(a) |
|
aecb36d4025f
Deactivate the "dict_merge()" function from yconfig
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
10
diff
changeset
|
74 for k, v in b.iteritems(): |
|
aecb36d4025f
Deactivate the "dict_merge()" function from yconfig
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
10
diff
changeset
|
75 if k in result and isinstance(result[k], dict): |
|
aecb36d4025f
Deactivate the "dict_merge()" function from yconfig
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
10
diff
changeset
|
76 result[k] = dict_merge(result[k], v) |
|
aecb36d4025f
Deactivate the "dict_merge()" function from yconfig
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
10
diff
changeset
|
77 else: |
|
aecb36d4025f
Deactivate the "dict_merge()" function from yconfig
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
10
diff
changeset
|
78 result[k] = deepcopy(v) |
|
aecb36d4025f
Deactivate the "dict_merge()" function from yconfig
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
10
diff
changeset
|
79 return result |
|
8
7090c295c940
Two differend tree merge function implementations: not yet finished
Franz Glasner <hg@dom66.de>
parents:
5
diff
changeset
|
80 |
|
7090c295c940
Two differend tree merge function implementations: not yet finished
Franz Glasner <hg@dom66.de>
parents:
5
diff
changeset
|
81 |
|
13
24ba462b9b4b
Return the `default' argument when the given `user' argument is `None' and when it is the first call on merge
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
11
diff
changeset
|
82 def merge(user, default, _first=True): |
|
98
d6ba53ce2091
Better documentation of the core function in "configmix"
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
96
diff
changeset
|
83 """A simple (YAML-)tree-merge. |
|
d6ba53ce2091
Better documentation of the core function in "configmix"
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
96
diff
changeset
|
84 |
|
d6ba53ce2091
Better documentation of the core function in "configmix"
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
96
diff
changeset
|
85 :param ~configmix.config.Configuration user: |
|
d6ba53ce2091
Better documentation of the core function in "configmix"
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
96
diff
changeset
|
86 the new configuration that will be merged into `default` |
|
d6ba53ce2091
Better documentation of the core function in "configmix"
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
96
diff
changeset
|
87 :param ~configmix.config.Configuration default: |
|
d6ba53ce2091
Better documentation of the core function in "configmix"
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
96
diff
changeset
|
88 the base configuration where `user` is merged into |
|
d6ba53ce2091
Better documentation of the core function in "configmix"
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
96
diff
changeset
|
89 :param bool _first: an intexrnal argument for controlling recursion |
|
8
7090c295c940
Two differend tree merge function implementations: not yet finished
Franz Glasner <hg@dom66.de>
parents:
5
diff
changeset
|
90 |
|
7090c295c940
Two differend tree merge function implementations: not yet finished
Franz Glasner <hg@dom66.de>
parents:
5
diff
changeset
|
91 From http://stackoverflow.com/questions/823196/yaml-merge-in-python |
|
7090c295c940
Two differend tree merge function implementations: not yet finished
Franz Glasner <hg@dom66.de>
parents:
5
diff
changeset
|
92 |
|
13
24ba462b9b4b
Return the `default' argument when the given `user' argument is `None' and when it is the first call on merge
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
11
diff
changeset
|
93 .. note:: `_first` is an internal argument. |
|
24ba462b9b4b
Return the `default' argument when the given `user' argument is `None' and when it is the first call on merge
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
11
diff
changeset
|
94 |
|
8
7090c295c940
Two differend tree merge function implementations: not yet finished
Franz Glasner <hg@dom66.de>
parents:
5
diff
changeset
|
95 """ |
|
13
24ba462b9b4b
Return the `default' argument when the given `user' argument is `None' and when it is the first call on merge
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
11
diff
changeset
|
96 if _first and (user is None): |
|
24ba462b9b4b
Return the `default' argument when the given `user' argument is `None' and when it is the first call on merge
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
11
diff
changeset
|
97 return default |
|
8
7090c295c940
Two differend tree merge function implementations: not yet finished
Franz Glasner <hg@dom66.de>
parents:
5
diff
changeset
|
98 if isinstance(user, dict) and isinstance(default, dict): |
| 9 | 99 for k, v in default.items(): |
|
8
7090c295c940
Two differend tree merge function implementations: not yet finished
Franz Glasner <hg@dom66.de>
parents:
5
diff
changeset
|
100 if k not in user: |
|
7090c295c940
Two differend tree merge function implementations: not yet finished
Franz Glasner <hg@dom66.de>
parents:
5
diff
changeset
|
101 user[k] = v |
|
7090c295c940
Two differend tree merge function implementations: not yet finished
Franz Glasner <hg@dom66.de>
parents:
5
diff
changeset
|
102 else: |
|
13
24ba462b9b4b
Return the `default' argument when the given `user' argument is `None' and when it is the first call on merge
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
11
diff
changeset
|
103 user[k] = merge(user[k], v, False) |
|
8
7090c295c940
Two differend tree merge function implementations: not yet finished
Franz Glasner <hg@dom66.de>
parents:
5
diff
changeset
|
104 return user |
|
10
58af59d5af40
A "safe_merge" that makes (shallow) copies instead of directly manipulating given containers
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
9
diff
changeset
|
105 |
|
58af59d5af40
A "safe_merge" that makes (shallow) copies instead of directly manipulating given containers
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
9
diff
changeset
|
106 |
|
13
24ba462b9b4b
Return the `default' argument when the given `user' argument is `None' and when it is the first call on merge
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
11
diff
changeset
|
107 def safe_merge(user, default, _first=True): |
|
56
1f11672c4615
Optimize the documentation: make references working with Sphinx using :role:`target`
Franz Glasner <hg@dom66.de>
parents:
54
diff
changeset
|
108 """A more safe version of :func:`merge()` that makes shallow copies of |
|
13
24ba462b9b4b
Return the `default' argument when the given `user' argument is `None' and when it is the first call on merge
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
11
diff
changeset
|
109 the returned container objects. |
|
24ba462b9b4b
Return the `default' argument when the given `user' argument is `None' and when it is the first call on merge
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
11
diff
changeset
|
110 |
|
24ba462b9b4b
Return the `default' argument when the given `user' argument is `None' and when it is the first call on merge
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
11
diff
changeset
|
111 .. note:: `_first` is an internal argument. |
|
10
58af59d5af40
A "safe_merge" that makes (shallow) copies instead of directly manipulating given containers
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
9
diff
changeset
|
112 |
|
58af59d5af40
A "safe_merge" that makes (shallow) copies instead of directly manipulating given containers
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
9
diff
changeset
|
113 """ |
|
13
24ba462b9b4b
Return the `default' argument when the given `user' argument is `None' and when it is the first call on merge
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
11
diff
changeset
|
114 if _first and (user is None): |
|
24ba462b9b4b
Return the `default' argument when the given `user' argument is `None' and when it is the first call on merge
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
11
diff
changeset
|
115 return copy.copy(default) |
|
10
58af59d5af40
A "safe_merge" that makes (shallow) copies instead of directly manipulating given containers
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
9
diff
changeset
|
116 user = copy.copy(user) |
|
58af59d5af40
A "safe_merge" that makes (shallow) copies instead of directly manipulating given containers
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
9
diff
changeset
|
117 if isinstance(user, dict) and isinstance(default, dict): |
|
58af59d5af40
A "safe_merge" that makes (shallow) copies instead of directly manipulating given containers
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
9
diff
changeset
|
118 for k, v in default.items(): |
|
58af59d5af40
A "safe_merge" that makes (shallow) copies instead of directly manipulating given containers
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
9
diff
changeset
|
119 if k not in user: |
|
58af59d5af40
A "safe_merge" that makes (shallow) copies instead of directly manipulating given containers
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
9
diff
changeset
|
120 user[k] = copy.copy(v) |
|
58af59d5af40
A "safe_merge" that makes (shallow) copies instead of directly manipulating given containers
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
9
diff
changeset
|
121 else: |
|
13
24ba462b9b4b
Return the `default' argument when the given `user' argument is `None' and when it is the first call on merge
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
11
diff
changeset
|
122 user[k] = merge(user[k], v, False) |
|
10
58af59d5af40
A "safe_merge" that makes (shallow) copies instead of directly manipulating given containers
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
9
diff
changeset
|
123 return user |
