aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRob Hudson2008-09-21 22:35:15 -0700
committerRob Hudson2008-09-21 22:35:15 -0700
commitee810109f7dfb8c70278b5c447b4604bccc987a0 (patch)
tree2adde32a29aa1950b50adc359d808e514c16cd95
parentee75a75f7e379b492af927b261726bc5d40fdb50 (diff)
downloaddjango-debug-toolbar-ee810109f7dfb8c70278b5c447b4604bccc987a0.tar.bz2
Refactoring middleware and panels so panels have more explicit middleware-like
methods to be more clear when panel processing happens.
-rw-r--r--debug_toolbar/middleware.py9
-rw-r--r--debug_toolbar/panels/__init__.py20
-rw-r--r--debug_toolbar/panels/cache.py3
-rw-r--r--debug_toolbar/panels/headers.py7
-rw-r--r--debug_toolbar/panels/request_vars.py3
-rw-r--r--debug_toolbar/panels/sql.py6
-rw-r--r--debug_toolbar/panels/template.py6
-rw-r--r--debug_toolbar/panels/timer.py10
-rw-r--r--debug_toolbar/toolbar/loader.py8
9 files changed, 48 insertions, 24 deletions
diff --git a/debug_toolbar/middleware.py b/debug_toolbar/middleware.py
index 9c8581c..0a202e2 100644
--- a/debug_toolbar/middleware.py
+++ b/debug_toolbar/middleware.py
@@ -44,13 +44,20 @@ class DebugToolbarMiddleware(object):
if self.show_toolbar(request):
self.debug_toolbar = DebugToolbar(request)
- self.debug_toolbar.load_panels()
+ for panel in self.debug_toolbar.panels:
+ panel.process_request(request)
return None
+ def process_view(self, request, view_func, view_args, view_kwargs):
+ for panel in self.debug_toolbar.panels:
+ panel.process_view(request, view_func, view_args, view_kwargs)
+
def process_response(self, request, response):
if response.status_code != 200:
return response
+ for panel in self.debug_toolbar.panels:
+ panel.process_response(request, response)
if self.show_toolbar(request):
if response['Content-Type'].split(';')[0] in _HTML_TYPES:
# Saving this here in case we ever need to inject into <head>
diff --git a/debug_toolbar/panels/__init__.py b/debug_toolbar/panels/__init__.py
index 29cec02..54b3318 100644
--- a/debug_toolbar/panels/__init__.py
+++ b/debug_toolbar/panels/__init__.py
@@ -6,9 +6,10 @@ class DebugPanel(object):
"""
# name = Base
has_content = False # If content returns something, set to true in subclass
-
- def __init__(self, request):
- self.request = request
+
+ # Panel methods
+ def __init__(self):
+ pass
def dom_id(self):
return 'djDebug%sPanel' % (self.name.replace(' ', ''))
@@ -20,6 +21,15 @@ class DebugPanel(object):
raise NotImplementedError
def content(self):
- # TODO: This is a bit flaky in that panel.content() returns a string
- # that gets inserted into the toolbar HTML template.
raise NotImplementedError
+
+ # Standard middleware methods
+ def process_request(self, request):
+ pass
+
+ def process_view(self, request, view_func, view_args, view_kwargs):
+ pass
+
+ def process_response(self, request, response):
+ pass
+
diff --git a/debug_toolbar/panels/cache.py b/debug_toolbar/panels/cache.py
index 263b62b..613d4d9 100644
--- a/debug_toolbar/panels/cache.py
+++ b/debug_toolbar/panels/cache.py
@@ -78,7 +78,7 @@ class CacheDebugPanel(DebugPanel):
name = 'Cache'
has_content = True
- def __init__(self, request):
+ def __init__(self):
# This is hackish but to prevent threading issues is somewhat needed
if isinstance(cache.cache, CacheStatTracker):
cache.cache.reset()
@@ -86,7 +86,6 @@ class CacheDebugPanel(DebugPanel):
else:
self.cache = CacheStatTracker(cache.cache)
cache.cache = self.cache
- super(CacheDebugPanel, self).__init__(request)
def title(self):
return 'Cache: %.2fms' % self.cache.total_time
diff --git a/debug_toolbar/panels/headers.py b/debug_toolbar/panels/headers.py
index 3ab4a95..213198a 100644
--- a/debug_toolbar/panels/headers.py
+++ b/debug_toolbar/panels/headers.py
@@ -37,8 +37,13 @@ class HeaderDebugPanel(DebugPanel):
def url(self):
return ''
+ def process_request(self, request):
+ self.headers = dict(
+ [(k, request.META[k]) for k in self.header_filter if k in request.META]
+ )
+
def content(self):
context = {
- 'headers': dict([(k, self.request.META[k]) for k in self.header_filter if k in self.request.META]),
+ 'headers': self.headers
}
return render_to_string('debug_toolbar/panels/headers.html', context) \ No newline at end of file
diff --git a/debug_toolbar/panels/request_vars.py b/debug_toolbar/panels/request_vars.py
index a137393..88a7204 100644
--- a/debug_toolbar/panels/request_vars.py
+++ b/debug_toolbar/panels/request_vars.py
@@ -14,6 +14,9 @@ class RequestVarsDebugPanel(DebugPanel):
def url(self):
return ''
+ def process_request(self, request):
+ self.request = request
+
def content(self):
context = {
'get': [(k, self.request.GET.getlist(k)) for k in self.request.GET.iterkeys()],
diff --git a/debug_toolbar/panels/sql.py b/debug_toolbar/panels/sql.py
index 81834b4..b99709f 100644
--- a/debug_toolbar/panels/sql.py
+++ b/debug_toolbar/panels/sql.py
@@ -27,13 +27,13 @@ util.CursorDebugWrapper = DatabaseStatTracker
class SQLDebugPanel(DebugPanel):
"""
- Panel that displays information about the SQL queries run while processing the request.
+ Panel that displays information about the SQL queries run while processing
+ the request.
"""
name = 'SQL'
has_content = True
- def __init__(self, request):
- super(SQLDebugPanel, self).__init__(request)
+ def __init__(self):
self._offset = len(connection.queries)
self._sql_time = 0
diff --git a/debug_toolbar/panels/template.py b/debug_toolbar/panels/template.py
index e08f220..eb20079 100644
--- a/debug_toolbar/panels/template.py
+++ b/debug_toolbar/panels/template.py
@@ -1,3 +1,4 @@
+from pprint import pformat
from django.conf import settings
from django.core.signals import request_started
from django.dispatch import Signal
@@ -5,8 +6,6 @@ from django.template.loader import render_to_string
from django.test.signals import template_rendered
from debug_toolbar.panels import DebugPanel
-from pprint import pformat
-
# Code taken and adapted from Simon Willison and Django Snippets:
# http://www.djangosnippets.org/snippets/766/
@@ -32,8 +31,7 @@ class TemplateDebugPanel(DebugPanel):
name = 'Template'
has_content = True
- def __init__(self, request):
- super(TemplateDebugPanel, self).__init__(request)
+ def __init__(self):
self.templates = []
template_rendered.connect(self._storeTemplateInfo)
diff --git a/debug_toolbar/panels/timer.py b/debug_toolbar/panels/timer.py
index d520191..ea8ed4a 100644
--- a/debug_toolbar/panels/timer.py
+++ b/debug_toolbar/panels/timer.py
@@ -3,16 +3,18 @@ from debug_toolbar.panels import DebugPanel
class TimerDebugPanel(DebugPanel):
"""
- Panel that displays the time a response took.
+ Panel that displays the time a response took in milliseconds.
"""
name = 'Timer'
- def __init__(self, request):
- super(TimerDebugPanel, self).__init__(request)
+ def process_request(self, request):
self._start_time = time.time()
+ def process_response(self, request, response):
+ self.total_time = (time.time() - self._start_time) * 1000
+
def title(self):
- return 'Time: %0.2fms' % ((time.time() - self._start_time) * 1000)
+ return 'Time: %0.2fms' % (self.total_time)
def url(self):
return ''
diff --git a/debug_toolbar/toolbar/loader.py b/debug_toolbar/toolbar/loader.py
index 935f45c..56da11b 100644
--- a/debug_toolbar/toolbar/loader.py
+++ b/debug_toolbar/toolbar/loader.py
@@ -8,8 +8,6 @@ class DebugToolbar(object):
def __init__(self, request):
self.request = request
self.panels = []
- self.panel_list = []
- self.content_list = []
# Override this tuple by copying to settings.py as `DEBUG_TOOLBAR_PANELS`
self.default_panels = (
'debug_toolbar.panels.version.VersionDebugPanel',
@@ -20,7 +18,8 @@ class DebugToolbar(object):
'debug_toolbar.panels.cache.CacheDebugPanel',
'debug_toolbar.panels.template.TemplateDebugPanel',
)
-
+ self.load_panels()
+
def load_panels(self):
"""
Populate debug panels
@@ -48,8 +47,9 @@ class DebugToolbar(object):
raise exceptions.ImproperlyConfigured, 'Toolbar Panel module "%s" does not define a "%s" class' % (panel_module, panel_classname)
try:
- panel_instance = panel_class(self.request)
+ panel_instance = panel_class()
except:
+ print panel_class
raise # Bubble up problem loading panel
self.panels.append(panel_instance)