diff options
| author | Rob Hudson | 2010-04-20 21:42:22 -0700 | 
|---|---|---|
| committer | Rob Hudson | 2010-06-02 07:55:57 -0700 | 
| commit | 7fc06d9acddd41fd5e8b84d52641197abe7c8110 (patch) | |
| tree | ac308fe8d0017c640a2881beacd81911065a2251 /debug_toolbar | |
| parent | ee1811238e91ae0ad33413b0d40d2f8482101951 (diff) | |
| download | django-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.
Diffstat (limited to 'debug_toolbar')
| -rw-r--r-- | debug_toolbar/middleware.py | 20 | ||||
| -rw-r--r-- | debug_toolbar/toolbar/loader.py | 30 | 
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 | 
