diff options
Diffstat (limited to 'debug_toolbar')
| -rw-r--r-- | debug_toolbar/middleware.py | 26 | ||||
| -rw-r--r-- | debug_toolbar/models.py | 54 | ||||
| -rw-r--r-- | debug_toolbar/templates/debug_toolbar/base.html | 4 | ||||
| -rw-r--r-- | debug_toolbar/templates/debug_toolbar/panels/sql.html | 8 | ||||
| -rw-r--r-- | debug_toolbar/templates/debug_toolbar/panels/templates.html | 4 | ||||
| -rw-r--r-- | debug_toolbar/toolbar/loader.py | 5 | ||||
| -rw-r--r-- | debug_toolbar/urls.py | 16 |
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'), ) |
