Skip to content

Commit 2a421ef

Browse files
author
Dan Fairs
committed
Don't explode if a project uses tuple'd urlpatterns
1 parent 2554176 commit 2a421ef

File tree

2 files changed

+56
-45
lines changed

2 files changed

+56
-45
lines changed

debug_toolbar/middleware.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ def process_request(self, request):
8282
if urlconf not in self._urlconfs:
8383
new_urlconf = imp.new_module('urlconf')
8484
new_urlconf.urlpatterns = debug_toolbar.urls.urlpatterns + \
85-
urlconf.urlpatterns
85+
list(urlconf.urlpatterns)
8686

8787
if hasattr(urlconf, 'handler404'):
8888
new_urlconf.handler404 = urlconf.handler404

tests/tests.py

Lines changed: 55 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ def __exit__(self, exc_type, exc_value, traceback):
3636
delattr(settings, k)
3737
else:
3838
setattr(settings, k, v)
39-
39+
4040
class BaseTestCase(TestCase):
4141
def setUp(self):
4242
request = Dingus('request')
@@ -52,18 +52,18 @@ def setUp(self):
5252

5353
class DebugToolbarTestCase(BaseTestCase):
5454
urls = 'tests.urls'
55-
55+
5656
def test_middleware(self):
5757
with Settings(INTERNAL_IPS=['127.0.0.1'], DEBUG=True):
5858
resp = self.client.get('/execute_sql/')
5959
self.assertEquals(resp.status_code, 200)
6060

6161
def test_show_toolbar_DEBUG(self):
6262
request = self.request
63-
63+
6464
request.META = {'REMOTE_ADDR': '127.0.0.1'}
6565
middleware = DebugToolbarMiddleware()
66-
66+
6767
with Settings(INTERNAL_IPS=['127.0.0.1'], DEBUG=True):
6868
self.assertTrue(middleware._show_toolbar(request))
6969

@@ -72,10 +72,10 @@ def test_show_toolbar_DEBUG(self):
7272

7373
def test_show_toolbar_TEST(self):
7474
request = self.request
75-
75+
7676
request.META = {'REMOTE_ADDR': '127.0.0.1'}
7777
middleware = DebugToolbarMiddleware()
78-
78+
7979
with Settings(INTERNAL_IPS=['127.0.0.1'], TEST=True, DEBUG=True):
8080
self.assertFalse(middleware._show_toolbar(request))
8181

@@ -84,10 +84,10 @@ def test_show_toolbar_TEST(self):
8484

8585
def test_show_toolbar_INTERNAL_IPS(self):
8686
request = self.request
87-
87+
8888
request.META = {'REMOTE_ADDR': '127.0.0.1'}
8989
middleware = DebugToolbarMiddleware()
90-
90+
9191
with Settings(INTERNAL_IPS=['127.0.0.1'], DEBUG=True):
9292
self.assertTrue(middleware._show_toolbar(request))
9393

@@ -96,64 +96,75 @@ def test_show_toolbar_INTERNAL_IPS(self):
9696

9797
def test_request_urlconf_string(self):
9898
request = self.request
99-
99+
100100
request.urlconf = 'tests.urls'
101101
request.META = {'REMOTE_ADDR': '127.0.0.1'}
102102
middleware = DebugToolbarMiddleware()
103-
103+
104104
with Settings(INTERNAL_IPS=['127.0.0.1'], DEBUG=True):
105105
middleware.process_request(request)
106-
106+
107107
self.assertFalse(isinstance(request.urlconf, basestring))
108-
108+
109109
self.assertTrue(hasattr(request.urlconf.urlpatterns[0], '_callback_str'))
110110
self.assertEquals(request.urlconf.urlpatterns[0]._callback_str, 'debug_toolbar.views.debug_media')
111111
self.assertTrue(hasattr(request.urlconf.urlpatterns[1], '_callback_str'))
112112
self.assertEquals(request.urlconf.urlpatterns[-1]._callback_str, 'tests.views.execute_sql')
113113

114114
def test_request_urlconf_string_per_request(self):
115115
request = self.request
116-
116+
117117
request.urlconf = 'debug_toolbar.urls'
118118
request.META = {'REMOTE_ADDR': '127.0.0.1'}
119119
middleware = DebugToolbarMiddleware()
120-
120+
121121
with Settings(INTERNAL_IPS=['127.0.0.1'], DEBUG=True):
122122
middleware.process_request(request)
123123
request.urlconf = 'tests.urls'
124124
middleware.process_request(request)
125125

126126
self.assertFalse(isinstance(request.urlconf, basestring))
127-
127+
128128
self.assertTrue(hasattr(request.urlconf.urlpatterns[0], '_callback_str'))
129129
self.assertEquals(request.urlconf.urlpatterns[0]._callback_str, 'debug_toolbar.views.debug_media')
130130
self.assertTrue(hasattr(request.urlconf.urlpatterns[1], '_callback_str'))
131131
self.assertEquals(request.urlconf.urlpatterns[-1]._callback_str, 'tests.views.execute_sql')
132132

133133
def test_request_urlconf_module(self):
134134
request = self.request
135-
135+
136136
request.urlconf = __import__('tests.urls').urls
137137
request.META = {'REMOTE_ADDR': '127.0.0.1'}
138138
middleware = DebugToolbarMiddleware()
139-
139+
140140
with Settings(INTERNAL_IPS=['127.0.0.1'], DEBUG=True):
141141
middleware.process_request(request)
142-
142+
143143
self.assertFalse(isinstance(request.urlconf, basestring))
144-
144+
145145
self.assertTrue(hasattr(request.urlconf.urlpatterns[0], '_callback_str'))
146146
self.assertEquals(request.urlconf.urlpatterns[0]._callback_str, 'debug_toolbar.views.debug_media')
147147
self.assertTrue(hasattr(request.urlconf.urlpatterns[1], '_callback_str'))
148148
self.assertEquals(request.urlconf.urlpatterns[-1]._callback_str, 'tests.views.execute_sql')
149149

