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.
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/.github/workflows/release.yml +1 -1
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/.gitignore +1 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/.pre-commit-config.yaml +5 -5
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/.readthedocs.yaml +1 -1
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/Makefile +6 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/PKG-INFO +2 -2
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/README.rst +1 -1
- django_debug_toolbar-6.0.0/biome.json +31 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/__init__.py +1 -1
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/middleware.py +15 -0
- django_debug_toolbar-6.0.0/debug_toolbar/migrations/0001_initial.py +24 -0
- django_debug_toolbar-6.0.0/debug_toolbar/models.py +16 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/panels/__init__.py +30 -5
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/panels/alerts.py +3 -5
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/panels/cache.py +5 -3
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/panels/history/__init__.py +1 -1
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/panels/history/forms.py +2 -2
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/panels/history/panel.py +13 -11
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/panels/history/views.py +14 -10
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/panels/profiling.py +17 -2
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/panels/settings.py +12 -3
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/panels/sql/__init__.py +1 -1
- django_debug_toolbar-6.0.0/debug_toolbar/panels/sql/forms.py +136 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/panels/sql/panel.py +33 -18
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/panels/sql/tracking.py +0 -1
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/panels/sql/views.py +20 -59
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/panels/staticfiles.py +10 -34
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/panels/templates/__init__.py +1 -1
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/panels/templates/panel.py +18 -5
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/panels/timer.py +34 -16
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/panels/versions.py +6 -2
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/settings.py +12 -1
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/static/debug_toolbar/css/toolbar.css +7 -4
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/static/debug_toolbar/js/history.js +14 -11
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/static/debug_toolbar/js/toolbar.js +13 -11
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/static/debug_toolbar/js/utils.js +3 -3
- django_debug_toolbar-6.0.0/debug_toolbar/store.py +227 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/templates/debug_toolbar/base.html +1 -1
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/templates/debug_toolbar/panels/cache.html +1 -1
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/templates/debug_toolbar/panels/history.html +1 -1
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/templates/debug_toolbar/panels/history_tr.html +10 -10
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/templates/debug_toolbar/panels/profiling.html +1 -1
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/templates/debug_toolbar/panels/staticfiles.html +3 -3
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/toolbar.py +56 -37
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/views.py +1 -1
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/docs/changes.rst +31 -3
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/docs/conf.py +1 -1
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/docs/configuration.rst +38 -2
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/docs/contributing.rst +4 -3
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/docs/installation.rst +6 -5
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/docs/spelling_wordlist.txt +3 -0
- django_debug_toolbar-6.0.0/example/asgi.py +16 -0
- django_debug_toolbar-6.0.0/example/async_/settings.py +5 -0
- django_debug_toolbar-6.0.0/example/async_/urls.py +9 -0
- django_debug_toolbar-6.0.0/example/async_/views.py +9 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/example/settings.py +1 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/example/templates/index.html +13 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/requirements_dev.txt +6 -1
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/tests/base.py +6 -2
- django_debug_toolbar-6.0.0/tests/commands/__init__.py +0 -0
- django_debug_toolbar-6.0.0/tests/panels/__init__.py +0 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/tests/panels/test_alerts.py +1 -1
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/tests/panels/test_cache.py +6 -1
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/tests/panels/test_history.py +41 -32
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/tests/panels/test_profiling.py +6 -1
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/tests/panels/test_redirects.py +3 -1
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/tests/panels/test_request.py +5 -3
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/tests/panels/test_sql.py +24 -10
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/tests/panels/test_staticfiles.py +19 -9
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/tests/panels/test_template.py +5 -2
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/tests/panels/test_versions.py +3 -1
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/tests/settings.py +1 -0
- django_debug_toolbar-6.0.0/tests/templates/staticfiles/path.html +1 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/tests/test_csp_rendering.py +21 -25
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/tests/test_integration.py +133 -112
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/tests/test_integration_async.py +76 -45
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/tests/test_login_not_required.py +10 -2
- django_debug_toolbar-6.0.0/tests/test_models.py +32 -0
- django_debug_toolbar-6.0.0/tests/test_settings.py +22 -0
- django_debug_toolbar-6.0.0/tests/test_store.py +244 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/tests/urls.py +4 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/tests/views.py +29 -0
- django_debug_toolbar-5.2.0/biome.json +0 -22
- django_debug_toolbar-5.2.0/debug_toolbar/panels/sql/forms.py +0 -60
- django_debug_toolbar-5.2.0/example/asgi.py +0 -9
- django_debug_toolbar-5.2.0/tests/templates/staticfiles/path.html +0 -1
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/.editorconfig +0 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/.github/dependabot.yml +0 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/.github/workflows/coverage.yml +0 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/.github/workflows/test.yml +0 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/.tx/config +0 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/CODE_OF_CONDUCT.md +0 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/CONTRIBUTING.md +0 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/LICENSE +0 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/SECURITY.md +0 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/_compat.py +0 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/_stubs.py +0 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/apps.py +0 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/decorators.py +0 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/forms.py +0 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/locale/bg/LC_MESSAGES/django.mo +0 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/locale/bg/LC_MESSAGES/django.po +0 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/locale/ca/LC_MESSAGES/django.mo +0 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/locale/ca/LC_MESSAGES/django.po +0 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/locale/cs/LC_MESSAGES/django.mo +0 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/locale/cs/LC_MESSAGES/django.po +0 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/locale/de/LC_MESSAGES/django.mo +0 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/locale/de/LC_MESSAGES/django.po +0 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/locale/en/LC_MESSAGES/django.mo +0 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/locale/en/LC_MESSAGES/django.po +0 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/locale/es/LC_MESSAGES/django.mo +0 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/locale/es/LC_MESSAGES/django.po +0 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/locale/fa/LC_MESSAGES/django.mo +0 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/locale/fa/LC_MESSAGES/django.po +0 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/locale/fi/LC_MESSAGES/django.mo +0 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/locale/fi/LC_MESSAGES/django.po +0 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/locale/fr/LC_MESSAGES/django.mo +0 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/locale/fr/LC_MESSAGES/django.po +0 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/locale/he/LC_MESSAGES/django.mo +0 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/locale/he/LC_MESSAGES/django.po +0 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/locale/id/LC_MESSAGES/django.mo +0 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/locale/id/LC_MESSAGES/django.po +0 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/locale/it/LC_MESSAGES/django.mo +0 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/locale/it/LC_MESSAGES/django.po +0 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/locale/ja/LC_MESSAGES/django.mo +0 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/locale/ja/LC_MESSAGES/django.po +0 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/locale/ko/LC_MESSAGES/django.mo +0 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/locale/ko/LC_MESSAGES/django.po +0 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/locale/nl/LC_MESSAGES/django.mo +0 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/locale/nl/LC_MESSAGES/django.po +0 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/locale/pl/LC_MESSAGES/django.mo +0 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/locale/pl/LC_MESSAGES/django.po +0 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/locale/pt/LC_MESSAGES/django.mo +0 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/locale/pt/LC_MESSAGES/django.po +0 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/locale/pt_BR/LC_MESSAGES/django.mo +0 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/locale/pt_BR/LC_MESSAGES/django.po +0 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/locale/ru/LC_MESSAGES/django.mo +0 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/locale/ru/LC_MESSAGES/django.po +0 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/locale/sk/LC_MESSAGES/django.mo +0 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/locale/sk/LC_MESSAGES/django.po +0 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/locale/sv_SE/LC_MESSAGES/django.mo +0 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/locale/sv_SE/LC_MESSAGES/django.po +0 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/locale/uk/LC_MESSAGES/django.mo +0 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/locale/uk/LC_MESSAGES/django.po +0 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/locale/zh_CN/LC_MESSAGES/django.mo +0 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/locale/zh_CN/LC_MESSAGES/django.po +0 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/management/__init__.py +0 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/management/commands/__init__.py +0 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/management/commands/debugsqlshell.py +0 -0
- {django_debug_toolbar-5.2.0/debug_toolbar/templatetags → django_debug_toolbar-6.0.0/debug_toolbar/migrations}/__init__.py +0 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/panels/headers.py +0 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/panels/redirects.py +0 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/panels/request.py +0 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/panels/signals.py +0 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/panels/sql/utils.py +0 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/panels/templates/jinja2.py +0 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/panels/templates/views.py +0 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/static/debug_toolbar/css/print.css +0 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/static/debug_toolbar/js/redirect.js +0 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/static/debug_toolbar/js/timer.js +0 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/templates/debug_toolbar/includes/panel_button.html +0 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/templates/debug_toolbar/includes/panel_content.html +0 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/templates/debug_toolbar/includes/theme_selector.html +0 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/templates/debug_toolbar/panels/alerts.html +0 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/templates/debug_toolbar/panels/headers.html +0 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/templates/debug_toolbar/panels/request.html +0 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/templates/debug_toolbar/panels/request_variables.html +0 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/templates/debug_toolbar/panels/settings.html +0 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/templates/debug_toolbar/panels/signals.html +0 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/templates/debug_toolbar/panels/sql.html +0 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/templates/debug_toolbar/panels/sql_explain.html +0 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/templates/debug_toolbar/panels/sql_profile.html +0 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/templates/debug_toolbar/panels/sql_select.html +0 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/templates/debug_toolbar/panels/template_source.html +0 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/templates/debug_toolbar/panels/templates.html +0 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/templates/debug_toolbar/panels/timer.html +0 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/templates/debug_toolbar/panels/versions.html +0 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/templates/debug_toolbar/redirect.html +0 -0
- {django_debug_toolbar-5.2.0/example → django_debug_toolbar-6.0.0/debug_toolbar/templatetags}/__init__.py +0 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/urls.py +0 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/utils.py +0 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/docs/Makefile +0 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/docs/architecture.rst +0 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/docs/checks.rst +0 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/docs/commands.rst +0 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/docs/index.rst +0 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/docs/make.bat +0 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/docs/panels.rst +0 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/docs/resources.rst +0 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/docs/tips.rst +0 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/example/README.rst +0 -0
- {django_debug_toolbar-5.2.0/tests → django_debug_toolbar-6.0.0/example}/__init__.py +0 -0
- {django_debug_toolbar-5.2.0/tests/commands → django_debug_toolbar-6.0.0/example/async_}/__init__.py +0 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/example/django-debug-toolbar.png +0 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/example/example.db +0 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/example/manage.py +0 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/example/screenshot.py +0 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/example/static/test.css +0 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/example/templates/async_db.html +0 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/example/templates/bad_form.html +0 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/example/templates/htmx/boost.html +0 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/example/templates/jinja2/index.jinja +0 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/example/templates/jquery/index.html +0 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/example/templates/mootools/index.html +0 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/example/templates/prototype/index.html +0 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/example/templates/turbo/index.html +0 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/example/test_views.py +0 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/example/urls.py +0 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/example/views.py +0 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/example/wsgi.py +0 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/pyproject.toml +0 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/setup.py +0 -0
- {django_debug_toolbar-5.2.0/tests/panels → django_debug_toolbar-6.0.0/tests}/__init__.py +0 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/tests/additional_static/base.css +0 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/tests/commands/test_debugsqlshell.py +0 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/tests/context_processors.py +0 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/tests/forms.py +0 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/tests/loaders.py +0 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/tests/middleware.py +0 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/tests/models.py +0 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/tests/panels/test_async_panel_compatibility.py +0 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/tests/panels/test_custom.py +0 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/tests/panels/test_settings.py +0 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/tests/sync.py +0 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/tests/templates/ajax/ajax.html +0 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/tests/templates/base.html +0 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/tests/templates/basic.html +0 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/tests/templates/jinja2/base.html +0 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/tests/templates/jinja2/basic.jinja +0 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/tests/templates/registration/login.html +0 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/tests/templates/sql/flat.html +0 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/tests/templates/sql/included.html +0 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/tests/templates/sql/nested.html +0 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/tests/templates/staticfiles/async_static.html +0 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/tests/test_checks.py +0 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/tests/test_decorators.py +0 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/tests/test_forms.py +0 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/tests/test_middleware.py +0 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/tests/test_toolbar.py +0 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/tests/test_utils.py +0 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/tests/urls_invalid.py +0 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/tests/urls_use_package_urls.py +0 -0
- {django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/tox.ini +0 -0
|
@@ -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:
|
|
13
|
+
rev: v2.0.0
|
|
14
14
|
hooks:
|
|
15
15
|
- id: doc8
|
|
16
16
|
- repo: https://github.com/adamchainz/django-upgrade
|
|
17
|
-
rev: 1.
|
|
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:
|
|
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.
|
|
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.
|
|
43
|
+
rev: v2.6.0
|
|
44
44
|
hooks:
|
|
45
45
|
- id: pyproject-fmt
|
|
46
46
|
- repo: https://github.com/abravalheri/validate-pyproject
|
|
@@ -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:
|
|
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
|
|
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
|
|
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 = "
|
|
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
|
-
@
|
|
22
|
-
def panel_id(
|
|
23
|
-
return
|
|
23
|
+
@classproperty
|
|
24
|
+
def panel_id(cls):
|
|
25
|
+
return cls.__name__
|
|
24
26
|
|
|
25
27
|
@property
|
|
26
28
|
def enabled(self) -> bool:
|
|
27
|
-
#
|
|
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
|
|
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
|
|
145
|
-
|
|
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
|
-
|
|
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":
|
|
180
|
+
) % {"cache_calls": cache_calls, "time": stats.get("total_time")}
|
|
180
181
|
|
|
181
182
|
@property
|
|
182
183
|
def title(self):
|
|
183
|
-
count =
|
|
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
|
|
{django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/panels/history/forms.py
RENAMED
|
@@ -5,8 +5,8 @@ class HistoryStoreForm(forms.Form):
|
|
|
5
5
|
"""
|
|
6
6
|
Validate params
|
|
7
7
|
|
|
8
|
-
|
|
8
|
+
request_id: The key for the store instance to be fetched.
|
|
9
9
|
"""
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
request_id = forms.CharField(widget=forms.HiddenInput())
|
|
12
12
|
exclude_history = forms.BooleanField(widget=forms.HiddenInput(), required=False)
|
{django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/panels/history/panel.py
RENAMED
|
@@ -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
|
-
|
|
28
|
-
if
|
|
29
|
-
headers["djdt-
|
|
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
|
-
|
|
91
|
-
for
|
|
92
|
-
|
|
93
|
-
"
|
|
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={"
|
|
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
|
-
"
|
|
103
|
-
"
|
|
104
|
+
"current_request_id": self.toolbar.request_id,
|
|
105
|
+
"toolbar_history": toolbar_history,
|
|
104
106
|
"refresh_form": HistoryStoreForm(
|
|
105
107
|
initial={
|
|
106
|
-
"
|
|
108
|
+
"request_id": self.toolbar.request_id,
|
|
107
109
|
"exclude_history": True,
|
|
108
110
|
}
|
|
109
111
|
),
|
{django_debug_toolbar-5.2.0 → django_debug_toolbar-6.0.0}/debug_toolbar/panels/history/views.py
RENAMED
|
@@ -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
|
-
|
|
19
|
-
toolbar = DebugToolbar.fetch(
|
|
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
|
|
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
|
|
53
|
+
for request_id in get_store().request_ids():
|
|
54
|
+
toolbar = DebugToolbar.fetch(request_id)
|
|
53
55
|
requests.append(
|
|
54
56
|
{
|
|
55
|
-
"id":
|
|
57
|
+
"id": request_id,
|
|
56
58
|
"content": render_to_string(
|
|
57
59
|
"debug_toolbar/panels/history_tr.html",
|
|
58
60
|
{
|
|
59
|
-
"
|
|
60
|
-
"
|
|
61
|
-
"
|
|
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
|
-
"
|
|
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.
|
|
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.
|
|
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(
|
|
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
|
+
)
|