aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAymeric Augustin2014-01-08 21:10:22 +0100
committerAymeric Augustin2014-01-08 21:39:05 +0100
commit72c101794f273435fdbeeb6da82ec3fadf99991c (patch)
tree7164db25eb4c8c0a05acf26ecd0cdefe9c5cae25
parent2b1d98b0e098518171211fe98e447449f73dadf8 (diff)
downloaddjango-debug-toolbar-72c101794f273435fdbeeb6da82ec3fadf99991c.tar.bz2
Move settings patching code to the settings module.
-rw-r--r--debug_toolbar/models.py58
-rw-r--r--debug_toolbar/settings.py62
2 files changed, 63 insertions, 57 deletions
diff --git a/debug_toolbar/models.py b/debug_toolbar/models.py
index 4e624fa..eb16e3a 100644
--- a/debug_toolbar/models.py
+++ b/debug_toolbar/models.py
@@ -1,63 +1,7 @@
from __future__ import absolute_import, unicode_literals
-from django.conf import settings
-from django.conf.urls import include, patterns, url
-from django.core.urlresolvers import clear_url_caches, reverse, NoReverseMatch
-from django.utils.importlib import import_module
-
-import debug_toolbar
from debug_toolbar import settings as dt_settings
-from debug_toolbar.middleware import DebugToolbarMiddleware
-
-
-def is_toolbar_middleware(middleware_path):
- # Replace this with import_by_path in Django >= 1.6.
- try:
- mod_path, cls_name = middleware_path.rsplit('.', 1)
- mod = import_module(mod_path)
- middleware_cls = getattr(mod, cls_name)
- except (AttributeError, ImportError, ValueError):
- return
- return issubclass(middleware_cls, DebugToolbarMiddleware)
-
-
-def is_toolbar_middleware_installed():
- return any(is_toolbar_middleware(middleware)
- for middleware in settings.MIDDLEWARE_CLASSES)
-
-
-def prepend_to_setting(setting_name, value):
- """Insert value at the beginning of a list or tuple setting."""
- values = getattr(settings, setting_name)
- # Make a list [value] or tuple (value,)
- value = type(values)((value,))
- setattr(settings, setting_name, value + values)
-
-
-def patch_internal_ips():
- if not settings.INTERNAL_IPS:
- prepend_to_setting('INTERNAL_IPS', '127.0.0.1')
- prepend_to_setting('INTERNAL_IPS', '::1')
-
-
-def patch_middleware_classes():
- if not is_toolbar_middleware_installed():
- prepend_to_setting('MIDDLEWARE_CLASSES',
- 'debug_toolbar.middleware.DebugToolbarMiddleware')
-
-
-def patch_root_urlconf():
- try:
- reverse('djdt:render_panel')
- except NoReverseMatch:
- urlconf_module = import_module(settings.ROOT_URLCONF)
- urlconf_module.urlpatterns = patterns('', # noqa
- url(r'^__debug__/', include(debug_toolbar.urls)),
- ) + urlconf_module.urlpatterns
- clear_url_caches()
if dt_settings.PATCH_SETTINGS:
- patch_internal_ips()
- patch_middleware_classes()
- patch_root_urlconf()
+ dt_settings.patch_all()
diff --git a/debug_toolbar/settings.py b/debug_toolbar/settings.py
index bb6a5e0..48649fd 100644
--- a/debug_toolbar/settings.py
+++ b/debug_toolbar/settings.py
@@ -3,6 +3,7 @@ from __future__ import absolute_import, unicode_literals
import warnings
from django.conf import settings
+from django.utils.importlib import import_module
from django.utils import six
@@ -125,3 +126,64 @@ else:
PATCH_SETTINGS = getattr(settings, 'DEBUG_TOOLBAR_PATCH_SETTINGS', settings.DEBUG)
+
+
+# The following functions can monkey-patch settings automatically. Several
+# imports are placed inside functions to make it safe to import this module.
+
+
+def is_toolbar_middleware(middleware_path):
+ from debug_toolbar.middleware import DebugToolbarMiddleware
+ # This could be replaced by import_by_path in Django >= 1.6.
+ try:
+ mod_path, cls_name = middleware_path.rsplit('.', 1)
+ mod = import_module(mod_path)
+ middleware_cls = getattr(mod, cls_name)
+ except (AttributeError, ImportError, ValueError):
+ return
+ return issubclass(middleware_cls, DebugToolbarMiddleware)
+
+
+def is_toolbar_middleware_installed():
+ return any(is_toolbar_middleware(middleware)
+ for middleware in settings.MIDDLEWARE_CLASSES)
+
+
+def prepend_to_setting(setting_name, value):
+ """Insert value at the beginning of a list or tuple setting."""
+ values = getattr(settings, setting_name)
+ # Make a list [value] or tuple (value,)
+ value = type(values)((value,))
+ setattr(settings, setting_name, value + values)
+
+
+def patch_internal_ips():
+ if not settings.INTERNAL_IPS:
+ prepend_to_setting('INTERNAL_IPS', '127.0.0.1')
+ prepend_to_setting('INTERNAL_IPS', '::1')
+
+
+def patch_middleware_classes():
+ if not is_toolbar_middleware_installed():
+ prepend_to_setting('MIDDLEWARE_CLASSES',
+ 'debug_toolbar.middleware.DebugToolbarMiddleware')
+
+
+def patch_root_urlconf():
+ from django.conf.urls import include, patterns, url
+ from django.core.urlresolvers import clear_url_caches, reverse, NoReverseMatch
+ import debug_toolbar
+ try:
+ reverse('djdt:render_panel')
+ except NoReverseMatch:
+ urlconf_module = import_module(settings.ROOT_URLCONF)
+ urlconf_module.urlpatterns = patterns('', # noqa
+ url(r'^__debug__/', include(debug_toolbar.urls)),
+ ) + urlconf_module.urlpatterns
+ clear_url_caches()
+
+
+def patch_all():
+ patch_internal_ips()
+ patch_middleware_classes()
+ patch_root_urlconf()