Browse Source

Move context processor to request.settings, rename it to conf.

rafalp 6 years ago
parent
commit
daf21308da
36 changed files with 150 additions and 113 deletions
  1. 1 1
      devproject/settings.py
  2. 2 1
      misago/acl/tests/test_getting_user_acl.py
  3. 2 1
      misago/acl/tests/test_patching_user_acl.py
  4. 2 1
      misago/acl/tests/test_serializing_user_acl.py
  5. 2 1
      misago/acl/tests/test_user_acl_middleware.py
  6. 2 1
      misago/categories/tests/test_utils.py
  7. 2 2
      misago/conf/__init__.py
  8. 22 24
      misago/conf/context_processors.py
  9. 2 2
      misago/conf/dynamicsettings.py
  10. 2 2
      misago/conf/migrations/0002_cache_version.py
  11. 9 9
      misago/conf/tests/test_context_processors.py
  12. 4 3
      misago/conf/tests/test_getting_dynamic_settings_values.py
  13. 3 2
      misago/conf/tests/test_overridding_dynamic_settings.py
  14. 10 0
      misago/conftest.py
  15. 7 3
      misago/core/mail.py
  16. 4 1
      misago/core/tests/test_errorpages.py
  17. 5 1
      misago/core/tests/test_exceptionhandler_middleware.py
  18. 2 1
      misago/readtracker/tests/test_categoriestracker.py
  19. 2 1
      misago/readtracker/tests/test_threadstracker.py
  20. 3 3
      misago/templates/misago/base.html
  21. 12 12
      misago/templates/misago/categories/base.html
  22. 3 3
      misago/templates/misago/categories/header.html
  23. 2 2
      misago/templates/misago/emails/base.html
  24. 2 2
      misago/templates/misago/emails/base.txt
  25. 3 3
      misago/templates/misago/footer.html
  26. 4 4
      misago/templates/misago/index.html
  27. 4 4
      misago/templates/misago/navbar.html
  28. 11 11
      misago/templates/misago/threadslist/threads.html
  29. 2 1
      misago/threads/tests/test_attachments_middleware.py
  30. 2 1
      misago/threads/tests/test_events.py
  31. 2 1
      misago/threads/tests/test_threads_editor_api.py
  32. 2 1
      misago/threads/tests/test_threadview.py
  33. 4 1
      misago/users/api/userendpoints/changeemail.py
  34. 3 4
      misago/users/tests/test_bans.py
  35. 2 1
      misago/users/tests/test_signatures.py
  36. 4 2
      misago/users/tests/test_social_pipeline.py

+ 1 - 1
devproject/settings.py

