|
153 | 153 | 'debug_toolbar.panels.redirects.RedirectsPanel'
|
154 | 154 | )
|
155 | 155 |
|
156 |
| - |
157 | 156 | PATCH_SETTINGS = getattr(settings, 'DEBUG_TOOLBAR_PATCH_SETTINGS', settings.DEBUG)
|
158 | 157 |
|
159 | 158 |
|
160 | 159 | # The following functions can monkey-patch settings automatically. Several
|
161 | 160 | # imports are placed inside functions to make it safe to import this module.
|
162 | 161 |
|
163 | 162 |
|
164 |
| -def is_toolbar_middleware(middleware_path): |
| 163 | +def check_middleware(): |
| 164 | + from django.middleware.gzip import GZipMiddleware |
165 | 165 | from debug_toolbar.middleware import DebugToolbarMiddleware
|
| 166 | + gzip_index = None |
| 167 | + debug_toolbar_index = None |
| 168 | + |
| 169 | + # Determine the indexes which gzip and/or the toolbar are installed at |
| 170 | + for i, middleware in enumerate(settings.MIDDLEWARE_CLASSES): |
| 171 | + if is_middleware_class(GZipMiddleware, middleware): |
| 172 | + gzip_index = i |
| 173 | + elif is_middleware_class(DebugToolbarMiddleware, middleware): |
| 174 | + debug_toolbar_index = i |
| 175 | + # If the toolbar appears before the gzip index, raise a warning |
| 176 | + if gzip_index is not None and debug_toolbar_index < gzip_index: |
| 177 | + warnings.warn( |
| 178 | + "Please use an explicit setup with the " |
| 179 | + "debug_toolbar.middleware.DebugToolbarMiddleware " |
| 180 | + "after django.middleware.gzip.GZipMiddlware " |
| 181 | + "in MIDDLEWARE_CLASSES.", Warning) |
| 182 | + |
| 183 | + |
| 184 | +def is_middleware_class(middleware_class, middleware_path): |
166 | 185 | # This could be replaced by import_by_path in Django >= 1.6.
|
167 | 186 | try:
|
168 | 187 | mod_path, cls_name = middleware_path.rsplit('.', 1)
|
169 | 188 | mod = import_module(mod_path)
|
170 | 189 | middleware_cls = getattr(mod, cls_name)
|
171 | 190 | except (AttributeError, ImportError, ValueError):
|
172 | 191 | return
|
173 |
| - return issubclass(middleware_cls, DebugToolbarMiddleware) |
| 192 | + return issubclass(middleware_cls, middleware_class) |
174 | 193 |
|
175 | 194 |
|
176 | 195 | def is_toolbar_middleware_installed():
|
177 |
| - return any(is_toolbar_middleware(middleware) |
| 196 | + from debug_toolbar.middleware import DebugToolbarMiddleware |
| 197 | + return any(is_middleware_class(DebugToolbarMiddleware, middleware) |
178 | 198 | for middleware in settings.MIDDLEWARE_CLASSES)
|
179 | 199 |
|
180 | 200 |
|
|
0 commit comments