settings.py 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. import warnings
  2. from functools import lru_cache
  3. from django.conf import settings
  4. from django.dispatch import receiver
  5. from django.test.signals import setting_changed
  6. CONFIG_DEFAULTS = {
  7. # Toolbar options
  8. "DISABLE_PANELS": {
  9. "debug_toolbar.panels.profiling.ProfilingPanel",
  10. "debug_toolbar.panels.redirects.RedirectsPanel",
  11. },
  12. "INSERT_BEFORE": "</body>",
  13. "RENDER_PANELS": None,
  14. "RESULTS_CACHE_SIZE": 25,
  15. "ROOT_TAG_EXTRA_ATTRS": "",
  16. "SHOW_COLLAPSED": False,
  17. "SHOW_TOOLBAR_CALLBACK": "debug_toolbar.middleware.show_toolbar",
  18. # Panel options
  19. "EXTRA_SIGNALS": [],
  20. "ENABLE_STACKTRACES": True,
  21. "ENABLE_STACKTRACES_LOCALS": False,
  22. "HIDE_IN_STACKTRACES": (
  23. "socketserver",
  24. "threading",
  25. "wsgiref",
  26. "debug_toolbar",
  27. "django.db",
  28. "django.core.handlers",
  29. "django.core.servers",
  30. "django.utils.decorators",
  31. "django.utils.deprecation",
  32. "django.utils.functional",
  33. ),
  34. "PRETTIFY_SQL": True,
  35. "PROFILER_CAPTURE_PROJECT_CODE": True,
  36. "PROFILER_MAX_DEPTH": 10,
  37. "PROFILER_THRESHOLD_RATIO": 8,
  38. "SHOW_TEMPLATE_CONTEXT": True,
  39. "SKIP_TEMPLATE_PREFIXES": ("django/forms/widgets/", "admin/widgets/"),
  40. "SQL_WARNING_THRESHOLD": 500, # milliseconds
  41. "OBSERVE_REQUEST_CALLBACK": "debug_toolbar.toolbar.observe_request",
  42. "TOOLBAR_LANGUAGE": None,
  43. }
  44. @lru_cache(maxsize=None)
  45. def get_config():
  46. USER_CONFIG = getattr(settings, "DEBUG_TOOLBAR_CONFIG", {})
  47. CONFIG = CONFIG_DEFAULTS.copy()
  48. CONFIG.update(USER_CONFIG)
  49. return CONFIG
  50. PANELS_DEFAULTS = [
  51. "debug_toolbar.panels.history.HistoryPanel",
  52. "debug_toolbar.panels.versions.VersionsPanel",
  53. "debug_toolbar.panels.timer.TimerPanel",
  54. "debug_toolbar.panels.settings.SettingsPanel",
  55. "debug_toolbar.panels.headers.HeadersPanel",
  56. "debug_toolbar.panels.request.RequestPanel",
  57. "debug_toolbar.panels.sql.SQLPanel",
  58. "debug_toolbar.panels.staticfiles.StaticFilesPanel",
  59. "debug_toolbar.panels.templates.TemplatesPanel",
  60. "debug_toolbar.panels.cache.CachePanel",
  61. "debug_toolbar.panels.signals.SignalsPanel",
  62. "debug_toolbar.panels.redirects.RedirectsPanel",
  63. "debug_toolbar.panels.profiling.ProfilingPanel",
  64. ]
  65. @lru_cache(maxsize=None)
  66. def get_panels():
  67. try:
  68. PANELS = list(settings.DEBUG_TOOLBAR_PANELS)
  69. except AttributeError:
  70. PANELS = PANELS_DEFAULTS
  71. logging_panel = "debug_toolbar.panels.logging.LoggingPanel"
  72. if logging_panel in PANELS:
  73. PANELS = [panel for panel in PANELS if panel != logging_panel]
  74. warnings.warn(
  75. f"Please remove {logging_panel} from your DEBUG_TOOLBAR_PANELS setting.",
  76. DeprecationWarning,
  77. )
  78. return PANELS
  79. @receiver(setting_changed)
  80. def update_toolbar_config(*, setting, **kwargs):
  81. """
  82. Refresh configuration when overriding settings.
  83. """
  84. if setting == "DEBUG_TOOLBAR_CONFIG":
  85. get_config.cache_clear()
  86. elif setting == "DEBUG_TOOLBAR_PANELS":
  87. from debug_toolbar.toolbar import DebugToolbar
  88. get_panels.cache_clear()
  89. DebugToolbar._panel_classes = None
  90. # Not implemented: invalidate debug_toolbar.urls.