150+
def test_tuple_urlconf(self):
151+
request = self.request
152+
urls = __import__('tests.urls').urls
153+
urls.urlpatterns = tuple(urls.urlpatterns)
154+
request.urlconf = urls
155+
request.META = {'REMOTE_ADDR': '127.0.0.1'}
156+
middleware = DebugToolbarMiddleware()
157+
with Settings(INTERNAL_IPS=['127.0.0.1'], DEBUG=True):
158+
middleware.process_request(request)
159+
self.assertFalse(isinstance(request.urlconf, basestring))
160+
150161
def test_with_process_view(self):
151162
request = self.request
152163
response = self.response
153-
164+
154165
def _test_view(request):
155166
return HttpResponse('')
156-
167+
157168
with Settings(DEBUG=True):
158169
panel = self.toolbar.get_panel(RequestVarsDebugPanel)
159170
panel.process_request(request)
@@ -193,9 +204,9 @@ class SQLPanelTestCase(BaseTestCase):
193204
def test_recording(self):
194205
panel = self.toolbar.get_panel(SQLDebugPanel)
195206
self.assertEquals(len(panel._queries), 0)
196-
207+
197208
list(User.objects.all())
198-
209+
199210
# ensure query was logged
200211
self.assertEquals(len(panel._queries), 1)
201212
query = panel._queries[0]
@@ -210,10 +221,10 @@ def test_recording(self):
210221
def test_disable_stacktraces(self):
211222
panel = self.toolbar.get_panel(SQLDebugPanel)
212223
self.assertEquals(len(panel._queries), 0)
213-
224+
214225
with Settings(DEBUG_TOOLBAR_CONFIG={ 'ENABLE_STACKTRACES' : False }):
215226
list(User.objects.all())
216-
227+
217228
# ensure query was logged
218229
self.assertEquals(len(panel._queries), 1)
219230
query = panel._queries[0]
@@ -252,19 +263,19 @@ def class_method(cls, *args, **kwargs):
252263
def class_func(self, *args, **kwargs):
253264
"""Used by dispatch tests"""
254265
return 'blah'
255-
266+
256267
def test_pre_hook(self):
257268
foo = {}
258-
269+
259270
@pre_dispatch(module_func)
260271
def test(**kwargs):
261272
foo.update(kwargs)
262-
273+
263274
self.assertTrue(hasattr(module_func, '__wrapped__'))
264275
self.assertEquals(len(callbacks['before']), 1)
265-
276+
266277
module_func('hi', foo='bar')
267-
278+
268279
self.assertTrue('sender' in foo, foo)
269280
# best we can do
270281
self.assertEquals(foo['sender'].__name__, 'module_func')
@@ -278,13 +289,13 @@ def test(**kwargs):
278289
self.assertTrue(len(foo['kwargs']), 1)
279290
self.assertTrue('foo' in foo['kwargs'])
280291
self.assertEquals(foo['kwargs']['foo'], 'bar')
281-
292+
282293
callbacks['before'] = {}
283-
294+
284295
@pre_dispatch(TrackingTestCase.class_func)
285296
def test(**kwargs):
286297
foo.update(kwargs)
287-
298+
288299
self.assertTrue(hasattr(TrackingTestCase.class_func, '__wrapped__'))
289300
self.assertEquals(len(callbacks['before']), 1)
290301

@@ -305,16 +316,16 @@ def test(**kwargs):
305316
self.assertEquals(foo['kwargs']['foo'], 'bar')
306317

307318
# callbacks['before'] = {}
308-
#
319+
#
309320
# @pre_dispatch(TrackingTestCase.class_method)
310321
# def test(**kwargs):
311322
# foo.update(kwargs)
312-
#
323+
#
313324
# self.assertTrue(hasattr(TrackingTestCase.class_method, '__wrapped__'))
314325
# self.assertEquals(len(callbacks['before']), 1)
315-
#
326+
#
316327
# TrackingTestCase.class_method()
317-
#
328+
#
318329
# self.assertTrue('sender' in foo, foo)
319330
# # best we can do
320331
# self.assertEquals(foo['sender'].__name__, 'class_method')
@@ -324,16 +335,16 @@ def test(**kwargs):
324335

325336
def test_post_hook(self):
326337
foo = {}
327-
338+
328339
@post_dispatch(module_func)
329340
def test(**kwargs):
330341
foo.update(kwargs)
331-
342+
332343
self.assertTrue(hasattr(module_func, '__wrapped__'))
333344
self.assertEquals(len(callbacks['after']), 1)
334-
345+
335346
module_func('hi', foo='bar')
336-
347+
337348
self.assertTrue('sender' in foo, foo)
338349
# best we can do
339350
self.assertEquals(foo['sender'].__name__, 'module_func')
@@ -348,13 +359,13 @@ def test(**kwargs):
348359
self.assertTrue(len(foo['kwargs']), 1)
349360
self.assertTrue('foo' in foo['kwargs'])
350361
self.assertEquals(foo['kwargs']['foo'], 'bar')
351-
362+
352363
callbacks['after'] = {}
353-
364+
354365
@post_dispatch(TrackingTestCase.class_func)
355366
def test(**kwargs):
356367
foo.update(kwargs)
357-
368+
358369
self.assertTrue(hasattr(TrackingTestCase.class_func, '__wrapped__'))
359370
self.assertEquals(len(callbacks['after']), 1)
360371

0 commit comments

Comments
 (0)