Mercurial > hgrepos > Python > libs > ConfigMix
changeset 13:24ba462b9b4b
Return the `default' argument when the given `user' argument is `None' and when it is the first call on merge
| author | Franz Glasner <f.glasner@feldmann-mg.com> |
|---|---|
| date | Wed, 09 Mar 2016 11:43:18 +0100 |
| parents | 0f64d640cba0 |
| children | 36fa039f7e11 |
| files | configmix/__init__.py |
| diffstat | 1 files changed, 13 insertions(+), 5 deletions(-) [+] |
line wrap: on
line diff
--- a/configmix/__init__.py Wed Mar 09 11:35:57 2016 +0100 +++ b/configmix/__init__.py Wed Mar 09 11:43:18 2016 +0100 @@ -40,31 +40,39 @@ return result -def merge(user, default): +def merge(user, default, _first=True): """A simple (YAML-)tree merge. From http://stackoverflow.com/questions/823196/yaml-merge-in-python + .. note:: `_first` is an internal argument. + """ + if _first and (user is None): + return default if isinstance(user, dict) and isinstance(default, dict): for k, v in default.items(): if k not in user: user[k] = v else: - user[k] = merge(user[k], v) + user[k] = merge(user[k], v, False) return user -def safe_merge(user, default): +def safe_merge(user, default, _first=True): """A more safe version of `merge()` that makes shallow copies of - the container objects. + the returned container objects. + + .. note:: `_first` is an internal argument. """ + if _first and (user is None): + return copy.copy(default) user = copy.copy(user) if isinstance(user, dict) and isinstance(default, dict): for k, v in default.items(): if k not in user: user[k] = copy.copy(v) else: - user[k] = merge(user[k], v) + user[k] = merge(user[k], v, False) return user
