changeset 217:b869e792310e

FIX: Extra merged and unsafe merges in configmix.safe_load
author Franz Glasner <fzglas.hg@dom66.de>
date Wed, 08 May 2019 09:39:51 +0200
parents c03c9162f7e6
children b56586789838
files CHANGES.txt configmix/__init__.py
diffstat 2 files changed, 23 insertions(+), 20 deletions(-) [+]
line wrap: on
line diff
--- 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
--- 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):