django-debug-toolbar 5.2.0__tar.gz → 6.0.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (244) hide show
  1. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/.github/workflows/release.yml +1 -1
  2. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/.gitignore +1 -0
  3. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/.pre-commit-config.yaml +5 -5
  4. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/.readthedocs.yaml +1 -1
  5. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/Makefile +6 -0
  6. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/PKG-INFO +2 -2
  7. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/README.rst +1 -1
  8. django_debug_toolbar-6.0.0/biome.json +31 -0
  9. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/__init__.py +1 -1
  10. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/middleware.py +15 -0
  11. django_debug_toolbar-6.0.0/debug_toolbar/migrations/0001_initial.py +24 -0
  12. django_debug_toolbar-6.0.0/debug_toolbar/models.py +16 -0
  13. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/panels/__init__.py +30 -5
  14. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/panels/alerts.py +3 -5
  15. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/panels/cache.py +5 -3
  16. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/panels/history/__init__.py +1 -1
  17. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/panels/history/forms.py +2 -2
  18. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/panels/history/panel.py +13 -11
  19. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/panels/history/views.py +14 -10
  20. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/panels/profiling.py +17 -2
  21. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/panels/settings.py +12 -3
  22. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/panels/sql/__init__.py +1 -1
  23. django_debug_toolbar-6.0.0/debug_toolbar/panels/sql/forms.py +136 -0
  24. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/panels/sql/panel.py +33 -18
  25. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/panels/sql/tracking.py +0 -1
  26. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/panels/sql/views.py +20 -59
  27. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/panels/staticfiles.py +10 -34
  28. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/panels/templates/__init__.py +1 -1
  29. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/panels/templates/panel.py +18 -5
  30. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/panels/timer.py +34 -16
  31. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/panels/versions.py +6 -2
  32. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/settings.py +12 -1
  33. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/static/debug_toolbar/css/toolbar.css +7 -4
  34. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/static/debug_toolbar/js/history.js +14 -11
  35. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/static/debug_toolbar/js/toolbar.js +13 -11
  36. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/static/debug_toolbar/js/utils.js +3 -3
  37. django_debug_toolbar-6.0.0/debug_toolbar/store.py +227 -0
  38. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/templates/debug_toolbar/base.html +1 -1
  39. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/templates/debug_toolbar/panels/cache.html +1 -1
  40. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/templates/debug_toolbar/panels/history.html +1 -1
  41. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/templates/debug_toolbar/panels/history_tr.html +10 -10
  42. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/templates/debug_toolbar/panels/profiling.html +1 -1
  43. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/templates/debug_toolbar/panels/staticfiles.html +3 -3
  44. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/toolbar.py +56 -37
  45. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/views.py +1 -1
  46. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/docs/changes.rst +31 -3
  47. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/docs/conf.py +1 -1
  48. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/docs/configuration.rst +38 -2
  49. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/docs/contributing.rst +4 -3
  50. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/docs/installation.rst +6 -5
  51. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/docs/spelling_wordlist.txt +3 -0
  52. django_debug_toolbar-6.0.0/example/asgi.py +16 -0
  53. django_debug_toolbar-6.0.0/example/async_/settings.py +5 -0
  54. django_debug_toolbar-6.0.0/example/async_/urls.py +9 -0
  55. django_debug_toolbar-6.0.0/example/async_/views.py +9 -0
  56. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/example/settings.py +1 -0
  57. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/example/templates/index.html +13 -0
  58. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/requirements_dev.txt +6 -1
  59. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/tests/base.py +6 -2
  60. django_debug_toolbar-6.0.0/tests/commands/__init__.py +0 -0
  61. django_debug_toolbar-6.0.0/tests/panels/__init__.py +0 -0
  62. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/tests/panels/test_alerts.py +1 -1
  63. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/tests/panels/test_cache.py +6 -1
  64. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/tests/panels/test_history.py +41 -32
  65. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/tests/panels/test_profiling.py +6 -1
  66. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/tests/panels/test_redirects.py +3 -1
  67. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/tests/panels/test_request.py +5 -3
  68. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/tests/panels/test_sql.py +24 -10
  69. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/tests/panels/test_staticfiles.py +19 -9
  70. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/tests/panels/test_template.py +5 -2
  71. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/tests/panels/test_versions.py +3 -1
  72. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/tests/settings.py +1 -0
  73. django_debug_toolbar-6.0.0/tests/templates/staticfiles/path.html +1 -0
  74. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/tests/test_csp_rendering.py +21 -25
  75. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/tests/test_integration.py +133 -112
  76. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/tests/test_integration_async.py +76 -45
  77. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/tests/test_login_not_required.py +10 -2
  78. django_debug_toolbar-6.0.0/tests/test_models.py +32 -0
  79. django_debug_toolbar-6.0.0/tests/test_settings.py +22 -0
  80. django_debug_toolbar-6.0.0/tests/test_store.py +244 -0
  81. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/tests/urls.py +4 -0
  82. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/tests/views.py +29 -0
  83. django_debug_toolbar-5.2.0/biome.json +0 -22
  84. django_debug_toolbar-5.2.0/debug_toolbar/panels/sql/forms.py +0 -60
  85. django_debug_toolbar-5.2.0/example/asgi.py +0 -9
  86. django_debug_toolbar-5.2.0/tests/templates/staticfiles/path.html +0 -1
  87. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/.editorconfig +0 -0
  88. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  89. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/.github/dependabot.yml +0 -0
  90. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/.github/workflows/coverage.yml +0 -0
  91. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/.github/workflows/test.yml +0 -0
  92. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/.tx/config +0 -0
  93. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/CODE_OF_CONDUCT.md +0 -0
  94. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/CONTRIBUTING.md +0 -0
  95. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/LICENSE +0 -0
  96. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/SECURITY.md +0 -0
  97. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/_compat.py +0 -0
  98. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/_stubs.py +0 -0
  99. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/apps.py +0 -0
  100. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/decorators.py +0 -0
  101. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/forms.py +0 -0
  102. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/locale/bg/LC_MESSAGES/django.mo +0 -0
  103. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/locale/bg/LC_MESSAGES/django.po +0 -0
  104. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/locale/ca/LC_MESSAGES/django.mo +0 -0
  105. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/locale/ca/LC_MESSAGES/django.po +0 -0
  106. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/locale/cs/LC_MESSAGES/django.mo +0 -0
  107. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/locale/cs/LC_MESSAGES/django.po +0 -0
  108. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/locale/de/LC_MESSAGES/django.mo +0 -0
  109. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/locale/de/LC_MESSAGES/django.po +0 -0
  110. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/locale/en/LC_MESSAGES/django.mo +0 -0
  111. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/locale/en/LC_MESSAGES/django.po +0 -0
  112. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/locale/es/LC_MESSAGES/django.mo +0 -0
  113. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/locale/es/LC_MESSAGES/django.po +0 -0
  114. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/locale/fa/LC_MESSAGES/django.mo +0 -0
  115. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/locale/fa/LC_MESSAGES/django.po +0 -0
  116. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/locale/fi/LC_MESSAGES/django.mo +0 -0
  117. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/locale/fi/LC_MESSAGES/django.po +0 -0
  118. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/locale/fr/LC_MESSAGES/django.mo +0 -0
  119. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/locale/fr/LC_MESSAGES/django.po +0 -0
  120. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/locale/he/LC_MESSAGES/django.mo +0 -0
  121. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/locale/he/LC_MESSAGES/django.po +0 -0
  122. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/locale/id/LC_MESSAGES/django.mo +0 -0
  123. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/locale/id/LC_MESSAGES/django.po +0 -0
  124. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/locale/it/LC_MESSAGES/django.mo +0 -0
  125. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/locale/it/LC_MESSAGES/django.po +0 -0
  126. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/locale/ja/LC_MESSAGES/django.mo +0 -0
  127. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/locale/ja/LC_MESSAGES/django.po +0 -0
  128. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/locale/ko/LC_MESSAGES/django.mo +0 -0
  129. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/locale/ko/LC_MESSAGES/django.po +0 -0
  130. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/locale/nl/LC_MESSAGES/django.mo +0 -0
  131. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/locale/nl/LC_MESSAGES/django.po +0 -0
  132. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/locale/pl/LC_MESSAGES/django.mo +0 -0
  133. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/locale/pl/LC_MESSAGES/django.po +0 -0
  134. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/locale/pt/LC_MESSAGES/django.mo +0 -0
  135. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/locale/pt/LC_MESSAGES/django.po +0 -0
  136. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/locale/pt_BR/LC_MESSAGES/django.mo +0 -0
  137. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/locale/pt_BR/LC_MESSAGES/django.po +0 -0
  138. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/locale/ru/LC_MESSAGES/django.mo +0 -0
  139. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/locale/ru/LC_MESSAGES/django.po +0 -0
  140. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/locale/sk/LC_MESSAGES/django.mo +0 -0
  141. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/locale/sk/LC_MESSAGES/django.po +0 -0
  142. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/locale/sv_SE/LC_MESSAGES/django.mo +0 -0
  143. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/locale/sv_SE/LC_MESSAGES/django.po +0 -0
  144. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/locale/uk/LC_MESSAGES/django.mo +0 -0
  145. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/locale/uk/LC_MESSAGES/django.po +0 -0
  146. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/locale/zh_CN/LC_MESSAGES/django.mo +0 -0
  147. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/locale/zh_CN/LC_MESSAGES/django.po +0 -0
  148. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/management/__init__.py +0 -0
  149. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/management/commands/__init__.py +0 -0
  150. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/management/commands/debugsqlshell.py +0 -0
  151. {django_debug_toolbar-5.2.0/debug_toolbar/templatetags → django_debug_toolbar-6.0.0/debug_toolbar/migrations}/__init__.py +0 -0
  152. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/panels/headers.py +0 -0
  153. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/panels/redirects.py +0 -0
  154. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/panels/request.py +0 -0
  155. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/panels/signals.py +0 -0
  156. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/panels/sql/utils.py +0 -0
  157. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/panels/templates/jinja2.py +0 -0
  158. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/panels/templates/views.py +0 -0
  159. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/static/debug_toolbar/css/print.css +0 -0
  160. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/static/debug_toolbar/js/redirect.js +0 -0
  161. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/static/debug_toolbar/js/timer.js +0 -0
  162. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/templates/debug_toolbar/includes/panel_button.html +0 -0
  163. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/templates/debug_toolbar/includes/panel_content.html +0 -0
  164. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/templates/debug_toolbar/includes/theme_selector.html +0 -0
  165. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/templates/debug_toolbar/panels/alerts.html +0 -0
  166. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/templates/debug_toolbar/panels/headers.html +0 -0
  167. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/templates/debug_toolbar/panels/request.html +0 -0
  168. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/templates/debug_toolbar/panels/request_variables.html +0 -0
  169. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/templates/debug_toolbar/panels/settings.html +0 -0
  170. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/templates/debug_toolbar/panels/signals.html +0 -0
  171. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/templates/debug_toolbar/panels/sql.html +0 -0
  172. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/templates/debug_toolbar/panels/sql_explain.html +0 -0
  173. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/templates/debug_toolbar/panels/sql_profile.html +0 -0
  174. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/templates/debug_toolbar/panels/sql_select.html +0 -0
  175. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/templates/debug_toolbar/panels/template_source.html +0 -0
  176. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/templates/debug_toolbar/panels/templates.html +0 -0
  177. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/templates/debug_toolbar/panels/timer.html +0 -0
  178. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/templates/debug_toolbar/panels/versions.html +0 -0
  179. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/templates/debug_toolbar/redirect.html +0 -0
  180. {django_debug_toolbar-5.2.0/example → django_debug_toolbar-6.0.0/debug_toolbar/templatetags}/__init__.py +0 -0
  181. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/urls.py +0 -0
  182. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/utils.py +0 -0
  183. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/docs/Makefile +0 -0
  184. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/docs/architecture.rst +0 -0
  185. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/docs/checks.rst +0 -0
  186. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/docs/commands.rst +0 -0
  187. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/docs/index.rst +0 -0
  188. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/docs/make.bat +0 -0
  189. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/docs/panels.rst +0 -0
  190. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/docs/resources.rst +0 -0
  191. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/docs/tips.rst +0 -0
  192. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/example/README.rst +0 -0
  193. {django_debug_toolbar-5.2.0/tests → django_debug_toolbar-6.0.0/example}/__init__.py +0 -0
  194. {django_debug_toolbar-5.2.0/tests/commands → django_debug_toolbar-6.0.0/example/async_}/__init__.py +0 -0
  195. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/example/django-debug-toolbar.png +0 -0
  196. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/example/example.db +0 -0
  197. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/example/manage.py +0 -0
  198. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/example/screenshot.py +0 -0
  199. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/example/static/test.css +0 -0
  200. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/example/templates/async_db.html +0 -0
  201. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/example/templates/bad_form.html +0 -0
  202. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/example/templates/htmx/boost.html +0 -0
  203. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/example/templates/jinja2/index.jinja +0 -0
  204. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/example/templates/jquery/index.html +0 -0
  205. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/example/templates/mootools/index.html +0 -0
  206. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/example/templates/prototype/index.html +0 -0
  207. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/example/templates/turbo/index.html +0 -0
  208. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/example/test_views.py +0 -0
  209. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/example/urls.py +0 -0
  210. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/example/views.py +0 -0
  211. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/example/wsgi.py +0 -0
  212. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/pyproject.toml +0 -0
  213. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/setup.py +0 -0
  214. {django_debug_toolbar-5.2.0/tests/panels → django_debug_toolbar-6.0.0/tests}/__init__.py +0 -0
  215. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/tests/additional_static/base.css +0 -0
  216. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/tests/commands/test_debugsqlshell.py +0 -0
  217. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/tests/context_processors.py +0 -0
  218. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/tests/forms.py +0 -0
  219. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/tests/loaders.py +0 -0
  220. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/tests/middleware.py +0 -0
  221. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/tests/models.py +0 -0
  222. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/tests/panels/test_async_panel_compatibility.py +0 -0
  223. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/tests/panels/test_custom.py +0 -0
  224. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/tests/panels/test_settings.py +0 -0
  225. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/tests/sync.py +0 -0
  226. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/tests/templates/ajax/ajax.html +0 -0
  227. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/tests/templates/base.html +0 -0
  228. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/tests/templates/basic.html +0 -0
  229. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/tests/templates/jinja2/base.html +0 -0
  230. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/tests/templates/jinja2/basic.jinja +0 -0
  231. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/tests/templates/registration/login.html +0 -0
  232. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/tests/templates/sql/flat.html +0 -0
  233. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/tests/templates/sql/included.html +0 -0
  234. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/tests/templates/sql/nested.html +0 -0
  235. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/tests/templates/staticfiles/async_static.html +0 -0
  236. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/tests/test_checks.py +0 -0
  237. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/tests/test_decorators.py +0 -0
  238. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/tests/test_forms.py +0 -0
  239. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/tests/test_middleware.py +0 -0
  240. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/tests/test_toolbar.py +0 -0
  241. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/tests/test_utils.py +0 -0
  242. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/tests/urls_invalid.py +0 -0
  243. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/tests/urls_use_package_urls.py +0 -0
  244. {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/tox.ini +0 -0
@@ -69,7 +69,7 @@ jobs:
69
69
  name: python-package-distributions
70
70
  path: dist/
71
71
  - name: Sign the dists with Sigstore
72
- uses: sigstore/gh-action-sigstore-python@v3.0.0
72
+ uses: sigstore/gh-action-sigstore-python@v3.0.1
73
73
  with:
74
74
  inputs: >-
75
75
  ./dist/*.tar.gz
@@ -12,6 +12,7 @@ htmlcov
12
12
  .tox
13
13
  geckodriver.log
14
14
  coverage.xml
15
+ venv
15
16
  .direnv/
16
17
  .envrc
17
18
  venv
@@ -10,11 +10,11 @@ repos:
10
10
  - id: file-contents-sorter
11
11
  files: docs/spelling_wordlist.txt
12
12
  - repo: https://github.com/pycqa/doc8
13
- rev: v1.1.2
13
+ rev: v2.0.0
14
14
  hooks:
15
15
  - id: doc8
16
16
  - repo: https://github.com/adamchainz/django-upgrade
17
- rev: 1.24.0
17
+ rev: 1.25.0
18
18
  hooks:
19
19
  - id: django-upgrade
20
20
  args: [--target-version, "4.2"]
@@ -29,18 +29,18 @@ repos:
29
29
  - id: rst-backticks
30
30
  - id: rst-directive-colons
31
31
  - repo: https://github.com/biomejs/pre-commit
32
- rev: v1.9.4
32
+ rev: v2.1.2
33
33
  hooks:
34
34
  - id: biome-check
35
35
  verbose: true
36
36
  - repo: https://github.com/astral-sh/ruff-pre-commit
37
- rev: 'v0.11.7'
37
+ rev: 'v0.12.4'
38
38
  hooks:
39
39
  - id: ruff
40
40
  args: [--fix, --exit-non-zero-on-fix]
41
41
  - id: ruff-format
42
42
  - repo: https://github.com/tox-dev/pyproject-fmt
43
- rev: v2.5.1
43
+ rev: v2.6.0
44
44
  hooks:
45
45
  - id: pyproject-fmt
46
46
  - repo: https://github.com/abravalheri/validate-pyproject
@@ -5,7 +5,7 @@
5
5
  version: 2
6
6
 
7
7
  build:
8
- os: ubuntu-22.04
8
+ os: ubuntu-24.04
9
9
  tools:
10
10
  python: "3.10"
11
11
 
@@ -7,6 +7,12 @@ example: ## Run the example application
7
7
  --noinput --username="$(USER)" --email="$(USER)@mailinator.com"
8
8
  python example/manage.py runserver
9
9
 
10
+ example_async:
11
+ python example/manage.py migrate --noinput
12
+ -DJANGO_SUPERUSER_PASSWORD=p python example/manage.py createsuperuser \
13
+ --noinput --username="$(USER)" --email="$(USER)@mailinator.com"
14
+ daphne example.asgi:application
15
+
10
16
  example_test: ## Run the test suite for the example application
11
17
  python example/manage.py test example
12
18
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: django-debug-toolbar
3
- Version: 5.2.0
3
+ Version: 6.0.0
4
4
  Summary: A configurable set of panels that display various debug information about the current request/response.
5
5
  Project-URL: Changelog, https://django-debug-toolbar.readthedocs.io/en/latest/changes.html
6
6
  Project-URL: Documentation, https://django-debug-toolbar.readthedocs.io/
@@ -76,7 +76,7 @@ Here's a screenshot of the toolbar in action:
76
76
  In addition to the built-in panels, a number of third-party panels are
77
77
  contributed by the community.
78
78
 
79
- The current stable version of the Debug Toolbar is 5.2.0. It works on
79
+ The current stable version of the Debug Toolbar is 6.0.0. It works on
80
80
  Django ≥ 4.2.0.
81
81
 
82
82
  The Debug Toolbar has experimental support for `Django's asynchronous views
@@ -40,7 +40,7 @@ Here's a screenshot of the toolbar in action:
40
40
  In addition to the built-in panels, a number of third-party panels are
41
41
  contributed by the community.
42
42
 
43
- The current stable version of the Debug Toolbar is 5.2.0. It works on
43
+ The current stable version of the Debug Toolbar is 6.0.0. It works on
44
44
  Django ≥ 4.2.0.
45
45
 
46
46
  The Debug Toolbar has experimental support for `Django's asynchronous views
@@ -0,0 +1,31 @@
1
+ {
2
+ "$schema": "https://biomejs.dev/schemas/2.0.6/schema.json",
3
+ "formatter": {
4
+ "enabled": true,
5
+ "useEditorconfig": true
6
+ },
7
+ "assist": {
8
+ "actions": {
9
+ "source": {
10
+ "organizeImports": "on"
11
+ }
12
+ }
13
+ },
14
+ "linter": {
15
+ "enabled": true,
16
+ "rules": {
17
+ "recommended": true,
18
+ "correctness": {
19
+ "noUndeclaredVariables": "error"
20
+ },
21
+ "suspicious": {
22
+ "noDocumentCookie": "off"
23
+ }
24
+ }
25
+ },
26
+ "javascript": {
27
+ "formatter": {
28
+ "trailingCommas": "es5"
29
+ }
30
+ }
31
+ }
@@ -4,7 +4,7 @@ APP_NAME = "djdt"
4
4
 
5
5
  # Do not use pkg_resources to find the version but set it here directly!
6
6
  # see issue #1446
7
- VERSION = "5.2.0"
7
+ VERSION = "6.0.0"
8
8
 
9
9
  # Code that discovers files or modules in INSTALLED_APPS imports this module.
10
10
  urls = "debug_toolbar.urls", APP_NAME
@@ -31,6 +31,21 @@ def show_toolbar(request):
31
31
  if request.META.get("REMOTE_ADDR") in settings.INTERNAL_IPS:
32
32
  return True
33
33
 
34
+ # No test passed
35
+ return False
36
+
37
+
38
+ def show_toolbar_with_docker(request):
39
+ """
40
+ Default function to determine whether to show the toolbar on a given page.
41
+ """
42
+ if not settings.DEBUG:
43
+ return False
44
+
45
+ # Test: settings
46
+ if request.META.get("REMOTE_ADDR") in settings.INTERNAL_IPS:
47
+ return True
48
+
34
49
  # Test: Docker
35
50
  try:
36
51
  # This is a hack for docker installations. It attempts to look
@@ -0,0 +1,24 @@
1
+ from django.db import migrations, models
2
+
3
+
4
+ class Migration(migrations.Migration):
5
+ initial = True
6
+
7
+ operations = [
8
+ migrations.CreateModel(
9
+ name="HistoryEntry",
10
+ fields=[
11
+ (
12
+ "request_id",
13
+ models.UUIDField(primary_key=True, serialize=False),
14
+ ),
15
+ ("data", models.JSONField(default=dict)),
16
+ ("created_at", models.DateTimeField(auto_now_add=True)),
17
+ ],
18
+ options={
19
+ "verbose_name": "history entry",
20
+ "verbose_name_plural": "history entries",
21
+ "ordering": ["-created_at"],
22
+ },
23
+ ),
24
+ ]
@@ -0,0 +1,16 @@
1
+ from django.db import models
2
+ from django.utils.translation import gettext_lazy as _
3
+
4
+
5
+ class HistoryEntry(models.Model):
6
+ request_id = models.UUIDField(primary_key=True)
7
+ data = models.JSONField(default=dict)
8
+ created_at = models.DateTimeField(auto_now_add=True)
9
+
10
+ class Meta:
11
+ verbose_name = _("history entry")
12
+ verbose_name_plural = _("history entries")
13
+ ordering = ["-created_at"]
14
+
15
+ def __str__(self):
16
+ return str(self.request_id)
@@ -1,5 +1,6 @@
1
1
  from django.core.handlers.asgi import ASGIRequest
2
2
  from django.template.loader import render_to_string
3
+ from django.utils.functional import classproperty
3
4
 
4
5
  from debug_toolbar import settings as dt_settings
5
6
  from debug_toolbar.utils import get_name_from_obj
@@ -15,19 +16,27 @@ class Panel:
15
16
  def __init__(self, toolbar, get_response):
16
17
  self.toolbar = toolbar
17
18
  self.get_response = get_response
19
+ self.from_store = False
18
20
 
19
21
  # Private panel properties
20
22
 
21
- @property
22
- def panel_id(self):
23
- return self.__class__.__name__
23
+ @classproperty
24
+ def panel_id(cls):
25
+ return cls.__name__
24
26
 
25
27
  @property
26
28
  def enabled(self) -> bool:
27
- # check if the panel is async compatible
29
+ # Check if the panel is async compatible
28
30
  if not self.is_async and isinstance(self.toolbar.request, ASGIRequest):
29
31
  return False
30
32
 
33
+ if self.from_store:
34
+ # If the toolbar was loaded from the store the existence of
35
+ # recorded data indicates whether it was enabled or not.
36
+ # We can't use the remainder of the logic since we don't have
37
+ # a request to work off of.
38
+ return bool(self.get_stats())
39
+
31
40
  # The user's cookies should override the default value
32
41
  cookie_value = self.toolbar.request.COOKIES.get("djdt" + self.panel_id)
33
42
  if cookie_value is not None:
@@ -175,9 +184,16 @@ class Panel:
175
184
  """
176
185
  Store data gathered by the panel. ``stats`` is a :class:`dict`.
177
186
 
178
- Each call to ``record_stats`` updates the statistics dictionary.
187
+ Each call to ``record_stats`` updates the store's data for
188
+ the panel.
189
+
190
+ To support backwards compatibility, it will also update the
191
+ panel's statistics dictionary.
179
192
  """
180
193
  self.toolbar.stats.setdefault(self.panel_id, {}).update(stats)
194
+ self.toolbar.store.save_panel(
195
+ self.toolbar.request_id, self.panel_id, self.toolbar.stats[self.panel_id]
196
+ )
181
197
 
182
198
  def get_stats(self):
183
199
  """
@@ -261,6 +277,15 @@ class Panel:
261
277
  Does not return a value.
262
278
  """
263
279
 
280
+ def load_stats_from_store(self, data):
281
+ """
282
+ Instantiate the panel from serialized data.
283
+
284
+ Return the panel instance.
285
+ """
286
+ self.toolbar.stats.setdefault(self.panel_id, {}).update(data)
287
+ self.from_store = True
288
+
264
289
  @classmethod
265
290
  def run_checks(cls):
266
291
  """
@@ -141,11 +141,9 @@ class AlertsPanel(Panel):
141
141
  return self.alerts
142
142
 
143
143
  def generate_stats(self, request, response):
144
- if not is_processable_html_response(response):
145
- return
146
-
147
- html_content = response.content.decode(response.charset)
148
- self.check_invalid_file_form_configuration(html_content)
144
+ if is_processable_html_response(response):
145
+ html_content = response.content.decode(response.charset)
146
+ self.check_invalid_file_form_configuration(html_content)
149
147
 
150
148
  # Further alert checks can go here
151
149
 
@@ -171,16 +171,17 @@ class CachePanel(Panel):
171
171
 
172
172
  @property
173
173
  def nav_subtitle(self):
174
- cache_calls = len(self.calls)
174
+ stats = self.get_stats()
175
+ cache_calls = len(stats.get("calls"))
175
176
  return ngettext(
176
177
  "%(cache_calls)d call in %(time).2fms",
177
178
  "%(cache_calls)d calls in %(time).2fms",
178
179
  cache_calls,
179
- ) % {"cache_calls": cache_calls, "time": self.total_time}
180
+ ) % {"cache_calls": cache_calls, "time": stats.get("total_time")}
180
181
 
181
182
  @property
182
183
  def title(self):
183
- count = len(getattr(settings, "CACHES", ["default"]))
184
+ count = self.get_stats().get("total_caches")
184
185
  return ngettext(
185
186
  "Cache calls from %(count)d backend",
186
187
  "Cache calls from %(count)d backends",
@@ -216,6 +217,7 @@ class CachePanel(Panel):
216
217
  "hits": self.hits,
217
218
  "misses": self.misses,
218
219
  "counts": self.counts,
220
+ "total_caches": len(getattr(settings, "CACHES", ["default"])),
219
221
  }
220
222
  )
221
223
 
@@ -1,3 +1,3 @@
1
1
  from debug_toolbar.panels.history.panel import HistoryPanel
2
2
 
3
- __all__ = ["HistoryPanel"]
3
+ __all__ = [HistoryPanel.panel_id]
@@ -5,8 +5,8 @@ class HistoryStoreForm(forms.Form):
5
5
  """
6
6
  Validate params
7
7
 
8
- store_id: The key for the store instance to be fetched.
8
+ request_id: The key for the store instance to be fetched.
9
9
  """
10
10
 
11
- store_id = forms.CharField(widget=forms.HiddenInput())
11
+ request_id = forms.CharField(widget=forms.HiddenInput())
12
12
  exclude_history = forms.BooleanField(widget=forms.HiddenInput(), required=False)
@@ -24,9 +24,9 @@ class HistoryPanel(Panel):
24
24
  def get_headers(self, request):
25
25
  headers = super().get_headers(request)
26
26
  observe_request = self.toolbar.get_observe_request()
27
- store_id = self.toolbar.store_id
28
- if store_id and observe_request(request):
29
- headers["djdt-store-id"] = store_id
27
+ request_id = self.toolbar.request_id
28
+ if request_id and observe_request(request):
29
+ headers["djdt-request-id"] = request_id
30
30
  return headers
31
31
 
32
32
  @property
@@ -87,23 +87,25 @@ class HistoryPanel(Panel):
87
87
 
88
88
  Fetch every store for the toolbar and include it in the template.
89
89
  """
90
- stores = {}
91
- for id, toolbar in reversed(self.toolbar._store.items()):
92
- stores[id] = {
93
- "toolbar": toolbar,
90
+ toolbar_history = {}
91
+ for request_id in reversed(self.toolbar.store.request_ids()):
92
+ toolbar_history[request_id] = {
93
+ "history_stats": self.toolbar.store.panel(
94
+ request_id, HistoryPanel.panel_id
95
+ ),
94
96
  "form": HistoryStoreForm(
95
- initial={"store_id": id, "exclude_history": True}
97
+ initial={"request_id": request_id, "exclude_history": True}
96
98
  ),
97
99
  }
98
100
 
99
101
  return render_to_string(
100
102
  self.template,
101
103
  {
102
- "current_store_id": self.toolbar.store_id,
103
- "stores": stores,
104
+ "current_request_id": self.toolbar.request_id,
105
+ "toolbar_history": toolbar_history,
104
106
  "refresh_form": HistoryStoreForm(
105
107
  initial={
106
- "store_id": self.toolbar.store_id,
108
+ "request_id": self.toolbar.request_id,
107
109
  "exclude_history": True,
108
110
  }
109
111
  ),
@@ -4,6 +4,7 @@ from django.template.loader import render_to_string
4
4
  from debug_toolbar._compat import login_not_required
5
5
  from debug_toolbar.decorators import render_with_toolbar_language, require_show_toolbar
6
6
  from debug_toolbar.panels.history.forms import HistoryStoreForm
7
+ from debug_toolbar.store import get_store
7
8
  from debug_toolbar.toolbar import DebugToolbar
8
9
 
9
10
 
@@ -15,12 +16,12 @@ def history_sidebar(request):
15
16
  form = HistoryStoreForm(request.GET)
16
17
 
17
18
  if form.is_valid():
18
- store_id = form.cleaned_data["store_id"]
19
- toolbar = DebugToolbar.fetch(store_id)
19
+ request_id = form.cleaned_data["request_id"]
20
+ toolbar = DebugToolbar.fetch(request_id)
20
21
  exclude_history = form.cleaned_data["exclude_history"]
21
22
  context = {}
22
23
  if toolbar is None:
23
- # When the store_id has been popped already due to
24
+ # When the request_id has been popped already due to
24
25
  # RESULTS_CACHE_SIZE
25
26
  return JsonResponse(context)
26
27
  for panel in toolbar.panels:
@@ -36,7 +37,7 @@ def history_sidebar(request):
36
37
  ),
37
38
  }
38
39
  return JsonResponse(context)
39
- return HttpResponseBadRequest("Form errors")
40
+ return HttpResponseBadRequest(f"Form errors: {form.errors}")
40
41
 
41
42
 
42
43
  @login_not_required
@@ -49,19 +50,22 @@ def history_refresh(request):
49
50
  if form.is_valid():
50
51
  requests = []
51
52
  # Convert to list to handle mutations happening in parallel
52
- for id, toolbar in list(DebugToolbar._store.items()):
53
+ for request_id in get_store().request_ids():
54
+ toolbar = DebugToolbar.fetch(request_id)
53
55
  requests.append(
54
56
  {
55
- "id": id,
57
+ "id": request_id,
56
58
  "content": render_to_string(
57
59
  "debug_toolbar/panels/history_tr.html",
58
60
  {
59
- "id": id,
60
- "store_context": {
61
- "toolbar": toolbar,
61
+ "request_id": request_id,
62
+ "history_context": {
63
+ "history_stats": toolbar.store.panel(
64
+ request_id, "HistoryPanel"
65
+ ),
62
66
  "form": HistoryStoreForm(
63
67
  initial={
64
- "store_id": id,
68
+ "request_id": request_id,
65
69
  "exclude_history": True,
66
70
  }
67
71
  ),
@@ -25,6 +25,7 @@ class FunctionCall:
25
25
  self.id = id
26
26
  self.parent_ids = parent_ids or []
27
27
  self.hsv = hsv
28
+ self.has_subfuncs = False
28
29
 
29
30
  def parent_classes(self):
30
31
  return self.parent_classes
@@ -130,6 +131,21 @@ class FunctionCall:
130
131
  def indent(self):
131
132
  return 16 * self.depth
132
133
 
134
+ def serialize(self):
135
+ return {
136
+ "has_subfuncs": self.has_subfuncs,
137
+ "id": self.id,
138
+ "parent_ids": self.parent_ids,
139
+ "is_project_func": self.is_project_func(),
140
+ "indent": self.indent(),
141
+ "func_std_string": self.func_std_string(),
142
+ "cumtime": self.cumtime(),
143
+ "cumtime_per_call": self.cumtime_per_call(),
144
+ "tottime": self.tottime(),
145
+ "tottime_per_call": self.tottime_per_call(),
146
+ "count": self.count(),
147
+ }
148
+
133
149
 
134
150
  class ProfilingPanel(Panel):
135
151
  """
@@ -148,7 +164,6 @@ class ProfilingPanel(Panel):
148
164
 
149
165
  def add_node(self, func_list, func, max_depth, cum_time):
150
166
  func_list.append(func)
151
- func.has_subfuncs = False
152
167
  if func.depth < max_depth:
153
168
  for subfunc in func.subfuncs():
154
169
  # Always include the user's code
@@ -182,4 +197,4 @@ class ProfilingPanel(Panel):
182
197
  dt_settings.get_config()["PROFILER_MAX_DEPTH"],
183
198
  cum_time_threshold,
184
199
  )
185
- self.record_stats({"func_list": func_list})
200
+ self.record_stats({"func_list": [func.serialize() for func in func_list]})
@@ -1,4 +1,4 @@
1
- from django.conf import settings
1
+ from django.utils.encoding import force_str
2
2
  from django.utils.translation import gettext_lazy as _
3
3
  from django.views.debug import get_default_exception_reporter_filter
4
4
 
@@ -19,7 +19,16 @@ class SettingsPanel(Panel):
19
19
  nav_title = _("Settings")
20
20
 
21
21
  def title(self):
22
- return _("Settings from %s") % settings.SETTINGS_MODULE
22
+ return _("Settings from %s") % self.get_stats()["settings"].get(
23
+ "SETTINGS_MODULE"
24
+ )
23
25
 
24
26
  def generate_stats(self, request, response):
25
- self.record_stats({"settings": dict(sorted(get_safe_settings().items()))})
27
+ self.record_stats(
28
+ {
29
+ "settings": {
30
+ key: force_str(value)
31
+ for key, value in sorted(get_safe_settings().items())
32
+ }
33
+ }
34
+ )
@@ -1,3 +1,3 @@
1
1
  from debug_toolbar.panels.sql.panel import SQLPanel
2
2
 
3
- __all__ = ["SQLPanel"]
3
+ __all__ = [SQLPanel.panel_id]