From 4a1451742bfa2a42ba5ec82bfa741c6644ba3807 Mon Sep 17 00:00:00 2001 From: Aymeric Augustin Date: Mon, 11 Nov 2013 12:58:40 +0100 Subject: Set INTERNAL_IPS to a convenient default when it isn't set. --- debug_toolbar/models.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'debug_toolbar') diff --git a/debug_toolbar/models.py b/debug_toolbar/models.py index d6b18aa..3bdb639 100644 --- a/debug_toolbar/models.py +++ b/debug_toolbar/models.py @@ -19,3 +19,15 @@ for middleware_path in settings.MIDDLEWARE_CLASSES: if issubclass(middleware_cls, DebugToolbarMiddleware): load_panel_classes() break + +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) + + +if not settings.INTERNAL_IPS: + prepend_to_setting('INTERNAL_IPS', '127.0.0.1') + prepend_to_setting('INTERNAL_IPS', '::1') -- cgit v1.2.3 From 0b9367398e86a2b50b0e2b12d9ec05e4a25bc7ee Mon Sep 17 00:00:00 2001 From: Aymeric Augustin Date: Mon, 11 Nov 2013 13:42:33 +0100 Subject: Automatically enable DebugToolbarMiddleware when it isn't enabled. --- debug_toolbar/models.py | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) (limited to 'debug_toolbar') diff --git a/debug_toolbar/models.py b/debug_toolbar/models.py index 3bdb639..397771f 100644 --- a/debug_toolbar/models.py +++ b/debug_toolbar/models.py @@ -7,18 +7,16 @@ 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 prepend_to_setting(setting_name, value): """Insert value at the beginning of a list or tuple setting.""" @@ -31,3 +29,12 @@ def prepend_to_setting(setting_name, value): if not settings.INTERNAL_IPS: prepend_to_setting('INTERNAL_IPS', '127.0.0.1') prepend_to_setting('INTERNAL_IPS', '::1') + + +if not any(is_toolbar_middleware(middleware) + for middleware in settings.MIDDLEWARE_CLASSES): + prepend_to_setting('MIDDLEWARE_CLASSES', + 'debug_toolbar.middleware.DebugToolbarMiddleware') + + +load_panel_classes() -- cgit v1.2.3 From ef23e6dc31c66abd0c6784bf0044f53271d34b1e Mon Sep 17 00:00:00 2001 From: Aymeric Augustin Date: Mon, 11 Nov 2013 16:15:30 +0100 Subject: Simplify monkey-patching of URLs into urlconf. --- debug_toolbar/middleware.py | 26 -------------------------- debug_toolbar/models.py | 10 ++++++++++ debug_toolbar/urls.py | 16 +++++++--------- 3 files changed, 17 insertions(+), 35 deletions(-) (limited to 'debug_toolbar') 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 397771f..772b52b 100644 --- a/debug_toolbar/models.py +++ b/debug_toolbar/models.py @@ -1,6 +1,8 @@ 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 @@ -36,5 +38,13 @@ if not any(is_toolbar_middleware(middleware) prepend_to_setting('MIDDLEWARE_CLASSES', 'debug_toolbar.middleware.DebugToolbarMiddleware') +try: + reverse('djdt:render_panel') +except NoReverseMatch: + urlconf_module = import_module(settings.ROOT_URLCONF) + urlconf_module.urlpatterns += patterns('', + url(r'^__debug__/', include('debug_toolbar.urls', namespace='djdt', app_name='djdt')), + ) + load_panel_classes() 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'), ) -- cgit v1.2.3 From ede259fb087b9049c68065cded70fa48861807f7 Mon Sep 17 00:00:00 2001 From: Aymeric Augustin Date: Mon, 11 Nov 2013 16:18:19 +0100 Subject: Switch to regular URL reversing in templates. --- debug_toolbar/templates/debug_toolbar/base.html | 4 ++-- debug_toolbar/templates/debug_toolbar/panels/sql.html | 8 ++++---- debug_toolbar/templates/debug_toolbar/panels/templates.html | 4 ++-- debug_toolbar/toolbar/loader.py | 5 +---- 4 files changed, 9 insertions(+), 12 deletions(-) (limited to 'debug_toolbar') 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 %} @@ -9,7 +9,7 @@ if(!window.jQuery) document.write('