@@ -288,10 +288,10 @@ TEMPLATES = [
                 'django.contrib.messages.context_processors.messages',
                 'django.contrib.messages.context_processors.messages',
 
 
                 'misago.acl.context_processors.user_acl',
                 'misago.acl.context_processors.user_acl',
+                'misago.conf.context_processors.conf',
                 'misago.conf.context_processors.settings',
                 'misago.conf.context_processors.settings',
                 'misago.core.context_processors.site_address',
                 'misago.core.context_processors.site_address',
                 'misago.core.context_processors.momentjs_locale',
                 'misago.core.context_processors.momentjs_locale',
-                'misago.legal.context_processors.legal_links',
                 'misago.search.context_processors.search_providers',
                 'misago.search.context_processors.search_providers',
                 'misago.users.context_processors.user_links',
                 'misago.users.context_processors.user_links',
 
 

+ 2 - 1
misago/acl/tests/test_getting_user_acl.py

@@ -4,11 +4,12 @@ from django.contrib.auth import get_user_model
 from django.test import TestCase
 from django.test import TestCase
 
 
 from misago.acl.useracl import get_user_acl
 from misago.acl.useracl import get_user_acl
+from misago.conftest import get_cache_versions
 from misago.users.models import AnonymousUser
 from misago.users.models import AnonymousUser
 
 
 User = get_user_model()
 User = get_user_model()
 
 
-cache_versions = {"acl": "abcdefgh"}
+cache_versions = get_cache_versions()
 
 
 
 
 class GettingUserACLTests(TestCase):
 class GettingUserACLTests(TestCase):

+ 2 - 1
misago/acl/tests/test_patching_user_acl.py

@@ -3,10 +3,11 @@ from django.test import TestCase
 
 
 from misago.acl import useracl
 from misago.acl import useracl
 from misago.acl.test import patch_user_acl
 from misago.acl.test import patch_user_acl
+from misago.conftest import get_cache_versions
 
 
 User = get_user_model()
 User = get_user_model()
 
 
-cache_versions = {"acl": "abcdefgh"}
+cache_versions = get_cache_versions()
 
 
 
 
 def callable_acl_patch(user, user_acl):
 def callable_acl_patch(user, user_acl):

+ 2 - 1
misago/acl/tests/test_serializing_user_acl.py

@@ -4,10 +4,11 @@ from django.contrib.auth import get_user_model
 from django.test import TestCase
 from django.test import TestCase
 
 
 from misago.acl.useracl import get_user_acl, serialize_user_acl
 from misago.acl.useracl import get_user_acl, serialize_user_acl
+from misago.conftest import get_cache_versions
 
 
 User = get_user_model()
 User = get_user_model()
 
 
-cache_versions = {"acl": "abcdefgh"}
+cache_versions = get_cache_versions()
 
 
 
 
 class SerializingUserACLTests(TestCase):
 class SerializingUserACLTests(TestCase):

+ 2 - 1
misago/acl/tests/test_user_acl_middleware.py

@@ -4,10 +4,11 @@ from django.contrib.auth import get_user_model
 from django.test import TestCase
 from django.test import TestCase
 
 
 from misago.acl.middleware import user_acl_middleware
 from misago.acl.middleware import user_acl_middleware
+from misago.conftest import get_cache_versions
 
 
 User = get_user_model()
 User = get_user_model()
 
 
-cache_versions = {"acl": "abcdefgh"}
+cache_versions = get_cache_versions()
 
 
 
 
 class MiddlewareTests(TestCase):
 class MiddlewareTests(TestCase):

+ 2 - 1
misago/categories/tests/test_utils.py

@@ -1,10 +1,11 @@
 from misago.acl.useracl import get_user_acl
 from misago.acl.useracl import get_user_acl
 from misago.categories.models import Category
 from misago.categories.models import Category
 from misago.categories.utils import get_categories_tree, get_category_path
 from misago.categories.utils import get_categories_tree, get_category_path
+from misago.conftest import get_cache_versions
 from misago.core import threadstore
 from misago.core import threadstore
 from misago.users.testutils import AuthenticatedUserTestCase
 from misago.users.testutils import AuthenticatedUserTestCase
 
 
-cache_versions = {"acl": "abcdefgh"}
+cache_versions = get_cache_versions()
 
 
 
 
 def get_patched_user_acl(user):
 def get_patched_user_acl(user):

+ 2 - 2
misago/conf/__init__.py

@@ -1,5 +1,5 @@
 from .gateway import settings, db_settings  # noqa
 from .gateway import settings, db_settings  # noqa
 
 
-CACHE_NAME = "settings"
-
 default_app_config = 'misago.conf.apps.MisagoConfConfig'
 default_app_config = 'misago.conf.apps.MisagoConfConfig'
+
+SETTINGS_CACHE = "settings"

+ 22 - 24
misago/conf/context_processors.py

@@ -4,46 +4,44 @@ from django.utils.translation import get_language
 
 
 from misago.users.social.utils import get_enabled_social_auth_sites_list
 from misago.users.social.utils import get_enabled_social_auth_sites_list
 
 
-from .gateway import settings as misago_settings  # noqa
-from .gateway import db_settings
+from .gateway import settings
 
 
+BLANK_AVATAR_URL = static(settings.MISAGO_BLANK_AVATAR)
 
 
-BLANK_AVATAR_URL = static(misago_settings.MISAGO_BLANK_AVATAR)
 
 
-
-def settings(request):
+def conf(request):
     return {
     return {
-        'DEBUG': misago_settings.DEBUG,
-        'LANGUAGE_CODE_SHORT': get_language()[:2],
-        'misago_settings': db_settings,
         'BLANK_AVATAR_URL': BLANK_AVATAR_URL,
         'BLANK_AVATAR_URL': BLANK_AVATAR_URL,
-        'THREADS_ON_INDEX': misago_settings.MISAGO_THREADS_ON_INDEX,
-        'LOGIN_REDIRECT_URL': misago_settings.LOGIN_REDIRECT_URL,
-        'LOGIN_URL': misago_settings.LOGIN_URL,
-        'LOGOUT_URL': misago_settings.LOGOUT_URL,
+        'DEBUG': settings.DEBUG,
+        'LANGUAGE_CODE_SHORT': get_language()[:2],
+        'LOGIN_REDIRECT_URL': settings.LOGIN_REDIRECT_URL,
+        'LOGIN_URL': settings.LOGIN_URL,
+        'LOGOUT_URL': settings.LOGOUT_URL,
+        'THREADS_ON_INDEX': settings.MISAGO_THREADS_ON_INDEX,
+        'settings': request.settings,
     }
     }
 
 
 
 
 def preload_settings_json(request):
 def preload_settings_json(request):
-    preloaded_settings = db_settings.get_public_settings()
+    preloaded_settings = request.settings.get_public_settings()
 
 
     preloaded_settings.update({
     preloaded_settings.update({
-        'LOGIN_API_URL': misago_settings.MISAGO_LOGIN_API_URL,
-        'LOGIN_REDIRECT_URL': reverse(misago_settings.LOGIN_REDIRECT_URL),
-        'LOGIN_URL': reverse(misago_settings.LOGIN_URL),
-        'LOGOUT_URL': reverse(misago_settings.LOGOUT_URL),
+        'LOGIN_API_URL': settings.MISAGO_LOGIN_API_URL,
+        'LOGIN_REDIRECT_URL': reverse(settings.LOGIN_REDIRECT_URL),
+        'LOGIN_URL': reverse(settings.LOGIN_URL),
+        'LOGOUT_URL': reverse(settings.LOGOUT_URL),
         'SOCIAL_AUTH': get_enabled_social_auth_sites_list(),
         'SOCIAL_AUTH': get_enabled_social_auth_sites_list(),
     })
     })
 
 
     request.frontend_context.update({
     request.frontend_context.update({
-        'SETTINGS': preloaded_settings,
-        'MISAGO_PATH': reverse('misago:index'),
         'BLANK_AVATAR_URL': BLANK_AVATAR_URL,
         'BLANK_AVATAR_URL': BLANK_AVATAR_URL,
-        'ENABLE_DOWNLOAD_OWN_DATA': misago_settings.MISAGO_ENABLE_DOWNLOAD_OWN_DATA,
-        'ENABLE_DELETE_OWN_ACCOUNT': misago_settings.MISAGO_ENABLE_DELETE_OWN_ACCOUNT,
-        'STATIC_URL': misago_settings.STATIC_URL,
-        'CSRF_COOKIE_NAME': misago_settings.CSRF_COOKIE_NAME,
-        'THREADS_ON_INDEX': misago_settings.MISAGO_THREADS_ON_INDEX,
+        'CSRF_COOKIE_NAME': settings.CSRF_COOKIE_NAME,
+        'ENABLE_DELETE_OWN_ACCOUNT': settings.MISAGO_ENABLE_DELETE_OWN_ACCOUNT,
+        'ENABLE_DOWNLOAD_OWN_DATA': settings.MISAGO_ENABLE_DOWNLOAD_OWN_DATA,
+        'MISAGO_PATH': reverse('misago:index'),
+        'SETTINGS': preloaded_settings,
+        'STATIC_URL': settings.STATIC_URL,
+        'THREADS_ON_INDEX': settings.MISAGO_THREADS_ON_INDEX,
     })
     })
 
 
     return {}
     return {}

+ 2 - 2
misago/conf/dynamicsettings.py

@@ -1,6 +1,6 @@
 from django.core.cache import cache
 from django.core.cache import cache
 
 
-from . import CACHE_NAME
+from . import SETTINGS_CACHE
 from .models import Setting
 from .models import Setting
 
 
 
 
@@ -49,7 +49,7 @@ class DynamicSettings:
 
 
 
 
 def get_cache_name(cache_versions):
 def get_cache_name(cache_versions):
-    return "%s_%s" % (CACHE_NAME, cache_versions[CACHE_NAME])
+    return "%s_%s" % (SETTINGS_CACHE, cache_versions[SETTINGS_CACHE])
 
 
 
 
 def get_settings_from_db():
 def get_settings_from_db():

+ 2 - 2
misago/conf/migrations/0002_cache_version.py

@@ -3,7 +3,7 @@ from django.db import migrations
 
 
 from misago.cache.operations import StartCacheVersioning
 from misago.cache.operations import StartCacheVersioning
 
 
-from misago.conf import CACHE_NAME
+from misago.conf import SETTINGS_CACHE
 
 
 
 
 class Migration(migrations.Migration):
 class Migration(migrations.Migration):
@@ -13,5 +13,5 @@ class Migration(migrations.Migration):
     ]
     ]
 
 
     operations = [
     operations = [
-        StartCacheVersioning(CACHE_NAME)
+        StartCacheVersioning(SETTINGS_CACHE)
     ]
     ]

