aboutsummaryrefslogtreecommitdiffstats
path: root/debug_toolbar
diff options
context:
space:
mode:
Diffstat (limited to 'debug_toolbar')
-rw-r--r--debug_toolbar/middleware.py26
-rw-r--r--debug_toolbar/models.py54
-rw-r--r--debug_toolbar/templates/debug_toolbar/base.html4
-rw-r--r--debug_toolbar/templates/debug_toolbar/panels/sql.html8
-rw-r--r--debug_toolbar/templates/debug_toolbar/panels/templates.html4
-rw-r--r--debug_toolbar/toolbar/loader.py5
-rw-r--r--debug_toolbar/urls.py16
7 files changed, 65 insertions, 52 deletions
diff --git a/debug_toolbar/middleware.py b/debug_toolbar/middleware.py
index daea751..c95cade 100644
--- a/debug_toolbar/middleware.py
+++ b/debug_toolbar/middleware.py
@@ -4,17 +4,13 @@ Debug Toolbar middleware
from __future__ import unicode_literals
-import imp
import threading
from django.conf import settings
from django.http import HttpResponseRedirect
from django.shortcuts import render
from django.utils.encoding import force_text
-from django.utils.importlib import import_module
-from django.utils import six
-import debug_toolbar.urls
from debug_toolbar.toolbar.loader import DebugToolbar
from debug_toolbar.utils.settings import CONFIG
@@ -55,8 +51,6 @@ class DebugToolbarMiddleware(object):
debug_toolbars = {}
def __init__(self):
- self._urlconfs = {}
-
# The method to call to decide to show the toolbar
self.show_toolbar = CONFIG['SHOW_TOOLBAR_CALLBACK'] or show_toolbar
@@ -66,26 +60,6 @@ class DebugToolbarMiddleware(object):
def process_request(self, request):
__traceback_hide__ = True # noqa
if self.show_toolbar(request):
- urlconf = getattr(request, 'urlconf', settings.ROOT_URLCONF)
- if isinstance(urlconf, six.string_types):
- urlconf = import_module(getattr(request, 'urlconf', settings.ROOT_URLCONF))
-
- if urlconf not in self._urlconfs:
- new_urlconf = imp.new_module('urlconf')
- new_urlconf.urlpatterns = (debug_toolbar.urls.urlpatterns +
- list(urlconf.urlpatterns))
-
- if hasattr(urlconf, 'handler403'):
- new_urlconf.handler403 = urlconf.handler403
- if hasattr(urlconf, 'handler404'):
- new_urlconf.handler404 = urlconf.handler404
- if hasattr(urlconf, 'handler500'):
- new_urlconf.handler500 = urlconf.handler500
-
- self._urlconfs[urlconf] = new_urlconf
-
- request.urlconf = self._urlconfs[urlconf]
-
toolbar = DebugToolbar(request)
for panel in toolbar.panels:
panel.enabled = panel.dom_id() not in request.COOKIES
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()
diff --git a/debug_toolbar/templates/debug_toolbar/base.html b/debug_toolbar/templates/debug_toolbar/base.html
index f8bd377..4c82140 100644
--- a/debug_toolbar/templates/debug_toolbar/base.html
+++ b/debug_toolbar/templates/debug_toolbar/base.html
@@ -1,4 +1,4 @@
-{% load i18n %}
+{% load i18n %}{% load url from future %}
<style type="text/css">
@media print { #djDebug {display:none;}}
</style>
@@ -9,7 +9,7 @@ if(!window.jQuery) document.write('<scr'+'ipt src="{{ STATIC_URL }}debug_toolbar
<script src="{{ STATIC_URL }}debug_toolbar/js/jquery.cookie.js"></script>
<script src="{{ STATIC_URL }}debug_toolbar/js/toolbar.js"></script>
<div id="djDebug" style="display:none;" dir="ltr"
- data-toolbar-id="{{ toolbar_id }}" data-render-panel-url="/__debug__/render_panel/"
+ data-toolbar-id="{{ toolbar_id }}" data-render-panel-url="{% url 'djdt:render_panel' %}"
{{ TOOLBAR_ROOT_TAG_ATTRS|safe }}>
<div style="display:none;" id="djDebugToolbar">
<ul id="djDebugPanelList">
diff --git a/debug_toolbar/templates/debug_toolbar/panels/sql.html b/debug_toolbar/templates/debug_toolbar/panels/sql.html
index 064413c..54babfc 100644
--- a/debug_toolbar/templates/debug_toolbar/panels/sql.html
+++ b/debug_toolbar/templates/debug_toolbar/panels/sql.html
@@ -1,4 +1,4 @@
-{% load i18n %}
+{% load i18n %}{% load url from future %}
{% load debug_toolbar_utils %}
<div class="clearfix">
<ul class="stats">
@@ -47,11 +47,11 @@
<form method="post">
{{ query.form }}
- <button formaction="/__debug__/sql_select/" class="remoteCall">Sel</button>
- <button formaction="/__debug__/sql_explain/" class="remoteCall">Expl</button>
+ <button formaction="{% url 'djdt:sql_select' %}" class="remoteCall">Sel</button>
+ <button formaction="{% url 'djdt:sql_explain' %}" class="remoteCall">Expl</button>
{% ifequal query.engine 'mysql' %}
- <button formaction="/__debug__/sql_profile/" class="remoteCall">Prof</button>
+ <button formaction="{% url 'djdt:sql_profile' %}" class="remoteCall">Prof</button>
{% endifequal %}
</form>
{% endif %}
diff --git a/debug_toolbar/templates/debug_toolbar/panels/templates.html b/debug_toolbar/templates/debug_toolbar/panels/templates.html
index 7e44a46..5cbb742 100644
--- a/debug_toolbar/templates/debug_toolbar/panels/templates.html
+++ b/debug_toolbar/templates/debug_toolbar/panels/templates.html
@@ -1,4 +1,4 @@
-{% load i18n %}
+{% load i18n %}{% load url from future %}
<h4>{% blocktrans count template_dirs|length as template_count %}Template path{% plural %}Template paths{% endblocktrans %}</h4>
{% if template_dirs %}
<ol>
@@ -14,7 +14,7 @@
{% if templates %}
<dl>
{% for template in templates %}
- <dt><strong><a class="remoteCall toggleTemplate" href="/__debug__/template_source/?template={{ template.template.name }}">{{ template.template.name|addslashes }}</a></strong></dt>
+ <dt><strong><a class="remoteCall toggleTemplate" href="{% url 'djdt:template_source' %}?template={{ template.template.name }}">{{ template.template.name|addslashes }}</a></strong></dt>
<dd><samp>{{ template.template.origin_name|addslashes }}</samp></dd>
{% if template.context %}
<dd>
diff --git a/debug_toolbar/toolbar/loader.py b/debug_toolbar/toolbar/loader.py
index de4aa93..870eec3 100644
--- a/debug_toolbar/toolbar/loader.py
+++ b/debug_toolbar/toolbar/loader.py
@@ -18,13 +18,10 @@ class DebugToolbar(object):
self.request = request
self._panels = SortedDict()
base_url = self.request.META.get('SCRIPT_NAME', '')
- self.config = {
- 'MEDIA_URL': '%s/__debug__/m/' % base_url,
- }
+ self.config = {}
self.config.update(CONFIG)
self.template_context = {
'BASE_URL': base_url, # for backwards compatibility
- 'DEBUG_TOOLBAR_MEDIA_URL': self.config['MEDIA_URL'],
'STATIC_URL': settings.STATIC_URL,
'TOOLBAR_ROOT_TAG_ATTRS': self.config['ROOT_TAG_ATTRS'],
}
diff --git a/debug_toolbar/urls.py b/debug_toolbar/urls.py
index 05ef245..860187a 100644
--- a/debug_toolbar/urls.py
+++ b/debug_toolbar/urls.py
@@ -1,20 +1,18 @@
"""
URLpatterns for the debug toolbar.
-These should not be loaded explicitly; the debug toolbar middleware will patch
-this into the urlconf for the request.
+The debug toolbar middleware will monkey-patch them into the default urlconf
+if they aren't explicitly included.
"""
from __future__ import unicode_literals
from django.conf.urls import patterns, url
-_PREFIX = '__debug__'
-
urlpatterns = patterns('debug_toolbar.views', # noqa
- url(r'^%s/render_panel/$' % _PREFIX, 'render_panel', name='render_panel'),
- url(r'^%s/sql_select/$' % _PREFIX, 'sql_select', name='sql_select'),
- url(r'^%s/sql_explain/$' % _PREFIX, 'sql_explain', name='sql_explain'),
- url(r'^%s/sql_profile/$' % _PREFIX, 'sql_profile', name='sql_profile'),
- url(r'^%s/template_source/$' % _PREFIX, 'template_source', name='template_source'),
+ url(r'^render_panel/$', 'render_panel', name='render_panel'),
+ url(r'^sql_select/$', 'sql_select', name='sql_select'),
+ url(r'^sql_explain/$', 'sql_explain', name='sql_explain'),
+ url(r'^sql_profile/$', 'sql_profile', name='sql_profile'),
+ url(r'^template_source/$', 'template_source', name='template_source'),
)