diff options
| -rw-r--r-- | debug_toolbar/middleware.py | 26 | ||||
| -rw-r--r-- | debug_toolbar/models.py | 10 | ||||
| -rw-r--r-- | debug_toolbar/urls.py | 16 | ||||
| -rw-r--r-- | tests/test_integration.py | 52 |
4 files changed, 17 insertions, 87 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 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'), ) diff --git a/tests/test_integration.py b/tests/test_integration.py index a80f50c..6755917 100644 --- a/tests/test_integration.py +++ b/tests/test_integration.py @@ -34,58 +34,6 @@ class DebugToolbarTestCase(BaseTestCase): with self.settings(INTERNAL_IPS=[]): self.assertFalse(show_toolbar(self.request)) - def test_request_urlconf_string(self): - request = rf.get('/') - request.urlconf = 'tests.urls' - middleware = DebugToolbarMiddleware() - - middleware.process_request(request) - - self.assertFalse(isinstance(request.urlconf, six.string_types)) - - patterns = request.urlconf.urlpatterns - self.assertTrue(hasattr(patterns[1], '_callback_str')) - self.assertEqual(patterns[-1]._callback_str, 'tests.views.execute_sql') - - def test_request_urlconf_string_per_request(self): - request = rf.get('/') - request.urlconf = 'debug_toolbar.urls' - middleware = DebugToolbarMiddleware() - - middleware.process_request(request) - request.urlconf = 'tests.urls' - middleware.process_request(request) - - self.assertFalse(isinstance(request.urlconf, six.string_types)) - - patterns = request.urlconf.urlpatterns - self.assertTrue(hasattr(patterns[1], '_callback_str')) - self.assertEqual(patterns[-1]._callback_str, 'tests.views.execute_sql') - - def test_request_urlconf_module(self): - request = rf.get('/') - request.urlconf = __import__('tests.urls').urls - middleware = DebugToolbarMiddleware() - - middleware.process_request(request) - - self.assertFalse(isinstance(request.urlconf, six.string_types)) - - patterns = request.urlconf.urlpatterns - self.assertTrue(hasattr(patterns[1], '_callback_str')) - self.assertEqual(patterns[-1]._callback_str, 'tests.views.execute_sql') - - def test_tuple_urlconf(self): - request = rf.get('/') - urls = __import__('tests.urls').urls - urls.urlpatterns = tuple(urls.urlpatterns) - request.urlconf = urls - middleware = DebugToolbarMiddleware() - - middleware.process_request(request) - - self.assertFalse(isinstance(request.urlconf, six.string_types)) - def _resolve_stats(self, path): # takes stats from RequestVars panel self.request.path = path |
