diff --git a/configurations/base.py b/configurations/base.py index a09af41..14185fe 100644 --- a/configurations/base.py +++ b/configurations/base.py @@ -31,7 +31,6 @@ class ConfigurationBase(type): if parents: for base in bases[::-1]: settings_vars.update(uppercase_attributes(base)) - attrs = dict(settings_vars, **attrs) deprecated_settings = { # DEFAULT_HASHING_ALGORITHM is always deprecated, as it's a @@ -51,11 +50,12 @@ class ConfigurationBase(type): # PASSWORD_RESET_TIMEOUT_DAYS is deprecated in favor of # PASSWORD_RESET_TIMEOUT in Django 3.1 # https://github.com/django/django/commit/226ebb17290b604ef29e82fb5c1fbac3594ac163#diff-ec2bed07bb264cb95a80f08d71a47c06R163-R170 - if "PASSWORD_RESET_TIMEOUT" in attrs: + if "PASSWORD_RESET_TIMEOUT" in settings_vars: deprecated_settings.add("PASSWORD_RESET_TIMEOUT_DAYS") for deprecated_setting in deprecated_settings: - if deprecated_setting in attrs: - del attrs[deprecated_setting] + if deprecated_setting in settings_vars: + del settings_vars[deprecated_setting] + attrs = {**settings_vars, **attrs} return super().__new__(cls, name, bases, attrs) diff --git a/docs/changes.rst b/docs/changes.rst index eb031e9..af49bc2 100644 --- a/docs/changes.rst +++ b/docs/changes.rst @@ -6,6 +6,8 @@ Changelog unreleased ^^^^^^^^^^ +- Fix regression where settings receiving a default were ignored. #323 #327 + v2.3.1 (2021-11-08) ^^^^^^^^^^^^^^^^^^^ diff --git a/tests/settings/main.py b/tests/settings/main.py index 9ea2091..1161422 100644 --- a/tests/settings/main.py +++ b/tests/settings/main.py @@ -71,3 +71,7 @@ class Test(Configuration): @classmethod def post_setup(cls): cls.POST_SETUP_TEST_SETTING = 7 + + +class TestWithDefaultSetExplicitely(Test): + DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField' diff --git a/tests/test_main.py b/tests/test_main.py index 7f0a786..ff9ad54 100644 --- a/tests/test_main.py +++ b/tests/test_main.py @@ -55,6 +55,12 @@ class MainTests(TestCase): self.assertEqual(repr(Configuration), "") + def test_deprecated_settings_but_set_by_user(self): + from tests.settings.main import TestWithDefaultSetExplicitely + TestWithDefaultSetExplicitely.setup() + self.assertEqual(TestWithDefaultSetExplicitely.DEFAULT_AUTO_FIELD, + "django.db.models.BigAutoField") + def test_repr(self): from tests.settings.main import Test self.assertEqual(repr(Test),