changeset 734:50dea7892b62

Prepare calling conventions for a new merge-stragegy for lists: extens instead of replace
author Franz Glasner <fzglas.hg@dom66.de>
date Fri, 27 Oct 2023 09:32:27 +0200
parents 06b6c14bcd61
children b01d76710ddb
files configmix/__init__.py
diffstat 1 files changed, 10 insertions(+), 8 deletions(-) [+]
line wrap: on
line diff
--- a/configmix/__init__.py	Thu Oct 26 17:14:12 2023 +0200
+++ b/configmix/__init__.py	Fri Oct 27 09:32:27 2023 +0200
@@ -389,7 +389,7 @@
         return result
 
 
-def merge(user, default, filter_comments=True):
+def merge(user, default, filter_comments=True, extend_lists=False):
     """Logically merge the configuration in `user` into `default`.
 
     :param ~configmix.config.Configuration user:
@@ -399,6 +399,8 @@
                 the base configuration where `user` is logically merged into
     :param bool filter_comments: flag whether to filter comment keys that
                    start with any of the items in :data:`.COMMENTS`
+    :param bool extens_lists: When ``True`` then lists will be extended instead of
+                              overwritten by the merge process
     :returns: `user` with the necessary amendments from `default`.
               If `user` is ``None`` then `default` is returned.
 
@@ -435,14 +437,14 @@
                     # do not copy
                     del user[k]
                 else:
-                    user[k] = _merge(ukv, v, filter_comments)
+                    user[k] = _merge(ukv, v, filter_comments, extend_lists)
             else:
                 user[k] = v
     _filter_deletions(user)
     return user
 
 
-def _merge(user, default, filter_comments):
+def _merge(user, default, filter_comments, extend_lists):
     """Recursion helper for :func:`.merge`
 
     """
@@ -459,13 +461,13 @@
                     # do not copy
                     del user[k]
                 else:
-                    user[k] = _merge(ukv, v, filter_comments)
+                    user[k] = _merge(ukv, v, filter_comments, extend_lists)
             else:
                 user[k] = v
     return user
 
 
-def safe_merge(user, default, filter_comments=True):
+def safe_merge(user, default, filter_comments=True, extend_lists=False):
     """A more safe version of :func:`.merge` that makes deep copies of
     the returned container objects.
 
@@ -496,14 +498,14 @@
                     # do not copy
                     del user[k]
                 else:
-                    user[k] = _safe_merge(ukv, v, filter_comments)
+                    user[k] = _safe_merge(ukv, v, filter_comments, extend_lists)
             else:
                 user[k] = copy.deepcopy(v)
     _filter_deletions(user)
     return user
 
 
-def _safe_merge(user, default, filter_comments):
+def _safe_merge(user, default, filter_comments, extend_lists):
     """Recursion helper for :func:`safe_merge`
 
     """
@@ -520,7 +522,7 @@
                     # do not copy
                     del user[k]
                 else:
-                    user[k] = _safe_merge(ukv, v, filter_comments)
+                    user[k] = _safe_merge(ukv, v, filter_comments, extend_lists)
             else:
                 user[k] = copy.deepcopy(v)
     return user