Development of an internal social media platform with personalised dashboards for students
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

apps.py 2.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. from __future__ import absolute_import, unicode_literals
  2. import inspect
  3. from django.apps import AppConfig
  4. from django.conf import settings
  5. from django.core.checks import Error, register
  6. from django.middleware.gzip import GZipMiddleware
  7. from django.utils.module_loading import import_string
  8. from django.utils.translation import ugettext_lazy as _
  9. class DebugToolbarConfig(AppConfig):
  10. name = 'debug_toolbar'
  11. verbose_name = _("Debug Toolbar")
  12. @register
  13. def check_middleware(app_configs, **kwargs):
  14. from debug_toolbar.middleware import DebugToolbarMiddleware
  15. errors = []
  16. gzip_index = None
  17. debug_toolbar_indexes = []
  18. setting = getattr(settings, 'MIDDLEWARE', None)
  19. setting_name = 'MIDDLEWARE'
  20. if setting is None:
  21. setting = settings.MIDDLEWARE_CLASSES
  22. setting_name = 'MIDDLEWARE_CLASSES'
  23. # Determine the indexes which gzip and/or the toolbar are installed at
  24. for i, middleware in enumerate(setting):
  25. if is_middleware_class(GZipMiddleware, middleware):
  26. gzip_index = i
  27. elif is_middleware_class(DebugToolbarMiddleware, middleware):
  28. debug_toolbar_indexes.append(i)
  29. if not debug_toolbar_indexes:
  30. # If the toolbar does not appear, report an error.
  31. errors.append(
  32. Error(
  33. "debug_toolbar.middleware.DebugToolbarMiddleware is missing "
  34. "from %s." % setting_name,
  35. hint="Add debug_toolbar.middleware.DebugToolbarMiddleware to "
  36. "%s." % setting_name,
  37. )
  38. )
  39. elif len(debug_toolbar_indexes) != 1:
  40. # If the toolbar appears multiple times, report an error.
  41. errors.append(
  42. Error(
  43. "debug_toolbar.middleware.DebugToolbarMiddleware occurs "
  44. "multiple times in %s." % setting_name,
  45. hint="Load debug_toolbar.middleware.DebugToolbarMiddleware only "
  46. "once in %s." % setting_name,
  47. )
  48. )
  49. elif gzip_index is not None and debug_toolbar_indexes[0] < gzip_index:
  50. # If the toolbar appears before the gzip index, report an error.
  51. errors.append(
  52. Error(
  53. "debug_toolbar.middleware.DebugToolbarMiddleware occurs before "
  54. "django.middleware.gzip.GZipMiddleware in %s." % setting_name,
  55. hint="Move debug_toolbar.middleware.DebugToolbarMiddleware to "
  56. "after django.middleware.gzip.GZipMiddleware in %s." % setting_name,
  57. )
  58. )
  59. return errors
  60. def is_middleware_class(middleware_class, middleware_path):
  61. try:
  62. middleware_cls = import_string(middleware_path)
  63. except ImportError:
  64. return
  65. return (
  66. inspect.isclass(middleware_cls) and
  67. issubclass(middleware_cls, middleware_class)
  68. )