Skip to content

Commit 3719bbe

Browse files
committed
Correctly handle modules as request.urlconf -- Thanks to Germán M. Bravo (fixes django-commons#166)
1 parent 2d3b5ba commit 3719bbe

File tree

2 files changed

+31
-17
lines changed

2 files changed

+31
-17
lines changed

debug_toolbar/middleware.py

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
11
"""
22
Debug Toolbar middleware
33
"""
4+
import imp
45
import thread
56

67
from django.conf import settings
8+
from django.conf.urls.defaults import include, patterns
79
from django.http import HttpResponseRedirect
810
from django.shortcuts import render_to_response
911
from django.utils.encoding import smart_unicode
10-
from django.conf.urls.defaults import include, patterns
1112

1213
import debug_toolbar.urls
1314
from debug_toolbar.toolbar.loader import DebugToolbar
@@ -71,26 +72,25 @@ def process_request(self, request):
7172
__traceback_hide__ = True
7273
if self.show_toolbar(request):
7374

74-
urlconf_name = getattr(request, 'urlconf', settings.ROOT_URLCONF)
75-
if urlconf_name not in self._urlconfs:
76-
77-
import imp
75+
urlconf = getattr(request, 'urlconf', settings.ROOT_URLCONF)
76+
if isinstance(urlconf, basestring):
77+
urlconf = __import__(getattr(request, 'urlconf', settings.ROOT_URLCONF), {}, {}, ['*'])
7878

79-
original_urlconf = __import__(getattr(request, 'urlconf', settings.ROOT_URLCONF), {}, {}, ['*'])
79+
if urlconf not in self._urlconfs:
8080
new_urlconf = imp.new_module('urlconf')
8181
new_urlconf.urlpatterns = debug_toolbar.urls.urlpatterns + \
8282
patterns('',
83-
('', include(original_urlconf)),
84-
)
83+
('', include(urlconf)),
84+
)
8585

86-
if hasattr(original_urlconf, 'handler404'):
87-
new_urlconf.handler404 = original_urlconf.handler404
88-
if hasattr(original_urlconf, 'handler500'):
89-
new_urlconf.handler500 = original_urlconf.handler500
90-
91-
self._urlconfs[urlconf_name] = new_urlconf
92-
93-
request.urlconf = self._urlconfs[urlconf_name]
86+
if hasattr(urlconf, 'handler404'):
87+
new_urlconf.handler404 = urlconf.handler404
88+
if hasattr(urlconf, 'handler500'):
89+
new_urlconf.handler500 = urlconf.handler500
90+
91+
self._urlconfs[urlconf] = new_urlconf
92+
93+
request.urlconf = self._urlconfs[urlconf]
9494

9595
toolbar = DebugToolbar(request)
9696
for panel in toolbar.panels:

debug_toolbar/tests/tests.py

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
from debug_toolbar.utils.tracking import pre_dispatch, post_dispatch, callbacks
55

66
from django.conf import settings
7-
from django.conf.urls.defaults import patterns
87
from django.contrib.auth.models import User
98
from django.test import TestCase
109

@@ -118,6 +117,21 @@ def test_request_urlconf_string_per_request(self):
118117
self.assertEquals(request.urlconf.urlpatterns[0]._callback_str, 'debug_toolbar.views.debug_media')
119118
self.assertEquals(request.urlconf.urlpatterns[-1].urlconf_name.__name__, 'debug_toolbar.urls')
120119

120+
def test_request_urlconf_module(self):
121+
request = self.request
122+
123+
request.urlconf = __import__('debug_toolbar.tests.urls').tests.urls
124+
request.META = {'REMOTE_ADDR': '127.0.0.1'}
125+
middleware = DebugToolbarMiddleware()
126+
127+
with Settings(DEBUG=True):
128+
middleware.process_request(request)
129+
130+
self.assertFalse(isinstance(request.urlconf, basestring))
131+
132+
self.assertTrue(hasattr(request.urlconf.urlpatterns[0], '_callback_str'))
133+
self.assertEquals(request.urlconf.urlpatterns[0]._callback_str, 'debug_toolbar.views.debug_media')
134+
self.assertEquals(request.urlconf.urlpatterns[-1].urlconf_name.__name__, 'debug_toolbar.tests.urls')
121135

122136
class SQLPanelTestCase(BaseTestCase):
123137
def test_recording(self):

0 commit comments

Comments
 (0)