123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- from __future__ import absolute_import, unicode_literals
-
- import inspect
-
- from django.apps import AppConfig
- from django.conf import settings
- from django.core.checks import Error, register
- from django.middleware.gzip import GZipMiddleware
- from django.utils.module_loading import import_string
- from django.utils.translation import ugettext_lazy as _
-
-
- class DebugToolbarConfig(AppConfig):
- name = 'debug_toolbar'
- verbose_name = _("Debug Toolbar")
-
-
- @register
- def check_middleware(app_configs, **kwargs):
- from debug_toolbar.middleware import DebugToolbarMiddleware
-
- errors = []
- gzip_index = None
- debug_toolbar_indexes = []
-
- setting = getattr(settings, 'MIDDLEWARE', None)
- setting_name = 'MIDDLEWARE'
- if setting is None:
- setting = settings.MIDDLEWARE_CLASSES
- setting_name = 'MIDDLEWARE_CLASSES'
-
- # Determine the indexes which gzip and/or the toolbar are installed at
- for i, middleware in enumerate(setting):
- if is_middleware_class(GZipMiddleware, middleware):
- gzip_index = i
- elif is_middleware_class(DebugToolbarMiddleware, middleware):
- debug_toolbar_indexes.append(i)
-
- if not debug_toolbar_indexes:
- # If the toolbar does not appear, report an error.
- errors.append(
- Error(
- "debug_toolbar.middleware.DebugToolbarMiddleware is missing "
- "from %s." % setting_name,
- hint="Add debug_toolbar.middleware.DebugToolbarMiddleware to "
- "%s." % setting_name,
- )
- )
- elif len(debug_toolbar_indexes) != 1:
- # If the toolbar appears multiple times, report an error.
- errors.append(
- Error(
- "debug_toolbar.middleware.DebugToolbarMiddleware occurs "
- "multiple times in %s." % setting_name,
- hint="Load debug_toolbar.middleware.DebugToolbarMiddleware only "
- "once in %s." % setting_name,
- )
- )
- elif gzip_index is not None and debug_toolbar_indexes[0] < gzip_index:
- # If the toolbar appears before the gzip index, report an error.
- errors.append(
- Error(
- "debug_toolbar.middleware.DebugToolbarMiddleware occurs before "
- "django.middleware.gzip.GZipMiddleware in %s." % setting_name,
- hint="Move debug_toolbar.middleware.DebugToolbarMiddleware to "
- "after django.middleware.gzip.GZipMiddleware in %s." % setting_name,
- )
- )
-
- return errors
-
-
- def is_middleware_class(middleware_class, middleware_path):
- try:
- middleware_cls = import_string(middleware_path)
- except ImportError:
- return
- return (
- inspect.isclass(middleware_cls) and
- issubclass(middleware_cls, middleware_class)
- )
|