# HG changeset patch # User Franz Glasner # Date 1698391947 -7200 # Node ID 50dea7892b62dd41eab6713890ef4a50d3c1915d # Parent 06b6c14bcd611b6a5c3cccd5a03eb33e3713b10b Prepare calling conventions for a new merge-stragegy for lists: extens instead of replace diff -r 06b6c14bcd61 -r 50dea7892b62 configmix/__init__.py --- 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