+ 9 - 9
misago/conf/tests/test_context_processors.py

@@ -1,12 +1,12 @@
+from unittest.mock import Mock
+
 from django.test import TestCase
 from django.test import TestCase
 
 
-from misago.conf.context_processors import settings
-from misago.conf.dbsettings import db_settings
+from misago.cache.versions import get_cache_versions
 from misago.core import threadstore
 from misago.core import threadstore
 
 
-
-class MockRequest(object):
-    pass
+from misago.conf.context_processors import conf
+from misago.conf.dynamicsettings import DynamicSettings
 
 
 
 
 class ContextProcessorsTests(TestCase):
 class ContextProcessorsTests(TestCase):
@@ -15,10 +15,10 @@ class ContextProcessorsTests(TestCase):
 
 
     def test_db_settings(self):
     def test_db_settings(self):
         """DBSettings are exposed to templates"""
         """DBSettings are exposed to templates"""
-        mock_request = MockRequest()
-        processor_settings = settings(mock_request)['misago_settings'],
-
-        self.assertEqual(id(processor_settings[0]), id(db_settings))
+        cache_versions = get_cache_versions()
+        mock_request = Mock(settings=DynamicSettings(cache_versions))
+        context_settings = conf(mock_request)['settings']
+        assert context_settings == mock_request.settings
 
 
     def test_preload_settings(self):
     def test_preload_settings(self):
         """site configuration is preloaded by middleware"""
         """site configuration is preloaded by middleware"""

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

@@ -2,14 +2,15 @@ from unittest.mock import patch
 
 
 from django.test import TestCase
 from django.test import TestCase
 
 
-from misago.conf import CACHE_NAME
+from misago.conf import SETTINGS_CACHE
 from misago.conf.dynamicsettings import DynamicSettings
 from misago.conf.dynamicsettings import DynamicSettings
 from misago.conf.models import Setting, SettingsGroup
 from misago.conf.models import Setting, SettingsGroup
+from misago.conftest import get_cache_versions
 
 
 from . import override_dynamic_settings
 from . import override_dynamic_settings
 
 
 cache_version = "abcdefgh"
 cache_version = "abcdefgh"
-cache_versions = {CACHE_NAME: cache_version}
+cache_versions = get_cache_versions()
 
 
 
 
 class GettingSettingValueTests(TestCase):
 class GettingSettingValueTests(TestCase):
@@ -44,7 +45,7 @@ class GettingSettingValueTests(TestCase):
     def test_settings_cache_key_includes_cache_name_and_version(self, _, cache_set):
     def test_settings_cache_key_includes_cache_name_and_version(self, _, cache_set):
         DynamicSettings(cache_versions)
         DynamicSettings(cache_versions)
         cache_key = cache_set.call_args[0][0]
         cache_key = cache_set.call_args[0][0]
-        assert CACHE_NAME in cache_key
+        assert SETTINGS_CACHE in cache_key
         assert cache_version in cache_key
         assert cache_version in cache_key
 
 
     def test_accessing_attr_returns_setting_value(self):
     def test_accessing_attr_returns_setting_value(self):

+ 3 - 2
misago/conf/tests/test_overridding_dynamic_settings.py

@@ -1,12 +1,13 @@
 from django.test import TestCase
 from django.test import TestCase
 
 
-from misago.conf import CACHE_NAME
+from misago.conf import SETTINGS_CACHE
 from misago.conf.dynamicsettings import DynamicSettings
 from misago.conf.dynamicsettings import DynamicSettings
 from misago.conf.models import Setting, SettingsGroup
 from misago.conf.models import Setting, SettingsGroup
+from misago.conftest import get_cache_versions
 
 
 from . import override_dynamic_settings
 from . import override_dynamic_settings
 
 
-cache_versions = {CACHE_NAME: "abcdefgh"}
+cache_versions = get_cache_versions()
 
 
 
 
 class OverrideDynamicSettingsTests(TestCase):
 class OverrideDynamicSettingsTests(TestCase):

+ 10 - 0
misago/conftest.py

@@ -0,0 +1,10 @@
+from misago.acl import ACL_CACHE
+from misago.conf import SETTINGS_CACHE
+from misago.users.constants import BANS_CACHE
+
+def cache_versions():
+    return {
+        ACL_CACHE: "abcdefgh",
+        BANS_CACHE: "abcdefgh",
+        SETTINGS_CACHE: "abcdefgh",
+    }

+ 7 - 3
misago/core/mail.py

@@ -2,7 +2,9 @@ from django.core import mail as djmail
 from django.template.loader import render_to_string
 from django.template.loader import render_to_string
 from django.utils.translation import get_language
 from django.utils.translation import get_language
 
 
-from misago.conf import db_settings, settings
+from misago.cache.versions import get_cache_versions
+from misago.conf import settings
+from misago.conf.dynamicsettings import DynamicSettings
 
 
 from .utils import get_host_from_address
 from .utils import get_host_from_address
 
 
