From a66596e98495b24d878ec47648ba6236d5aba2d9 Mon Sep 17 00:00:00 2001 From: Nathan Yergler Date: Thu, 12 May 2011 14:54:24 -0700 Subject: Cache merged URL configurations by their original name. This accomodates sites where middleware may change the urlconf for two different request. --- debug_toolbar/middleware.py | 26 ++++++++++++++++++-------- 1 file changed, 18 insertions(+), 8 deletions(-) (limited to 'debug_toolbar/middleware.py') diff --git a/debug_toolbar/middleware.py b/debug_toolbar/middleware.py index de4ae9c..7723857 100644 --- a/debug_toolbar/middleware.py +++ b/debug_toolbar/middleware.py @@ -38,8 +38,8 @@ class DebugToolbarMiddleware(object): return cls.debug_toolbars.get(thread.get_ident()) def __init__(self): - self.override_url = True - + self._urlconfs = {} + # Set method to use to decide to show toolbar self.show_toolbar = self._show_toolbar # default @@ -72,17 +72,27 @@ class DebugToolbarMiddleware(object): def process_request(self, request): __traceback_hide__ = True if self.show_toolbar(request): - if self.override_url: + + urlconf_name = getattr(request, 'urlconf', settings.ROOT_URLCONF) + if urlconf_name not in self._urlconfs: + + import imp, copy + original_urlconf = __import__(getattr(request, 'urlconf', settings.ROOT_URLCONF), {}, {}, ['*']) - debug_toolbar.urls.urlpatterns += patterns('', + new_urlconf = imp.new_module('urlconf') + new_urlconf.urlpatterns = copy.copy(debug_toolbar.urls.urlpatterns) + + new_urlconf.urlpatterns += patterns('', ('', include(original_urlconf)), ) if hasattr(original_urlconf, 'handler404'): - debug_toolbar.urls.handler404 = original_urlconf.handler404 + new_urlconf.handler404 = original_urlconf.handler404 if hasattr(original_urlconf, 'handler500'): - debug_toolbar.urls.handler500 = original_urlconf.handler500 - self.override_url = False - request.urlconf = 'debug_toolbar.urls' + new_urlconf.handler500 = original_urlconf.handler500 + + self._urlconfs[urlconf_name] = new_urlconf + + request.urlconf = self._urlconfs[urlconf_name] toolbar = DebugToolbar(request) for panel in toolbar.panels: -- cgit v1.2.3 From 4e072062d1e3725e05518ae23231c375deee59cd Mon Sep 17 00:00:00 2001 From: Nathan Yergler Date: Tue, 17 May 2011 09:18:36 -0700 Subject: We actually don't need to copy the debug toolbar urlconf. --- debug_toolbar/middleware.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'debug_toolbar/middleware.py') diff --git a/debug_toolbar/middleware.py b/debug_toolbar/middleware.py index 7723857..e7cd97f 100644 --- a/debug_toolbar/middleware.py +++ b/debug_toolbar/middleware.py @@ -76,15 +76,15 @@ class DebugToolbarMiddleware(object): urlconf_name = getattr(request, 'urlconf', settings.ROOT_URLCONF) if urlconf_name not in self._urlconfs: - import imp, copy + import imp original_urlconf = __import__(getattr(request, 'urlconf', settings.ROOT_URLCONF), {}, {}, ['*']) new_urlconf = imp.new_module('urlconf') - new_urlconf.urlpatterns = copy.copy(debug_toolbar.urls.urlpatterns) + new_urlconf.urlpatterns = debug_toolbar.urls.urlpatterns + \ + patterns('', + ('', include(original_urlconf)), + ) - new_urlconf.urlpatterns += patterns('', - ('', include(original_urlconf)), - ) if hasattr(original_urlconf, 'handler404'): new_urlconf.handler404 = original_urlconf.handler404 if hasattr(original_urlconf, 'handler500'): -- cgit v1.2.3