diff options
| author | Aymeric Augustin | 2013-11-15 20:14:40 +0100 |
|---|---|---|
| committer | Aymeric Augustin | 2013-11-15 20:33:51 +0100 |
| commit | 70d3aa1b8c12d614f2ca1b1b550bb605d8c8a506 (patch) | |
| tree | 00df40543a7e7a3b509dfb3bc2c9efb1f3736e05 /debug_toolbar/middleware.py | |
| parent | 5f54e2d88a12ec7fa06bd2a9dd54e1af2f0b50f7 (diff) | |
| download | django-debug-toolbar-70d3aa1b8c12d614f2ca1b1b550bb605d8c8a506.tar.bz2 | |
Make panels behave more like Django middleware.
Diffstat (limited to 'debug_toolbar/middleware.py')
| -rw-r--r-- | debug_toolbar/middleware.py | 44 |
1 files changed, 22 insertions, 22 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 |