@@ -15,13 +17,15 @@ def build_mail(recipient, subject, template, sender=None, context=None):
         'LANGUAGE_CODE': get_language()[:2],
         'LANGUAGE_CODE': get_language()[:2],
         'LOGIN_URL': settings.LOGIN_URL,
         'LOGIN_URL': settings.LOGIN_URL,
 
 
-        'misago_settings': db_settings,
-
         'user': recipient,
         'user': recipient,
         'sender': sender,
         'sender': sender,
         'subject': subject,
         'subject': subject,
     })
     })
 
 
+    if 'settings' not in context:
+        cache_versions = get_cache_versions()
+        context["settings"] = DynamicSettings(cache_versions)
+
     message_plain = render_to_string('%s.txt' % template, context)
     message_plain = render_to_string('%s.txt' % template, context)
     message_html = render_to_string('%s.html' % template, context)
     message_html = render_to_string('%s.html' % template, context)
 
 

+ 4 - 1
misago/core/tests/test_errorpages.py

@@ -6,6 +6,8 @@ from django.urls import reverse
 
 
 from misago.acl.useracl import get_user_acl
 from misago.acl.useracl import get_user_acl
 from misago.users.models import AnonymousUser
 from misago.users.models import AnonymousUser
+from misago.conf.dynamicsettings import DynamicSettings
+from misago.conftest import get_cache_versions
 from misago.core.testproject.views import mock_custom_403_error_page, mock_custom_404_error_page
 from misago.core.testproject.views import mock_custom_403_error_page, mock_custom_404_error_page
 from misago.core.utils import encode_json_html
 from misago.core.utils import encode_json_html
 
 
@@ -76,7 +78,8 @@ class ErrorPageViewsTests(TestCase):
 
 
 def test_request(url):
 def test_request(url):
     request = RequestFactory().get(url)
     request = RequestFactory().get(url)
-    request.cache_versions = {"acl": "abcdefgh"}
+    request.cache_versions = get_cache_versions()
+    request.settings = DynamicSettings(cache_versions)
     request.user = AnonymousUser()
     request.user = AnonymousUser()
     request.user_acl = get_user_acl(request.user, request.cache_versions)
     request.user_acl = get_user_acl(request.user, request.cache_versions)
     request.include_frontend_context = True
     request.include_frontend_context = True

+ 5 - 1
misago/core/tests/test_exceptionhandler_middleware.py

@@ -4,6 +4,9 @@ from django.test.client import RequestFactory
 from django.urls import reverse
 from django.urls import reverse
 
 
 from misago.acl.useracl import get_user_acl
 from misago.acl.useracl import get_user_acl
+from misago.conf.dynamicsettings import DynamicSettings
+from misago.core.middleware import ExceptionHandlerMiddleware
+from misago.conftest import get_cache_versions
 from misago.users.models import AnonymousUser
 from misago.users.models import AnonymousUser
 
 
 from misago.core.middleware import ExceptionHandlerMiddleware
 from misago.core.middleware import ExceptionHandlerMiddleware
@@ -11,7 +14,8 @@ from misago.core.middleware import ExceptionHandlerMiddleware
 
 
 def test_request():
 def test_request():
     request = RequestFactory().get(reverse('misago:index'))
     request = RequestFactory().get(reverse('misago:index'))
-    request.cache_versions = {"acl": "abcdefgh"}
+    request.cache_versions = get_cache_versions()
+    request.settings = DynamicSettings(request.cache_versions)
     request.user = AnonymousUser()
     request.user = AnonymousUser()
     request.user_acl = get_user_acl(request.user, request.cache_versions)
     request.user_acl = get_user_acl(request.user, request.cache_versions)
     request.include_frontend_context = True
     request.include_frontend_context = True

+ 2 - 1
misago/readtracker/tests/test_categoriestracker.py

@@ -7,13 +7,14 @@ from django.utils import timezone
 from misago.acl.useracl import get_user_acl
 from misago.acl.useracl import get_user_acl
 from misago.categories.models import Category
 from misago.categories.models import Category
 from misago.conf import settings
 from misago.conf import settings
+from misago.conftest import get_cache_versions
 from misago.readtracker import poststracker, categoriestracker
 from misago.readtracker import poststracker, categoriestracker
 from misago.readtracker.models import PostRead
 from misago.readtracker.models import PostRead
 from misago.threads import testutils
 from misago.threads import testutils
 
 
 User = get_user_model()
 User = get_user_model()
 
 
-cache_versions = {"acl": "abcdefgh"}
+cache_versions = get_cache_versions()
 
 
 
 
 class AnonymousUser(object):
 class AnonymousUser(object):

+ 2 - 1
misago/readtracker/tests/test_threadstracker.py

@@ -8,13 +8,14 @@ from misago.acl.objectacl import add_acl_to_obj
 from misago.acl.useracl import get_user_acl
 from misago.acl.useracl import get_user_acl
 from misago.categories.models import Category
 from misago.categories.models import Category
 from misago.conf import settings
 from misago.conf import settings
+from misago.conftest import get_cache_versions
 from misago.readtracker import poststracker, threadstracker
 from misago.readtracker import poststracker, threadstracker
 from misago.readtracker.models import PostRead
 from misago.readtracker.models import PostRead
 from misago.threads import testutils
 from misago.threads import testutils
 
 
 User = get_user_model()
 User = get_user_model()
 
 
-cache_versions = {"acl": "abcdefgh"}
+cache_versions = get_cache_versions()
 
 
 
 
 class AnonymousUser(object):
 class AnonymousUser(object):

+ 3 - 3
misago/templates/misago/base.html

@@ -5,14 +5,14 @@
     <meta charset="utf-8">
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge">
     <meta http-equiv="X-UA-Compatible" content="IE=edge">
     <meta name="viewport" content="width=device-width,initial-scale=1">
     <meta name="viewport" content="width=device-width,initial-scale=1">
