Browse Source

Add StaticSettings object

rafalp 6 years ago
parent
commit
7c1f51ec6c

+ 3 - 3
misago/conf/__init__.py

@@ -1,8 +1,8 @@
-from .gateway import settings, db_settings  # noqa
+from .gateway import db_settings  # noqa
+from .staticsettings import StaticSettings
 
 default_app_config = 'misago.conf.apps.MisagoConfConfig'
 
 SETTINGS_CACHE = "settings"
 
-# Feature flag for easy changing between old and new settings mechanism
-ENABLE_GLOBAL_STATE = True  # FIXME: delete after API changes
+settings = StaticSettings()

+ 21 - 0
misago/conf/staticsettings.py

@@ -0,0 +1,21 @@
+from django.conf import settings
+
+from . import defaults
+
+
+class StaticSettings(object):
+    def __getattr__(self, name):
+        if name.lower() == name:
+            raise Exception("Trying to access dynamic setting: %s" % name)
+
+        try:
+            return getattr(settings, name)
+        except AttributeError:
+            pass
+
+        try:
+            return getattr(defaults, name)
+        except AttributeError:
+            pass
+
+        raise AttributeError("Setting %s is undefined" % name)

+ 21 - 0
misago/conf/test.py

@@ -0,0 +1,21 @@
+from functools import wraps
+
+from misago.conf.dynamicsettings import DynamicSettings
+
+
+class override_dynamic_settings:
+    def __init__(self, **settings):
+        self._overrides = settings
+
+    def __enter__(self):
+        DynamicSettings.override_settings(self._overrides)
+
+    def __exit__(self, *_):
+        DynamicSettings.remove_overrides()
+
+    def __call__(self, f):
+        @wraps(f)
+        def test_function_wrapper(*args, **kwargs):
+            with self as context:
+                return f(*args, **kwargs)
+        return test_function_wrapper

+ 0 - 21
misago/conf/tests/__init__.py

@@ -1,21 +0,0 @@
-from functools import wraps
-
-from misago.conf.dynamicsettings import DynamicSettings
-
-
-class override_dynamic_settings:
-    def __init__(self, **settings):
-        self._overrides = settings
-
-    def __enter__(self):
-        DynamicSettings.override_settings(self._overrides)
-
-    def __exit__(self, *_):
-        DynamicSettings.remove_overrides()
-
-    def __call__(self, f):
-        @wraps(f)
-        def test_function_wrapper(*args, **kwargs):
-            with self as context:
-                return f(*args, **kwargs)
-        return test_function_wrapper

+ 1 - 4
misago/conf/tests/test_getting_dynamic_settings_values.py

@@ -7,9 +7,6 @@ from misago.conf.dynamicsettings import DynamicSettings
 from misago.conf.models import Setting, SettingsGroup
 from misago.conftest import get_cache_versions
 
-from . import override_dynamic_settings
-
-cache_version = "abcdefgh"
 cache_versions = get_cache_versions()
 
 
@@ -46,7 +43,7 @@ class GettingSettingValueTests(TestCase):
         DynamicSettings(cache_versions)
         cache_key = cache_set.call_args[0][0]
         assert SETTINGS_CACHE in cache_key
-        assert cache_version in cache_key
+        assert cache_versions[SETTINGS_CACHE] in cache_key
 
     def test_accessing_attr_returns_setting_value(self):
         settings = DynamicSettings(cache_versions)

+ 28 - 0
misago/conf/tests/test_getting_static_settings_values.py

@@ -0,0 +1,28 @@
+from django.test import TestCase, override_settings
+
+from misago.conf.staticsettings import StaticSettings
+
+
+class GettingSettingValueTests(TestCase):
+    def test_accessing_attr_returns_setting_value_defined_in_settings_file(self):
+        settings = StaticSettings()
+        assert settings.STATIC_URL
+
+    def test_accessing_attr_returns_setting_value_defined_in_misago_defaults_file(self):
+        settings = StaticSettings()
+        assert settings.MISAGO_MOMENT_JS_LOCALES
+
+    def test_setting_value_can_be_overridden_using_django_util(self):
+        settings = StaticSettings()
+        with override_settings(STATIC_URL="/test/"):
+            assert settings.STATIC_URL == "/test/"
+
+    def test_default_setting_value_can_be_overridden_using_django_util(self):
+        settings = StaticSettings()
+        with override_settings(MISAGO_MOMENT_JS_LOCALES="test"):
+            assert settings.MISAGO_MOMENT_JS_LOCALES == "test"
+
+    def test_undefined_setting_value_can_be_overridden_using_django_util(self):
+        settings = StaticSettings()
+        with override_settings(UNDEFINED_SETTING="test"):
+            assert settings.UNDEFINED_SETTING == "test"

+ 1 - 1
misago/conf/tests/test_overridding_dynamic_settings.py

@@ -5,7 +5,7 @@ from misago.conf.dynamicsettings import DynamicSettings
 from misago.conf.models import Setting, SettingsGroup
 from misago.conftest import get_cache_versions
 
-from . import override_dynamic_settings
+from misago.conf.test import override_dynamic_settings
 
 cache_versions = get_cache_versions()