django32: implement clear_tenants_settings as a global function (#67760)
Django 3.2 introduced a constraint on the access of settings object attributes, they can only be in uppercase. As clear_tenants_settings is only used by tests on the multitenant framework, clear_tenants_settings is reimplemented as a global function using a global variable _tenant_settings_wrapper to access the global multitenant aware wrapper around the setting object.
This commit is contained in:
parent
f05596a088
commit
3ac54aa650
|
@ -2,19 +2,30 @@ from django.apps import AppConfig, apps
|
|||
|
||||
from . import settings, threads
|
||||
|
||||
_tenant_settings_wrapper = None
|
||||
|
||||
|
||||
def clear_tenants_settings():
|
||||
if _tenant_settings_wrapper is not None:
|
||||
_tenant_settings_wrapper.__dict__['tenants_settings'] = {}
|
||||
|
||||
|
||||
class MultitenantAppConfig(AppConfig):
|
||||
name = 'hobo.multitenant'
|
||||
verbose_name = 'Multitenant'
|
||||
|
||||
def ready(self):
|
||||
global _tenant_settings_wrapper
|
||||
|
||||
from django import conf
|
||||
from django.db import migrations
|
||||
from django.db.migrations import operations
|
||||
|
||||
# Install tenant aware settings
|
||||
if not isinstance(conf.settings._wrapped, settings.TenantSettingsWrapper):
|
||||
conf.settings._wrapped = settings.TenantSettingsWrapper(conf.settings._wrapped)
|
||||
_tenant_settings_wrapper = conf.settings._wrapped = settings.TenantSettingsWrapper(
|
||||
conf.settings._wrapped
|
||||
)
|
||||
# reset settings getattr method to a cache-less version, to cancel
|
||||
# https://code.djangoproject.com/ticket/27625.
|
||||
conf.LazySettings.__getattr__ = lambda self, name: getattr(self._wrapped, name)
|
||||
|
|
|
@ -34,9 +34,6 @@ class TenantSettingsWrapper:
|
|||
self.__dict__['tenants_settings'] = {}
|
||||
self.__dict__['default_settings'] = default_settings
|
||||
|
||||
def clear_tenants_settings(self):
|
||||
self.__dict__['tenants_settings'] = {}
|
||||
|
||||
@property
|
||||
def loaders(self):
|
||||
loaders = getattr(self.default_settings, 'TENANT_SETTINGS_LOADERS', [])
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
import pytest
|
||||
|
||||
from hobo.multitenant.apps import clear_tenants_settings
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def make_tenant(tmp_path, transactional_db, settings, request):
|
||||
|
@ -111,11 +113,13 @@ def make_tenant(tmp_path, transactional_db, settings, request):
|
|||
|
||||
@pytest.fixture
|
||||
def tenants(make_tenant):
|
||||
clear_tenants_settings()
|
||||
return [make_tenant('tenant1.example.net'), make_tenant('tenant2.example.net')]
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def tenant(make_tenant):
|
||||
clear_tenants_settings()
|
||||
return make_tenant('tenant.example.net')
|
||||
|
||||
|
||||
|
|
|
@ -39,8 +39,6 @@ def test_tenant_middleware(tenants, client, settings):
|
|||
|
||||
|
||||
def test_tenant_json_settings(tenants, settings):
|
||||
settings.clear_tenants_settings()
|
||||
|
||||
with utilities.patch_default_settings(
|
||||
settings, TENANT_SETTINGS_LOADERS=('hobo.multitenant.settings_loaders.SettingsJSON',)
|
||||
):
|
||||
|
@ -67,8 +65,6 @@ def test_tenant_json_settings(tenants, settings):
|
|||
|
||||
|
||||
def test_tenant_template_vars(tenants, settings, client):
|
||||
django.conf.settings.clear_tenants_settings()
|
||||
|
||||
with utilities.patch_default_settings(
|
||||
settings, TENANT_SETTINGS_LOADERS=('hobo.multitenant.settings_loaders.TemplateVars',)
|
||||
):
|
||||
|
@ -99,8 +95,6 @@ def test_tenant_template_vars(tenants, settings, client):
|
|||
|
||||
|
||||
def test_tenant_settings_vars(tenants, settings, client):
|
||||
django.conf.settings.clear_tenants_settings()
|
||||
|
||||
with utilities.patch_default_settings(
|
||||
settings, TENANT_SETTINGS_LOADERS=('hobo.multitenant.settings_loaders.SettingsVars',)
|
||||
):
|
||||
|
@ -127,8 +121,6 @@ def test_tenant_settings_vars(tenants, settings, client):
|
|||
|
||||
|
||||
def test_tenant_cors_settings(tenants, settings, client):
|
||||
settings.clear_tenants_settings()
|
||||
|
||||
with utilities.patch_default_settings(
|
||||
settings, TENANT_SETTINGS_LOADERS=('hobo.multitenant.settings_loaders.CORSSettings',)
|
||||
):
|
||||
|
@ -148,8 +140,6 @@ def test_tenant_cors_settings(tenants, settings, client):
|
|||
|
||||
|
||||
def test_tenant_theme_settings(tenants, settings, client):
|
||||
django.conf.settings.clear_tenants_settings()
|
||||
|
||||
with utilities.patch_default_settings(
|
||||
settings,
|
||||
TENANT_SETTINGS_LOADERS=(
|
||||
|
@ -183,7 +173,6 @@ def test_shared_secret():
|
|||
def test_known_services(tenants, settings):
|
||||
from hobo.multitenant.settings_loaders import KnownServices
|
||||
|
||||
settings.clear_tenants_settings()
|
||||
settings.SETTINGS_MODULE = 'fake.settings'
|
||||
|
||||
for tenant in tenants:
|
||||
|
@ -223,8 +212,6 @@ def test_known_services(tenants, settings):
|
|||
|
||||
|
||||
def test_legacy_urls_mapping(tenants, settings):
|
||||
|
||||
settings.clear_tenants_settings()
|
||||
settings.SETTINGS_MODULE = 'fake.settings'
|
||||
|
||||
for tenant in tenants:
|
||||
|
@ -235,8 +222,6 @@ def test_legacy_urls_mapping(tenants, settings):
|
|||
|
||||
|
||||
def test_unique_cookies(tenants, settings):
|
||||
settings.clear_tenants_settings()
|
||||
|
||||
cookie_names = set()
|
||||
for tenant in tenants:
|
||||
with tenant_context(tenant):
|
||||
|
@ -247,8 +232,6 @@ def test_unique_cookies(tenants, settings):
|
|||
|
||||
|
||||
def test_tenant_json_settings_reload(tenants, settings, freezer):
|
||||
settings.clear_tenants_settings()
|
||||
|
||||
with utilities.patch_default_settings(
|
||||
settings, TENANT_SETTINGS_LOADERS=('hobo.multitenant.settings_loaders.SettingsJSON',)
|
||||
):
|
||||
|
|
|
@ -49,7 +49,6 @@ def test_all_tenants(handle, tenants):
|
|||
def test_all_tenants_disable_cron(handle, tenants, settings):
|
||||
from django.core.management import execute_from_command_line
|
||||
|
||||
settings.clear_tenants_settings()
|
||||
settings.DISABLE_CRON_JOBS = True
|
||||
handle.side_effect = RecordTenant()
|
||||
execute_from_command_line(['manage.py', 'tenant_command', 'clearsessions', '--all-tenants'])
|
||||
|
@ -61,7 +60,6 @@ def test_all_tenants_disable_cron(handle, tenants, settings):
|
|||
def test_all_tenants_disable_cron_for_specific_tenant(handle, tenants, settings):
|
||||
from django.core.management import execute_from_command_line
|
||||
|
||||
settings.clear_tenants_settings()
|
||||
disabled_tenant = tenants[0]
|
||||
with open(os.path.join(disabled_tenant.get_directory(), 'settings.json'), 'w') as fd:
|
||||
json.dump(
|
||||
|
@ -78,7 +76,6 @@ def test_all_tenants_disable_cron_for_specific_tenant(handle, tenants, settings)
|
|||
def test_all_tenants_global_disable_cron_with_force_job(handle, tenants, settings):
|
||||
from django.core.management import execute_from_command_line
|
||||
|
||||
settings.clear_tenants_settings()
|
||||
settings.DISABLE_CRON_JOBS = True
|
||||
handle.side_effect = RecordTenant()
|
||||
execute_from_command_line(
|
||||
|
|
|
@ -23,8 +23,6 @@ from tenant_schemas.utils import tenant_context
|
|||
|
||||
|
||||
def test_thread(tenants, settings, client):
|
||||
|
||||
settings.clear_tenants_settings()
|
||||
with utilities.patch_default_settings(
|
||||
settings, TENANT_SETTINGS_LOADERS=('hobo.multitenant.settings_loaders.TemplateVars',)
|
||||
):
|
||||
|
@ -86,7 +84,6 @@ def test_cache(tenants, client):
|
|||
|
||||
|
||||
def test_timer_thread(tenants, settings, client):
|
||||
settings.clear_tenants_settings()
|
||||
with utilities.patch_default_settings(
|
||||
settings, TENANT_SETTINGS_LOADERS=('hobo.multitenant.settings_loaders.TemplateVars',)
|
||||
):
|
||||
|
|
Loading…
Reference in New Issue