-    <title>{% spaceless %}{% block title %}{{ misago_settings.forum_name }}{% endblock %}{% endspaceless %}</title>
+    <title>{% spaceless %}{% block title %}{{ settings.forum_name }}{% endblock %}{% endspaceless %}</title>
     <meta name="description" content="{% spaceless %}{% block meta-description %}{% endblock %}{% endspaceless %}">
     <meta name="description" content="{% spaceless %}{% block meta-description %}{% endblock %}{% endspaceless %}">
     {% spaceless %}
     {% spaceless %}
       {% block meta-extra %}{% endblock meta-extra %}
       {% block meta-extra %}{% endblock meta-extra %}
       {% block og-tags %}
       {% block og-tags %}
-        <meta property="og:site_name" content="{% spaceless %}{% block og-site-name %}{{ misago_settings.forum_name }}{% endblock og-site-name %}{% endspaceless %}" />
+        <meta property="og:site_name" content="{% spaceless %}{% block og-site-name %}{{ settings.forum_name }}{% endblock og-site-name %}{% endspaceless %}" />
         <meta property="og:title" content="{% spaceless %}{% block og-title %}{% endblock og-title %}{% endspaceless %}" />
         <meta property="og:title" content="{% spaceless %}{% block og-title %}{% endblock og-title %}{% endspaceless %}" />
-        <meta property="og:description" content="{% spaceless %}{% block og-description %}{{ misago_settings.forum_index_meta_description|default:'' }}{% endblock og-description %}{% endspaceless %}" />
+        <meta property="og:description" content="{% spaceless %}{% block og-description %}{{ settings.forum_index_meta_description|default:'' }}{% endblock og-description %}{% endspaceless %}" />
         <meta property="og:type" content="website" />
         <meta property="og:type" content="website" />
         <meta property="og:url" content="{% spaceless %}{% block og-url %}{{ SITE_ADDRESS }}{% endblock og-url %}{% endspaceless %}" />
         <meta property="og:url" content="{% spaceless %}{% block og-url %}{{ SITE_ADDRESS }}{% endblock og-url %}{% endspaceless %}" />
         <meta property="og:image" content="{% spaceless %}{% block og-image %}{% static 'og-image.jpg' %}{% endblock og-image %}{% endspaceless %}" />
         <meta property="og:image" content="{% spaceless %}{% block og-image %}{% static 'og-image.jpg' %}{% endblock og-image %}{% endspaceless %}" />

+ 12 - 12
misago/templates/misago/categories/base.html

@@ -6,20 +6,20 @@
   {% if THREADS_ON_INDEX %}
   {% if THREADS_ON_INDEX %}
     {% trans "Categories" %} | {{ block.super }}
     {% trans "Categories" %} | {{ block.super }}
   {% else %}
   {% else %}
-    {% if misago_settings.forum_index_title %}
-      {{ misago_settings.forum_index_title }}
+    {% if settings.forum_index_title %}
+      {{ settings.forum_index_title }}
     {% else %}
     {% else %}
-      {{ misago_settings.forum_name }}
+      {{ settings.forum_name }}
     {% endif %}
     {% endif %}
   {% endif %}
   {% endif %}
 {% endblock title %}
 {% endblock title %}
 
 
 
 
 {% block meta-description %}
 {% block meta-description %}
-  {% if not THREADS_ON_INDEX and misago_settings.forum_index_meta_description %}
-    {{ misago_settings.forum_index_meta_description }}
+  {% if not THREADS_ON_INDEX and settings.forum_index_meta_description %}
+    {{ settings.forum_index_meta_description }}
   {% else %}
   {% else %}
-  {% blocktrans trimmed count categories=categories|length with forum_name=misago_settings.forum_name %}
+  {% blocktrans trimmed count categories=categories|length with forum_name=settings.forum_name %}
       There is {{ categories }} main category currenty available on the {{ forum_name }}.
       There is {{ categories }} main category currenty available on the {{ forum_name }}.
     {% plural %}
     {% plural %}
       There are {{ categories }} main categories currenty available on the {{ forum_name }}.
       There are {{ categories }} main categories currenty available on the {{ forum_name }}.
@@ -32,20 +32,20 @@
   {% if THREADS_ON_INDEX %}
   {% if THREADS_ON_INDEX %}
     {% trans "Categories" %}
     {% trans "Categories" %}
   {% else %}
   {% else %}
-    {% if misago_settings.forum_index_title %}
-      {{ misago_settings.forum_index_title }}
+    {% if settings.forum_index_title %}
+      {{ settings.forum_index_title }}
     {% else %}
     {% else %}
-      {{ misago_settings.forum_name }}
+      {{ settings.forum_name }}
     {% endif %}
     {% endif %}
   {% endif %}
   {% endif %}
 {% endblock og-title %}
 {% endblock og-title %}
 
 
 
 
 {% block og-description %}
 {% block og-description %}
-  {% if not THREADS_ON_INDEX and misago_settings.forum_index_meta_description %}
-    {{ misago_settings.forum_index_meta_description }}
+  {% if not THREADS_ON_INDEX and settings.forum_index_meta_description %}
+    {{ settings.forum_index_meta_description }}
   {% else %}
   {% else %}
-    {% blocktrans trimmed count categories=categories|length with forum_name=misago_settings.forum_name %}
+    {% blocktrans trimmed count categories=categories|length with forum_name=settings.forum_name %}
       There is {{ categories }} main category currenty available on the {{ forum_name }}.
       There is {{ categories }} main category currenty available on the {{ forum_name }}.
     {% plural %}
     {% plural %}
       There are {{ categories }} main categories currenty available on the {{ forum_name }}.
       There are {{ categories }} main categories currenty available on the {{ forum_name }}.

+ 3 - 3
misago/templates/misago/categories/header.html

@@ -3,10 +3,10 @@
   <div class="page-header">
   <div class="page-header">
     <div class="container">
     <div class="container">
       {% if is_index %}
       {% if is_index %}
-        {% if misago_settings.forum_index_title %}
-          <h1>{{ misago_settings.forum_index_title }}</h1>
+        {% if settings.forum_index_title %}
+          <h1>{{ settings.forum_index_title }}</h1>
         {% else %}
         {% else %}
-          <h1>{{ misago_settings.forum_name }}</h1>
+          <h1>{{ settings.forum_name }}</h1>
         {% endif %}
         {% endif %}
       {% else %}
       {% else %}
         <h1>{% trans "Categories" %}</h1>
         <h1>{% trans "Categories" %}</h1>

