diff options
| author | Rob Hudson | 2008-09-21 22:35:15 -0700 | 
|---|---|---|
| committer | Rob Hudson | 2008-09-21 22:35:15 -0700 | 
| commit | ee810109f7dfb8c70278b5c447b4604bccc987a0 (patch) | |
| tree | 2adde32a29aa1950b50adc359d808e514c16cd95 | |
| parent | ee75a75f7e379b492af927b261726bc5d40fdb50 (diff) | |
| download | django-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.py | 9 | ||||
| -rw-r--r-- | debug_toolbar/panels/__init__.py | 20 | ||||
| -rw-r--r-- | debug_toolbar/panels/cache.py | 3 | ||||
| -rw-r--r-- | debug_toolbar/panels/headers.py | 7 | ||||
| -rw-r--r-- | debug_toolbar/panels/request_vars.py | 3 | ||||
| -rw-r--r-- | debug_toolbar/panels/sql.py | 6 | ||||
| -rw-r--r-- | debug_toolbar/panels/template.py | 6 | ||||
| -rw-r--r-- | debug_toolbar/panels/timer.py | 10 | ||||
| -rw-r--r-- | debug_toolbar/toolbar/loader.py | 8 | 
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) | 
