diff options
Diffstat (limited to 'debug_toolbar')
| -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] |