+ 2 - 2
misago/templates/misago/emails/base.html

@@ -55,7 +55,7 @@
 
 
               <table border="0" width="100%" height="100%" cellpadding="0" cellspacing="0">
               <table border="0" width="100%" height="100%" cellpadding="0" cellspacing="0">
                 <tr>
                 <tr>
-                  <td valign="middle" style="font-size: 28px; line-height: 24px; color: #555555;">{{ misago_settings.forum_name }}</td>
+                  <td valign="middle" style="font-size: 28px; line-height: 24px; color: #555555;">{{ settings.forum_name }}</td>
                   <td align="center" valign="middle" width="30"><img src="{% absoluteurl 'misago:user-avatar' pk=user.pk size=32 %}" width="32" height="32" style="border-radius: 3px;" alt=""></td>
                   <td align="center" valign="middle" width="30"><img src="{% absoluteurl 'misago:user-avatar' pk=user.pk size=32 %}" width="32" height="32" style="border-radius: 3px;" alt=""></td>
                 </tr>
                 </tr>
               </table>
               </table>
@@ -68,7 +68,7 @@
 
 
             <br>
             <br>
             <div style="border-top: 1px solid #ddd; color: #666; font-size: 12px; line-height: 18px;">
             <div style="border-top: 1px solid #ddd; color: #666; font-size: 12px; line-height: 18px;">
-              {% if misago_settings.email_footer %}<br>{{ misago_settings.email_footer }}{% endif %}
+              {% if settings.email_footer %}<br>{{ settings.email_footer }}{% endif %}
               <br><a href="{{ SITE_ADDRESS }}" style="color: #888; text-decoration: underline;">Sent from {{ SITE_HOST }}</a>
               <br><a href="{{ SITE_ADDRESS }}" style="color: #888; text-decoration: underline;">Sent from {{ SITE_HOST }}</a>
             </div>
             </div>
 
 

+ 2 - 2
misago/templates/misago/emails/base.txt

@@ -1,4 +1,4 @@
-{{ misago_settings.forum_name }}
+{{ settings.forum_name }}
 ================================================
 ================================================
 
 
 {% block title %}{{ subject }}{% endblock %}
 {% block title %}{{ subject }}{% endblock %}
@@ -7,5 +7,5 @@
 
 
 
 
 ------------------------------------------------
 ------------------------------------------------
-{% if misago_settings.email_footer %}{{ misago_settings.email_footer }}{% endif %}
+{% if settings.email_footer %}{{ settings.email_footer }}{% endif %}
 Sent from {{ SITE_ADDRESS }}
 Sent from {{ SITE_ADDRESS }}

+ 3 - 3
misago/templates/misago/footer.html

@@ -10,11 +10,11 @@
         </p>
         </p>
       </noscript>
       </noscript>
 
 
-      {% if TERMS_OF_SERVICE_URL or PRIVACY_POLICY_URL or misago_settings.forum_footnote %}
+      {% if TERMS_OF_SERVICE_URL or PRIVACY_POLICY_URL or settings.forum_footnote %}
         <ul class="list-inline footer-nav">
         <ul class="list-inline footer-nav">
-        {% if misago_settings.forum_footnote %}
+        {% if settings.forum_footnote %}
           <li class="site-footnote">
           <li class="site-footnote">
-            {{ misago_settings.forum_footnote }}
+            {{ settings.forum_footnote }}
           </li>
           </li>
         {% endif %}
         {% endif %}
         {% if TERMS_OF_SERVICE_URL %}
         {% if TERMS_OF_SERVICE_URL %}

+ 4 - 4
misago/templates/misago/index.html

@@ -3,15 +3,15 @@
 
 
 
 
 {% block title %}
 {% block title %}
-{% if misago_settings.forum_index_title %}
-{{ misago_settings.forum_index_title }}
+{% if settings.forum_index_title %}
+{{ settings.forum_index_title }}
 {% else %}
 {% else %}
-{{ misago_settings.forum_name }}
+{{ settings.forum_name }}
 {% endif %}
 {% endif %}
 {% endblock title %}
 {% endblock title %}
 
 
 
 
-{% block meta-description %}{{ misago_settings.forum_index_meta_description }}{% endblock meta-description %}
+{% block meta-description %}{{ settings.forum_index_meta_description }}{% endblock meta-description %}
 
 
 
 
 {% block content %}
 {% block content %}

+ 4 - 4
misago/templates/misago/navbar.html

@@ -2,11 +2,11 @@
 <nav class="navbar navbar-misago navbar-inverse navbar-static-top" role="navigation">
 <nav class="navbar navbar-misago navbar-inverse navbar-static-top" role="navigation">
 
 
   <div class="container navbar-full navbar-desktop-nav">
   <div class="container navbar-full navbar-desktop-nav">
-    {% if misago_settings.forum_branding_display %}
+    {% if settings.forum_branding_display %}
       <a href="{% url 'misago:index' %}" class="navbar-brand">
       <a href="{% url 'misago:index' %}" class="navbar-brand">
         <img src="{% static 'misago/img/logo.png' %}" alt="">
         <img src="{% static 'misago/img/logo.png' %}" alt="">
-        {% if misago_settings.forum_branding_text %}
-          <span class="hidden-xs hidden-sm">{{ misago_settings.forum_branding_text}}</span>
+        {% if settings.forum_branding_text %}
+          <span class="hidden-xs hidden-sm">{{ settings.forum_branding_text}}</span>
         {% endif %}
         {% endif %}
       </a>
       </a>
     {% endif %}
     {% endif %}
@@ -46,7 +46,7 @@
   </div><!-- /full navbar -->
   </div><!-- /full navbar -->
 
 
   <ul class="nav navbar-nav navbar-compact-nav" itemscope itemtype="http://schema.org/SiteNavigationElement">
   <ul class="nav navbar-nav navbar-compact-nav" itemscope itemtype="http://schema.org/SiteNavigationElement">
