# HG changeset patch # User Franz Glasner # Date 1557301191 -7200 # Node ID b869e792310efe1ac14518e5d1c66d18f0f47792 # Parent c03c9162f7e6bf33ed88874d34a1f7d0d47df118 FIX: Extra merged and unsafe merges in configmix.safe_load diff -r c03c9162f7e6 -r b869e792310e CHANGES.txt --- a/CHANGES.txt Wed May 08 09:34:00 2019 +0200 +++ b/CHANGES.txt Wed May 08 09:39:51 2019 +0200 @@ -16,6 +16,12 @@ :version: 0.7.1.dev1 :released: unreleased + .. change:: + :tags: bugfix + + :py:function:`configmix.safe_load` did some preliminary unsafe merges + from `defaults` and an extra additional unneeded merge. + .. changelog:: :version: 0.7 :released: 2019-05-06 diff -r c03c9162f7e6 -r b869e792310e configmix/__init__.py --- a/configmix/__init__.py Wed May 08 09:34:00 2019 +0200 +++ b/configmix/__init__.py Wed May 08 09:39:51 2019 +0200 @@ -63,16 +63,15 @@ return Configuration() else: return Configuration(defaults) + if defaults is None: + start = 1 + ex = merge(None, _load_cfg_from_file(files[0])) else: - if defaults is None: - start = 1 - ex = merge(None, _load_cfg_from_file(files[0])) - else: - start = 0 - ex = merge(None, defaults) - for f in files[start:]: - ex = merge(_load_cfg_from_file(f), ex) - return Configuration(ex) + start = 0 + ex = merge(None, defaults) + for f in files[start:]: + ex = merge(_load_cfg_from_file(f), ex) + return Configuration(ex) def safe_load(*files, **kwargs): @@ -85,18 +84,16 @@ if defaults is None: return Configuration() else: - return Configuration(defaults) + return Configuration(copy.deepcopy(defaults)) + if defaults is None: + start = 1 + ex = safe_merge(None, _load_cfg_from_file(files[0])) else: - if defaults is None: - start = 1 - ex = merge(None, _load_cfg_from_file(files[0])) - else: - start = 0 - ex = merge(None, defaults) - ex = safe_merge(None, _load_cfg_from_file(files[0])) - for f in files[start:]: - ex = safe_merge(_load_cfg_from_file(f), ex) - return Configuration(ex) + start = 0 + ex = safe_merge(None, defaults) + for f in files[start:]: + ex = safe_merge(_load_cfg_from_file(f), ex) + return Configuration(ex) def _load_yaml(filename):