From a7c706f401ebea3f25120cc155c7ab518c23df53 Mon Sep 17 00:00:00 2001 From: Bruno Rocha Date: Wed, 21 Sep 2022 17:38:19 +0100 Subject: [PATCH] Allow merge_unique on lists when merge_enabled=True (#810) Fix #726 --- dynaconf/utils/__init__.py | 6 ++++++ .../issues/726_unique_nested_list/app.py | 16 ++++++++++++++++ .../726_unique_nested_list/configuration.yaml | 6 ++++++ .../issues/726_unique_nested_list/defaults.yaml | 4 ++++ 4 files changed, 32 insertions(+) create mode 100644 tests_functional/issues/726_unique_nested_list/app.py create mode 100644 tests_functional/issues/726_unique_nested_list/configuration.yaml create mode 100644 tests_functional/issues/726_unique_nested_list/defaults.yaml diff --git a/dynaconf/utils/__init__.py b/dynaconf/utils/__init__.py index 8515fee14..146062017 100644 --- a/dynaconf/utils/__init__.py +++ b/dynaconf/utils/__init__.py @@ -46,6 +46,12 @@ def object_merge( return new if isinstance(old, list) and isinstance(new, list): + + # 726: allow local_merge to override global merge on lists + if "dynaconf_merge_unique" in new: + new.remove("dynaconf_merge_unique") + unique = True + for item in old[::-1]: if unique and item in new: continue diff --git a/tests_functional/issues/726_unique_nested_list/app.py b/tests_functional/issues/726_unique_nested_list/app.py new file mode 100644 index 000000000..f68ad9fba --- /dev/null +++ b/tests_functional/issues/726_unique_nested_list/app.py @@ -0,0 +1,16 @@ +from __future__ import annotations + +from dynaconf import Dynaconf + +settings = Dynaconf( + envvar_prefix="ISSUE726", + settings_files=["defaults.yaml", "configuration.yaml"], + merge_enabled=True, +) + + +assert settings.config_key.nested_list == [ + "item_a", + "item_b", + "item_c", +], settings.config_key.nested_list diff --git a/tests_functional/issues/726_unique_nested_list/configuration.yaml b/tests_functional/issues/726_unique_nested_list/configuration.yaml new file mode 100644 index 000000000..4c55a3603 --- /dev/null +++ b/tests_functional/issues/726_unique_nested_list/configuration.yaml @@ -0,0 +1,6 @@ +config_key: + nested_list: + - dynaconf_merge_unique + - item_a + - item_b + - item_c diff --git a/tests_functional/issues/726_unique_nested_list/defaults.yaml b/tests_functional/issues/726_unique_nested_list/defaults.yaml new file mode 100644 index 000000000..22ff7907c --- /dev/null +++ b/tests_functional/issues/726_unique_nested_list/defaults.yaml @@ -0,0 +1,4 @@ +config_key: + nested_list: + - item_a + - item_b