Skip to content

Commit afc5dfc

Browse files
authored
Move settings reset logic to settings module. (#1559)
This makes it apply in every project using django-debug-toolbar, so packages or projects can reconfigure the toolbar during tests if required. The receiver functions have also been combined and optimized the signature like django/django#15185 .
1 parent 03fdf3e commit afc5dfc

File tree

3 files changed

+20
-21
lines changed

3 files changed

+20
-21
lines changed

debug_toolbar/settings.py

+17
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
from functools import lru_cache
22

33
from django.conf import settings
4+
from django.dispatch import receiver
5+
from django.test.signals import setting_changed
46

57
CONFIG_DEFAULTS = {
68
# Toolbar options
@@ -71,3 +73,18 @@ def get_panels():
7173
except AttributeError:
7274
PANELS = PANELS_DEFAULTS
7375
return PANELS
76+
77+
78+
@receiver(setting_changed)
79+
def update_toolbar_config(*, setting, **kwargs):
80+
"""
81+
Refresh configuration when overriding settings.
82+
"""
83+
if setting == "DEBUG_TOOLBAR_CONFIG":
84+
get_config.cache_clear()
85+
elif setting == "DEBUG_TOOLBAR_PANELS":
86+
from debug_toolbar.toolbar import DebugToolbar
87+
88+
get_panels.cache_clear()
89+
DebugToolbar._panel_classes = None
90+
# Not implemented: invalidate debug_toolbar.urls.

docs/changes.rst

+3
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,9 @@ Next version
77
* Removed support for Django < 3.2.
88
* Updated check ``W006`` to look for
99
``django.template.loaders.app_directories.Loader``.
10+
* Reset settings when overridden in tests. Packages or projects using
11+
django-debug-toolbar can now use Django’s test settings tools, like
12+
``@override_settings``, to reconfigure the toolbar during tests.
1013

1114
3.2.4 (2021-12-15)
1215
------------------

tests/__init__.py

-21
Original file line numberDiff line numberDiff line change
@@ -1,21 +0,0 @@
1-
# Refresh the debug toolbar's configuration when overriding settings.
2-
3-
from django.dispatch import receiver
4-
from django.test.signals import setting_changed
5-
6-
from debug_toolbar import settings as dt_settings
7-
from debug_toolbar.toolbar import DebugToolbar
8-
9-
10-
@receiver(setting_changed)
11-
def update_toolbar_config(**kwargs):
12-
if kwargs["setting"] == "DEBUG_TOOLBAR_CONFIG":
13-
dt_settings.get_config.cache_clear()
14-
15-
16-
@receiver(setting_changed)
17-
def update_toolbar_panels(**kwargs):
18-
if kwargs["setting"] == "DEBUG_TOOLBAR_PANELS":
19-
dt_settings.get_panels.cache_clear()
20-
DebugToolbar._panel_classes = None
21-
# Not implemented: invalidate debug_toolbar.urls.

0 commit comments

Comments
 (0)