aboutsummaryrefslogtreecommitdiffstats
path: root/debug_toolbar/models.py
diff options
context:
space:
mode:
authorAymeric Augustin2013-11-11 11:31:21 -0800
committerAymeric Augustin2013-11-11 11:31:21 -0800
commit84c336830a3b01a94e9d0e2661ccad1de4545150 (patch)
tree1cc7893c4aadde657c92ac8744a339448b93d74a /debug_toolbar/models.py
parentc71624039d3d05067a27d6f983b552f283ffb893 (diff)
parent334eccd578c4abcfe1e0d11a1227b37bf6553d65 (diff)
downloaddjango-debug-toolbar-84c336830a3b01a94e9d0e2661ccad1de4545150.tar.bz2
Merge pull request #456 from aaugustin/automagic-setup
Simplify installation and provide more control.
Diffstat (limited to 'debug_toolbar/models.py')
-rw-r--r--debug_toolbar/models.py54
1 files changed, 49 insertions, 5 deletions
diff --git a/debug_toolbar/models.py b/debug_toolbar/models.py
index d6b18aa..fc78874 100644
--- a/debug_toolbar/models.py
+++ b/debug_toolbar/models.py
@@ -1,21 +1,65 @@
from __future__ import unicode_literals
from django.conf import settings
+from django.conf.urls import include, patterns, url
+from django.core.urlresolvers import reverse, NoReverseMatch
from django.utils.importlib import import_module
from debug_toolbar.toolbar.loader import load_panel_classes
from debug_toolbar.middleware import DebugToolbarMiddleware
-for middleware_path in settings.MIDDLEWARE_CLASSES:
+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):
- continue
+ return
+ return issubclass(middleware_cls, DebugToolbarMiddleware)
- if issubclass(middleware_cls, DebugToolbarMiddleware):
- load_panel_classes()
- break
+
+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', namespace='djdt', app_name='djdt')),
+ )
+
+
+if settings.DEBUG:
+ patch_internal_ips()
+ patch_middleware_classes()
+ patch_root_urlconf()
+
+
+if is_toolbar_middleware_installed():
+ load_panel_classes()