-    {% if misago_settings.forum_branding_display %}
+    {% if settings.forum_branding_display %}
       <li>
       <li>
         <a href="{% url 'misago:index' %}" class="brand-link">
         <a href="{% url 'misago:index' %}" class="brand-link">
           <img src="{% static 'misago/img/logo.png' %}" alt="">
           <img src="{% static 'misago/img/logo.png' %}" alt="">

+ 11 - 11
misago/templates/misago/threadslist/threads.html

@@ -6,10 +6,10 @@
   {% if THREADS_ON_INDEX and paginator.page == 1 %}
   {% if THREADS_ON_INDEX and paginator.page == 1 %}
     {% if list_name %}
     {% if list_name %}
       {{ list_name }} | {{ block.super }}
       {{ list_name }} | {{ block.super }}
-    {% elif misago_settings.forum_index_title %}
-      {{ misago_settings.forum_index_title }}
+    {% elif settings.forum_index_title %}
+      {{ settings.forum_index_title }}
     {% else %}
     {% else %}
-      {{ misago_settings.forum_name }}
+      {{ settings.forum_name }}
     {% endif %}
     {% endif %}
   {% else %}
   {% else %}
     {% if list_name %}
     {% if list_name %}
@@ -24,18 +24,18 @@
 
 
 
 
 {% block meta-description %}
 {% block meta-description %}
-  {% if THREADS_ON_INDEX and misago_settings.forum_index_meta_description %}
-    {{ misago_settings.forum_index_meta_description }}
+  {% if THREADS_ON_INDEX and settings.forum_index_meta_description %}
+    {{ settings.forum_index_meta_description }}
   {% endif %}
   {% endif %}
 {% endblock meta-description %}
 {% endblock meta-description %}
 
 
 
 
 {% block og-title %}
 {% block og-title %}
   {% if THREADS_ON_INDEX %}
   {% if THREADS_ON_INDEX %}
-    {% if misago_settings.forum_index_title %}
-      {{ misago_settings.forum_index_title }}
+    {% if settings.forum_index_title %}
+      {{ settings.forum_index_title }}
     {% else %}
     {% else %}
-      {{ misago_settings.forum_name }}
+      {{ settings.forum_name }}
     {% endif %}
     {% endif %}
   {% else %}
   {% else %}
     {% trans "Threads" %}
     {% trans "Threads" %}
@@ -54,10 +54,10 @@
         <div class="row">
         <div class="row">
           <div class="col-xs-12">
           <div class="col-xs-12">
             {% if THREADS_ON_INDEX %}
             {% if THREADS_ON_INDEX %}
-              {% if misago_settings.forum_index_title %}
-                <h1>{{ misago_settings.forum_index_title }}</h1>
+              {% if settings.forum_index_title %}
+                <h1>{{ settings.forum_index_title }}</h1>
               {% else %}
               {% else %}
-                <h1>{{ misago_settings.forum_name }}</h1>
+                <h1>{{ settings.forum_name }}</h1>
               {% endif %}
               {% endif %}
             {% else %}
             {% else %}
               <h1>{% trans "Threads" %}</h1>
               <h1>{% trans "Threads" %}</h1>

+ 2 - 1
misago/threads/tests/test_attachments_middleware.py

@@ -6,6 +6,7 @@ from misago.acl import useracl
 from misago.acl.test import patch_user_acl
 from misago.acl.test import patch_user_acl
 from misago.categories.models import Category
 from misago.categories.models import Category
 from misago.conf import settings
 from misago.conf import settings
