|
5 | 5 | from __future__ import absolute_import, unicode_literals
|
6 | 6 |
|
7 | 7 | import re
|
8 |
| -import threading |
9 | 8 |
|
10 | 9 | from django.conf import settings
|
11 | 10 | from django.utils import six
|
12 |
| -from django.utils.deprecation import MiddlewareMixin |
13 | 11 | from django.utils.encoding import force_text
|
14 | 12 | from django.utils.lru_cache import lru_cache
|
15 | 13 | from django.utils.module_loading import import_string
|
@@ -41,70 +39,35 @@ def get_show_toolbar():
|
41 | 39 | return func_or_path
|
42 | 40 |
|
43 | 41 |
|
44 |
| -class DebugToolbarMiddleware(MiddlewareMixin): |
| 42 | +class DebugToolbarMiddleware(object): |
45 | 43 | """
|
46 | 44 | Middleware to set up Debug Toolbar on incoming request and render toolbar
|
47 | 45 | on outgoing response.
|
48 | 46 | """
|
49 | 47 |
|
50 |
| - debug_toolbars = {} |
| 48 | + def __init__(self, get_response): |
| 49 | + self.get_response = get_response |
51 | 50 |
|
52 |
| - def process_request(self, request): |
53 |
| - # Decide whether the toolbar is active for this request. |
| 51 | + def __call__(self, request): |
| 52 | + # Decide whether the toolbar is active for this request. Don't render |
| 53 | + # the toolbar during AJAX requests. |
54 | 54 | show_toolbar = get_show_toolbar()
|
55 |
| - if not show_toolbar(request): |
56 |
| - return |
| 55 | + if not show_toolbar(request) or request.is_ajax(): |
| 56 | + return self.get_response(request) |
57 | 57 |
|
58 |
| - # Don't render the toolbar during AJAX requests. |
59 |
| - if request.is_ajax(): |
60 |
| - return |
61 |
| - |
62 |
| - toolbar = DebugToolbar(request) |
63 |
| - self.__class__.debug_toolbars[threading.current_thread().ident] = toolbar |
| 58 | + toolbar = DebugToolbar(request, self.get_response) |
64 | 59 |
|
65 | 60 | # Activate instrumentation ie. monkey-patch.
|
66 | 61 | for panel in toolbar.enabled_panels:
|
67 | 62 | panel.enable_instrumentation()
|
68 |
| - |
69 |
| - # Run process_request methods of panels like Django middleware. |
70 |
| - response = None |
71 |
| - for panel in toolbar.enabled_panels: |
72 |
| - response = panel.process_request(request) |
73 |
| - if response: |
74 |
| - break |
75 |
| - return response |
76 |
| - |
77 |
| - def process_view(self, request, view_func, view_args, view_kwargs): |
78 |
| - toolbar = self.__class__.debug_toolbars.get(threading.current_thread().ident) |
79 |
| - if not toolbar: |
80 |
| - return |
81 |
| - |
82 |
| - # Run process_view methods of panels like Django middleware. |
83 |
| - response = None |
84 |
| - for panel in toolbar.enabled_panels: |
85 |
| - response = panel.process_view(request, view_func, view_args, view_kwargs) |
86 |
| - if response: |
87 |
| - break |
88 |
| - return response |
89 |
| - |
90 |
| - def process_response(self, request, response): |
91 |
| - toolbar = self.__class__.debug_toolbars.pop( |
92 |
| - threading.current_thread().ident, None |
93 |
| - ) |
94 |
| - if not toolbar: |
95 |
| - return response |
96 |
| - |
97 |
| - # Run process_response methods of panels like Django middleware. |
98 |
| - for panel in reversed(toolbar.enabled_panels): |
99 |
| - new_response = panel.process_response(request, response) |
100 |
| - if new_response: |
101 |
| - response = new_response |
102 |
| - |
103 |
| - # Deactivate instrumentation ie. monkey-unpatch. This must run |
104 |
| - # regardless of the response. Keep 'return' clauses below. |
105 |
| - # (NB: Django's model for middleware doesn't guarantee anything.) |
106 |
| - for panel in reversed(toolbar.enabled_panels): |
107 |
| - panel.disable_instrumentation() |
| 63 | + try: |
| 64 | + # Run panels like Django middleware. |
| 65 | + response = toolbar.process_request(request) |
| 66 | + finally: |
| 67 | + # Deactivate instrumentation ie. monkey-unpatch. This must run |
| 68 | + # regardless of the response. Keep 'return' clauses below. |
| 69 | + for panel in reversed(toolbar.enabled_panels): |
| 70 | + panel.disable_instrumentation() |
108 | 71 |
|
109 | 72 | # Check for responses where the toolbar can't be inserted.
|
110 | 73 | content_encoding = response.get("Content-Encoding", "")
|
|
0 commit comments