aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRob Hudson2010-04-20 21:42:22 -0700
committerRob Hudson2010-06-02 07:55:57 -0700
commit7fc06d9acddd41fd5e8b84d52641197abe7c8110 (patch)
treeac308fe8d0017c640a2881beacd81911065a2251
parentee1811238e91ae0ad33413b0d40d2f8482101951 (diff)
downloaddjango-debug-toolbar-toolbar-refactor.tar.bz2
Instantiate only one toolbar object on load.toolbar-refactor
Start of work on having one toolbar object and its panels handle multiple requests, getting rid of the need to instantiate a toolbar and all panels per request. This will require much more work in panels to make sure everything is thread-safe.
-rw-r--r--debug_toolbar/middleware.py20
-rw-r--r--debug_toolbar/toolbar/loader.py30
2 files changed, 28 insertions, 22 deletions
diff --git a/debug_toolbar/middleware.py b/debug_toolbar/middleware.py
index 4e4f69f..b0a0da1 100644
--- a/debug_toolbar/middleware.py
+++ b/debug_toolbar/middleware.py
@@ -32,7 +32,7 @@ class DebugToolbarMiddleware(object):
on outgoing response.
"""
def __init__(self):
- self.debug_toolbars = {}
+ self.debug_toolbar = DebugToolbar()
self.override_url = True
# Set method to use to decide to show toolbar
@@ -66,6 +66,7 @@ class DebugToolbarMiddleware(object):
def process_request(self, request):
if self.show_toolbar(request):
+ self.debug_toolbar.process_request(request)
if self.override_url:
original_urlconf = getattr(request, 'urlconf', settings.ROOT_URLCONF)
debug_toolbar.urls.urlpatterns += patterns('',
@@ -74,19 +75,18 @@ class DebugToolbarMiddleware(object):
self.override_url = False
request.urlconf = 'debug_toolbar.urls'
- self.debug_toolbars[request] = DebugToolbar(request)
- for panel in self.debug_toolbars[request].panels:
+ for panel in self.debug_toolbar.panels:
panel.process_request(request)
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:
+ if request in self.debug_toolbar.requests:
+ for panel in self.debug_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:
+ if request not in self.debug_toolbar.requests:
return response
- if self.debug_toolbars[request].config['INTERCEPT_REDIRECTS']:
+ if self.debug_toolbar.config['INTERCEPT_REDIRECTS']:
if isinstance(response, HttpResponseRedirect):
redirect_to = response.get('Location', None)
if redirect_to:
@@ -95,14 +95,14 @@ class DebugToolbarMiddleware(object):
{'redirect_to': redirect_to}
)
if response.status_code == 200:
- for panel in self.debug_toolbars[request].panels:
+ for panel in self.debug_toolbar.panels:
panel.process_response(request, response)
if 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))
+ smart_unicode(self.debug_toolbar.render_toolbar() + self.tag))
if response.get('Content-Length', None):
response['Content-Length'] = len(response.content)
- del self.debug_toolbars[request]
+ del self.debug_toolbar.requests[request]
return response
diff --git a/debug_toolbar/toolbar/loader.py b/debug_toolbar/toolbar/loader.py
index 4b53d2f..9b468c5 100644
--- a/debug_toolbar/toolbar/loader.py
+++ b/debug_toolbar/toolbar/loader.py
@@ -6,20 +6,14 @@ from django.template.loader import render_to_string
class DebugToolbar(object):
- def __init__(self, request):
- self.request = request
- self.panels = []
- base_url = self.request.META.get('SCRIPT_NAME', '')
- self.config = {
- 'INTERCEPT_REDIRECTS': True,
- 'MEDIA_URL': u'%s/__debug__/m/' % base_url
- }
+ config = {}
+ panels = []
+ requests = {}
+ template_context = {}
+
+ def __init__(self):
# Check if settings has a DEBUG_TOOLBAR_CONFIG and updated config
self.config.update(getattr(settings, 'DEBUG_TOOLBAR_CONFIG', {}))
- self.template_context = {
- 'BASE_URL': base_url, # for backwards compatibility
- 'DEBUG_TOOLBAR_MEDIA_URL': self.config.get('MEDIA_URL'),
- }
# Override this tuple by copying to settings.py as `DEBUG_TOOLBAR_PANELS`
self.default_panels = (
'debug_toolbar.panels.version.VersionDebugPanel',
@@ -35,6 +29,18 @@ class DebugToolbar(object):
)
self.load_panels()
+ def process_request(self, request):
+ self.requests[request] = []
+ base_url = request.META.get('SCRIPT_NAME', '')
+ self.config.update({
+ 'INTERCEPT_REDIRECTS': True,
+ 'MEDIA_URL': u'%s/__debug__/m/' % (base_url,)
+ })
+ self.template_context.update({
+ 'BASE_URL': base_url, # for backwards compatibility
+ 'DEBUG_TOOLBAR_MEDIA_URL': self.config.get('MEDIA_URL'),
+ })
+
def load_panels(self):
"""
Populate debug panels