From 9d349f5fd32eaad53bc1ae71a93c9c50e718291a Mon Sep 17 00:00:00 2001 From: Iacopo Spalletti Date: Wed, 9 Dec 2020 14:22:14 +0100 Subject: [PATCH] Fix loading setting with pytest-django and django 3.1 (#203) --- app_helper/runner.py | 23 ++++++++++++++++++++--- changes/202.bugfix | 1 + tox.ini | 2 +- 3 files changed, 22 insertions(+), 4 deletions(-) create mode 100644 changes/202.bugfix diff --git a/app_helper/runner.py b/app_helper/runner.py index 7e1c3e1..a4039ab 100644 --- a/app_helper/runner.py +++ b/app_helper/runner.py @@ -61,8 +61,26 @@ def setup(app, helper_module, extra_args=None, use_cms=False): """ def _pytest_setup(settings, module): - if not getattr(settings, "SECRET_KEY", None): - settings.SECRET_KEY = "SECRET" + excluded_settings = {"PASSWORD_RESET_TIMEOUT": "PASSWORD_RESET_TIMEOUT_DAYS"} + default_settings = {"SECRET_KEY": "secret"} + for setting in dir(settings): + if setting.isupper(): + setting_value = getattr(settings, setting) + + # Empty settings value in the original value which must have a default are checked on + # default_settings dictionary and default is set, if available + default_value = default_settings.get(setting, None) + if default_value and not setting_value: + setting_value = default_value + + # If two settings exclude each other, we check if the alternate setting is already defined + # in the settings module and if not, we set the current setting + alternate_setting = excluded_settings.get(setting, None) + alternate_setting_value = None + if alternate_setting: + alternate_setting_value = getattr(settings, alternate_setting, None) + if not alternate_setting_value: + setattr(module, setting, setting_value) helper = helper_module.__file__ argv = [os.path.basename(helper), app, "setup", "--extra-settings={}".format(helper)] @@ -73,7 +91,6 @@ def _pytest_setup(settings, module): settings = runner(argv) if "pytest_django" in sys.modules: _pytest_setup(settings, helper_module) - _pytest_setup(settings, helper_module) return settings diff --git a/changes/202.bugfix b/changes/202.bugfix new file mode 100644 index 0000000..c6182ec --- /dev/null +++ b/changes/202.bugfix @@ -0,0 +1 @@ +Fix loading setting with pytest-django and django 3.1 diff --git a/tox.ini b/tox.ini index 03ca3d9..2438717 100644 --- a/tox.ini +++ b/tox.ini @@ -30,7 +30,7 @@ passenv = PYTEST_* [testenv:nocms] -basepython = python3.7 +alwayscopy = True [testenv:pep8] commands =