aboutsummaryrefslogtreecommitdiffstats
path: root/debug_toolbar/middleware.py
diff options
context:
space:
mode:
authorDavid Cramer2011-05-10 00:02:39 -0700
committerDavid Cramer2011-05-10 00:02:39 -0700
commit875a26213b9c623ddc90bfcf92f419ac8b45d007 (patch)
tree458cfcc32d2d31ea54a6538aaae0d8b0ff2b0af9 /debug_toolbar/middleware.py
parent3292aff531d4dee5cf30a003d5d2ee745f718f86 (diff)
parentbbf99c1639bfec6d2edc4473f8adb278970db7a5 (diff)
downloaddjango-debug-toolbar-875a26213b9c623ddc90bfcf92f419ac8b45d007.tar.bz2
Merge branch 'master' into andrepl-master
Conflicts: debug_toolbar/middleware.py
Diffstat (limited to 'debug_toolbar/middleware.py')
-rw-r--r--debug_toolbar/middleware.py52
1 files changed, 33 insertions, 19 deletions
diff --git a/debug_toolbar/middleware.py b/debug_toolbar/middleware.py
index 0931389..b4619da 100644
--- a/debug_toolbar/middleware.py
+++ b/debug_toolbar/middleware.py
@@ -1,7 +1,7 @@
"""
Debug Toolbar middleware
"""
-import os
+import thread
from django.conf import settings
from django.http import HttpResponseRedirect
@@ -31,8 +31,13 @@ class DebugToolbarMiddleware(object):
Middleware to set up Debug Toolbar on incoming request and render toolbar
on outgoing response.
"""
+ debug_toolbars = {}
+
+ @classmethod
+ def get_current(cls):
+ return cls.debug_toolbars.get(thread.get_ident())
+
def __init__(self):
- self.debug_toolbars = {}
self.override_url = True
# Set method to use to decide to show toolbar
@@ -60,33 +65,42 @@ class DebugToolbarMiddleware(object):
if not remote_addr in settings.INTERNAL_IPS \
or (request.is_ajax() and \
not debug_toolbar.urls._PREFIX in request.path) \
- or not settings.DEBUG:
+ or not (settings.DEBUG or getattr(settings, 'TEST', False)):
return False
return True
def process_request(self, request):
if self.show_toolbar(request):
if self.override_url:
- original_urlconf = getattr(request, 'urlconf', settings.ROOT_URLCONF)
+ original_urlconf = __import__(getattr(request, 'urlconf', settings.ROOT_URLCONF), {}, {}, ['*'])
debug_toolbar.urls.urlpatterns += patterns('',
('', include(original_urlconf)),
)
+ if hasattr(original_urlconf, 'handler404'):
+ debug_toolbar.urls.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'
- self.debug_toolbars[request] = DebugToolbar(request)
- for panel in self.debug_toolbars[request].panels:
+ toolbar = DebugToolbar(request)
+ for panel in toolbar.panels:
panel.process_request(request)
+ self.__class__.debug_toolbars[thread.get_ident()] = toolbar
def process_view(self, request, view_func, view_args, view_kwargs):
- if request in self.debug_toolbars:
- for panel in self.debug_toolbars[request].panels:
- panel.process_view(request, view_func, view_args, view_kwargs)
+ toolbar = self.__class__.debug_toolbars.get(thread.get_ident())
+ if not toolbar:
+ return
+ for panel in toolbar.panels:
+ panel.process_view(request, view_func, view_args, view_kwargs)
def process_response(self, request, response):
- if request not in self.debug_toolbars:
+ ident = thread.get_ident()
+ toolbar = self.__class__.debug_toolbars.get(ident)
+ if not toolbar:
return response
- if self.debug_toolbars[request].config['INTERCEPT_REDIRECTS']:
+ if toolbar.config['INTERCEPT_REDIRECTS']:
if isinstance(response, HttpResponseRedirect):
redirect_to = response.get('Location', None)
if redirect_to:
@@ -96,15 +110,15 @@ class DebugToolbarMiddleware(object):
{'redirect_to': redirect_to}
)
response.cookies = cookies
- if response.status_code == 200:
- for panel in self.debug_toolbars[request].panels:
+ if response.status_code == 200 and 'gzip' not in response.get('Content-Encoding', '') and \
+ response.get('Content-Type', '').split(';')[0] in _HTML_TYPES:
+ for panel in toolbar.panels:
panel.process_response(request, response)
- if response.get('Content-Type', None) and response['Content-Type'].split(';')[0] in _HTML_TYPES:
- response.content = replace_insensitive(
- smart_unicode(response.content),
- self.tag,
- smart_unicode(self.debug_toolbars[request].render_toolbar() + self.tag))
+ response.content = replace_insensitive(
+ smart_unicode(response.content),
+ self.tag,
+ smart_unicode(toolbar.render_toolbar() + self.tag))
if response.get('Content-Length', None):
response['Content-Length'] = len(response.content)
- del self.debug_toolbars[request]
+ del self.__class__.debug_toolbars[ident]
return response