diff options
| -rw-r--r-- | debug_toolbar/middleware.py | 44 | ||||
| -rw-r--r-- | debug_toolbar/panels/__init__.py | 6 | ||||
| -rw-r--r-- | debug_toolbar/static/debug_toolbar/js/toolbar.js | 4 | ||||
| -rw-r--r-- | debug_toolbar/templates/debug_toolbar/base.html | 2 | ||||
| -rw-r--r-- | debug_toolbar/toolbar.py | 4 | 
5 files changed, 32 insertions, 28 deletions
| diff --git a/debug_toolbar/middleware.py b/debug_toolbar/middleware.py index 44d0700..7456072 100644 --- a/debug_toolbar/middleware.py +++ b/debug_toolbar/middleware.py @@ -59,34 +59,34 @@ class DebugToolbarMiddleware(object):      def process_request(self, request):          __traceback_hide__ = True                                       # noqa -        if self.show_toolbar(request): -            toolbar = DebugToolbar(request) -            for panel in toolbar.panels: -                panel.enabled = panel.dom_id() not in request.COOKIES -                if not panel.enabled: -                    continue -                panel.enable_instrumentation() -                panel.process_request(request) -            self.__class__.debug_toolbars[threading.current_thread().ident] = toolbar +        if not self.show_toolbar(request): +            return +        response = None +        toolbar = DebugToolbar(request) +        for panel in toolbar.enabled_panels: +            panel.enable_instrumentation() +        for panel in toolbar.enabled_panels: +            response = panel.process_request(request) +            if response: +                break +        self.__class__.debug_toolbars[threading.current_thread().ident] = toolbar +        return response      def process_view(self, request, view_func, view_args, view_kwargs):          __traceback_hide__ = True                                       # noqa          toolbar = self.__class__.debug_toolbars.get(threading.current_thread().ident)          if not toolbar:              return -        result = None -        for panel in toolbar.panels: -            if not panel.enabled: -                continue +        response = None +        for panel in toolbar.enabled_panels:              response = panel.process_view(request, view_func, view_args, view_kwargs)              if response: -                result = response -        return result +                break +        return response      def process_response(self, request, response):          __traceback_hide__ = True                                       # noqa -        ident = threading.current_thread().ident -        toolbar = self.__class__.debug_toolbars.get(ident) +        toolbar = self.__class__.debug_toolbars.pop(threading.current_thread().ident, None)          if not toolbar or request.is_ajax() or getattr(response, 'streaming', False):              return response          if isinstance(response, HttpResponseRedirect): @@ -101,10 +101,11 @@ class DebugToolbarMiddleware(object):                      {'redirect_to': redirect_to}                  )                  response.cookies = cookies -        for panel in toolbar.panels: -            if not panel.enabled: -                continue -            panel.process_response(request, response) +        for panel in reversed(toolbar.enabled_panels): +            new_response = panel.process_response(request, response) +            if new_response: +                response = new_response +        for panel in reversed(toolbar.enabled_panels):              panel.disable_instrumentation()          if ('gzip' not in response.get('Content-Encoding', '') and                  response.get('Content-Type', '').split(';')[0] in _HTML_TYPES): @@ -114,5 +115,4 @@ class DebugToolbarMiddleware(object):                  force_text(toolbar.render_toolbar() + self.tag))              if response.get('Content-Length', None):                  response['Content-Length'] = len(response.content) -        del self.__class__.debug_toolbars[ident]          return response diff --git a/debug_toolbar/panels/__init__.py b/debug_toolbar/panels/__init__.py index 47ca996..d64aac2 100644 --- a/debug_toolbar/panels/__init__.py +++ b/debug_toolbar/panels/__init__.py @@ -14,9 +14,6 @@ class DebugPanel(object):      # If content returns something, set to True in subclass      has_content = False -    # This can be set to False in instances if the panel is disabled. -    enabled = True -      # We'll maintain a local context instance so we can expose our template      # context variables to panels which need them:      context = {} @@ -37,6 +34,9 @@ class DebugPanel(object):      def dom_id(self):          return 'djDebug%sPanel' % (self.name.replace(' ', '')) +    def enabled(self): +        return self.toolbar.request.COOKIES.get(self.dom_id(), 'on') == 'on' +      # URLs for panel-specific views      @classmethod diff --git a/debug_toolbar/static/debug_toolbar/js/toolbar.js b/debug_toolbar/static/debug_toolbar/js/toolbar.js index e062f9e..3e0913b 100644 --- a/debug_toolbar/static/debug_toolbar/js/toolbar.js +++ b/debug_toolbar/static/debug_toolbar/js/toolbar.js @@ -58,9 +58,9 @@                  return false;              });              $('#djDebug .djDebugPanelButton input[type=checkbox]').live('click', function() { -                $.cookie($(this).attr('data-cookie'), 'off', { +                $.cookie($(this).attr('data-cookie'), $(this).prop('checked') ? 'on' : 'off', {                      path: '/', -                    expires: $(this).prop('checked') ? -1 : 10 +                    expires: 10,                  });              }); diff --git a/debug_toolbar/templates/debug_toolbar/base.html b/debug_toolbar/templates/debug_toolbar/base.html index b2ea63e..19b32cf 100644 --- a/debug_toolbar/templates/debug_toolbar/base.html +++ b/debug_toolbar/templates/debug_toolbar/base.html @@ -20,7 +20,7 @@ if(!window.jQuery) document.write('<scr'+'ipt src="{{ STATIC_URL }}debug_toolbar  			{% endif %}  			{% for panel in panels %}  				<li class="djDebugPanelButton"> -					<input type="checkbox" data-cookie="{{ panel.dom_id }}"{% if panel.enabled %} checked="checked"{% endif %} title="{% trans "Toogle Panel for next and successive requests" %}" /> +					<input type="checkbox" data-cookie="{{ panel.dom_id }}" {% if panel.enabled %}checked="checked" title="{% trans "Disable for next and successive requests" %}"{% else %}title="{% trans "Enable for next and successive requests" %}"{% endif %} />  					{% if panel.has_content and panel.enabled %}  						<a href="{{ panel.url|default:"#" }}" title="{{ panel.title }}" class="{{ panel.dom_id }}">  					{% else %} diff --git a/debug_toolbar/toolbar.py b/debug_toolbar/toolbar.py index 3f274d0..5c48ffa 100644 --- a/debug_toolbar/toolbar.py +++ b/debug_toolbar/toolbar.py @@ -35,6 +35,10 @@ class DebugToolbar(object):          return list(self._panels.values())      panels = property(_get_panels) +    def _get_enabled_panels(self): +        return [panel for panel in self._panels.values() if panel.enabled] +    enabled_panels = property(_get_enabled_panels) +      def get_panel(self, cls):          return self._panels[cls] | 
