diff --git a/src/django_opfield/conf.py b/src/django_opfield/conf.py index 4963ca2..ec7b2a3 100644 --- a/src/django_opfield/conf.py +++ b/src/django_opfield/conf.py @@ -17,18 +17,20 @@ class AppSettings: def __getattr__(self, __name: str) -> Any: return self._get_user_settings(__name, super().__getattribute__(__name)) - def _get_user_settings( - self, setting: str | None = None, fallback: Any = None - ) -> Any: + def _get_user_settings(self, setting: str, fallback: Any = None) -> Any: user_settings = getattr(settings, OPFIELD_SETTINGS_NAME, {}) - return user_settings.get(setting, fallback) + + if user_setting := user_settings.get(setting, fallback): + ret = user_setting + else: + ret = os.environ.get(setting, None) + + return ret @property def OP_CLI_PATH(self) -> Path: if user_cli_path := self._get_user_settings("OP_CLI_PATH"): path = user_cli_path - elif env_cli_path := os.environ.get("OP_CLI_PATH", None): - path = env_cli_path else: path = shutil.which("op") @@ -39,10 +41,7 @@ def OP_CLI_PATH(self) -> Path: @property def OP_SERVICE_ACCOUNT_TOKEN(self) -> str: - if user_token := self._get_user_settings("OP_SERVICE_ACCOUNT_TOKEN"): - token = user_token - else: - token = os.environ.get("OP_SERVICE_ACCOUNT_TOKEN", None) + token = self._get_user_settings("OP_SERVICE_ACCOUNT_TOKEN") if not token: raise ImproperlyConfigured("OP_SERVICE_ACCOUNT_TOKEN is not set") diff --git a/tests/test_conf.py b/tests/test_conf.py index 9652251..d908d27 100644 --- a/tests/test_conf.py +++ b/tests/test_conf.py @@ -6,9 +6,23 @@ import pytest from django.test import override_settings +from django_opfield.conf import OPFIELD_SETTINGS_NAME from django_opfield.conf import app_settings +class TestGetUserSettings: + def test_not_set(self): + assert app_settings._get_user_settings("TEST_SETTING") is None + + @override_settings(**{OPFIELD_SETTINGS_NAME: {"TEST_SETTING": "test value"}}) + def test_set_in_settings(self): + assert app_settings._get_user_settings("TEST_SETTING") == "test value" + + @patch.dict(os.environ, {"TEST_SETTING": "test value"}) + def test_set_in_env(self): + assert app_settings._get_user_settings("TEST_SETTING") == "test value" + + @patch.dict(os.environ, {"OP_CLI_PATH": ""}) class TestOPCliPath: @patch("shutil.which") @@ -18,7 +32,7 @@ def test_default(self, mock_which): with pytest.raises(ImportError): assert app_settings.OP_CLI_PATH - @override_settings(DJANGO_OPFIELD={"OP_CLI_PATH": "path/to/op"}) + @override_settings(**{OPFIELD_SETTINGS_NAME: {"OP_CLI_PATH": "path/to/op"}}) def test_user_setting(self): assert "path/to/op" in str(app_settings.OP_CLI_PATH)