+from misago.conftest import get_cache_versions
 from misago.threads import testutils
 from misago.threads import testutils
 from misago.threads.api.postingendpoint import PostingEndpoint
 from misago.threads.api.postingendpoint import PostingEndpoint
 from misago.threads.api.postingendpoint.attachments import (
 from misago.threads.api.postingendpoint.attachments import (
@@ -13,7 +14,7 @@ from misago.threads.api.postingendpoint.attachments import (
 from misago.threads.models import Attachment, AttachmentType
 from misago.threads.models import Attachment, AttachmentType
 from misago.users.testutils import AuthenticatedUserTestCase
 from misago.users.testutils import AuthenticatedUserTestCase
 
 
-cache_versions = {"acl": "abcdefgh"}
+cache_versions = get_cache_versions()
 
 
 
 
 def patch_attachments_acl(acl_patch=None):
 def patch_attachments_acl(acl_patch=None):

+ 2 - 1
misago/threads/tests/test_events.py

@@ -7,11 +7,12 @@ from django.utils import timezone
 from misago.acl import useracl
 from misago.acl import useracl
 from misago.acl.objectacl import add_acl_to_obj
 from misago.acl.objectacl import add_acl_to_obj
 from misago.categories.models import Category
 from misago.categories.models import Category
+from misago.conftest import get_cache_versions
 from misago.threads.events import record_event
 from misago.threads.events import record_event
 from misago.threads.models import Thread
 from misago.threads.models import Thread
 
 
 User = get_user_model()
 User = get_user_model()
-cache_versions = {"acl": "abcdefgh"}
+cache_versions = get_cache_versions()
 
 
 
 
 class EventsApiTests(TestCase):
 class EventsApiTests(TestCase):

+ 2 - 1
misago/threads/tests/test_threads_editor_api.py

@@ -5,6 +5,7 @@ from django.urls import reverse
 from misago.acl import useracl
 from misago.acl import useracl
 from misago.acl.objectacl import add_acl_to_obj
 from misago.acl.objectacl import add_acl_to_obj
 from misago.categories.models import Category
 from misago.categories.models import Category
+from misago.conftest import get_cache_versions
 from misago.threads import testutils
 from misago.threads import testutils
 from misago.threads.models import Attachment
 from misago.threads.models import Attachment
 from misago.threads.serializers import AttachmentSerializer
 from misago.threads.serializers import AttachmentSerializer
@@ -14,7 +15,7 @@ from misago.users.testutils import AuthenticatedUserTestCase
 TESTFILES_DIR = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'testfiles')
 TESTFILES_DIR = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'testfiles')
 TEST_DOCUMENT_PATH = os.path.join(TESTFILES_DIR, 'document.pdf')
 TEST_DOCUMENT_PATH = os.path.join(TESTFILES_DIR, 'document.pdf')
 
 
-cache_versions = {"acl": "abcdefgh"}
+cache_versions = get_cache_versions()
 
 
 
 
 class EditorApiTestCase(AuthenticatedUserTestCase):
 class EditorApiTestCase(AuthenticatedUserTestCase):

+ 2 - 1
misago/threads/tests/test_threadview.py

@@ -4,6 +4,7 @@ from misago.acl import useracl
 from misago.acl.test import patch_user_acl
 from misago.acl.test import patch_user_acl
 from misago.categories.models import Category
 from misago.categories.models import Category
 from misago.conf import settings
 from misago.conf import settings
+from misago.conftest import get_cache_versions
 from misago.threads import testutils
 from misago.threads import testutils
 from misago.threads.checksums import update_post_checksum
 from misago.threads.checksums import update_post_checksum
 from misago.threads.events import record_event
 from misago.threads.events import record_event
@@ -11,7 +12,7 @@ from misago.threads.moderation import threads as threads_moderation
 from misago.threads.moderation import hide_post
 from misago.threads.moderation import hide_post
 from misago.users.testutils import AuthenticatedUserTestCase
 from misago.users.testutils import AuthenticatedUserTestCase
 
 
-cache_versions = {"acl": "abcdefgh"}
+cache_versions = get_cache_versions()
 
 
 
 
 def patch_category_acl(new_acl=None):
 def patch_category_acl(new_acl=None):

+ 4 - 1
misago/users/api/userendpoints/changeemail.py

@@ -25,7 +25,10 @@ def change_email_endpoint(request, pk=None):
         request.user.email = serializer.validated_data['new_email']
         request.user.email = serializer.validated_data['new_email']
 
 
         mail_user(
         mail_user(
-            request.user, mail_subject, 'misago/emails/change_email', context={'token': token}
+            request.user, mail_subject, 'misago/emails/change_email',
+            context={
+                'token': token
+            }
         )
         )
 
 
         message = _("E-mail change confirmation link was sent to new address.")
         message = _("E-mail change confirmation link was sent to new address.")

+ 3 - 4
misago/users/tests/test_bans.py

@@ -4,6 +4,7 @@ from django.contrib.auth import get_user_model
 from django.test import TestCase
 from django.test import TestCase
 from django.utils import timezone
 from django.utils import timezone
 
 
+from misago.conftest import get_cache_versions
 from misago.users.bans import (
 from misago.users.bans import (
     ban_ip, ban_user, get_email_ban, get_ip_ban, get_request_ip_ban, get_user_ban, get_username_ban)
     ban_ip, ban_user, get_email_ban, get_ip_ban, get_request_ip_ban, get_user_ban, get_username_ban)
 from misago.users.constants import BANS_CACHE
 from misago.users.constants import BANS_CACHE
@@ -11,7 +12,7 @@ from misago.users.models import Ban
 
 
 UserModel = get_user_model()
 UserModel = get_user_model()
 
 
-cache_versions = {"bans": "abcdefgh"}
+cache_versions = get_cache_versions()
 
 
 
 
 class GetBanTests(TestCase):
 class GetBanTests(TestCase):
@@ -191,9 +192,7 @@ class MockRequest(object):
     def __init__(self):
     def __init__(self):
         self.user_ip = '127.0.0.1'
         self.user_ip = '127.0.0.1'
         self.session = {}
         self.session = {}
-        self.cache_versions = {
-            BANS_CACHE: "abcdefgh"
-        }
+        self.cache_versions = cache_versions
 
 
 
 
 class RequestIPBansTests(TestCase):
 class RequestIPBansTests(TestCase):

+ 2 - 1
misago/users/tests/test_signatures.py

@@ -4,10 +4,11 @@ from django.contrib.auth import get_user_model
 from django.test import TestCase
 from django.test import TestCase
 
 
 from misago.acl.useracl import get_user_acl
 from misago.acl.useracl import get_user_acl
+from misago.conftest import get_cache_versions
 from misago.users import signatures
 from misago.users import signatures
 
 
 User = get_user_model()
 User = get_user_model()
-cache_versions = {"acl": "abcdefg"}
+cache_versions = get_cache_versions()
 
 
 
 
 class MockRequest(object):
 class MockRequest(object):

+ 4 - 2
misago/users/tests/test_social_pipeline.py

@@ -8,10 +8,11 @@ from social_django.utils import load_strategy
 
 
 from misago.acl import ACL_CACHE
 from misago.acl import ACL_CACHE
 from misago.acl.useracl import get_user_acl
 from misago.acl.useracl import get_user_acl
+from misago.conf.dynamicsettings import DynamicSettings
 from misago.core.exceptions import SocialAuthFailed, SocialAuthBanned
 from misago.core.exceptions import SocialAuthFailed, SocialAuthBanned
+from misago.conftest import get_cache_versions
 from misago.legal.models import Agreement
 from misago.legal.models import Agreement
 
 
-from misago.users.constants import BANS_CACHE
 from misago.users.models import AnonymousUser, Ban, BanCache
 from misago.users.models import AnonymousUser, Ban, BanCache
 from misago.users.social.pipeline import (
 from misago.users.social.pipeline import (
     associate_by_email, create_user, create_user_with_form, get_username, require_activation,
     associate_by_email, create_user, create_user_with_form, get_username, require_activation,
@@ -30,9 +31,10 @@ def create_request(user_ip='0.0.0.0', data=None):
     else:
     else:
         request = factory.post('/', data=json.dumps(data), content_type='application/json')
         request = factory.post('/', data=json.dumps(data), content_type='application/json')
     request.include_frontend_context = True
     request.include_frontend_context = True
-    request.cache_versions = {BANS_CACHE: "abcdefgh", ACL_CACHE: "abcdefgh"}
+    request.cache_versions = get_cache_versions()
     request.frontend_context = {}
     request.frontend_context = {}
     request.session = {}
     request.session = {}
+    request.settings = DynamicSettings(request.cache_versions)
     request.user = AnonymousUser()
     request.user = AnonymousUser()
     request.user_acl = get_user_acl(request.user, request.cache_versions)
     request.user_acl = get_user_acl(request.user, request.cache_versions)
     request.user_ip = user_ip
     request.user_ip = user_ip