pax_global_header00006660000000000000000000000064150040607200014504gustar00rootroot0000000000000052 comment=e5f0ccd99ac8bbba184295b7a881b350cd911436 python-django-debug-toolbar-5.2.0/000077500000000000000000000000001500406072000170155ustar00rootroot00000000000000python-django-debug-toolbar-5.2.0/.editorconfig000066400000000000000000000004051500406072000214710ustar00rootroot00000000000000# https://editorconfig.org/ root = true [*] indent_style = space indent_size = 4 insert_final_newline = true trim_trailing_whitespace = true end_of_line = lf charset = utf-8 [*.html] indent_size = 2 [Makefile] indent_style = tab [*.bat] indent_style = tab python-django-debug-toolbar-5.2.0/.github/000077500000000000000000000000001500406072000203555ustar00rootroot00000000000000python-django-debug-toolbar-5.2.0/.github/PULL_REQUEST_TEMPLATE.md000066400000000000000000000005521500406072000241600ustar00rootroot00000000000000#### Description Please include a summary of the change and which issue is fixed. Please also include relevant motivation and context. Your commit message should include this information as well. Fixes # (issue) #### Checklist: - [ ] I have added the relevant tests for this change. - [ ] I have added an item to the Pending section of ``docs/changes.rst``. python-django-debug-toolbar-5.2.0/.github/dependabot.yml000066400000000000000000000011031500406072000232000ustar00rootroot00000000000000# Keep GitHub Actions up to date with GitHub's Dependabot... # https://docs.github.com/en/code-security/dependabot/working-with-dependabot/keeping-your-actions-up-to-date-with-dependabot # https://docs.github.com/en/code-security/dependabot/dependabot-version-updates/configuration-options-for-the-dependabot.yml-file#package-ecosystem version: 2 updates: - package-ecosystem: github-actions directory: / groups: github-actions: patterns: - "*" # Group all Actions updates into a single larger pull request schedule: interval: weekly python-django-debug-toolbar-5.2.0/.github/workflows/000077500000000000000000000000001500406072000224125ustar00rootroot00000000000000python-django-debug-toolbar-5.2.0/.github/workflows/coverage.yml000066400000000000000000000023611500406072000247320ustar00rootroot00000000000000# .github/workflows/coverage.yml name: Post coverage comment on: workflow_run: workflows: ["Test"] types: - completed jobs: test: name: Run tests & display coverage runs-on: ubuntu-latest if: github.event.workflow_run.event == 'pull_request' && github.event.workflow_run.conclusion == 'success' permissions: # Gives the action the necessary permissions for publishing new # comments in pull requests. pull-requests: write # Gives the action the necessary permissions for editing existing # comments (to avoid publishing multiple comments in the same PR) contents: write # Gives the action the necessary permissions for looking up the # workflow that launched this workflow, and download the related # artifact that contains the comment to be published actions: read steps: # DO NOT run actions/checkout here, for security reasons # For details, refer to https://securitylab.github.com/research/github-actions-preventing-pwn-requests/ - name: Post comment uses: py-cov-action/python-coverage-comment-action@v3 with: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} GITHUB_PR_RUN_ID: ${{ github.event.workflow_run.id }} python-django-debug-toolbar-5.2.0/.github/workflows/release.yml000066400000000000000000000065311500406072000245620ustar00rootroot00000000000000name: Publish Python 🐍 distribution 📦 to PyPI and TestPyPI on: push env: PYPI_URL: https://pypi.org/p/django-debug-toolbar PYPI_TEST_URL: https://test.pypi.org/p/django-debug-toolbar jobs: build: name: Build distribution 📦 runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Set up Python uses: actions/setup-python@v5 with: python-version: "3.x" - name: Install pypa/build run: python3 -m pip install build --user - name: Build a binary wheel and a source tarball run: python3 -m build - name: Store the distribution packages uses: actions/upload-artifact@v4 with: name: python-package-distributions path: dist/ publish-to-pypi: name: >- Publish Python 🐍 distribution 📦 to PyPI if: startsWith(github.ref, 'refs/tags/') # only publish to PyPI on tag pushes needs: - build runs-on: ubuntu-latest environment: name: pypi url: ${{ env.PYPI_URL }} permissions: id-token: write # IMPORTANT: mandatory for trusted publishing steps: - name: Download all the dists uses: actions/download-artifact@v4 with: name: python-package-distributions path: dist/ - name: Publish distribution 📦 to PyPI uses: pypa/gh-action-pypi-publish@release/v1.12 github-release: name: >- Sign the Python 🐍 distribution 📦 with Sigstore and upload them to GitHub Release needs: - publish-to-pypi runs-on: ubuntu-latest permissions: contents: write # IMPORTANT: mandatory for making GitHub Releases id-token: write # IMPORTANT: mandatory for sigstore steps: - name: Download all the dists uses: actions/download-artifact@v4 with: name: python-package-distributions path: dist/ - name: Sign the dists with Sigstore uses: sigstore/gh-action-sigstore-python@v3.0.0 with: inputs: >- ./dist/*.tar.gz ./dist/*.whl - name: Create GitHub Release env: GITHUB_TOKEN: ${{ github.token }} run: >- gh release create '${{ github.ref_name }}' --repo '${{ github.repository }}' --notes "" - name: Upload artifact signatures to GitHub Release env: GITHUB_TOKEN: ${{ github.token }} # Upload to GitHub Release using the `gh` CLI. # `dist/` contains the built packages, and the # sigstore-produced signatures and certificates. run: >- gh release upload '${{ github.ref_name }}' dist/** --repo '${{ github.repository }}' publish-to-testpypi: name: Publish Python 🐍 distribution 📦 to TestPyPI if: startsWith(github.ref, 'refs/tags/') # only publish to Test PyPI on tag pushes needs: - build runs-on: ubuntu-latest environment: name: testpypi url: ${{ env.PYPI_TEST_URL }} permissions: id-token: write # IMPORTANT: mandatory for trusted publishing steps: - name: Download all the dists uses: actions/download-artifact@v4 with: name: python-package-distributions path: dist/ - name: Publish distribution 📦 to TestPyPI uses: pypa/gh-action-pypi-publish@release/v1.12 with: repository-url: https://test.pypi.org/legacy/ skip-existing: true python-django-debug-toolbar-5.2.0/.github/workflows/test.yml000066400000000000000000000130721500406072000241170ustar00rootroot00000000000000name: Test on: push: pull_request: schedule: # Run weekly on Saturday - cron: '37 3 * * SAT' jobs: mysql: runs-on: ubuntu-latest strategy: fail-fast: false max-parallel: 5 matrix: python-version: ['3.9', '3.10', '3.11', '3.12', '3.13'] services: mariadb: image: mariadb env: MARIADB_ROOT_PASSWORD: debug_toolbar options: >- --health-cmd "mariadb-admin ping" --health-interval 10s --health-timeout 5s --health-retries 5 ports: - 3306:3306 steps: - uses: actions/checkout@v4 - name: Set up Python ${{ matrix.python-version }} uses: actions/setup-python@v5 with: python-version: ${{ matrix.python-version }} allow-prereleases: true - name: Get pip cache dir id: pip-cache run: | echo "dir=$(pip cache dir)" >> $GITHUB_OUTPUT - name: Cache uses: actions/cache@v4 with: path: ${{ steps.pip-cache.outputs.dir }} key: ${{ matrix.python-version }}-v1-${{ hashFiles('**/pyproject.toml') }}-${{ hashFiles('**/tox.ini') }} restore-keys: | ${{ matrix.python-version }}-v1- - name: Install dependencies run: | python -m pip install --upgrade pip python -m pip install --upgrade tox tox-gh-actions - name: Test with tox run: tox env: DB_BACKEND: mysql DB_USER: root DB_PASSWORD: debug_toolbar DB_HOST: 127.0.0.1 DB_PORT: 3306 postgres: runs-on: ubuntu-latest strategy: fail-fast: false max-parallel: 5 matrix: # Skip 3.13 here, it needs the psycopg3 / postgis3 database python-version: ['3.9', '3.10', '3.11', '3.12'] database: [postgresql, postgis] # Add psycopg3 to our matrix for modern python versions include: - python-version: '3.10' database: psycopg3 - python-version: '3.11' database: psycopg3 - python-version: '3.12' database: psycopg3 - python-version: '3.13' database: psycopg3 - python-version: '3.13' database: postgis3 services: postgres: image: postgis/postgis:14-3.1 env: POSTGRES_DB: debug_toolbar POSTGRES_USER: debug_toolbar POSTGRES_PASSWORD: debug_toolbar ports: - 5432:5432 options: >- --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5 steps: - uses: actions/checkout@v4 - name: Set up Python ${{ matrix.python-version }} uses: actions/setup-python@v5 with: python-version: ${{ matrix.python-version }} allow-prereleases: true - name: Get pip cache dir id: pip-cache run: | echo "dir=$(pip cache dir)" >> $GITHUB_OUTPUT - name: Cache uses: actions/cache@v4 with: path: ${{ steps.pip-cache.outputs.dir }} key: ${{ matrix.python-version }}-v1-${{ hashFiles('**/pyproject.toml') }}-${{ hashFiles('**/tox.ini') }} restore-keys: | ${{ matrix.python-version }}-v1- - name: Install gdal-bin (for postgis) run: | sudo apt-get -qq update sudo apt-get -y install gdal-bin - name: Install dependencies run: | python -m pip install --upgrade pip python -m pip install --upgrade tox tox-gh-actions - name: Test with tox run: tox env: DB_BACKEND: ${{ matrix.database }} DB_HOST: localhost DB_PORT: 5432 sqlite: runs-on: ubuntu-latest strategy: fail-fast: false max-parallel: 5 matrix: python-version: ['3.9', '3.10', '3.11', '3.12', '3.13'] steps: - uses: actions/checkout@v4 - name: Set up Python ${{ matrix.python-version }} uses: actions/setup-python@v5 with: python-version: ${{ matrix.python-version }} allow-prereleases: true - name: Get pip cache dir id: pip-cache run: | echo "dir=$(pip cache dir)" >> $GITHUB_OUTPUT - name: Cache uses: actions/cache@v4 with: path: ${{ steps.pip-cache.outputs.dir }} key: ${{ matrix.python-version }}-v1-${{ hashFiles('**/pyproject.toml') }}-${{ hashFiles('**/tox.ini') }} restore-keys: | ${{ matrix.python-version }}-v1- - name: Install dependencies run: | python -m pip install --upgrade pip python -m pip install --upgrade tox tox-gh-actions - name: Test with tox run: tox env: DB_BACKEND: sqlite3 DB_NAME: ":memory:" lint: runs-on: ubuntu-latest strategy: fail-fast: false steps: - uses: actions/checkout@v4 - name: Set up Python ${{ matrix.python-version }} uses: actions/setup-python@v5 with: python-version: 3.9 - name: Get pip cache dir id: pip-cache run: | echo "dir=$(pip cache dir)" >> $GITHUB_OUTPUT - name: Cache uses: actions/cache@v4 with: path: ${{ steps.pip-cache.outputs.dir }} key: ${{ matrix.python-version }}-v1-${{ hashFiles('**/pyproject.toml') }}-${{ hashFiles('**/tox.ini') }} restore-keys: | ${{ matrix.python-version }}-v1- - name: Install dependencies run: | python -m pip install --upgrade pip python -m pip install --upgrade tox - name: Test with tox run: tox -e docs,packaging python-django-debug-toolbar-5.2.0/.gitignore000066400000000000000000000002541500406072000210060ustar00rootroot00000000000000*.pyc *.DS_Store *~ .idea build .coverage* dist django_debug_toolbar.egg-info docs/_build example/db.sqlite3 htmlcov .tox geckodriver.log coverage.xml .direnv/ .envrc venv python-django-debug-toolbar-5.2.0/.pre-commit-config.yaml000066400000000000000000000024701500406072000233010ustar00rootroot00000000000000repos: - repo: https://github.com/pre-commit/pre-commit-hooks rev: v5.0.0 hooks: - id: check-toml - id: check-yaml - id: end-of-file-fixer - id: trailing-whitespace - id: mixed-line-ending - id: file-contents-sorter files: docs/spelling_wordlist.txt - repo: https://github.com/pycqa/doc8 rev: v1.1.2 hooks: - id: doc8 - repo: https://github.com/adamchainz/django-upgrade rev: 1.24.0 hooks: - id: django-upgrade args: [--target-version, "4.2"] - repo: https://github.com/adamchainz/djade-pre-commit rev: "1.4.0" hooks: - id: djade args: [--target-version, "4.2"] - repo: https://github.com/pre-commit/pygrep-hooks rev: v1.10.0 hooks: - id: rst-backticks - id: rst-directive-colons - repo: https://github.com/biomejs/pre-commit rev: v1.9.4 hooks: - id: biome-check verbose: true - repo: https://github.com/astral-sh/ruff-pre-commit rev: 'v0.11.7' hooks: - id: ruff args: [--fix, --exit-non-zero-on-fix] - id: ruff-format - repo: https://github.com/tox-dev/pyproject-fmt rev: v2.5.1 hooks: - id: pyproject-fmt - repo: https://github.com/abravalheri/validate-pyproject rev: v0.24.1 hooks: - id: validate-pyproject python-django-debug-toolbar-5.2.0/.readthedocs.yaml000066400000000000000000000005041500406072000222430ustar00rootroot00000000000000# .readthedocs.yaml # Read the Docs configuration file # See https://docs.readthedocs.io/en/stable/config-file/v2.html for details version: 2 build: os: ubuntu-22.04 tools: python: "3.10" sphinx: configuration: docs/conf.py python: install: - requirements: requirements_dev.txt - method: pip path: . python-django-debug-toolbar-5.2.0/.tx/000077500000000000000000000000001500406072000175265ustar00rootroot00000000000000python-django-debug-toolbar-5.2.0/.tx/config000066400000000000000000000005551500406072000207230ustar00rootroot00000000000000[main] host = https://www.transifex.com lang_map = sr@latin: sr_Latn [o:django-debug-toolbar:p:django-debug-toolbar:r:main] file_filter = debug_toolbar/locale//LC_MESSAGES/django.po source_file = debug_toolbar/locale/en/LC_MESSAGES/django.po source_lang = en replace_edited_strings = false keep_translations = false python-django-debug-toolbar-5.2.0/CODE_OF_CONDUCT.md000066400000000000000000000003031500406072000216100ustar00rootroot00000000000000# Django Debug Toolbar Code of Conduct The django-debug-toolbar project utilizes the [Django Commons Code of Conduct](https://github.com/django-commons/membership/blob/main/CODE_OF_CONDUCT.md). python-django-debug-toolbar-5.2.0/CONTRIBUTING.md000066400000000000000000000010511500406072000212430ustar00rootroot00000000000000# Contributing to Django Debug Toolbar This is a [Django Commons](https://github.com/django-commons/) project. By contributing you agree to abide by the [Contributor Code of Conduct](https://github.com/django-commons/membership/blob/main/CODE_OF_CONDUCT.md). ## Documentation For detailed contributing guidelines, please see our [Documentation](https://django-debug-toolbar.readthedocs.io/en/latest/contributing.html). ## Additional Resources Please see the [README](https://github.com/django-commons/membership/blob/main/README.md) for more help. python-django-debug-toolbar-5.2.0/LICENSE000066400000000000000000000030001500406072000200130ustar00rootroot00000000000000Copyright (c) Rob Hudson and individual contributors. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. Neither the name of Django nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. python-django-debug-toolbar-5.2.0/Makefile000066400000000000000000000033061500406072000204570ustar00rootroot00000000000000.PHONY: example test coverage translatable_strings update_translations help .DEFAULT_GOAL := help example: ## Run the example application python example/manage.py migrate --noinput -DJANGO_SUPERUSER_PASSWORD=p python example/manage.py createsuperuser \ --noinput --username="$(USER)" --email="$(USER)@mailinator.com" python example/manage.py runserver example_test: ## Run the test suite for the example application python example/manage.py test example test: ## Run the test suite DJANGO_SETTINGS_MODULE=tests.settings \ python -m django test $${TEST_ARGS:-tests} test_selenium: ## Run frontend tests written with Selenium DJANGO_SELENIUM_TESTS=true DJANGO_SETTINGS_MODULE=tests.settings \ python -m django test $${TEST_ARGS:-tests} coverage: ## Run the test suite with coverage enabled python --version DJANGO_SETTINGS_MODULE=tests.settings \ python -b -W always -m coverage run -m django test -v2 $${TEST_ARGS:-tests} coverage report coverage html coverage xml translatable_strings: ## Update the English '.po' file cd debug_toolbar && python -m django makemessages -l en --no-obsolete @echo "Please commit changes and run 'tx push -s' (or wait for Transifex to pick them)" update_translations: ## Download updated '.po' files from Transifex tx pull -a --minimum-perc=10 cd debug_toolbar && python -m django compilemessages .PHONY: example/django-debug-toolbar.png example/django-debug-toolbar.png: example/screenshot.py ## Update the screenshot in 'README.rst' python $< --browser firefox --headless -o $@ optipng $@ help: ## Help message for targets @grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) \ | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}' python-django-debug-toolbar-5.2.0/README.rst000066400000000000000000000053711500406072000205120ustar00rootroot00000000000000===================================== Django Debug Toolbar |latest-version| ===================================== |build-status| |coverage| |docs| |python-support| |django-support| .. |latest-version| image:: https://img.shields.io/pypi/v/django-debug-toolbar.svg :target: https://pypi.org/project/django-debug-toolbar/ :alt: Latest version on PyPI .. |build-status| image:: https://github.com/django-commons/django-debug-toolbar/workflows/Test/badge.svg :target: https://github.com/django-commons/django-debug-toolbar/actions/workflows/test.yml :alt: Build Status .. |coverage| image:: https://img.shields.io/badge/Coverage-94%25-green :target: https://github.com/django-commons/django-debug-toolbar/actions/workflows/test.yml?query=branch%3Amain :alt: Test coverage status .. |docs| image:: https://img.shields.io/readthedocs/django-debug-toolbar/latest.svg :target: https://readthedocs.org/projects/django-debug-toolbar/ :alt: Documentation status .. |python-support| image:: https://img.shields.io/pypi/pyversions/django-debug-toolbar :target: https://pypi.org/project/django-debug-toolbar/ :alt: Supported Python versions .. |django-support| image:: https://img.shields.io/pypi/djversions/django-debug-toolbar :target: https://pypi.org/project/django-debug-toolbar/ :alt: Supported Django versions The Django Debug Toolbar is a configurable set of panels that display various debug information about the current request/response and when clicked, display more details about the panel's content. Here's a screenshot of the toolbar in action: .. image:: https://raw.github.com/django-commons/django-debug-toolbar/main/example/django-debug-toolbar.png :alt: Django Debug Toolbar screenshot In addition to the built-in panels, a number of third-party panels are contributed by the community. The current stable version of the Debug Toolbar is 5.2.0. It works on Django ≥ 4.2.0. The Debug Toolbar has experimental support for `Django's asynchronous views `_. Please note that the Debug Toolbar still lacks the capability for handling concurrent requests. If you find any issues, please report them on the `issue tracker`_. Documentation, including installation and configuration instructions, is available at https://django-debug-toolbar.readthedocs.io/. The Django Debug Toolbar is released under the BSD license, like Django itself. If you like it, please consider contributing! The Django Debug Toolbar was originally created by Rob Hudson in August 2008 and was further developed by many contributors_. .. _contributors: https://github.com/django-commons/django-debug-toolbar/graphs/contributors .. _issue tracker: https://github.com/django-commons/django-debug-toolbar/issues python-django-debug-toolbar-5.2.0/SECURITY.md000066400000000000000000000010331500406072000206030ustar00rootroot00000000000000# Security Policy ## Supported Versions Only the latest version of django-debug-toolbar [![PyPI version](https://badge.fury.io/py/django-debug-toolbar.svg)](https://pypi.python.org/pypi/django-debug-toolbar) is supported. ## Reporting a Vulnerability If you think you have found a vulnerability, and even if you are not sure, please [report it to us in private](https://github.com/django-commons/django-debug-toolbar/security/advisories/new). We will review it and get back to you. Please refrain from public discussions of the issue. python-django-debug-toolbar-5.2.0/biome.json000066400000000000000000000006771500406072000210150ustar00rootroot00000000000000{ "$schema": "https://biomejs.dev/schemas/1.9.4/schema.json", "formatter": { "enabled": true, "useEditorconfig": true }, "organizeImports": { "enabled": true }, "linter": { "enabled": true, "rules": { "recommended": true } }, "javascript": { "formatter": { "trailingCommas": "es5", "quoteStyle": "double" } } } python-django-debug-toolbar-5.2.0/debug_toolbar/000077500000000000000000000000001500406072000216255ustar00rootroot00000000000000python-django-debug-toolbar-5.2.0/debug_toolbar/__init__.py000066400000000000000000000004301500406072000237330ustar00rootroot00000000000000__all__ = ["APP_NAME", "VERSION"] APP_NAME = "djdt" # Do not use pkg_resources to find the version but set it here directly! # see issue #1446 VERSION = "5.2.0" # Code that discovers files or modules in INSTALLED_APPS imports this module. urls = "debug_toolbar.urls", APP_NAME python-django-debug-toolbar-5.2.0/debug_toolbar/_compat.py000066400000000000000000000005471500406072000236270ustar00rootroot00000000000000try: from django.contrib.auth.decorators import login_not_required except ImportError: # For Django < 5.1, copy the current Django implementation def login_not_required(view_func): """ Decorator for views that allows access to unauthenticated requests. """ view_func.login_required = False return view_func python-django-debug-toolbar-5.2.0/debug_toolbar/_stubs.py000066400000000000000000000010371500406072000234770ustar00rootroot00000000000000from __future__ import annotations from typing import Any, NamedTuple, Optional from django import template as dj_template class InspectStack(NamedTuple): frame: Any filename: str lineno: int function: str code_context: str index: int TidyStackTrace = list[tuple[str, int, str, str, Optional[Any]]] class RenderContext(dj_template.context.RenderContext): template: dj_template.Template class RequestContext(dj_template.RequestContext): template: dj_template.Template render_context: RenderContext python-django-debug-toolbar-5.2.0/debug_toolbar/apps.py000066400000000000000000000235121500406072000231450ustar00rootroot00000000000000import inspect import mimetypes from django.apps import AppConfig from django.conf import settings from django.core.checks import Error, Warning, register from django.middleware.gzip import GZipMiddleware from django.urls import NoReverseMatch, reverse from django.utils.module_loading import import_string from django.utils.translation import gettext_lazy as _ from debug_toolbar import APP_NAME, settings as dt_settings from debug_toolbar.settings import CONFIG_DEFAULTS class DebugToolbarConfig(AppConfig): name = "debug_toolbar" verbose_name = _("Debug Toolbar") def ready(self): from debug_toolbar.toolbar import DebugToolbar # Import the panels when the app is ready and call their ready() methods. This # allows panels like CachePanel to enable their instrumentation immediately. for cls in DebugToolbar.get_panel_classes(): cls.ready() def check_template_config(config): """ Checks if a template configuration is valid. The toolbar requires either the toolbars to be unspecified or ``django.template.loaders.app_directories.Loader`` to be included in the loaders. If custom loaders are specified, then APP_DIRS must be True. """ def flat_loaders(loaders): """ Recursively flatten the settings list of template loaders. Check for (loader, [child_loaders]) tuples. Django's default cached loader uses this pattern. """ for loader in loaders: if isinstance(loader, tuple): yield loader[0] yield from flat_loaders(loader[1]) else: yield loader app_dirs = config.get("APP_DIRS", False) loaders = config.get("OPTIONS", {}).get("loaders", None) if loaders: loaders = list(flat_loaders(loaders)) # By default the app loader is included. has_app_loaders = ( loaders is None or "django.template.loaders.app_directories.Loader" in loaders ) return has_app_loaders or app_dirs @register def check_middleware(app_configs, **kwargs): from debug_toolbar.middleware import DebugToolbarMiddleware errors = [] gzip_index = None debug_toolbar_indexes = [] if all(not check_template_config(config) for config in settings.TEMPLATES): errors.append( Warning( "At least one DjangoTemplates TEMPLATES configuration needs " "to use django.template.loaders.app_directories.Loader or " "have APP_DIRS set to True.", hint=( "Include django.template.loaders.app_directories.Loader " 'in ["OPTIONS"]["loaders"]. Alternatively use ' "APP_DIRS=True for at least one " "django.template.backends.django.DjangoTemplates " "backend configuration." ), id="debug_toolbar.W006", ) ) # If old style MIDDLEWARE_CLASSES is being used, report an error. if settings.is_overridden("MIDDLEWARE_CLASSES"): errors.append( Warning( "debug_toolbar is incompatible with MIDDLEWARE_CLASSES setting.", hint="Use MIDDLEWARE instead of MIDDLEWARE_CLASSES", id="debug_toolbar.W004", ) ) return errors # Determine the indexes which gzip and/or the toolbar are installed at for i, middleware in enumerate(settings.MIDDLEWARE): 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( Warning( "debug_toolbar.middleware.DebugToolbarMiddleware is missing " "from MIDDLEWARE.", hint="Add debug_toolbar.middleware.DebugToolbarMiddleware to " "MIDDLEWARE.", id="debug_toolbar.W001", ) ) elif len(debug_toolbar_indexes) != 1: # If the toolbar appears multiple times, report an error. errors.append( Warning( "debug_toolbar.middleware.DebugToolbarMiddleware occurs " "multiple times in MIDDLEWARE.", hint="Load debug_toolbar.middleware.DebugToolbarMiddleware only " "once in MIDDLEWARE.", id="debug_toolbar.W002", ) ) 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( Warning( "debug_toolbar.middleware.DebugToolbarMiddleware occurs before " "django.middleware.gzip.GZipMiddleware in MIDDLEWARE.", hint="Move debug_toolbar.middleware.DebugToolbarMiddleware to " "after django.middleware.gzip.GZipMiddleware in MIDDLEWARE.", id="debug_toolbar.W003", ) ) return errors @register def check_panel_configs(app_configs, **kwargs): """Allow each panel to check the toolbar's integration for their its own purposes.""" from debug_toolbar.toolbar import DebugToolbar errors = [] for panel_class in DebugToolbar.get_panel_classes(): for check_message in panel_class.run_checks(): errors.append(check_message) 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 ) @register def check_panels(app_configs, **kwargs): errors = [] panels = dt_settings.get_panels() if not panels: errors.append( Warning( "Setting DEBUG_TOOLBAR_PANELS is empty.", hint="Set DEBUG_TOOLBAR_PANELS to a non-empty list in your " "settings.py.", id="debug_toolbar.W005", ) ) return errors @register def js_mimetype_check(app_configs, **kwargs): """ Check that JavaScript files are resolving to the correct content type. """ # Ideally application/javascript is returned, but text/javascript is # acceptable. javascript_types = {"application/javascript", "text/javascript"} check_failed = not set(mimetypes.guess_type("toolbar.js")).intersection( javascript_types ) if check_failed: return [ Warning( "JavaScript files are resolving to the wrong content type.", hint="The Django Debug Toolbar may not load properly while mimetypes are misconfigured. " "See the Django documentation for an explanation of why this occurs.\n" "https://docs.djangoproject.com/en/stable/ref/contrib/staticfiles/#static-file-development-view\n" "\n" "This typically occurs on Windows machines. The suggested solution is to modify " "HKEY_CLASSES_ROOT in the registry to specify the content type for JavaScript " "files.\n" "\n" "[HKEY_CLASSES_ROOT\\.js]\n" '"Content Type"="application/javascript"', id="debug_toolbar.W007", ) ] return [] @register def debug_toolbar_installed_when_running_tests_check(app_configs, **kwargs): """ Check that the toolbar is not being used when tests are running """ # Check if show toolbar callback has changed show_toolbar_changed = ( dt_settings.get_config()["SHOW_TOOLBAR_CALLBACK"] != CONFIG_DEFAULTS["SHOW_TOOLBAR_CALLBACK"] ) try: # Check if the toolbar's urls are installed reverse(f"{APP_NAME}:render_panel") toolbar_urls_installed = True except NoReverseMatch: toolbar_urls_installed = False # If the user is using the default SHOW_TOOLBAR_CALLBACK, # then the middleware will respect the change to settings.DEBUG. # However, if the user has changed the callback to: # DEBUG_TOOLBAR_CONFIG = {"SHOW_TOOLBAR_CALLBACK": lambda request: DEBUG} # where DEBUG is not settings.DEBUG, then it won't pick up that Django' # test runner has changed the value for settings.DEBUG, and the middleware # will inject the toolbar, while the URLs aren't configured leading to a # NoReverseMatch error. likely_error_setup = show_toolbar_changed and not toolbar_urls_installed if ( not settings.DEBUG and dt_settings.get_config()["IS_RUNNING_TESTS"] and likely_error_setup ): return [ Error( "The Django Debug Toolbar can't be used with tests", hint="Django changes the DEBUG setting to False when running " "tests. By default the Django Debug Toolbar is installed because " "DEBUG is set to True. For most cases, you need to avoid installing " "the toolbar when running tests. If you feel this check is in error, " "you can set `DEBUG_TOOLBAR_CONFIG['IS_RUNNING_TESTS'] = False` to " "bypass this check.", id="debug_toolbar.E001", ) ] else: return [] @register def check_settings(app_configs, **kwargs): errors = [] USER_CONFIG = getattr(settings, "DEBUG_TOOLBAR_CONFIG", {}) if "OBSERVE_REQUEST_CALLBACK" in USER_CONFIG: errors.append( Warning( "The deprecated OBSERVE_REQUEST_CALLBACK setting is present in DEBUG_TOOLBAR_CONFIG.", hint="Use the UPDATE_ON_FETCH and/or SHOW_TOOLBAR_CALLBACK settings instead.", id="debug_toolbar.W008", ) ) return errors python-django-debug-toolbar-5.2.0/debug_toolbar/decorators.py000066400000000000000000000026211500406072000243450ustar00rootroot00000000000000import functools from asgiref.sync import iscoroutinefunction from django.http import Http404 from django.utils.translation import get_language, override as language_override from debug_toolbar import settings as dt_settings def require_show_toolbar(view): """ Async compatible decorator to restrict access to a view based on the Debug Toolbar's visibility settings. """ from debug_toolbar.middleware import get_show_toolbar if iscoroutinefunction(view): @functools.wraps(view) async def inner(request, *args, **kwargs): show_toolbar = get_show_toolbar(async_mode=True) if not await show_toolbar(request): raise Http404 return await view(request, *args, **kwargs) else: @functools.wraps(view) def inner(request, *args, **kwargs): show_toolbar = get_show_toolbar(async_mode=False) if not show_toolbar(request): raise Http404 return view(request, *args, **kwargs) return inner def render_with_toolbar_language(view): """Force any rendering within the view to use the toolbar's language.""" @functools.wraps(view) def inner(request, *args, **kwargs): lang = dt_settings.get_config()["TOOLBAR_LANGUAGE"] or get_language() with language_override(lang): return view(request, *args, **kwargs) return inner python-django-debug-toolbar-5.2.0/debug_toolbar/forms.py000066400000000000000000000030171500406072000233260ustar00rootroot00000000000000import json from django import forms from django.core import signing from django.core.exceptions import ValidationError from django.utils.encoding import force_str class SignedDataForm(forms.Form): """Helper form that wraps a form to validate its contents on post. class PanelForm(forms.Form): # fields On render: form = SignedDataForm(initial=PanelForm(initial=data).initial) On POST: signed_form = SignedDataForm(request.POST) if signed_form.is_valid(): panel_form = PanelForm(signed_form.verified_data) if panel_form.is_valid(): # Success """ salt = "django_debug_toolbar" signed = forms.CharField(required=True, widget=forms.HiddenInput) def __init__(self, *args, **kwargs): initial = kwargs.pop("initial", None) if initial: initial = {"signed": self.sign(initial)} super().__init__(*args, initial=initial, **kwargs) def clean_signed(self): try: verified = json.loads( signing.Signer(salt=self.salt).unsign(self.cleaned_data["signed"]) ) return verified except signing.BadSignature as exc: raise ValidationError("Bad signature") from exc def verified_data(self): return self.is_valid() and self.cleaned_data["signed"] @classmethod def sign(cls, data): return signing.Signer(salt=cls.salt).sign( json.dumps({key: force_str(value) for key, value in data.items()}) ) python-django-debug-toolbar-5.2.0/debug_toolbar/locale/000077500000000000000000000000001500406072000230645ustar00rootroot00000000000000python-django-debug-toolbar-5.2.0/debug_toolbar/locale/bg/000077500000000000000000000000001500406072000234545ustar00rootroot00000000000000python-django-debug-toolbar-5.2.0/debug_toolbar/locale/bg/LC_MESSAGES/000077500000000000000000000000001500406072000252415ustar00rootroot00000000000000python-django-debug-toolbar-5.2.0/debug_toolbar/locale/bg/LC_MESSAGES/django.mo000066400000000000000000000271771500406072000270560ustar00rootroot00000000000000| J $ ? l] N . .H Uw    )D X b lz  "F $ /<AG P$\N (7 S `'j  ( 1;-Bp u 1    $ 5?OWiy  L   (5=F Wdkhs " 95F| &    )=BK Sagpx  <k]&)sZ7ye);R1d    $/Csz&9N ]Mk/ & ^&K r  Z !!+! :! G!0R!! !!!+! !"-"K"h" "^"""#f(###'### $ $$$ 0$=$L$]$r$ $($"$ $($"%4%8%M%Yf%% %%%&#&1>& p&}&&9/'ci'[')(aI(((0()=)%\))9)^) *+5+E+*[+%++(++,,+,,X,_,o,;,,, , ,",(!- J-W--QpXVF'~,%:vj&D1b*s=\HzP6L7 |y[!E?NA-)OYq#UWM_cidhk9Z<f2@^T ;In(C3 ">+/x]0{u4$}oJtr SR .KaBlg58Gem`w%(cache_calls)d call in %(time).2fms%(cache_calls)d calls in %(time).2fms%(count)s similar queries.%(num)s query%(num)s queries%(num_receivers)d receiver of %(num_signals)d signals%(num_receivers)d receivers of %(num_signals)d signals%(num_receivers)d receiver of 1 signal%(num_receivers)d receivers of 1 signal%(num_used)s file used%(num_used)s files used%(payload_count)s file%(payload_count)s files%(query_count)d query in %(sql_time).2fms%(query_count)d queries in %(sql_time).2fms%(stime)0.3f msec%(total)0.3f msec%(total_time)0.3f msec%(utime)0.3f msec%(vcsw)d voluntary, %(ivcsw)d involuntary(prefix %(prefix)s)(unknown)ActionActiveArgumentsAutocommitBackendBrowser timingCPU: %(cum)0.2fms (%(total)0.2fms)CacheCache calls from %(count)d backendCache calls from %(count)d backendsCache hitsCache missesCallCallsCommandsConnection:Context processorContext processorsContext switchesCookiesCountCumTimeData for this panel isn't available anymore. Please reload the page and retry.DatabaseDebug ToolbarDisable for next and successive requestsDuplicated %(dupes)s times.Elapsed timeEmpty setEnable for next and successive requestsErrorExecuted SQLGET dataHeadersHideHide toolbarHistoryIdleIn errorIn transactionIntercept redirectsIsolation level:KeyKeyword argumentsLocationLocation:MethodMilliseconds since navigation start (+length)NameNo GET dataNo POST dataNo SQL queries were recorded during this request.No cookiesNo originNo session dataNonePOST dataPackagePathPerProfilingQueryRead committedRead uncommittedReceiversRepeatable readRequestRequest VariablesRequest headersResourceResource usageResponse headersSQLSQL explainedSQL profiledSQL queries from %(count)d connectionSQL queries from %(count)d connectionsSQL selectedSerializableSession dataSettingSettingsSettings from %sShow toolbarSignalSignalsSince the WSGI environ inherits the environment of the server, only a significant subset is shown below.Static fileStatic filesStatic file appStatic file appsStatic file pathStatic file pathsStatic filesStatic files (%(num_found)s found, %(num_used)s used)StatusSummarySystem CPU timeTemplateTemplatesTemplate pathTemplate pathsTemplate source:TemplatesTemplates (%(num_templates)s rendered)The Django Debug Toolbar has intercepted a redirect to the above URL for debug viewing purposes. You can click the above link to continue with the redirect as normal.TimeTime (ms)TimelineTiming attributeToggle contextTotTimeTotal CPU timeTotal callsTotal timeTotal: %0.2fmsTransaction status:TypeURL nameUnknownUser CPU timeValueVariableVersionVersionsView functionView informationWSGI environand %(dupes)s duplicatesincluding %(count)s similarProject-Id-Version: Django Debug Toolbar Report-Msgid-Bugs-To: PO-Revision-Date: 2010-11-30 00:00+0000 Last-Translator: arneatec , 2022 Language-Team: Bulgarian (http://app.transifex.com/django-debug-toolbar/django-debug-toolbar/language/bg/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: bg Plural-Forms: nplurals=2; plural=(n != 1); %(cache_calls)d извикване за %(time).2fms%(cache_calls)d извиквания за %(time).2fms%(count)s подобни заявки.%(num)s заявка%(num)s заявки%(num_receivers)d приемник на %(num_signals)d сигнала%(num_receivers)d приемника на %(num_signals)d сигнала%(num_receivers)d получател на 1 сигнал%(num_receivers)d получатели на 1 сигнал%(num_used)s файл използван%(num_used)s файла са използвани%(payload_count)s файл%(payload_count)s файла%(query_count)d заявка за %(sql_time).2fms%(query_count)d заявки за %(sql_time).2fms%(stime)0.3f msec%(total)0.3f msec%(total_time)0.3f msec%(utime)0.3f msec%(vcsw)d волеви, %(ivcsw)d неволеви(префикс %(prefix)s)(неясен)ДействиеАктивенАргументиAutocommitБекендВреме в браузъраПроцесор: %(cum)0.2fms (%(total)0.2fms)КешИзвиквания на кеша от %(count)d бекендИзвиквания на кеша от %(count)d бекендаКеш успехиКеш неуспехиИзвикванеИзвикванияКомандиВръзка:Контекстен процесорКонтекстни процесориКонтекстни превключванияБисквиткиБройКумулативноВремеДанните за този панел вече не са налични. Моля, презаредете страницата и опитайте отново. База данниDebug ToolbarДеактивирай за следващо и всички последващи заявкиПовторени %(dupes)s пъти.Изминало времеПразно множествоАктивирай за следващо и всички последващи заявкиГрешкаИзпълнен SQLGET данниХедъриСкрийСкрий лента с инструменти ИсторияНезаетВ грешкаВ транзакцияПрехвани пренасочванияИзолационно ниво:КлючАргументи с ключови думиМестоположениеМестоположение:МетодМилисекунди от началото на навигацията (+дължината)ИмеНяма GET данниНяма POST данниНе са записани никакви SQL заявки по време на тази заявка.Няма бисквиткиНяма произходНяма данни от сесиятаNonePOST данниПакетПътЗаПрофилиранеЗаявкаRead committedRead uncommittedПолучателиRepeatable readЗаявкаПроменливи на зявкатаХедъри на заявкатаРесурсИзползване на ресурсиХедъри на отговораSQLSQL разясненSQL профилиранSQL заявки от %(count)d връзкаSQL заявки от %(count)d връзкиИзбран SQLSerializableДанни на сесиятаНастройкаНастройкиНастройки от %sПокажи лента с инструментиСигналСигналиПонеже WSGI environ наследява средата на сървъра, е показана само важната част от него по-долу.Статичен файлСтатични файловеПриложение статичен файлПриложения статично файловеПът към статичен файлПътища към статични файловеСтатични файловеСтатични файлове (%(num_found)s открити, %(num_used)s използвани)СъстояниеОбобщениеСистемно процесорно времеШаблонШаблониПът към шаблонПътища към шаблониПроизход на шаблона:ШаблониШаблони (%(num_templates)s рендерирани)Django Debug Toolbar прехвана пренасочване към горния URL с цел преглед за отстраняване на грешки /дебъг/. Можете да кликнете върху връзката по-горе, за да продължите с пренасочването по нормалния начин.ВремеВреме (ms)Във времетоАтрибут на измерванетоПревключи контекстаОбщоВремеОбщо процесорно времеОбщо извикванияОбщо времеОбщо: %0.2fmsСтатус на транзакцията:ВидИме на URLНепознатоПотребителско процесорно време СтойностПроменливаВерсияВерсииФункция на изгледаИнформация за изгледаWSGI environи %(dupes)s повторениВключва %(count)s подобниpython-django-debug-toolbar-5.2.0/debug_toolbar/locale/bg/LC_MESSAGES/django.po000066400000000000000000000505241500406072000270510ustar00rootroot00000000000000# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # # Translators: # arneatec , 2022 msgid "" msgstr "" "Project-Id-Version: Django Debug Toolbar\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2024-08-06 07:12-0500\n" "PO-Revision-Date: 2010-11-30 00:00+0000\n" "Last-Translator: arneatec , 2022\n" "Language-Team: Bulgarian (http://app.transifex.com/django-debug-toolbar/django-debug-toolbar/language/bg/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: bg\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: apps.py:18 msgid "Debug Toolbar" msgstr "Debug Toolbar" #: panels/alerts.py:67 #, python-brace-format msgid "" "Form with id \"{form_id}\" contains file input, but does not have the " "attribute enctype=\"multipart/form-data\"." msgstr "" #: panels/alerts.py:70 msgid "" "Form contains file input, but does not have the attribute " "enctype=\"multipart/form-data\"." msgstr "" #: panels/alerts.py:73 #, python-brace-format msgid "" "Input element references form with id \"{form_id}\", but the form does not " "have the attribute enctype=\"multipart/form-data\"." msgstr "" #: panels/alerts.py:77 msgid "Alerts" msgstr "" #: panels/cache.py:168 msgid "Cache" msgstr "Кеш" #: panels/cache.py:174 #, python-format msgid "%(cache_calls)d call in %(time).2fms" msgid_plural "%(cache_calls)d calls in %(time).2fms" msgstr[0] "%(cache_calls)d извикване за %(time).2fms" msgstr[1] "%(cache_calls)d извиквания за %(time).2fms" #: panels/cache.py:183 #, python-format msgid "Cache calls from %(count)d backend" msgid_plural "Cache calls from %(count)d backends" msgstr[0] "Извиквания на кеша от %(count)d бекенд" msgstr[1] "Извиквания на кеша от %(count)d бекенда" #: panels/headers.py:31 msgid "Headers" msgstr "Хедъри" #: panels/history/panel.py:19 panels/history/panel.py:20 msgid "History" msgstr "История" #: panels/profiling.py:140 msgid "Profiling" msgstr "Профилиране" #: panels/redirects.py:17 msgid "Intercept redirects" msgstr "Прехвани пренасочвания" #: panels/request.py:16 msgid "Request" msgstr "Заявка" #: panels/request.py:38 msgid "" msgstr "" #: panels/request.py:55 msgid "" msgstr "" #: panels/settings.py:17 msgid "Settings" msgstr "Настройки" #: panels/settings.py:20 #, python-format msgid "Settings from %s" msgstr "Настройки от %s" #: panels/signals.py:57 #, python-format msgid "%(num_receivers)d receiver of 1 signal" msgid_plural "%(num_receivers)d receivers of 1 signal" msgstr[0] "%(num_receivers)d получател на 1 сигнал" msgstr[1] "%(num_receivers)d получатели на 1 сигнал" #: panels/signals.py:62 #, python-format msgid "%(num_receivers)d receiver of %(num_signals)d signals" msgid_plural "%(num_receivers)d receivers of %(num_signals)d signals" msgstr[0] "%(num_receivers)d приемник на %(num_signals)d сигнала" msgstr[1] "%(num_receivers)d приемника на %(num_signals)d сигнала" #: panels/signals.py:67 msgid "Signals" msgstr "Сигнали" #: panels/sql/panel.py:30 panels/sql/panel.py:41 msgid "Read uncommitted" msgstr "Read uncommitted" #: panels/sql/panel.py:31 panels/sql/panel.py:43 msgid "Read committed" msgstr "Read committed" #: panels/sql/panel.py:32 panels/sql/panel.py:45 msgid "Repeatable read" msgstr "Repeatable read" #: panels/sql/panel.py:33 panels/sql/panel.py:47 msgid "Serializable" msgstr "Serializable" #: panels/sql/panel.py:39 msgid "Autocommit" msgstr "Autocommit" #: panels/sql/panel.py:61 panels/sql/panel.py:71 msgid "Idle" msgstr "Незает" #: panels/sql/panel.py:62 panels/sql/panel.py:72 msgid "Active" msgstr "Активен" #: panels/sql/panel.py:63 panels/sql/panel.py:73 msgid "In transaction" msgstr "В транзакция" #: panels/sql/panel.py:64 panels/sql/panel.py:74 msgid "In error" msgstr "В грешка" #: panels/sql/panel.py:65 panels/sql/panel.py:75 msgid "Unknown" msgstr "Непознато" #: panels/sql/panel.py:162 msgid "SQL" msgstr "SQL" #: panels/sql/panel.py:168 #, python-format msgid "%(query_count)d query in %(sql_time).2fms" msgid_plural "%(query_count)d queries in %(sql_time).2fms" msgstr[0] "%(query_count)d заявка за %(sql_time).2fms" msgstr[1] "%(query_count)d заявки за %(sql_time).2fms" #: panels/sql/panel.py:180 #, python-format msgid "SQL queries from %(count)d connection" msgid_plural "SQL queries from %(count)d connections" msgstr[0] "SQL заявки от %(count)d връзка" msgstr[1] "SQL заявки от %(count)d връзки" #: panels/staticfiles.py:82 #, python-format msgid "Static files (%(num_found)s found, %(num_used)s used)" msgstr "Статични файлове (%(num_found)s открити, %(num_used)s използвани)" #: panels/staticfiles.py:103 msgid "Static files" msgstr "Статични файлове" #: panels/staticfiles.py:109 #, python-format msgid "%(num_used)s file used" msgid_plural "%(num_used)s files used" msgstr[0] "%(num_used)s файл използван" msgstr[1] "%(num_used)s файла са използвани" #: panels/templates/panel.py:101 msgid "Templates" msgstr "Шаблони" #: panels/templates/panel.py:106 #, python-format msgid "Templates (%(num_templates)s rendered)" msgstr "Шаблони (%(num_templates)s рендерирани)" #: panels/templates/panel.py:195 msgid "No origin" msgstr "Няма произход" #: panels/timer.py:27 #, python-format msgid "CPU: %(cum)0.2fms (%(total)0.2fms)" msgstr "Процесор: %(cum)0.2fms (%(total)0.2fms)" #: panels/timer.py:32 #, python-format msgid "Total: %0.2fms" msgstr "Общо: %0.2fms" #: panels/timer.py:38 templates/debug_toolbar/panels/history.html:9 #: templates/debug_toolbar/panels/sql_explain.html:11 #: templates/debug_toolbar/panels/sql_profile.html:12 #: templates/debug_toolbar/panels/sql_select.html:11 msgid "Time" msgstr "Време" #: panels/timer.py:46 msgid "User CPU time" msgstr "Потребителско процесорно време " #: panels/timer.py:46 #, python-format msgid "%(utime)0.3f msec" msgstr "%(utime)0.3f msec" #: panels/timer.py:47 msgid "System CPU time" msgstr "Системно процесорно време" #: panels/timer.py:47 #, python-format msgid "%(stime)0.3f msec" msgstr "%(stime)0.3f msec" #: panels/timer.py:48 msgid "Total CPU time" msgstr "Общо процесорно време" #: panels/timer.py:48 #, python-format msgid "%(total)0.3f msec" msgstr "%(total)0.3f msec" #: panels/timer.py:49 msgid "Elapsed time" msgstr "Изминало време" #: panels/timer.py:49 #, python-format msgid "%(total_time)0.3f msec" msgstr "%(total_time)0.3f msec" #: panels/timer.py:51 msgid "Context switches" msgstr "Контекстни превключвания" #: panels/timer.py:52 #, python-format msgid "%(vcsw)d voluntary, %(ivcsw)d involuntary" msgstr "%(vcsw)d волеви, %(ivcsw)d неволеви" #: panels/versions.py:19 msgid "Versions" msgstr "Версии" #: templates/debug_toolbar/base.html:23 msgid "Hide toolbar" msgstr "Скрий лента с инструменти " #: templates/debug_toolbar/base.html:23 msgid "Hide" msgstr "Скрий" #: templates/debug_toolbar/base.html:25 templates/debug_toolbar/base.html:26 msgid "Toggle Theme" msgstr "" #: templates/debug_toolbar/base.html:35 msgid "Show toolbar" msgstr "Покажи лента с инструменти" #: templates/debug_toolbar/includes/panel_button.html:4 msgid "Disable for next and successive requests" msgstr "Деактивирай за следващо и всички последващи заявки" #: templates/debug_toolbar/includes/panel_button.html:4 msgid "Enable for next and successive requests" msgstr "Активирай за следващо и всички последващи заявки" #: templates/debug_toolbar/panels/alerts.html:4 msgid "Alerts found" msgstr "" #: templates/debug_toolbar/panels/alerts.html:11 msgid "No alerts found" msgstr "" #: templates/debug_toolbar/panels/cache.html:2 msgid "Summary" msgstr "Обобщение" #: templates/debug_toolbar/panels/cache.html:6 msgid "Total calls" msgstr "Общо извиквания" #: templates/debug_toolbar/panels/cache.html:7 msgid "Total time" msgstr "Общо време" #: templates/debug_toolbar/panels/cache.html:8 msgid "Cache hits" msgstr "Кеш успехи" #: templates/debug_toolbar/panels/cache.html:9 msgid "Cache misses" msgstr "Кеш неуспехи" #: templates/debug_toolbar/panels/cache.html:21 msgid "Commands" msgstr "Команди" #: templates/debug_toolbar/panels/cache.html:39 msgid "Calls" msgstr "Извиквания" #: templates/debug_toolbar/panels/cache.html:43 #: templates/debug_toolbar/panels/sql.html:36 msgid "Time (ms)" msgstr "Време (ms)" #: templates/debug_toolbar/panels/cache.html:44 msgid "Type" msgstr "Вид" #: templates/debug_toolbar/panels/cache.html:45 #: templates/debug_toolbar/panels/request.html:8 msgid "Arguments" msgstr "Аргументи" #: templates/debug_toolbar/panels/cache.html:46 #: templates/debug_toolbar/panels/request.html:9 msgid "Keyword arguments" msgstr "Аргументи с ключови думи" #: templates/debug_toolbar/panels/cache.html:47 msgid "Backend" msgstr "Бекенд" #: templates/debug_toolbar/panels/headers.html:3 msgid "Request headers" msgstr "Хедъри на заявката" #: templates/debug_toolbar/panels/headers.html:8 #: templates/debug_toolbar/panels/headers.html:27 #: templates/debug_toolbar/panels/headers.html:48 msgid "Key" msgstr "Ключ" #: templates/debug_toolbar/panels/headers.html:9 #: templates/debug_toolbar/panels/headers.html:28 #: templates/debug_toolbar/panels/headers.html:49 #: templates/debug_toolbar/panels/history_tr.html:23 #: templates/debug_toolbar/panels/request_variables.html:12 #: templates/debug_toolbar/panels/settings.html:6 #: templates/debug_toolbar/panels/timer.html:11 msgid "Value" msgstr "Стойност" #: templates/debug_toolbar/panels/headers.html:22 msgid "Response headers" msgstr "Хедъри на отговора" #: templates/debug_toolbar/panels/headers.html:41 msgid "WSGI environ" msgstr "WSGI environ" #: templates/debug_toolbar/panels/headers.html:43 msgid "" "Since the WSGI environ inherits the environment of the server, only a " "significant subset is shown below." msgstr "Понеже WSGI environ наследява средата на сървъра, е показана само важната част от него по-долу." #: templates/debug_toolbar/panels/history.html:10 msgid "Method" msgstr "Метод" #: templates/debug_toolbar/panels/history.html:11 #: templates/debug_toolbar/panels/staticfiles.html:43 msgid "Path" msgstr "Път" #: templates/debug_toolbar/panels/history.html:12 msgid "Request Variables" msgstr "Променливи на зявката" #: templates/debug_toolbar/panels/history.html:13 msgid "Status" msgstr "Състояние" #: templates/debug_toolbar/panels/history.html:14 #: templates/debug_toolbar/panels/sql.html:37 msgid "Action" msgstr "Действие" #: templates/debug_toolbar/panels/history_tr.html:22 #: templates/debug_toolbar/panels/request_variables.html:11 msgid "Variable" msgstr "Променлива" #: templates/debug_toolbar/panels/profiling.html:5 msgid "Call" msgstr "Извикване" #: templates/debug_toolbar/panels/profiling.html:6 msgid "CumTime" msgstr "КумулативноВреме" #: templates/debug_toolbar/panels/profiling.html:7 #: templates/debug_toolbar/panels/profiling.html:9 msgid "Per" msgstr "За" #: templates/debug_toolbar/panels/profiling.html:8 msgid "TotTime" msgstr "ОбщоВреме" #: templates/debug_toolbar/panels/profiling.html:10 msgid "Count" msgstr "Брой" #: templates/debug_toolbar/panels/request.html:3 msgid "View information" msgstr "Информация за изгледа" #: templates/debug_toolbar/panels/request.html:7 msgid "View function" msgstr "Функция на изгледа" #: templates/debug_toolbar/panels/request.html:10 msgid "URL name" msgstr "Име на URL" #: templates/debug_toolbar/panels/request.html:24 msgid "Cookies" msgstr "Бисквитки" #: templates/debug_toolbar/panels/request.html:27 msgid "No cookies" msgstr "Няма бисквитки" #: templates/debug_toolbar/panels/request.html:31 msgid "Session data" msgstr "Данни на сесията" #: templates/debug_toolbar/panels/request.html:34 msgid "No session data" msgstr "Няма данни от сесията" #: templates/debug_toolbar/panels/request.html:38 msgid "GET data" msgstr "GET данни" #: templates/debug_toolbar/panels/request.html:41 msgid "No GET data" msgstr "Няма GET данни" #: templates/debug_toolbar/panels/request.html:45 msgid "POST data" msgstr "POST данни" #: templates/debug_toolbar/panels/request.html:48 msgid "No POST data" msgstr "Няма POST данни" #: templates/debug_toolbar/panels/settings.html:5 msgid "Setting" msgstr "Настройка" #: templates/debug_toolbar/panels/signals.html:5 msgid "Signal" msgstr "Сигнал" #: templates/debug_toolbar/panels/signals.html:6 msgid "Receivers" msgstr "Получатели" #: templates/debug_toolbar/panels/sql.html:6 #, python-format msgid "%(num)s query" msgid_plural "%(num)s queries" msgstr[0] "%(num)s заявка" msgstr[1] "%(num)s заявки" #: templates/debug_toolbar/panels/sql.html:8 #, python-format msgid "" "including %(count)s similar" msgstr "Включва %(count)s подобни" #: templates/debug_toolbar/panels/sql.html:12 #, python-format msgid "" "and %(dupes)s duplicates" msgstr "и %(dupes)s повторени" #: templates/debug_toolbar/panels/sql.html:34 msgid "Query" msgstr "Заявка" #: templates/debug_toolbar/panels/sql.html:35 #: templates/debug_toolbar/panels/timer.html:36 msgid "Timeline" msgstr "Във времето" #: templates/debug_toolbar/panels/sql.html:52 #, python-format msgid "%(count)s similar queries." msgstr "%(count)s подобни заявки." #: templates/debug_toolbar/panels/sql.html:58 #, python-format msgid "Duplicated %(dupes)s times." msgstr "Повторени %(dupes)s пъти." #: templates/debug_toolbar/panels/sql.html:95 msgid "Connection:" msgstr "Връзка:" #: templates/debug_toolbar/panels/sql.html:97 msgid "Isolation level:" msgstr "Изолационно ниво:" #: templates/debug_toolbar/panels/sql.html:100 msgid "Transaction status:" msgstr "Статус на транзакцията:" #: templates/debug_toolbar/panels/sql.html:114 msgid "(unknown)" msgstr "(неясен)" #: templates/debug_toolbar/panels/sql.html:123 msgid "No SQL queries were recorded during this request." msgstr "Не са записани никакви SQL заявки по време на тази заявка." #: templates/debug_toolbar/panels/sql_explain.html:4 msgid "SQL explained" msgstr "SQL разяснен" #: templates/debug_toolbar/panels/sql_explain.html:9 #: templates/debug_toolbar/panels/sql_profile.html:10 #: templates/debug_toolbar/panels/sql_select.html:9 msgid "Executed SQL" msgstr "Изпълнен SQL" #: templates/debug_toolbar/panels/sql_explain.html:13 #: templates/debug_toolbar/panels/sql_profile.html:14 #: templates/debug_toolbar/panels/sql_select.html:13 msgid "Database" msgstr "База данни" #: templates/debug_toolbar/panels/sql_profile.html:4 msgid "SQL profiled" msgstr "SQL профилиран" #: templates/debug_toolbar/panels/sql_profile.html:37 msgid "Error" msgstr "Грешка" #: templates/debug_toolbar/panels/sql_select.html:4 msgid "SQL selected" msgstr "Избран SQL" #: templates/debug_toolbar/panels/sql_select.html:36 msgid "Empty set" msgstr "Празно множество" #: templates/debug_toolbar/panels/staticfiles.html:3 msgid "Static file path" msgid_plural "Static file paths" msgstr[0] "Път към статичен файл" msgstr[1] "Пътища към статични файлове" #: templates/debug_toolbar/panels/staticfiles.html:7 #, python-format msgid "(prefix %(prefix)s)" msgstr "(префикс %(prefix)s)" #: templates/debug_toolbar/panels/staticfiles.html:11 #: templates/debug_toolbar/panels/staticfiles.html:22 #: templates/debug_toolbar/panels/staticfiles.html:34 #: templates/debug_toolbar/panels/templates.html:10 #: templates/debug_toolbar/panels/templates.html:30 #: templates/debug_toolbar/panels/templates.html:47 msgid "None" msgstr "None" #: templates/debug_toolbar/panels/staticfiles.html:14 msgid "Static file app" msgid_plural "Static file apps" msgstr[0] "Приложение статичен файл" msgstr[1] "Приложения статично файлове" #: templates/debug_toolbar/panels/staticfiles.html:25 msgid "Static file" msgid_plural "Static files" msgstr[0] "Статичен файл" msgstr[1] "Статични файлове" #: templates/debug_toolbar/panels/staticfiles.html:39 #, python-format msgid "%(payload_count)s file" msgid_plural "%(payload_count)s files" msgstr[0] "%(payload_count)s файл" msgstr[1] "%(payload_count)s файла" #: templates/debug_toolbar/panels/staticfiles.html:44 msgid "Location" msgstr "Местоположение" #: templates/debug_toolbar/panels/template_source.html:4 msgid "Template source:" msgstr "Произход на шаблона:" #: templates/debug_toolbar/panels/templates.html:2 msgid "Template path" msgid_plural "Template paths" msgstr[0] "Път към шаблон" msgstr[1] "Пътища към шаблони" #: templates/debug_toolbar/panels/templates.html:13 msgid "Template" msgid_plural "Templates" msgstr[0] "Шаблон" msgstr[1] "Шаблони" #: templates/debug_toolbar/panels/templates.html:22 #: templates/debug_toolbar/panels/templates.html:40 msgid "Toggle context" msgstr "Превключи контекста" #: templates/debug_toolbar/panels/templates.html:33 msgid "Context processor" msgid_plural "Context processors" msgstr[0] "Контекстен процесор" msgstr[1] "Контекстни процесори" #: templates/debug_toolbar/panels/timer.html:2 msgid "Resource usage" msgstr "Използване на ресурси" #: templates/debug_toolbar/panels/timer.html:10 msgid "Resource" msgstr "Ресурс" #: templates/debug_toolbar/panels/timer.html:26 msgid "Browser timing" msgstr "Време в браузъра" #: templates/debug_toolbar/panels/timer.html:35 msgid "Timing attribute" msgstr "Атрибут на измерването" #: templates/debug_toolbar/panels/timer.html:37 msgid "Milliseconds since navigation start (+length)" msgstr "Милисекунди от началото на навигацията (+дължината)" #: templates/debug_toolbar/panels/versions.html:10 msgid "Package" msgstr "Пакет" #: templates/debug_toolbar/panels/versions.html:11 msgid "Name" msgstr "Име" #: templates/debug_toolbar/panels/versions.html:12 msgid "Version" msgstr "Версия" #: templates/debug_toolbar/redirect.html:10 msgid "Location:" msgstr "Местоположение:" #: templates/debug_toolbar/redirect.html:12 msgid "" "The Django Debug Toolbar has intercepted a redirect to the above URL for " "debug viewing purposes. You can click the above link to continue with the " "redirect as normal." msgstr "Django Debug Toolbar прехвана пренасочване към горния URL с цел преглед за отстраняване на грешки /дебъг/. Можете да кликнете върху връзката по-горе, за да продължите с пренасочването по нормалния начин." #: views.py:16 msgid "" "Data for this panel isn't available anymore. Please reload the page and " "retry." msgstr "Данните за този панел вече не са налични. Моля, презаредете страницата и опитайте отново. " python-django-debug-toolbar-5.2.0/debug_toolbar/locale/ca/000077500000000000000000000000001500406072000234475ustar00rootroot00000000000000python-django-debug-toolbar-5.2.0/debug_toolbar/locale/ca/LC_MESSAGES/000077500000000000000000000000001500406072000252345ustar00rootroot00000000000000python-django-debug-toolbar-5.2.0/debug_toolbar/locale/ca/LC_MESSAGES/django.mo000066400000000000000000000050741500406072000270410ustar00rootroot000000000000006I|     #0?C LV [ gty}       %49AGPXar '.4CIPW ` k u       $ - : B G K T b p           ! * 5&3#(/4 $0,"+% *6!' )2.1 -(unknown)ActionActiveBackendCacheCallCallsCommandsConnection:CountDatabaseElapsed timeErrorExecuted SQLHeadersHideHide toolbarIn transactionKeyLocationLocation:NameNo GET dataNo POST dataNonePerQueryReceiversRequestResourceSQLSerializableSettingSettingsShow toolbarSignalSignalsSummaryTemplatesTimeTime (ms)TimelineTotTimeTotal callsTotal timeTotal: %0.2fmsTypeUnknownValueVariableVersionVersionsView informationProject-Id-Version: Django Debug Toolbar Report-Msgid-Bugs-To: PO-Revision-Date: 2010-11-30 00:00+0000 Last-Translator: el_libre como el chaval , 2013 Language-Team: Catalan (http://app.transifex.com/django-debug-toolbar/django-debug-toolbar/language/ca/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: ca Plural-Forms: nplurals=2; plural=(n != 1); (desconegut)AccióActiuAdministracióCaxèCridarCridesComandesConnexió:RecomptarBase de dadesTemps empratErrorSQL ExecutatEncapçalamentsAmagarAmagar barra d'einaEn transaccióClauUbicacióUbicació:NomSense dades GETSense dades POSTCapPerPeticióDestinatarisDemanarFontSQLSeriableConfiguracióConfiguracióMostrar barra d'einesSenyalSenyalsResumPlantillesHoraTemps (ms)Línia temporalTempsTotalTotal cridesTotal tempsTotal: %0.2fmsTipusDesconegutValorVariableVersióVersionsVeure informaciópython-django-debug-toolbar-5.2.0/debug_toolbar/locale/ca/LC_MESSAGES/django.po000066400000000000000000000373331500406072000270470ustar00rootroot00000000000000# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # # Translators: # el_libre como el chaval , 2013 msgid "" msgstr "" "Project-Id-Version: Django Debug Toolbar\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2024-08-06 07:12-0500\n" "PO-Revision-Date: 2010-11-30 00:00+0000\n" "Last-Translator: el_libre como el chaval , 2013\n" "Language-Team: Catalan (http://app.transifex.com/django-debug-toolbar/django-debug-toolbar/language/ca/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: ca\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: apps.py:18 msgid "Debug Toolbar" msgstr "" #: panels/alerts.py:67 #, python-brace-format msgid "" "Form with id \"{form_id}\" contains file input, but does not have the " "attribute enctype=\"multipart/form-data\"." msgstr "" #: panels/alerts.py:70 msgid "" "Form contains file input, but does not have the attribute " "enctype=\"multipart/form-data\"." msgstr "" #: panels/alerts.py:73 #, python-brace-format msgid "" "Input element references form with id \"{form_id}\", but the form does not " "have the attribute enctype=\"multipart/form-data\"." msgstr "" #: panels/alerts.py:77 msgid "Alerts" msgstr "" #: panels/cache.py:168 msgid "Cache" msgstr "Caxè" #: panels/cache.py:174 #, python-format msgid "%(cache_calls)d call in %(time).2fms" msgid_plural "%(cache_calls)d calls in %(time).2fms" msgstr[0] "" msgstr[1] "" #: panels/cache.py:183 #, python-format msgid "Cache calls from %(count)d backend" msgid_plural "Cache calls from %(count)d backends" msgstr[0] "" msgstr[1] "" #: panels/headers.py:31 msgid "Headers" msgstr "Encapçalaments" #: panels/history/panel.py:19 panels/history/panel.py:20 msgid "History" msgstr "" #: panels/profiling.py:140 msgid "Profiling" msgstr "" #: panels/redirects.py:17 msgid "Intercept redirects" msgstr "" #: panels/request.py:16 msgid "Request" msgstr "Demanar" #: panels/request.py:38 msgid "" msgstr "" #: panels/request.py:55 msgid "" msgstr "" #: panels/settings.py:17 msgid "Settings" msgstr "Configuració" #: panels/settings.py:20 #, python-format msgid "Settings from %s" msgstr "" #: panels/signals.py:57 #, python-format msgid "%(num_receivers)d receiver of 1 signal" msgid_plural "%(num_receivers)d receivers of 1 signal" msgstr[0] "" msgstr[1] "" #: panels/signals.py:62 #, python-format msgid "%(num_receivers)d receiver of %(num_signals)d signals" msgid_plural "%(num_receivers)d receivers of %(num_signals)d signals" msgstr[0] "" msgstr[1] "" #: panels/signals.py:67 msgid "Signals" msgstr "Senyals" #: panels/sql/panel.py:30 panels/sql/panel.py:41 msgid "Read uncommitted" msgstr "" #: panels/sql/panel.py:31 panels/sql/panel.py:43 msgid "Read committed" msgstr "" #: panels/sql/panel.py:32 panels/sql/panel.py:45 msgid "Repeatable read" msgstr "" #: panels/sql/panel.py:33 panels/sql/panel.py:47 msgid "Serializable" msgstr "Seriable" #: panels/sql/panel.py:39 msgid "Autocommit" msgstr "" #: panels/sql/panel.py:61 panels/sql/panel.py:71 msgid "Idle" msgstr "" #: panels/sql/panel.py:62 panels/sql/panel.py:72 msgid "Active" msgstr "Actiu" #: panels/sql/panel.py:63 panels/sql/panel.py:73 msgid "In transaction" msgstr "En transacció" #: panels/sql/panel.py:64 panels/sql/panel.py:74 msgid "In error" msgstr "" #: panels/sql/panel.py:65 panels/sql/panel.py:75 msgid "Unknown" msgstr "Desconegut" #: panels/sql/panel.py:162 msgid "SQL" msgstr "SQL" #: panels/sql/panel.py:168 #, python-format msgid "%(query_count)d query in %(sql_time).2fms" msgid_plural "%(query_count)d queries in %(sql_time).2fms" msgstr[0] "" msgstr[1] "" #: panels/sql/panel.py:180 #, python-format msgid "SQL queries from %(count)d connection" msgid_plural "SQL queries from %(count)d connections" msgstr[0] "" msgstr[1] "" #: panels/staticfiles.py:82 #, python-format msgid "Static files (%(num_found)s found, %(num_used)s used)" msgstr "" #: panels/staticfiles.py:103 msgid "Static files" msgstr "" #: panels/staticfiles.py:109 #, python-format msgid "%(num_used)s file used" msgid_plural "%(num_used)s files used" msgstr[0] "" msgstr[1] "" #: panels/templates/panel.py:101 msgid "Templates" msgstr "Plantilles" #: panels/templates/panel.py:106 #, python-format msgid "Templates (%(num_templates)s rendered)" msgstr "" #: panels/templates/panel.py:195 msgid "No origin" msgstr "" #: panels/timer.py:27 #, python-format msgid "CPU: %(cum)0.2fms (%(total)0.2fms)" msgstr "" #: panels/timer.py:32 #, python-format msgid "Total: %0.2fms" msgstr "Total: %0.2fms" #: panels/timer.py:38 templates/debug_toolbar/panels/history.html:9 #: templates/debug_toolbar/panels/sql_explain.html:11 #: templates/debug_toolbar/panels/sql_profile.html:12 #: templates/debug_toolbar/panels/sql_select.html:11 msgid "Time" msgstr "Hora" #: panels/timer.py:46 msgid "User CPU time" msgstr "" #: panels/timer.py:46 #, python-format msgid "%(utime)0.3f msec" msgstr "" #: panels/timer.py:47 msgid "System CPU time" msgstr "" #: panels/timer.py:47 #, python-format msgid "%(stime)0.3f msec" msgstr "" #: panels/timer.py:48 msgid "Total CPU time" msgstr "" #: panels/timer.py:48 #, python-format msgid "%(total)0.3f msec" msgstr "" #: panels/timer.py:49 msgid "Elapsed time" msgstr "Temps emprat" #: panels/timer.py:49 #, python-format msgid "%(total_time)0.3f msec" msgstr "" #: panels/timer.py:51 msgid "Context switches" msgstr "" #: panels/timer.py:52 #, python-format msgid "%(vcsw)d voluntary, %(ivcsw)d involuntary" msgstr "" #: panels/versions.py:19 msgid "Versions" msgstr "Versions" #: templates/debug_toolbar/base.html:23 msgid "Hide toolbar" msgstr "Amagar barra d'eina" #: templates/debug_toolbar/base.html:23 msgid "Hide" msgstr "Amagar" #: templates/debug_toolbar/base.html:25 templates/debug_toolbar/base.html:26 msgid "Toggle Theme" msgstr "" #: templates/debug_toolbar/base.html:35 msgid "Show toolbar" msgstr "Mostrar barra d'eines" #: templates/debug_toolbar/includes/panel_button.html:4 msgid "Disable for next and successive requests" msgstr "" #: templates/debug_toolbar/includes/panel_button.html:4 msgid "Enable for next and successive requests" msgstr "" #: templates/debug_toolbar/panels/alerts.html:4 msgid "Alerts found" msgstr "" #: templates/debug_toolbar/panels/alerts.html:11 msgid "No alerts found" msgstr "" #: templates/debug_toolbar/panels/cache.html:2 msgid "Summary" msgstr "Resum" #: templates/debug_toolbar/panels/cache.html:6 msgid "Total calls" msgstr "Total crides" #: templates/debug_toolbar/panels/cache.html:7 msgid "Total time" msgstr "Total temps" #: templates/debug_toolbar/panels/cache.html:8 msgid "Cache hits" msgstr "" #: templates/debug_toolbar/panels/cache.html:9 msgid "Cache misses" msgstr "" #: templates/debug_toolbar/panels/cache.html:21 msgid "Commands" msgstr "Comandes" #: templates/debug_toolbar/panels/cache.html:39 msgid "Calls" msgstr "Crides" #: templates/debug_toolbar/panels/cache.html:43 #: templates/debug_toolbar/panels/sql.html:36 msgid "Time (ms)" msgstr "Temps (ms)" #: templates/debug_toolbar/panels/cache.html:44 msgid "Type" msgstr "Tipus" #: templates/debug_toolbar/panels/cache.html:45 #: templates/debug_toolbar/panels/request.html:8 msgid "Arguments" msgstr "" #: templates/debug_toolbar/panels/cache.html:46 #: templates/debug_toolbar/panels/request.html:9 msgid "Keyword arguments" msgstr "" #: templates/debug_toolbar/panels/cache.html:47 msgid "Backend" msgstr "Administració" #: templates/debug_toolbar/panels/headers.html:3 msgid "Request headers" msgstr "" #: templates/debug_toolbar/panels/headers.html:8 #: templates/debug_toolbar/panels/headers.html:27 #: templates/debug_toolbar/panels/headers.html:48 msgid "Key" msgstr "Clau" #: templates/debug_toolbar/panels/headers.html:9 #: templates/debug_toolbar/panels/headers.html:28 #: templates/debug_toolbar/panels/headers.html:49 #: templates/debug_toolbar/panels/history_tr.html:23 #: templates/debug_toolbar/panels/request_variables.html:12 #: templates/debug_toolbar/panels/settings.html:6 #: templates/debug_toolbar/panels/timer.html:11 msgid "Value" msgstr "Valor" #: templates/debug_toolbar/panels/headers.html:22 msgid "Response headers" msgstr "" #: templates/debug_toolbar/panels/headers.html:41 msgid "WSGI environ" msgstr "" #: templates/debug_toolbar/panels/headers.html:43 msgid "" "Since the WSGI environ inherits the environment of the server, only a " "significant subset is shown below." msgstr "" #: templates/debug_toolbar/panels/history.html:10 msgid "Method" msgstr "" #: templates/debug_toolbar/panels/history.html:11 #: templates/debug_toolbar/panels/staticfiles.html:43 msgid "Path" msgstr "" #: templates/debug_toolbar/panels/history.html:12 msgid "Request Variables" msgstr "" #: templates/debug_toolbar/panels/history.html:13 msgid "Status" msgstr "" #: templates/debug_toolbar/panels/history.html:14 #: templates/debug_toolbar/panels/sql.html:37 msgid "Action" msgstr "Acció" #: templates/debug_toolbar/panels/history_tr.html:22 #: templates/debug_toolbar/panels/request_variables.html:11 msgid "Variable" msgstr "Variable" #: templates/debug_toolbar/panels/profiling.html:5 msgid "Call" msgstr "Cridar" #: templates/debug_toolbar/panels/profiling.html:6 msgid "CumTime" msgstr "" #: templates/debug_toolbar/panels/profiling.html:7 #: templates/debug_toolbar/panels/profiling.html:9 msgid "Per" msgstr "Per" #: templates/debug_toolbar/panels/profiling.html:8 msgid "TotTime" msgstr "TempsTotal" #: templates/debug_toolbar/panels/profiling.html:10 msgid "Count" msgstr "Recomptar" #: templates/debug_toolbar/panels/request.html:3 msgid "View information" msgstr "Veure informació" #: templates/debug_toolbar/panels/request.html:7 msgid "View function" msgstr "" #: templates/debug_toolbar/panels/request.html:10 msgid "URL name" msgstr "" #: templates/debug_toolbar/panels/request.html:24 msgid "Cookies" msgstr "" #: templates/debug_toolbar/panels/request.html:27 msgid "No cookies" msgstr "" #: templates/debug_toolbar/panels/request.html:31 msgid "Session data" msgstr "" #: templates/debug_toolbar/panels/request.html:34 msgid "No session data" msgstr "" #: templates/debug_toolbar/panels/request.html:38 msgid "GET data" msgstr "" #: templates/debug_toolbar/panels/request.html:41 msgid "No GET data" msgstr "Sense dades GET" #: templates/debug_toolbar/panels/request.html:45 msgid "POST data" msgstr "" #: templates/debug_toolbar/panels/request.html:48 msgid "No POST data" msgstr "Sense dades POST" #: templates/debug_toolbar/panels/settings.html:5 msgid "Setting" msgstr "Configuració" #: templates/debug_toolbar/panels/signals.html:5 msgid "Signal" msgstr "Senyal" #: templates/debug_toolbar/panels/signals.html:6 msgid "Receivers" msgstr "Destinataris" #: templates/debug_toolbar/panels/sql.html:6 #, python-format msgid "%(num)s query" msgid_plural "%(num)s queries" msgstr[0] "" msgstr[1] "" #: templates/debug_toolbar/panels/sql.html:8 #, python-format msgid "" "including %(count)s similar" msgstr "" #: templates/debug_toolbar/panels/sql.html:12 #, python-format msgid "" "and %(dupes)s duplicates" msgstr "" #: templates/debug_toolbar/panels/sql.html:34 msgid "Query" msgstr "Petició" #: templates/debug_toolbar/panels/sql.html:35 #: templates/debug_toolbar/panels/timer.html:36 msgid "Timeline" msgstr "Línia temporal" #: templates/debug_toolbar/panels/sql.html:52 #, python-format msgid "%(count)s similar queries." msgstr "" #: templates/debug_toolbar/panels/sql.html:58 #, python-format msgid "Duplicated %(dupes)s times." msgstr "" #: templates/debug_toolbar/panels/sql.html:95 msgid "Connection:" msgstr "Connexió:" #: templates/debug_toolbar/panels/sql.html:97 msgid "Isolation level:" msgstr "" #: templates/debug_toolbar/panels/sql.html:100 msgid "Transaction status:" msgstr "" #: templates/debug_toolbar/panels/sql.html:114 msgid "(unknown)" msgstr "(desconegut)" #: templates/debug_toolbar/panels/sql.html:123 msgid "No SQL queries were recorded during this request." msgstr "" #: templates/debug_toolbar/panels/sql_explain.html:4 msgid "SQL explained" msgstr "" #: templates/debug_toolbar/panels/sql_explain.html:9 #: templates/debug_toolbar/panels/sql_profile.html:10 #: templates/debug_toolbar/panels/sql_select.html:9 msgid "Executed SQL" msgstr "SQL Executat" #: templates/debug_toolbar/panels/sql_explain.html:13 #: templates/debug_toolbar/panels/sql_profile.html:14 #: templates/debug_toolbar/panels/sql_select.html:13 msgid "Database" msgstr "Base de dades" #: templates/debug_toolbar/panels/sql_profile.html:4 msgid "SQL profiled" msgstr "" #: templates/debug_toolbar/panels/sql_profile.html:37 msgid "Error" msgstr "Error" #: templates/debug_toolbar/panels/sql_select.html:4 msgid "SQL selected" msgstr "" #: templates/debug_toolbar/panels/sql_select.html:36 msgid "Empty set" msgstr "" #: templates/debug_toolbar/panels/staticfiles.html:3 msgid "Static file path" msgid_plural "Static file paths" msgstr[0] "" msgstr[1] "" #: templates/debug_toolbar/panels/staticfiles.html:7 #, python-format msgid "(prefix %(prefix)s)" msgstr "" #: templates/debug_toolbar/panels/staticfiles.html:11 #: templates/debug_toolbar/panels/staticfiles.html:22 #: templates/debug_toolbar/panels/staticfiles.html:34 #: templates/debug_toolbar/panels/templates.html:10 #: templates/debug_toolbar/panels/templates.html:30 #: templates/debug_toolbar/panels/templates.html:47 msgid "None" msgstr "Cap" #: templates/debug_toolbar/panels/staticfiles.html:14 msgid "Static file app" msgid_plural "Static file apps" msgstr[0] "" msgstr[1] "" #: templates/debug_toolbar/panels/staticfiles.html:25 msgid "Static file" msgid_plural "Static files" msgstr[0] "" msgstr[1] "" #: templates/debug_toolbar/panels/staticfiles.html:39 #, python-format msgid "%(payload_count)s file" msgid_plural "%(payload_count)s files" msgstr[0] "" msgstr[1] "" #: templates/debug_toolbar/panels/staticfiles.html:44 msgid "Location" msgstr "Ubicació" #: templates/debug_toolbar/panels/template_source.html:4 msgid "Template source:" msgstr "" #: templates/debug_toolbar/panels/templates.html:2 msgid "Template path" msgid_plural "Template paths" msgstr[0] "" msgstr[1] "" #: templates/debug_toolbar/panels/templates.html:13 msgid "Template" msgid_plural "Templates" msgstr[0] "" msgstr[1] "Plantilles" #: templates/debug_toolbar/panels/templates.html:22 #: templates/debug_toolbar/panels/templates.html:40 msgid "Toggle context" msgstr "" #: templates/debug_toolbar/panels/templates.html:33 msgid "Context processor" msgid_plural "Context processors" msgstr[0] "" msgstr[1] "" #: templates/debug_toolbar/panels/timer.html:2 msgid "Resource usage" msgstr "" #: templates/debug_toolbar/panels/timer.html:10 msgid "Resource" msgstr "Font" #: templates/debug_toolbar/panels/timer.html:26 msgid "Browser timing" msgstr "" #: templates/debug_toolbar/panels/timer.html:35 msgid "Timing attribute" msgstr "" #: templates/debug_toolbar/panels/timer.html:37 msgid "Milliseconds since navigation start (+length)" msgstr "" #: templates/debug_toolbar/panels/versions.html:10 msgid "Package" msgstr "" #: templates/debug_toolbar/panels/versions.html:11 msgid "Name" msgstr "Nom" #: templates/debug_toolbar/panels/versions.html:12 msgid "Version" msgstr "Versió" #: templates/debug_toolbar/redirect.html:10 msgid "Location:" msgstr "Ubicació:" #: templates/debug_toolbar/redirect.html:12 msgid "" "The Django Debug Toolbar has intercepted a redirect to the above URL for " "debug viewing purposes. You can click the above link to continue with the " "redirect as normal." msgstr "" #: views.py:16 msgid "" "Data for this panel isn't available anymore. Please reload the page and " "retry." msgstr "" python-django-debug-toolbar-5.2.0/debug_toolbar/locale/cs/000077500000000000000000000000001500406072000234715ustar00rootroot00000000000000python-django-debug-toolbar-5.2.0/debug_toolbar/locale/cs/LC_MESSAGES/000077500000000000000000000000001500406072000252565ustar00rootroot00000000000000python-django-debug-toolbar-5.2.0/debug_toolbar/locale/cs/LC_MESSAGES/django.mo000066400000000000000000000251461500406072000270650ustar00rootroot00000000000000l J   l= N . .( UW     ) $ 8 B LZa h r}"F  !' 0$<arzN (  $'.V \irz  -4 9 E1R     -=FUf j xL    h& " 5/6>Na~ &g lv   #+ 4B S`uE<T2whLu- "6; D NYa"{ Um  J   Q' y !   !   ! !!! (!6!?!N!`!r!!!!!!!*!!"":5"p" """" """ """# #$# 4#?#U# j#v###### @$ M$ Z$ g$ r$}$$$i$F%O%w%G&CY&&&&#&J&-'=',F's'-( 2( <(I(Q(c(l(~( (((( ( ((( (() )")@)Q))PnWUE'|+%9th&C0~l*q<[GxO5K6 zwZ!D>M@,)NXo#TVL^agbfi8Y;d1?]S :H{(B2 "=.v\/ys3$mIrp RQ -J`Aje47F}ck_u%(cache_calls)d call in %(time).2fms%(cache_calls)d calls in %(time).2fms%(count)s similar queries.%(num)s query%(num)s queries%(num_receivers)d receiver of %(num_signals)d signals%(num_receivers)d receivers of %(num_signals)d signals%(num_receivers)d receiver of 1 signal%(num_receivers)d receivers of 1 signal%(num_used)s file used%(num_used)s files used%(payload_count)s file%(payload_count)s files%(query_count)d query in %(sql_time).2fms%(query_count)d queries in %(sql_time).2fms%(stime)0.3f msec%(total)0.3f msec%(total_time)0.3f msec%(utime)0.3f msec%(vcsw)d voluntary, %(ivcsw)d involuntary(prefix %(prefix)s)(unknown)ActionActiveArgumentsAutocommitBackendBrowser timingCPU: %(cum)0.2fms (%(total)0.2fms)CacheCache calls from %(count)d backendCache calls from %(count)d backendsCache hitsCache missesCallCallsCommandsConnection:Context processorContext processorsContext switchesCookiesCountCumTimeData for this panel isn't available anymore. Please reload the page and retry.DatabaseDebug ToolbarDisable for next and successive requestsElapsed timeEmpty setEnable for next and successive requestsErrorExecuted SQLGET dataHeadersHideHide toolbarHistoryIdleIn errorIn transactionIntercept redirectsIsolation level:KeyKeyword argumentsLocationLocation:MethodMilliseconds since navigation start (+length)NameNo GET dataNo POST dataNo SQL queries were recorded during this request.No cookiesNo originNo session dataNonePOST dataPackagePathPerProfilingQueryRead committedRead uncommittedReceiversRepeatable readRequestRequest VariablesRequest headersResourceResource usageResponse headersSQLSQL explainedSQL profiledSQL queries from %(count)d connectionSQL queries from %(count)d connectionsSQL selectedSerializableSession dataSettingSettingsShow toolbarSignalSignalsSince the WSGI environ inherits the environment of the server, only a significant subset is shown below.Static fileStatic filesStatic file appStatic file appsStatic file pathStatic file pathsStatic filesStatic files (%(num_found)s found, %(num_used)s used)StatusSummarySystem CPU timeTemplateTemplatesTemplate pathTemplate pathsTemplate source:TemplatesTemplates (%(num_templates)s rendered)The Django Debug Toolbar has intercepted a redirect to the above URL for debug viewing purposes. You can click the above link to continue with the redirect as normal.TimeTime (ms)TimelineTiming attributeToggle contextTotTimeTotal CPU timeTotal callsTotal timeTotal: %0.2fmsTransaction status:TypeURL nameUnknownUser CPU timeValueVariableVersionVersionsView functionView informationWSGI environand %(dupes)s duplicatesincluding %(count)s similarProject-Id-Version: Django Debug Toolbar Report-Msgid-Bugs-To: PO-Revision-Date: 2010-11-30 00:00+0000 Last-Translator: kuboja, 2024 Language-Team: Czech (http://app.transifex.com/django-debug-toolbar/django-debug-toolbar/language/cs/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: cs Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3; %(cache_calls)d volání během %(time).2fms%(cache_calls)d volání během %(time).2fms%(cache_calls)d volání během %(time).2fms%(cache_calls)d volání během %(time).2fms%(count)s podobných dotazů.%(num)s dotaz%(num)s dotazy%(num)s dotazů%(num)s dotazů%(num_receivers)d příjemce %(num_signals)d signálů%(num_receivers)d příjemci %(num_signals)d signálů%(num_receivers)d příjemců %(num_signals)d signálů%(num_receivers)d příjemců %(num_signals)d signálů%(num_receivers)d příjemce 1 signálu%(num_receivers)d příjemci 1 signálu%(num_receivers)d příjemců 1 signálu%(num_receivers)d příjemců 1 signálu%(num_used)s soubor použit%(num_used)s soubory použity%(num_used)s souborů použito%(num_used)s souborů použito%(payload_count)s soubor%(payload_count)s soubory%(payload_count)s souborů%(payload_count)s souborů%(query_count)ddotaz během %(sql_time).2f ms%(query_count)d dotazy během %(sql_time).2f ms%(query_count)d dotazů během %(sql_time).2f ms%(query_count)d dotazů během %(sql_time).2f ms%(stime)0.3f msec%(total)0.3f msec%(total_time)0.3f msec%(utime)0.3f msec%(vcsw)d dobrovolně, %(ivcsw)d nedobrovolně(prefix %(prefix)s)(neznámé)<žádný pohled>AkceAktivníArgumentyAutocommitBackendČasování prohlížečeCPU: %(cum)0.2fms (%(total)0.2fms)MezipaměťVolání mezipaměti z %(count)d backenduVolání mezipaměti z %(count)d backendůVolání mezipaměti z %(count)d backendůVolání mezipaměti z %(count)d backendůNalezení v mezipamětiNebylo v mezipamětiVoláníVoláníPříkazySpojení:Procesor kontextuProcesory kontextuProcesory kontextuProcesory kontextuPřepnutí kontextuSoubory cookiePočetKumulČasData pro tento panel již nejsou k dispozici. Obnovte stránku a zkuste to znova.DatabázeDebug ToolbarVypnout pro následné požadavkyUplynulý časPrázdná sadaZapnout pro následné požadavkyChybaSpuštěné SQLData typu GETHlavičkySkrýtSkrýt lištuHistorieV klidu (idle)V chybovém stavuUvnitř transakceZachycení přesměrováníÚroveň izolace:KlíčKlíčované argumentyAdresaAdresa:MetodaMilisekund od začátku navigace (+délka)NázevŽádná data typu GETŽádná data typu POSTPro tento požadavek nebyl zaznamenán žádný dotaz SQL.Žádné soubory cookieZdroj chybíŽádná data sezeníŽádnéData typu POSTBalíčekCestaCelk. za voláníProfilováníDotazRead committedRead uncommittedPříjemciRepeatable readPožadavekProměnné požadavkuZáhlaví požadavkuProstředekVyužití zdrojůZáhlaví odezvySQLVysvětlené SQLProfilované SQLSQL dotazy z %(count)d spojeníSQL dotazy ze %(count)d spojeníSQL dotazy z %(count)d spojeníSQL dotazy z %(count)d spojeníVybrané SQLSerializableData sezeníNastaveníNastaveníZobrazit lištuSignálSignályNíže je zobrazena pouze podstatná část proměnných prostředí, protože WSGI je dědí od serveru.Statický souborStatické souboryStatické souboryStatické souboryAplikace se statickými souboryAplikace se statickými souboryAplikace se statickými souboryAplikace se statickými souboryCesta ke statickým souborůmCesty ke statickým souborůmCesty ke statickým souborůmCesty ke statickým souborůmStatické souboryStatické soubory (nalezeno: %(num_found)s, použito: %(num_used)s)StavSouhrnSystémový čas CPUŠablonaŠablonyŠablonyŠablonyCesta k šabloněCesty k šablonámCesty k šablonámCesty k šablonámZdroj šablony:ŠablonyŠablony (renderovaných: %(num_templates)s)Aplikace Django Debug Toolbar zachytila přesměrování na výše uvedenou adresu URL za účelem ladicího zobrazení. Chcete-li přesměrování dokončit, klepněte na odkaz výše.ČasČas (ms)Časová osaAtributZap./vyp. kontextCelkČasCelkový čas CPUCelkem voláníCelkový časCelkem: %0.2fmsStav transakce:TypNázev URLNeznáméUživatelský čas CPUHodnotaProměnnáVerzeVerzePohledová funkceInformace o pohledových funkcíchProstředí WSGIa %(dupes)s duplicitníchvčetně %(count)s podobnýchpython-django-debug-toolbar-5.2.0/debug_toolbar/locale/cs/LC_MESSAGES/django.po000066400000000000000000000475421500406072000270740ustar00rootroot00000000000000# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # # Translators: # Josef Kolář , 2020 # kuboja, 2024 # Vláďa Macek , 2013-2014 # Vláďa Macek , 2015,2021 msgid "" msgstr "" "Project-Id-Version: Django Debug Toolbar\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2024-08-06 07:12-0500\n" "PO-Revision-Date: 2010-11-30 00:00+0000\n" "Last-Translator: kuboja, 2024\n" "Language-Team: Czech (http://app.transifex.com/django-debug-toolbar/django-debug-toolbar/language/cs/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: cs\n" "Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;\n" #: apps.py:18 msgid "Debug Toolbar" msgstr "Debug Toolbar" #: panels/alerts.py:67 #, python-brace-format msgid "" "Form with id \"{form_id}\" contains file input, but does not have the " "attribute enctype=\"multipart/form-data\"." msgstr "" #: panels/alerts.py:70 msgid "" "Form contains file input, but does not have the attribute " "enctype=\"multipart/form-data\"." msgstr "" #: panels/alerts.py:73 #, python-brace-format msgid "" "Input element references form with id \"{form_id}\", but the form does not " "have the attribute enctype=\"multipart/form-data\"." msgstr "" #: panels/alerts.py:77 msgid "Alerts" msgstr "" #: panels/cache.py:168 msgid "Cache" msgstr "Mezipaměť" #: panels/cache.py:174 #, python-format msgid "%(cache_calls)d call in %(time).2fms" msgid_plural "%(cache_calls)d calls in %(time).2fms" msgstr[0] "%(cache_calls)d volání během %(time).2fms" msgstr[1] "%(cache_calls)d volání během %(time).2fms" msgstr[2] "%(cache_calls)d volání během %(time).2fms" msgstr[3] "%(cache_calls)d volání během %(time).2fms" #: panels/cache.py:183 #, python-format msgid "Cache calls from %(count)d backend" msgid_plural "Cache calls from %(count)d backends" msgstr[0] "Volání mezipaměti z %(count)d backendu" msgstr[1] "Volání mezipaměti z %(count)d backendů" msgstr[2] "Volání mezipaměti z %(count)d backendů" msgstr[3] "Volání mezipaměti z %(count)d backendů" #: panels/headers.py:31 msgid "Headers" msgstr "Hlavičky" #: panels/history/panel.py:19 panels/history/panel.py:20 msgid "History" msgstr "Historie" #: panels/profiling.py:140 msgid "Profiling" msgstr "Profilování" #: panels/redirects.py:17 msgid "Intercept redirects" msgstr "Zachycení přesměrování" #: panels/request.py:16 msgid "Request" msgstr "Požadavek" #: panels/request.py:38 msgid "" msgstr "<žádný pohled>" #: panels/request.py:55 msgid "" msgstr "" #: panels/settings.py:17 msgid "Settings" msgstr "Nastavení" #: panels/settings.py:20 #, python-format msgid "Settings from %s" msgstr "" #: panels/signals.py:57 #, python-format msgid "%(num_receivers)d receiver of 1 signal" msgid_plural "%(num_receivers)d receivers of 1 signal" msgstr[0] "%(num_receivers)d příjemce 1 signálu" msgstr[1] "%(num_receivers)d příjemci 1 signálu" msgstr[2] "%(num_receivers)d příjemců 1 signálu" msgstr[3] "%(num_receivers)d příjemců 1 signálu" #: panels/signals.py:62 #, python-format msgid "%(num_receivers)d receiver of %(num_signals)d signals" msgid_plural "%(num_receivers)d receivers of %(num_signals)d signals" msgstr[0] "%(num_receivers)d příjemce %(num_signals)d signálů" msgstr[1] "%(num_receivers)d příjemci %(num_signals)d signálů" msgstr[2] "%(num_receivers)d příjemců %(num_signals)d signálů" msgstr[3] "%(num_receivers)d příjemců %(num_signals)d signálů" #: panels/signals.py:67 msgid "Signals" msgstr "Signály" #: panels/sql/panel.py:30 panels/sql/panel.py:41 msgid "Read uncommitted" msgstr "Read uncommitted" #: panels/sql/panel.py:31 panels/sql/panel.py:43 msgid "Read committed" msgstr "Read committed" #: panels/sql/panel.py:32 panels/sql/panel.py:45 msgid "Repeatable read" msgstr "Repeatable read" #: panels/sql/panel.py:33 panels/sql/panel.py:47 msgid "Serializable" msgstr "Serializable" #: panels/sql/panel.py:39 msgid "Autocommit" msgstr "Autocommit" #: panels/sql/panel.py:61 panels/sql/panel.py:71 msgid "Idle" msgstr "V klidu (idle)" #: panels/sql/panel.py:62 panels/sql/panel.py:72 msgid "Active" msgstr "Aktivní" #: panels/sql/panel.py:63 panels/sql/panel.py:73 msgid "In transaction" msgstr "Uvnitř transakce" #: panels/sql/panel.py:64 panels/sql/panel.py:74 msgid "In error" msgstr "V chybovém stavu" #: panels/sql/panel.py:65 panels/sql/panel.py:75 msgid "Unknown" msgstr "Neznámé" #: panels/sql/panel.py:162 msgid "SQL" msgstr "SQL" #: panels/sql/panel.py:168 #, python-format msgid "%(query_count)d query in %(sql_time).2fms" msgid_plural "%(query_count)d queries in %(sql_time).2fms" msgstr[0] "%(query_count)ddotaz během %(sql_time).2f ms" msgstr[1] "%(query_count)d dotazy během %(sql_time).2f ms" msgstr[2] "%(query_count)d dotazů během %(sql_time).2f ms" msgstr[3] "%(query_count)d dotazů během %(sql_time).2f ms" #: panels/sql/panel.py:180 #, python-format msgid "SQL queries from %(count)d connection" msgid_plural "SQL queries from %(count)d connections" msgstr[0] "SQL dotazy z %(count)d spojení" msgstr[1] "SQL dotazy ze %(count)d spojení" msgstr[2] "SQL dotazy z %(count)d spojení" msgstr[3] "SQL dotazy z %(count)d spojení" #: panels/staticfiles.py:82 #, python-format msgid "Static files (%(num_found)s found, %(num_used)s used)" msgstr "Statické soubory (nalezeno: %(num_found)s, použito: %(num_used)s)" #: panels/staticfiles.py:103 msgid "Static files" msgstr "Statické soubory" #: panels/staticfiles.py:109 #, python-format msgid "%(num_used)s file used" msgid_plural "%(num_used)s files used" msgstr[0] "%(num_used)s soubor použit" msgstr[1] "%(num_used)s soubory použity" msgstr[2] "%(num_used)s souborů použito" msgstr[3] "%(num_used)s souborů použito" #: panels/templates/panel.py:101 msgid "Templates" msgstr "Šablony" #: panels/templates/panel.py:106 #, python-format msgid "Templates (%(num_templates)s rendered)" msgstr "Šablony (renderovaných: %(num_templates)s)" #: panels/templates/panel.py:195 msgid "No origin" msgstr "Zdroj chybí" #: panels/timer.py:27 #, python-format msgid "CPU: %(cum)0.2fms (%(total)0.2fms)" msgstr "CPU: %(cum)0.2fms (%(total)0.2fms)" #: panels/timer.py:32 #, python-format msgid "Total: %0.2fms" msgstr "Celkem: %0.2fms" #: panels/timer.py:38 templates/debug_toolbar/panels/history.html:9 #: templates/debug_toolbar/panels/sql_explain.html:11 #: templates/debug_toolbar/panels/sql_profile.html:12 #: templates/debug_toolbar/panels/sql_select.html:11 msgid "Time" msgstr "Čas" #: panels/timer.py:46 msgid "User CPU time" msgstr "Uživatelský čas CPU" #: panels/timer.py:46 #, python-format msgid "%(utime)0.3f msec" msgstr "%(utime)0.3f msec" #: panels/timer.py:47 msgid "System CPU time" msgstr "Systémový čas CPU" #: panels/timer.py:47 #, python-format msgid "%(stime)0.3f msec" msgstr "%(stime)0.3f msec" #: panels/timer.py:48 msgid "Total CPU time" msgstr "Celkový čas CPU" #: panels/timer.py:48 #, python-format msgid "%(total)0.3f msec" msgstr "%(total)0.3f msec" #: panels/timer.py:49 msgid "Elapsed time" msgstr "Uplynulý čas" #: panels/timer.py:49 #, python-format msgid "%(total_time)0.3f msec" msgstr "%(total_time)0.3f msec" #: panels/timer.py:51 msgid "Context switches" msgstr "Přepnutí kontextu" #: panels/timer.py:52 #, python-format msgid "%(vcsw)d voluntary, %(ivcsw)d involuntary" msgstr "%(vcsw)d dobrovolně, %(ivcsw)d nedobrovolně" #: panels/versions.py:19 msgid "Versions" msgstr "Verze" #: templates/debug_toolbar/base.html:23 msgid "Hide toolbar" msgstr "Skrýt lištu" #: templates/debug_toolbar/base.html:23 msgid "Hide" msgstr "Skrýt" #: templates/debug_toolbar/base.html:25 templates/debug_toolbar/base.html:26 msgid "Toggle Theme" msgstr "" #: templates/debug_toolbar/base.html:35 msgid "Show toolbar" msgstr "Zobrazit lištu" #: templates/debug_toolbar/includes/panel_button.html:4 msgid "Disable for next and successive requests" msgstr "Vypnout pro následné požadavky" #: templates/debug_toolbar/includes/panel_button.html:4 msgid "Enable for next and successive requests" msgstr "Zapnout pro následné požadavky" #: templates/debug_toolbar/panels/alerts.html:4 msgid "Alerts found" msgstr "" #: templates/debug_toolbar/panels/alerts.html:11 msgid "No alerts found" msgstr "" #: templates/debug_toolbar/panels/cache.html:2 msgid "Summary" msgstr "Souhrn" #: templates/debug_toolbar/panels/cache.html:6 msgid "Total calls" msgstr "Celkem volání" #: templates/debug_toolbar/panels/cache.html:7 msgid "Total time" msgstr "Celkový čas" #: templates/debug_toolbar/panels/cache.html:8 msgid "Cache hits" msgstr "Nalezení v mezipaměti" #: templates/debug_toolbar/panels/cache.html:9 msgid "Cache misses" msgstr "Nebylo v mezipaměti" #: templates/debug_toolbar/panels/cache.html:21 msgid "Commands" msgstr "Příkazy" #: templates/debug_toolbar/panels/cache.html:39 msgid "Calls" msgstr "Volání" #: templates/debug_toolbar/panels/cache.html:43 #: templates/debug_toolbar/panels/sql.html:36 msgid "Time (ms)" msgstr "Čas (ms)" #: templates/debug_toolbar/panels/cache.html:44 msgid "Type" msgstr "Typ" #: templates/debug_toolbar/panels/cache.html:45 #: templates/debug_toolbar/panels/request.html:8 msgid "Arguments" msgstr "Argumenty" #: templates/debug_toolbar/panels/cache.html:46 #: templates/debug_toolbar/panels/request.html:9 msgid "Keyword arguments" msgstr "Klíčované argumenty" #: templates/debug_toolbar/panels/cache.html:47 msgid "Backend" msgstr "Backend" #: templates/debug_toolbar/panels/headers.html:3 msgid "Request headers" msgstr "Záhlaví požadavku" #: templates/debug_toolbar/panels/headers.html:8 #: templates/debug_toolbar/panels/headers.html:27 #: templates/debug_toolbar/panels/headers.html:48 msgid "Key" msgstr "Klíč" #: templates/debug_toolbar/panels/headers.html:9 #: templates/debug_toolbar/panels/headers.html:28 #: templates/debug_toolbar/panels/headers.html:49 #: templates/debug_toolbar/panels/history_tr.html:23 #: templates/debug_toolbar/panels/request_variables.html:12 #: templates/debug_toolbar/panels/settings.html:6 #: templates/debug_toolbar/panels/timer.html:11 msgid "Value" msgstr "Hodnota" #: templates/debug_toolbar/panels/headers.html:22 msgid "Response headers" msgstr "Záhlaví odezvy" #: templates/debug_toolbar/panels/headers.html:41 msgid "WSGI environ" msgstr "Prostředí WSGI" #: templates/debug_toolbar/panels/headers.html:43 msgid "" "Since the WSGI environ inherits the environment of the server, only a " "significant subset is shown below." msgstr "Níže je zobrazena pouze podstatná část proměnných prostředí, protože WSGI je dědí od serveru." #: templates/debug_toolbar/panels/history.html:10 msgid "Method" msgstr "Metoda" #: templates/debug_toolbar/panels/history.html:11 #: templates/debug_toolbar/panels/staticfiles.html:43 msgid "Path" msgstr "Cesta" #: templates/debug_toolbar/panels/history.html:12 msgid "Request Variables" msgstr "Proměnné požadavku" #: templates/debug_toolbar/panels/history.html:13 msgid "Status" msgstr "Stav" #: templates/debug_toolbar/panels/history.html:14 #: templates/debug_toolbar/panels/sql.html:37 msgid "Action" msgstr "Akce" #: templates/debug_toolbar/panels/history_tr.html:22 #: templates/debug_toolbar/panels/request_variables.html:11 msgid "Variable" msgstr "Proměnná" #: templates/debug_toolbar/panels/profiling.html:5 msgid "Call" msgstr "Volání" #: templates/debug_toolbar/panels/profiling.html:6 msgid "CumTime" msgstr "KumulČas" #: templates/debug_toolbar/panels/profiling.html:7 #: templates/debug_toolbar/panels/profiling.html:9 msgid "Per" msgstr "Celk. za volání" #: templates/debug_toolbar/panels/profiling.html:8 msgid "TotTime" msgstr "CelkČas" #: templates/debug_toolbar/panels/profiling.html:10 msgid "Count" msgstr "Počet" #: templates/debug_toolbar/panels/request.html:3 msgid "View information" msgstr "Informace o pohledových funkcích" #: templates/debug_toolbar/panels/request.html:7 msgid "View function" msgstr "Pohledová funkce" #: templates/debug_toolbar/panels/request.html:10 msgid "URL name" msgstr "Název URL" #: templates/debug_toolbar/panels/request.html:24 msgid "Cookies" msgstr "Soubory cookie" #: templates/debug_toolbar/panels/request.html:27 msgid "No cookies" msgstr "Žádné soubory cookie" #: templates/debug_toolbar/panels/request.html:31 msgid "Session data" msgstr "Data sezení" #: templates/debug_toolbar/panels/request.html:34 msgid "No session data" msgstr "Žádná data sezení" #: templates/debug_toolbar/panels/request.html:38 msgid "GET data" msgstr "Data typu GET" #: templates/debug_toolbar/panels/request.html:41 msgid "No GET data" msgstr "Žádná data typu GET" #: templates/debug_toolbar/panels/request.html:45 msgid "POST data" msgstr "Data typu POST" #: templates/debug_toolbar/panels/request.html:48 msgid "No POST data" msgstr "Žádná data typu POST" #: templates/debug_toolbar/panels/settings.html:5 msgid "Setting" msgstr "Nastavení" #: templates/debug_toolbar/panels/signals.html:5 msgid "Signal" msgstr "Signál" #: templates/debug_toolbar/panels/signals.html:6 msgid "Receivers" msgstr "Příjemci" #: templates/debug_toolbar/panels/sql.html:6 #, python-format msgid "%(num)s query" msgid_plural "%(num)s queries" msgstr[0] "%(num)s dotaz" msgstr[1] "%(num)s dotazy" msgstr[2] "%(num)s dotazů" msgstr[3] "%(num)s dotazů" #: templates/debug_toolbar/panels/sql.html:8 #, python-format msgid "" "including %(count)s similar" msgstr "včetně %(count)s podobných" #: templates/debug_toolbar/panels/sql.html:12 #, python-format msgid "" "and %(dupes)s duplicates" msgstr "a %(dupes)s duplicitních" #: templates/debug_toolbar/panels/sql.html:34 msgid "Query" msgstr "Dotaz" #: templates/debug_toolbar/panels/sql.html:35 #: templates/debug_toolbar/panels/timer.html:36 msgid "Timeline" msgstr "Časová osa" #: templates/debug_toolbar/panels/sql.html:52 #, python-format msgid "%(count)s similar queries." msgstr "%(count)s podobných dotazů." #: templates/debug_toolbar/panels/sql.html:58 #, python-format msgid "Duplicated %(dupes)s times." msgstr "" #: templates/debug_toolbar/panels/sql.html:95 msgid "Connection:" msgstr "Spojení:" #: templates/debug_toolbar/panels/sql.html:97 msgid "Isolation level:" msgstr "Úroveň izolace:" #: templates/debug_toolbar/panels/sql.html:100 msgid "Transaction status:" msgstr "Stav transakce:" #: templates/debug_toolbar/panels/sql.html:114 msgid "(unknown)" msgstr "(neznámé)" #: templates/debug_toolbar/panels/sql.html:123 msgid "No SQL queries were recorded during this request." msgstr "Pro tento požadavek nebyl zaznamenán žádný dotaz SQL." #: templates/debug_toolbar/panels/sql_explain.html:4 msgid "SQL explained" msgstr "Vysvětlené SQL" #: templates/debug_toolbar/panels/sql_explain.html:9 #: templates/debug_toolbar/panels/sql_profile.html:10 #: templates/debug_toolbar/panels/sql_select.html:9 msgid "Executed SQL" msgstr "Spuštěné SQL" #: templates/debug_toolbar/panels/sql_explain.html:13 #: templates/debug_toolbar/panels/sql_profile.html:14 #: templates/debug_toolbar/panels/sql_select.html:13 msgid "Database" msgstr "Databáze" #: templates/debug_toolbar/panels/sql_profile.html:4 msgid "SQL profiled" msgstr "Profilované SQL" #: templates/debug_toolbar/panels/sql_profile.html:37 msgid "Error" msgstr "Chyba" #: templates/debug_toolbar/panels/sql_select.html:4 msgid "SQL selected" msgstr "Vybrané SQL" #: templates/debug_toolbar/panels/sql_select.html:36 msgid "Empty set" msgstr "Prázdná sada" #: templates/debug_toolbar/panels/staticfiles.html:3 msgid "Static file path" msgid_plural "Static file paths" msgstr[0] "Cesta ke statickým souborům" msgstr[1] "Cesty ke statickým souborům" msgstr[2] "Cesty ke statickým souborům" msgstr[3] "Cesty ke statickým souborům" #: templates/debug_toolbar/panels/staticfiles.html:7 #, python-format msgid "(prefix %(prefix)s)" msgstr "(prefix %(prefix)s)" #: templates/debug_toolbar/panels/staticfiles.html:11 #: templates/debug_toolbar/panels/staticfiles.html:22 #: templates/debug_toolbar/panels/staticfiles.html:34 #: templates/debug_toolbar/panels/templates.html:10 #: templates/debug_toolbar/panels/templates.html:30 #: templates/debug_toolbar/panels/templates.html:47 msgid "None" msgstr "Žádné" #: templates/debug_toolbar/panels/staticfiles.html:14 msgid "Static file app" msgid_plural "Static file apps" msgstr[0] "Aplikace se statickými soubory" msgstr[1] "Aplikace se statickými soubory" msgstr[2] "Aplikace se statickými soubory" msgstr[3] "Aplikace se statickými soubory" #: templates/debug_toolbar/panels/staticfiles.html:25 msgid "Static file" msgid_plural "Static files" msgstr[0] "Statický soubor" msgstr[1] "Statické soubory" msgstr[2] "Statické soubory" msgstr[3] "Statické soubory" #: templates/debug_toolbar/panels/staticfiles.html:39 #, python-format msgid "%(payload_count)s file" msgid_plural "%(payload_count)s files" msgstr[0] "%(payload_count)s soubor" msgstr[1] "%(payload_count)s soubory" msgstr[2] "%(payload_count)s souborů" msgstr[3] "%(payload_count)s souborů" #: templates/debug_toolbar/panels/staticfiles.html:44 msgid "Location" msgstr "Adresa" #: templates/debug_toolbar/panels/template_source.html:4 msgid "Template source:" msgstr "Zdroj šablony:" #: templates/debug_toolbar/panels/templates.html:2 msgid "Template path" msgid_plural "Template paths" msgstr[0] "Cesta k šabloně" msgstr[1] "Cesty k šablonám" msgstr[2] "Cesty k šablonám" msgstr[3] "Cesty k šablonám" #: templates/debug_toolbar/panels/templates.html:13 msgid "Template" msgid_plural "Templates" msgstr[0] "Šablona" msgstr[1] "Šablony" msgstr[2] "Šablony" msgstr[3] "Šablony" #: templates/debug_toolbar/panels/templates.html:22 #: templates/debug_toolbar/panels/templates.html:40 msgid "Toggle context" msgstr "Zap./vyp. kontext" #: templates/debug_toolbar/panels/templates.html:33 msgid "Context processor" msgid_plural "Context processors" msgstr[0] "Procesor kontextu" msgstr[1] "Procesory kontextu" msgstr[2] "Procesory kontextu" msgstr[3] "Procesory kontextu" #: templates/debug_toolbar/panels/timer.html:2 msgid "Resource usage" msgstr "Využití zdrojů" #: templates/debug_toolbar/panels/timer.html:10 msgid "Resource" msgstr "Prostředek" #: templates/debug_toolbar/panels/timer.html:26 msgid "Browser timing" msgstr "Časování prohlížeče" #: templates/debug_toolbar/panels/timer.html:35 msgid "Timing attribute" msgstr "Atribut" #: templates/debug_toolbar/panels/timer.html:37 msgid "Milliseconds since navigation start (+length)" msgstr "Milisekund od začátku navigace (+délka)" #: templates/debug_toolbar/panels/versions.html:10 msgid "Package" msgstr "Balíček" #: templates/debug_toolbar/panels/versions.html:11 msgid "Name" msgstr "Název" #: templates/debug_toolbar/panels/versions.html:12 msgid "Version" msgstr "Verze" #: templates/debug_toolbar/redirect.html:10 msgid "Location:" msgstr "Adresa:" #: templates/debug_toolbar/redirect.html:12 msgid "" "The Django Debug Toolbar has intercepted a redirect to the above URL for " "debug viewing purposes. You can click the above link to continue with the " "redirect as normal." msgstr "Aplikace Django Debug Toolbar zachytila přesměrování na výše uvedenou adresu URL za účelem ladicího zobrazení. Chcete-li přesměrování dokončit, klepněte na odkaz výše." #: views.py:16 msgid "" "Data for this panel isn't available anymore. Please reload the page and " "retry." msgstr "Data pro tento panel již nejsou k dispozici. Obnovte stránku a zkuste to znova." python-django-debug-toolbar-5.2.0/debug_toolbar/locale/de/000077500000000000000000000000001500406072000234545ustar00rootroot00000000000000python-django-debug-toolbar-5.2.0/debug_toolbar/locale/de/LC_MESSAGES/000077500000000000000000000000001500406072000252415ustar00rootroot00000000000000python-django-debug-toolbar-5.2.0/debug_toolbar/locale/de/LC_MESSAGES/django.mo000066400000000000000000000231571500406072000270500ustar00rootroot00000000000000| J $ ? l] N . .H Uw    )D X b lz  "F $ /<AG P$\N (7 S `'j  ( 1;-Bp u 1    $ 5?OWiy  L   (5=F Wdkhs " 95F| &    )=BK Sagpx  <PJ s[N71Zo+    ' - 7B J"VyH % 2AIPVW  ; .99sz    37=,ErwB     # ' 1 9 H Y d t |      M +/x]0{u4$}oJtr SR .KaBlg58Gem`w%(cache_calls)d call in %(time).2fms%(cache_calls)d calls in %(time).2fms%(count)s similar queries.%(num)s query%(num)s queries%(num_receivers)d receiver of %(num_signals)d signals%(num_receivers)d receivers of %(num_signals)d signals%(num_receivers)d receiver of 1 signal%(num_receivers)d receivers of 1 signal%(num_used)s file used%(num_used)s files used%(payload_count)s file%(payload_count)s files%(query_count)d query in %(sql_time).2fms%(query_count)d queries in %(sql_time).2fms%(stime)0.3f msec%(total)0.3f msec%(total_time)0.3f msec%(utime)0.3f msec%(vcsw)d voluntary, %(ivcsw)d involuntary(prefix %(prefix)s)(unknown)ActionActiveArgumentsAutocommitBackendBrowser timingCPU: %(cum)0.2fms (%(total)0.2fms)CacheCache calls from %(count)d backendCache calls from %(count)d backendsCache hitsCache missesCallCallsCommandsConnection:Context processorContext processorsContext switchesCookiesCountCumTimeData for this panel isn't available anymore. Please reload the page and retry.DatabaseDebug ToolbarDisable for next and successive requestsDuplicated %(dupes)s times.Elapsed timeEmpty setEnable for next and successive requestsErrorExecuted SQLGET dataHeadersHideHide toolbarHistoryIdleIn errorIn transactionIntercept redirectsIsolation level:KeyKeyword argumentsLocationLocation:MethodMilliseconds since navigation start (+length)NameNo GET dataNo POST dataNo SQL queries were recorded during this request.No cookiesNo originNo session dataNonePOST dataPackagePathPerProfilingQueryRead committedRead uncommittedReceiversRepeatable readRequestRequest VariablesRequest headersResourceResource usageResponse headersSQLSQL explainedSQL profiledSQL queries from %(count)d connectionSQL queries from %(count)d connectionsSQL selectedSerializableSession dataSettingSettingsSettings from %sShow toolbarSignalSignalsSince the WSGI environ inherits the environment of the server, only a significant subset is shown below.Static fileStatic filesStatic file appStatic file appsStatic file pathStatic file pathsStatic filesStatic files (%(num_found)s found, %(num_used)s used)StatusSummarySystem CPU timeTemplateTemplatesTemplate pathTemplate pathsTemplate source:TemplatesTemplates (%(num_templates)s rendered)The Django Debug Toolbar has intercepted a redirect to the above URL for debug viewing purposes. You can click the above link to continue with the redirect as normal.TimeTime (ms)TimelineTiming attributeToggle contextTotTimeTotal CPU timeTotal callsTotal timeTotal: %0.2fmsTransaction status:TypeURL nameUnknownUser CPU timeValueVariableVersionVersionsView functionView informationWSGI environand %(dupes)s duplicatesincluding %(count)s similarProject-Id-Version: Django Debug Toolbar Report-Msgid-Bugs-To: PO-Revision-Date: 2010-11-30 00:00+0000 Last-Translator: Tim Schilling, 2021 Language-Team: German (http://app.transifex.com/django-debug-toolbar/django-debug-toolbar/language/de/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: de Plural-Forms: nplurals=2; plural=(n != 1); %(cache_calls)d Abfrage in %(time).2fms%(cache_calls)d Abfragen in %(time).2fms%(count)s ähnliche Abfragen.%(num)s Abfrage%(num)s Abfragen%(num_receivers)d Empfänger von %(num_signals)d Signalen%(num_receivers)d Empfänger von %(num_signals)d Signalen%(num_receivers)d Empfänger von einem Signal%(num_receivers)d Empfänger von einem Signal%(num_used)s Datei benutzt%(num_used)s Dateien benutzt%(payload_count)s Datei%(payload_count)s Dateien%(query_count)d Abfrage in %(sql_time).2f ms%(query_count)d Abfragen in %(sql_time).2f ms%(stime)0.3f ms%(total)0.3f ms%(total_time)0.3f ms%(utime)0.3f ms%(vcsw)d freiwillig, %(ivcsw)d unfreiwillig(Präfix %(prefix)s)(unbekannt)AktionAktivArgumenteAutocommitBackendBrowserzeitCPU: %(cum)0.2fms (%(total)0.2fms)CacheCache-Aufrufe von %(count)d BackendCache-Aufrufe von %(count)d BackendsCache erfolgreichCache verfehltAufrufAufrufeBefehleVerbindung:Context-ProzessorContext-ProzessorenKontextwechselCookiesAnzahlGesamtDie Daten für dieses Panel sind nicht mehr verfügbar. Bitte laden Sie die Seite neu.DatenbankDebug ToolbarFür nächste und die darauffolgenden Anfragen deaktivieren%(dupes)s-mal dupliziert.Verstrichene ZeitLeeres SetFür nächste und die darauffolgenden Anfragen aktivierenFehlerAusgeführtes SQLGET-DatenHeaderAusblendenToolbar ausblendenGeschichteWartetFehlerIn einer TransaktionUmleitungen abfangenIsolationsebene:SchlüsselSchlüsselwort-ArgumenteOrtZiel:MethodeMillisekunden seit Seitenaufruf (plus Dauer)NameKeine GET-DatenKeine POST-DatenEs wurde keine SQL-Abfrage während dieses Vorgangs aufgezeichnet.Keine CookiesKein UrsprungKeine Sitzungsdaten-POST-DatenPaketPfadPerProfilingAbfrageRead committedRead uncommittedEmpfängerRepeatable readAnfrageAnfrage-VariablenAnfrage-HeaderRessourceRessourcenverwendungAntwort-HeaderSQLSQL erklärtSQL durchleuchtetSQL-Abfragen von %(count)d VerbindungSQL-Abfragen von %(count)d VerbindungenSQL ausgewähltSerializableSitzungsdatenEinstellungEinstellungenEinstellungen von %sToolbar einblendenSignalSignaleDa sich die WSGI-Umgebung von der Umgebung des Servers ableitet, wird nur eine notwendige Teilmenge dargestellt.Statische DateiStatische DateienApp mit statischen DateienApps mit statischen DateienPfad mit statischen DateienPfade mit statischen DateienStatische DateienStatische Dateien (%(num_found)s gefunden, %(num_used)s benutzt)StatusZusammenfassungCPU-Zeit SystemTemplateTemplatesTemplate-PfadTemplate-PfadeTemplate-Quelle:TemplatesTemplates (%(num_templates)s gerendert)Die Django Debug Toolbar hat eine Weiterleitung an die obenstehende URL zur weiteren Überprüfung abgefangen. Klicken Sie den Link, um wie gewohnt weitergeleitet zu werden.ZeitZeit (ms)VerlaufTiming-AttributContext zeigenTotalCPU-Zeit gesamtAufrufe gesamtZeit gesamtGesamt: %0.2fmsTransaktionsstatus:TypURL-NameUnbekanntCPU-Zeit BenutzerWertVariableVersionVersionenView-FunktionView-InformationenWSGI-Umgebungund %(dupes)s dupliziertinklusive %(count)s ähnlichpython-django-debug-toolbar-5.2.0/debug_toolbar/locale/de/LC_MESSAGES/django.po000066400000000000000000000446261500406072000270570ustar00rootroot00000000000000# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # # Translators: # Jannis Leidel , 2012-2014,2021 # Matthias Kestenholz , 2021 # Tim Schilling, 2021 msgid "" msgstr "" "Project-Id-Version: Django Debug Toolbar\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2024-08-06 07:12-0500\n" "PO-Revision-Date: 2010-11-30 00:00+0000\n" "Last-Translator: Tim Schilling, 2021\n" "Language-Team: German (http://app.transifex.com/django-debug-toolbar/django-debug-toolbar/language/de/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: de\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: apps.py:18 msgid "Debug Toolbar" msgstr "Debug Toolbar" #: panels/alerts.py:67 #, python-brace-format msgid "" "Form with id \"{form_id}\" contains file input, but does not have the " "attribute enctype=\"multipart/form-data\"." msgstr "" #: panels/alerts.py:70 msgid "" "Form contains file input, but does not have the attribute " "enctype=\"multipart/form-data\"." msgstr "" #: panels/alerts.py:73 #, python-brace-format msgid "" "Input element references form with id \"{form_id}\", but the form does not " "have the attribute enctype=\"multipart/form-data\"." msgstr "" #: panels/alerts.py:77 msgid "Alerts" msgstr "" #: panels/cache.py:168 msgid "Cache" msgstr "Cache" #: panels/cache.py:174 #, python-format msgid "%(cache_calls)d call in %(time).2fms" msgid_plural "%(cache_calls)d calls in %(time).2fms" msgstr[0] "%(cache_calls)d Abfrage in %(time).2fms" msgstr[1] "%(cache_calls)d Abfragen in %(time).2fms" #: panels/cache.py:183 #, python-format msgid "Cache calls from %(count)d backend" msgid_plural "Cache calls from %(count)d backends" msgstr[0] "Cache-Aufrufe von %(count)d Backend" msgstr[1] "Cache-Aufrufe von %(count)d Backends" #: panels/headers.py:31 msgid "Headers" msgstr "Header" #: panels/history/panel.py:19 panels/history/panel.py:20 msgid "History" msgstr "Geschichte" #: panels/profiling.py:140 msgid "Profiling" msgstr "Profiling" #: panels/redirects.py:17 msgid "Intercept redirects" msgstr "Umleitungen abfangen" #: panels/request.py:16 msgid "Request" msgstr "Anfrage" #: panels/request.py:38 msgid "" msgstr "" #: panels/request.py:55 msgid "" msgstr "" #: panels/settings.py:17 msgid "Settings" msgstr "Einstellungen" #: panels/settings.py:20 #, python-format msgid "Settings from %s" msgstr "Einstellungen von %s" #: panels/signals.py:57 #, python-format msgid "%(num_receivers)d receiver of 1 signal" msgid_plural "%(num_receivers)d receivers of 1 signal" msgstr[0] "%(num_receivers)d Empfänger von einem Signal" msgstr[1] "%(num_receivers)d Empfänger von einem Signal" #: panels/signals.py:62 #, python-format msgid "%(num_receivers)d receiver of %(num_signals)d signals" msgid_plural "%(num_receivers)d receivers of %(num_signals)d signals" msgstr[0] "%(num_receivers)d Empfänger von %(num_signals)d Signalen" msgstr[1] "%(num_receivers)d Empfänger von %(num_signals)d Signalen" #: panels/signals.py:67 msgid "Signals" msgstr "Signale" #: panels/sql/panel.py:30 panels/sql/panel.py:41 msgid "Read uncommitted" msgstr "Read uncommitted" #: panels/sql/panel.py:31 panels/sql/panel.py:43 msgid "Read committed" msgstr "Read committed" #: panels/sql/panel.py:32 panels/sql/panel.py:45 msgid "Repeatable read" msgstr "Repeatable read" #: panels/sql/panel.py:33 panels/sql/panel.py:47 msgid "Serializable" msgstr "Serializable" #: panels/sql/panel.py:39 msgid "Autocommit" msgstr "Autocommit" #: panels/sql/panel.py:61 panels/sql/panel.py:71 msgid "Idle" msgstr "Wartet" #: panels/sql/panel.py:62 panels/sql/panel.py:72 msgid "Active" msgstr "Aktiv" #: panels/sql/panel.py:63 panels/sql/panel.py:73 msgid "In transaction" msgstr "In einer Transaktion" #: panels/sql/panel.py:64 panels/sql/panel.py:74 msgid "In error" msgstr "Fehler" #: panels/sql/panel.py:65 panels/sql/panel.py:75 msgid "Unknown" msgstr "Unbekannt" #: panels/sql/panel.py:162 msgid "SQL" msgstr "SQL" #: panels/sql/panel.py:168 #, python-format msgid "%(query_count)d query in %(sql_time).2fms" msgid_plural "%(query_count)d queries in %(sql_time).2fms" msgstr[0] "%(query_count)d Abfrage in %(sql_time).2f ms" msgstr[1] "%(query_count)d Abfragen in %(sql_time).2f ms" #: panels/sql/panel.py:180 #, python-format msgid "SQL queries from %(count)d connection" msgid_plural "SQL queries from %(count)d connections" msgstr[0] "SQL-Abfragen von %(count)d Verbindung" msgstr[1] "SQL-Abfragen von %(count)d Verbindungen" #: panels/staticfiles.py:82 #, python-format msgid "Static files (%(num_found)s found, %(num_used)s used)" msgstr "Statische Dateien (%(num_found)s gefunden, %(num_used)s benutzt)" #: panels/staticfiles.py:103 msgid "Static files" msgstr "Statische Dateien" #: panels/staticfiles.py:109 #, python-format msgid "%(num_used)s file used" msgid_plural "%(num_used)s files used" msgstr[0] "%(num_used)s Datei benutzt" msgstr[1] "%(num_used)s Dateien benutzt" #: panels/templates/panel.py:101 msgid "Templates" msgstr "Templates" #: panels/templates/panel.py:106 #, python-format msgid "Templates (%(num_templates)s rendered)" msgstr "Templates (%(num_templates)s gerendert)" #: panels/templates/panel.py:195 msgid "No origin" msgstr "Kein Ursprung" #: panels/timer.py:27 #, python-format msgid "CPU: %(cum)0.2fms (%(total)0.2fms)" msgstr "CPU: %(cum)0.2fms (%(total)0.2fms)" #: panels/timer.py:32 #, python-format msgid "Total: %0.2fms" msgstr "Gesamt: %0.2fms" #: panels/timer.py:38 templates/debug_toolbar/panels/history.html:9 #: templates/debug_toolbar/panels/sql_explain.html:11 #: templates/debug_toolbar/panels/sql_profile.html:12 #: templates/debug_toolbar/panels/sql_select.html:11 msgid "Time" msgstr "Zeit" #: panels/timer.py:46 msgid "User CPU time" msgstr "CPU-Zeit Benutzer" #: panels/timer.py:46 #, python-format msgid "%(utime)0.3f msec" msgstr "%(utime)0.3f ms" #: panels/timer.py:47 msgid "System CPU time" msgstr "CPU-Zeit System" #: panels/timer.py:47 #, python-format msgid "%(stime)0.3f msec" msgstr "%(stime)0.3f ms" #: panels/timer.py:48 msgid "Total CPU time" msgstr "CPU-Zeit gesamt" #: panels/timer.py:48 #, python-format msgid "%(total)0.3f msec" msgstr "%(total)0.3f ms" #: panels/timer.py:49 msgid "Elapsed time" msgstr "Verstrichene Zeit" #: panels/timer.py:49 #, python-format msgid "%(total_time)0.3f msec" msgstr "%(total_time)0.3f ms" #: panels/timer.py:51 msgid "Context switches" msgstr "Kontextwechsel" #: panels/timer.py:52 #, python-format msgid "%(vcsw)d voluntary, %(ivcsw)d involuntary" msgstr "%(vcsw)d freiwillig, %(ivcsw)d unfreiwillig" #: panels/versions.py:19 msgid "Versions" msgstr "Versionen" #: templates/debug_toolbar/base.html:23 msgid "Hide toolbar" msgstr "Toolbar ausblenden" #: templates/debug_toolbar/base.html:23 msgid "Hide" msgstr "Ausblenden" #: templates/debug_toolbar/base.html:25 templates/debug_toolbar/base.html:26 msgid "Toggle Theme" msgstr "" #: templates/debug_toolbar/base.html:35 msgid "Show toolbar" msgstr "Toolbar einblenden" #: templates/debug_toolbar/includes/panel_button.html:4 msgid "Disable for next and successive requests" msgstr "Für nächste und die darauffolgenden Anfragen deaktivieren" #: templates/debug_toolbar/includes/panel_button.html:4 msgid "Enable for next and successive requests" msgstr "Für nächste und die darauffolgenden Anfragen aktivieren" #: templates/debug_toolbar/panels/alerts.html:4 msgid "Alerts found" msgstr "" #: templates/debug_toolbar/panels/alerts.html:11 msgid "No alerts found" msgstr "" #: templates/debug_toolbar/panels/cache.html:2 msgid "Summary" msgstr "Zusammenfassung" #: templates/debug_toolbar/panels/cache.html:6 msgid "Total calls" msgstr "Aufrufe gesamt" #: templates/debug_toolbar/panels/cache.html:7 msgid "Total time" msgstr "Zeit gesamt" #: templates/debug_toolbar/panels/cache.html:8 msgid "Cache hits" msgstr "Cache erfolgreich" #: templates/debug_toolbar/panels/cache.html:9 msgid "Cache misses" msgstr "Cache verfehlt" #: templates/debug_toolbar/panels/cache.html:21 msgid "Commands" msgstr "Befehle" #: templates/debug_toolbar/panels/cache.html:39 msgid "Calls" msgstr "Aufrufe" #: templates/debug_toolbar/panels/cache.html:43 #: templates/debug_toolbar/panels/sql.html:36 msgid "Time (ms)" msgstr "Zeit (ms)" #: templates/debug_toolbar/panels/cache.html:44 msgid "Type" msgstr "Typ" #: templates/debug_toolbar/panels/cache.html:45 #: templates/debug_toolbar/panels/request.html:8 msgid "Arguments" msgstr "Argumente" #: templates/debug_toolbar/panels/cache.html:46 #: templates/debug_toolbar/panels/request.html:9 msgid "Keyword arguments" msgstr "Schlüsselwort-Argumente" #: templates/debug_toolbar/panels/cache.html:47 msgid "Backend" msgstr "Backend" #: templates/debug_toolbar/panels/headers.html:3 msgid "Request headers" msgstr "Anfrage-Header" #: templates/debug_toolbar/panels/headers.html:8 #: templates/debug_toolbar/panels/headers.html:27 #: templates/debug_toolbar/panels/headers.html:48 msgid "Key" msgstr "Schlüssel" #: templates/debug_toolbar/panels/headers.html:9 #: templates/debug_toolbar/panels/headers.html:28 #: templates/debug_toolbar/panels/headers.html:49 #: templates/debug_toolbar/panels/history_tr.html:23 #: templates/debug_toolbar/panels/request_variables.html:12 #: templates/debug_toolbar/panels/settings.html:6 #: templates/debug_toolbar/panels/timer.html:11 msgid "Value" msgstr "Wert" #: templates/debug_toolbar/panels/headers.html:22 msgid "Response headers" msgstr "Antwort-Header" #: templates/debug_toolbar/panels/headers.html:41 msgid "WSGI environ" msgstr "WSGI-Umgebung" #: templates/debug_toolbar/panels/headers.html:43 msgid "" "Since the WSGI environ inherits the environment of the server, only a " "significant subset is shown below." msgstr "Da sich die WSGI-Umgebung von der Umgebung des Servers ableitet, wird nur eine notwendige Teilmenge dargestellt." #: templates/debug_toolbar/panels/history.html:10 msgid "Method" msgstr "Methode" #: templates/debug_toolbar/panels/history.html:11 #: templates/debug_toolbar/panels/staticfiles.html:43 msgid "Path" msgstr "Pfad" #: templates/debug_toolbar/panels/history.html:12 msgid "Request Variables" msgstr "Anfrage-Variablen" #: templates/debug_toolbar/panels/history.html:13 msgid "Status" msgstr "Status" #: templates/debug_toolbar/panels/history.html:14 #: templates/debug_toolbar/panels/sql.html:37 msgid "Action" msgstr "Aktion" #: templates/debug_toolbar/panels/history_tr.html:22 #: templates/debug_toolbar/panels/request_variables.html:11 msgid "Variable" msgstr "Variable" #: templates/debug_toolbar/panels/profiling.html:5 msgid "Call" msgstr "Aufruf" #: templates/debug_toolbar/panels/profiling.html:6 msgid "CumTime" msgstr "Gesamt" #: templates/debug_toolbar/panels/profiling.html:7 #: templates/debug_toolbar/panels/profiling.html:9 msgid "Per" msgstr "Per" #: templates/debug_toolbar/panels/profiling.html:8 msgid "TotTime" msgstr "Total" #: templates/debug_toolbar/panels/profiling.html:10 msgid "Count" msgstr "Anzahl" #: templates/debug_toolbar/panels/request.html:3 msgid "View information" msgstr "View-Informationen" #: templates/debug_toolbar/panels/request.html:7 msgid "View function" msgstr "View-Funktion" #: templates/debug_toolbar/panels/request.html:10 msgid "URL name" msgstr "URL-Name" #: templates/debug_toolbar/panels/request.html:24 msgid "Cookies" msgstr "Cookies" #: templates/debug_toolbar/panels/request.html:27 msgid "No cookies" msgstr "Keine Cookies" #: templates/debug_toolbar/panels/request.html:31 msgid "Session data" msgstr "Sitzungsdaten" #: templates/debug_toolbar/panels/request.html:34 msgid "No session data" msgstr "Keine Sitzungsdaten" #: templates/debug_toolbar/panels/request.html:38 msgid "GET data" msgstr "GET-Daten" #: templates/debug_toolbar/panels/request.html:41 msgid "No GET data" msgstr "Keine GET-Daten" #: templates/debug_toolbar/panels/request.html:45 msgid "POST data" msgstr "POST-Daten" #: templates/debug_toolbar/panels/request.html:48 msgid "No POST data" msgstr "Keine POST-Daten" #: templates/debug_toolbar/panels/settings.html:5 msgid "Setting" msgstr "Einstellung" #: templates/debug_toolbar/panels/signals.html:5 msgid "Signal" msgstr "Signal" #: templates/debug_toolbar/panels/signals.html:6 msgid "Receivers" msgstr "Empfänger" #: templates/debug_toolbar/panels/sql.html:6 #, python-format msgid "%(num)s query" msgid_plural "%(num)s queries" msgstr[0] "%(num)s Abfrage" msgstr[1] "%(num)s Abfragen" #: templates/debug_toolbar/panels/sql.html:8 #, python-format msgid "" "including %(count)s similar" msgstr "inklusive %(count)s ähnlich" #: templates/debug_toolbar/panels/sql.html:12 #, python-format msgid "" "and %(dupes)s duplicates" msgstr "und %(dupes)s dupliziert" #: templates/debug_toolbar/panels/sql.html:34 msgid "Query" msgstr "Abfrage" #: templates/debug_toolbar/panels/sql.html:35 #: templates/debug_toolbar/panels/timer.html:36 msgid "Timeline" msgstr "Verlauf" #: templates/debug_toolbar/panels/sql.html:52 #, python-format msgid "%(count)s similar queries." msgstr "%(count)s ähnliche Abfragen." #: templates/debug_toolbar/panels/sql.html:58 #, python-format msgid "Duplicated %(dupes)s times." msgstr "%(dupes)s-mal dupliziert." #: templates/debug_toolbar/panels/sql.html:95 msgid "Connection:" msgstr "Verbindung:" #: templates/debug_toolbar/panels/sql.html:97 msgid "Isolation level:" msgstr "Isolationsebene:" #: templates/debug_toolbar/panels/sql.html:100 msgid "Transaction status:" msgstr "Transaktionsstatus:" #: templates/debug_toolbar/panels/sql.html:114 msgid "(unknown)" msgstr "(unbekannt)" #: templates/debug_toolbar/panels/sql.html:123 msgid "No SQL queries were recorded during this request." msgstr "Es wurde keine SQL-Abfrage während dieses Vorgangs aufgezeichnet." #: templates/debug_toolbar/panels/sql_explain.html:4 msgid "SQL explained" msgstr "SQL erklärt" #: templates/debug_toolbar/panels/sql_explain.html:9 #: templates/debug_toolbar/panels/sql_profile.html:10 #: templates/debug_toolbar/panels/sql_select.html:9 msgid "Executed SQL" msgstr "Ausgeführtes SQL" #: templates/debug_toolbar/panels/sql_explain.html:13 #: templates/debug_toolbar/panels/sql_profile.html:14 #: templates/debug_toolbar/panels/sql_select.html:13 msgid "Database" msgstr "Datenbank" #: templates/debug_toolbar/panels/sql_profile.html:4 msgid "SQL profiled" msgstr "SQL durchleuchtet" #: templates/debug_toolbar/panels/sql_profile.html:37 msgid "Error" msgstr "Fehler" #: templates/debug_toolbar/panels/sql_select.html:4 msgid "SQL selected" msgstr "SQL ausgewählt" #: templates/debug_toolbar/panels/sql_select.html:36 msgid "Empty set" msgstr "Leeres Set" #: templates/debug_toolbar/panels/staticfiles.html:3 msgid "Static file path" msgid_plural "Static file paths" msgstr[0] "Pfad mit statischen Dateien" msgstr[1] "Pfade mit statischen Dateien" #: templates/debug_toolbar/panels/staticfiles.html:7 #, python-format msgid "(prefix %(prefix)s)" msgstr "(Präfix %(prefix)s)" #: templates/debug_toolbar/panels/staticfiles.html:11 #: templates/debug_toolbar/panels/staticfiles.html:22 #: templates/debug_toolbar/panels/staticfiles.html:34 #: templates/debug_toolbar/panels/templates.html:10 #: templates/debug_toolbar/panels/templates.html:30 #: templates/debug_toolbar/panels/templates.html:47 msgid "None" msgstr "-" #: templates/debug_toolbar/panels/staticfiles.html:14 msgid "Static file app" msgid_plural "Static file apps" msgstr[0] "App mit statischen Dateien" msgstr[1] "Apps mit statischen Dateien" #: templates/debug_toolbar/panels/staticfiles.html:25 msgid "Static file" msgid_plural "Static files" msgstr[0] "Statische Datei" msgstr[1] "Statische Dateien" #: templates/debug_toolbar/panels/staticfiles.html:39 #, python-format msgid "%(payload_count)s file" msgid_plural "%(payload_count)s files" msgstr[0] "%(payload_count)s Datei" msgstr[1] "%(payload_count)s Dateien" #: templates/debug_toolbar/panels/staticfiles.html:44 msgid "Location" msgstr "Ort" #: templates/debug_toolbar/panels/template_source.html:4 msgid "Template source:" msgstr "Template-Quelle:" #: templates/debug_toolbar/panels/templates.html:2 msgid "Template path" msgid_plural "Template paths" msgstr[0] "Template-Pfad" msgstr[1] "Template-Pfade" #: templates/debug_toolbar/panels/templates.html:13 msgid "Template" msgid_plural "Templates" msgstr[0] "Template" msgstr[1] "Templates" #: templates/debug_toolbar/panels/templates.html:22 #: templates/debug_toolbar/panels/templates.html:40 msgid "Toggle context" msgstr "Context zeigen" #: templates/debug_toolbar/panels/templates.html:33 msgid "Context processor" msgid_plural "Context processors" msgstr[0] "Context-Prozessor" msgstr[1] "Context-Prozessoren" #: templates/debug_toolbar/panels/timer.html:2 msgid "Resource usage" msgstr "Ressourcenverwendung" #: templates/debug_toolbar/panels/timer.html:10 msgid "Resource" msgstr "Ressource" #: templates/debug_toolbar/panels/timer.html:26 msgid "Browser timing" msgstr "Browserzeit" #: templates/debug_toolbar/panels/timer.html:35 msgid "Timing attribute" msgstr "Timing-Attribut" #: templates/debug_toolbar/panels/timer.html:37 msgid "Milliseconds since navigation start (+length)" msgstr "Millisekunden seit Seitenaufruf (plus Dauer)" #: templates/debug_toolbar/panels/versions.html:10 msgid "Package" msgstr "Paket" #: templates/debug_toolbar/panels/versions.html:11 msgid "Name" msgstr "Name" #: templates/debug_toolbar/panels/versions.html:12 msgid "Version" msgstr "Version" #: templates/debug_toolbar/redirect.html:10 msgid "Location:" msgstr "Ziel:" #: templates/debug_toolbar/redirect.html:12 msgid "" "The Django Debug Toolbar has intercepted a redirect to the above URL for " "debug viewing purposes. You can click the above link to continue with the " "redirect as normal." msgstr "Die Django Debug Toolbar hat eine Weiterleitung an die obenstehende URL zur weiteren Überprüfung abgefangen. Klicken Sie den Link, um wie gewohnt weitergeleitet zu werden." #: views.py:16 msgid "" "Data for this panel isn't available anymore. Please reload the page and " "retry." msgstr "Die Daten für dieses Panel sind nicht mehr verfügbar. Bitte laden Sie die Seite neu." python-django-debug-toolbar-5.2.0/debug_toolbar/locale/en/000077500000000000000000000000001500406072000234665ustar00rootroot00000000000000python-django-debug-toolbar-5.2.0/debug_toolbar/locale/en/LC_MESSAGES/000077500000000000000000000000001500406072000252535ustar00rootroot00000000000000python-django-debug-toolbar-5.2.0/debug_toolbar/locale/en/LC_MESSAGES/django.mo000066400000000000000000000005251500406072000270540ustar00rootroot00000000000000$,89Project-Id-Version: Django Debug Toolbar Report-Msgid-Bugs-To: PO-Revision-Date: 2012-03-31 20:10+0000 Last-Translator: Language-Team: Language: en MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=(n != 1) python-django-debug-toolbar-5.2.0/debug_toolbar/locale/en/LC_MESSAGES/django.po000066400000000000000000000360241500406072000270620ustar00rootroot00000000000000# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # msgid "" msgstr "" "Project-Id-Version: Django Debug Toolbar\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2024-08-06 07:12-0500\n" "PO-Revision-Date: 2012-03-31 20:10+0000\n" "Last-Translator: \n" "Language-Team: \n" "Language: en\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" #: apps.py:18 msgid "Debug Toolbar" msgstr "" #: panels/alerts.py:67 #, python-brace-format msgid "" "Form with id \"{form_id}\" contains file input, but does not have the " "attribute enctype=\"multipart/form-data\"." msgstr "" #: panels/alerts.py:70 msgid "" "Form contains file input, but does not have the attribute " "enctype=\"multipart/form-data\"." msgstr "" #: panels/alerts.py:73 #, python-brace-format msgid "" "Input element references form with id \"{form_id}\", but the form does not " "have the attribute enctype=\"multipart/form-data\"." msgstr "" #: panels/alerts.py:77 msgid "Alerts" msgstr "" #: panels/cache.py:168 msgid "Cache" msgstr "" #: panels/cache.py:174 #, python-format msgid "%(cache_calls)d call in %(time).2fms" msgid_plural "%(cache_calls)d calls in %(time).2fms" msgstr[0] "" msgstr[1] "" #: panels/cache.py:183 #, python-format msgid "Cache calls from %(count)d backend" msgid_plural "Cache calls from %(count)d backends" msgstr[0] "" msgstr[1] "" #: panels/headers.py:31 msgid "Headers" msgstr "" #: panels/history/panel.py:19 panels/history/panel.py:20 msgid "History" msgstr "" #: panels/profiling.py:140 msgid "Profiling" msgstr "" #: panels/redirects.py:17 msgid "Intercept redirects" msgstr "" #: panels/request.py:16 msgid "Request" msgstr "" #: panels/request.py:38 msgid "" msgstr "" #: panels/request.py:55 msgid "" msgstr "" #: panels/settings.py:17 msgid "Settings" msgstr "" #: panels/settings.py:20 #, python-format msgid "Settings from %s" msgstr "" #: panels/signals.py:57 #, python-format msgid "%(num_receivers)d receiver of 1 signal" msgid_plural "%(num_receivers)d receivers of 1 signal" msgstr[0] "" msgstr[1] "" #: panels/signals.py:62 #, python-format msgid "%(num_receivers)d receiver of %(num_signals)d signals" msgid_plural "%(num_receivers)d receivers of %(num_signals)d signals" msgstr[0] "" msgstr[1] "" #: panels/signals.py:67 msgid "Signals" msgstr "" #: panels/sql/panel.py:30 panels/sql/panel.py:41 msgid "Read uncommitted" msgstr "" #: panels/sql/panel.py:31 panels/sql/panel.py:43 msgid "Read committed" msgstr "" #: panels/sql/panel.py:32 panels/sql/panel.py:45 msgid "Repeatable read" msgstr "" #: panels/sql/panel.py:33 panels/sql/panel.py:47 msgid "Serializable" msgstr "" #: panels/sql/panel.py:39 msgid "Autocommit" msgstr "" #: panels/sql/panel.py:61 panels/sql/panel.py:71 msgid "Idle" msgstr "" #: panels/sql/panel.py:62 panels/sql/panel.py:72 msgid "Active" msgstr "" #: panels/sql/panel.py:63 panels/sql/panel.py:73 msgid "In transaction" msgstr "" #: panels/sql/panel.py:64 panels/sql/panel.py:74 msgid "In error" msgstr "" #: panels/sql/panel.py:65 panels/sql/panel.py:75 msgid "Unknown" msgstr "" #: panels/sql/panel.py:162 msgid "SQL" msgstr "" #: panels/sql/panel.py:168 #, python-format msgid "%(query_count)d query in %(sql_time).2fms" msgid_plural "%(query_count)d queries in %(sql_time).2fms" msgstr[0] "" msgstr[1] "" #: panels/sql/panel.py:180 #, python-format msgid "SQL queries from %(count)d connection" msgid_plural "SQL queries from %(count)d connections" msgstr[0] "" msgstr[1] "" #: panels/staticfiles.py:82 #, python-format msgid "Static files (%(num_found)s found, %(num_used)s used)" msgstr "" #: panels/staticfiles.py:103 msgid "Static files" msgstr "" #: panels/staticfiles.py:109 #, python-format msgid "%(num_used)s file used" msgid_plural "%(num_used)s files used" msgstr[0] "" msgstr[1] "" #: panels/templates/panel.py:101 msgid "Templates" msgstr "" #: panels/templates/panel.py:106 #, python-format msgid "Templates (%(num_templates)s rendered)" msgstr "" #: panels/templates/panel.py:195 msgid "No origin" msgstr "" #: panels/timer.py:27 #, python-format msgid "CPU: %(cum)0.2fms (%(total)0.2fms)" msgstr "" #: panels/timer.py:32 #, python-format msgid "Total: %0.2fms" msgstr "" #: panels/timer.py:38 templates/debug_toolbar/panels/history.html:9 #: templates/debug_toolbar/panels/sql_explain.html:11 #: templates/debug_toolbar/panels/sql_profile.html:12 #: templates/debug_toolbar/panels/sql_select.html:11 msgid "Time" msgstr "" #: panels/timer.py:46 msgid "User CPU time" msgstr "" #: panels/timer.py:46 #, python-format msgid "%(utime)0.3f msec" msgstr "" #: panels/timer.py:47 msgid "System CPU time" msgstr "" #: panels/timer.py:47 #, python-format msgid "%(stime)0.3f msec" msgstr "" #: panels/timer.py:48 msgid "Total CPU time" msgstr "" #: panels/timer.py:48 #, python-format msgid "%(total)0.3f msec" msgstr "" #: panels/timer.py:49 msgid "Elapsed time" msgstr "" #: panels/timer.py:49 #, python-format msgid "%(total_time)0.3f msec" msgstr "" #: panels/timer.py:51 msgid "Context switches" msgstr "" #: panels/timer.py:52 #, python-format msgid "%(vcsw)d voluntary, %(ivcsw)d involuntary" msgstr "" #: panels/versions.py:19 msgid "Versions" msgstr "" #: templates/debug_toolbar/base.html:23 msgid "Hide toolbar" msgstr "" #: templates/debug_toolbar/base.html:23 msgid "Hide" msgstr "" #: templates/debug_toolbar/base.html:25 templates/debug_toolbar/base.html:26 msgid "Toggle Theme" msgstr "" #: templates/debug_toolbar/base.html:35 msgid "Show toolbar" msgstr "" #: templates/debug_toolbar/includes/panel_button.html:4 msgid "Disable for next and successive requests" msgstr "" #: templates/debug_toolbar/includes/panel_button.html:4 msgid "Enable for next and successive requests" msgstr "" #: templates/debug_toolbar/panels/alerts.html:4 msgid "Alerts found" msgstr "" #: templates/debug_toolbar/panels/alerts.html:11 msgid "No alerts found" msgstr "" #: templates/debug_toolbar/panels/cache.html:2 msgid "Summary" msgstr "" #: templates/debug_toolbar/panels/cache.html:6 msgid "Total calls" msgstr "" #: templates/debug_toolbar/panels/cache.html:7 msgid "Total time" msgstr "" #: templates/debug_toolbar/panels/cache.html:8 msgid "Cache hits" msgstr "" #: templates/debug_toolbar/panels/cache.html:9 msgid "Cache misses" msgstr "" #: templates/debug_toolbar/panels/cache.html:21 msgid "Commands" msgstr "" #: templates/debug_toolbar/panels/cache.html:39 msgid "Calls" msgstr "" #: templates/debug_toolbar/panels/cache.html:43 #: templates/debug_toolbar/panels/sql.html:36 msgid "Time (ms)" msgstr "" #: templates/debug_toolbar/panels/cache.html:44 msgid "Type" msgstr "" #: templates/debug_toolbar/panels/cache.html:45 #: templates/debug_toolbar/panels/request.html:8 msgid "Arguments" msgstr "" #: templates/debug_toolbar/panels/cache.html:46 #: templates/debug_toolbar/panels/request.html:9 msgid "Keyword arguments" msgstr "" #: templates/debug_toolbar/panels/cache.html:47 msgid "Backend" msgstr "" #: templates/debug_toolbar/panels/headers.html:3 msgid "Request headers" msgstr "" #: templates/debug_toolbar/panels/headers.html:8 #: templates/debug_toolbar/panels/headers.html:27 #: templates/debug_toolbar/panels/headers.html:48 msgid "Key" msgstr "" #: templates/debug_toolbar/panels/headers.html:9 #: templates/debug_toolbar/panels/headers.html:28 #: templates/debug_toolbar/panels/headers.html:49 #: templates/debug_toolbar/panels/history_tr.html:23 #: templates/debug_toolbar/panels/request_variables.html:12 #: templates/debug_toolbar/panels/settings.html:6 #: templates/debug_toolbar/panels/timer.html:11 msgid "Value" msgstr "" #: templates/debug_toolbar/panels/headers.html:22 msgid "Response headers" msgstr "" #: templates/debug_toolbar/panels/headers.html:41 msgid "WSGI environ" msgstr "" #: templates/debug_toolbar/panels/headers.html:43 msgid "" "Since the WSGI environ inherits the environment of the server, only a " "significant subset is shown below." msgstr "" #: templates/debug_toolbar/panels/history.html:10 msgid "Method" msgstr "" #: templates/debug_toolbar/panels/history.html:11 #: templates/debug_toolbar/panels/staticfiles.html:43 msgid "Path" msgstr "" #: templates/debug_toolbar/panels/history.html:12 msgid "Request Variables" msgstr "" #: templates/debug_toolbar/panels/history.html:13 msgid "Status" msgstr "" #: templates/debug_toolbar/panels/history.html:14 #: templates/debug_toolbar/panels/sql.html:37 msgid "Action" msgstr "" #: templates/debug_toolbar/panels/history_tr.html:22 #: templates/debug_toolbar/panels/request_variables.html:11 msgid "Variable" msgstr "" #: templates/debug_toolbar/panels/profiling.html:5 msgid "Call" msgstr "" #: templates/debug_toolbar/panels/profiling.html:6 msgid "CumTime" msgstr "" #: templates/debug_toolbar/panels/profiling.html:7 #: templates/debug_toolbar/panels/profiling.html:9 msgid "Per" msgstr "" #: templates/debug_toolbar/panels/profiling.html:8 msgid "TotTime" msgstr "" #: templates/debug_toolbar/panels/profiling.html:10 msgid "Count" msgstr "" #: templates/debug_toolbar/panels/request.html:3 msgid "View information" msgstr "" #: templates/debug_toolbar/panels/request.html:7 msgid "View function" msgstr "" #: templates/debug_toolbar/panels/request.html:10 msgid "URL name" msgstr "" #: templates/debug_toolbar/panels/request.html:24 msgid "Cookies" msgstr "" #: templates/debug_toolbar/panels/request.html:27 msgid "No cookies" msgstr "" #: templates/debug_toolbar/panels/request.html:31 msgid "Session data" msgstr "" #: templates/debug_toolbar/panels/request.html:34 msgid "No session data" msgstr "" #: templates/debug_toolbar/panels/request.html:38 msgid "GET data" msgstr "" #: templates/debug_toolbar/panels/request.html:41 msgid "No GET data" msgstr "" #: templates/debug_toolbar/panels/request.html:45 msgid "POST data" msgstr "" #: templates/debug_toolbar/panels/request.html:48 msgid "No POST data" msgstr "" #: templates/debug_toolbar/panels/settings.html:5 msgid "Setting" msgstr "" #: templates/debug_toolbar/panels/signals.html:5 msgid "Signal" msgstr "" #: templates/debug_toolbar/panels/signals.html:6 msgid "Receivers" msgstr "" #: templates/debug_toolbar/panels/sql.html:6 #, python-format msgid "%(num)s query" msgid_plural "%(num)s queries" msgstr[0] "" msgstr[1] "" #: templates/debug_toolbar/panels/sql.html:8 #, python-format msgid "" "including %(count)s similar" msgstr "" #: templates/debug_toolbar/panels/sql.html:12 #, python-format msgid "" "and %(dupes)s duplicates" msgstr "" #: templates/debug_toolbar/panels/sql.html:34 msgid "Query" msgstr "" #: templates/debug_toolbar/panels/sql.html:35 #: templates/debug_toolbar/panels/timer.html:36 msgid "Timeline" msgstr "" #: templates/debug_toolbar/panels/sql.html:52 #, python-format msgid "%(count)s similar queries." msgstr "" #: templates/debug_toolbar/panels/sql.html:58 #, python-format msgid "Duplicated %(dupes)s times." msgstr "" #: templates/debug_toolbar/panels/sql.html:95 msgid "Connection:" msgstr "" #: templates/debug_toolbar/panels/sql.html:97 msgid "Isolation level:" msgstr "" #: templates/debug_toolbar/panels/sql.html:100 msgid "Transaction status:" msgstr "" #: templates/debug_toolbar/panels/sql.html:114 msgid "(unknown)" msgstr "" #: templates/debug_toolbar/panels/sql.html:123 msgid "No SQL queries were recorded during this request." msgstr "" #: templates/debug_toolbar/panels/sql_explain.html:4 msgid "SQL explained" msgstr "" #: templates/debug_toolbar/panels/sql_explain.html:9 #: templates/debug_toolbar/panels/sql_profile.html:10 #: templates/debug_toolbar/panels/sql_select.html:9 msgid "Executed SQL" msgstr "" #: templates/debug_toolbar/panels/sql_explain.html:13 #: templates/debug_toolbar/panels/sql_profile.html:14 #: templates/debug_toolbar/panels/sql_select.html:13 msgid "Database" msgstr "" #: templates/debug_toolbar/panels/sql_profile.html:4 msgid "SQL profiled" msgstr "" #: templates/debug_toolbar/panels/sql_profile.html:37 msgid "Error" msgstr "" #: templates/debug_toolbar/panels/sql_select.html:4 msgid "SQL selected" msgstr "" #: templates/debug_toolbar/panels/sql_select.html:36 msgid "Empty set" msgstr "" #: templates/debug_toolbar/panels/staticfiles.html:3 msgid "Static file path" msgid_plural "Static file paths" msgstr[0] "" msgstr[1] "" #: templates/debug_toolbar/panels/staticfiles.html:7 #, python-format msgid "(prefix %(prefix)s)" msgstr "" #: templates/debug_toolbar/panels/staticfiles.html:11 #: templates/debug_toolbar/panels/staticfiles.html:22 #: templates/debug_toolbar/panels/staticfiles.html:34 #: templates/debug_toolbar/panels/templates.html:10 #: templates/debug_toolbar/panels/templates.html:30 #: templates/debug_toolbar/panels/templates.html:47 msgid "None" msgstr "" #: templates/debug_toolbar/panels/staticfiles.html:14 msgid "Static file app" msgid_plural "Static file apps" msgstr[0] "" msgstr[1] "" #: templates/debug_toolbar/panels/staticfiles.html:25 msgid "Static file" msgid_plural "Static files" msgstr[0] "" msgstr[1] "" #: templates/debug_toolbar/panels/staticfiles.html:39 #, python-format msgid "%(payload_count)s file" msgid_plural "%(payload_count)s files" msgstr[0] "" msgstr[1] "" #: templates/debug_toolbar/panels/staticfiles.html:44 msgid "Location" msgstr "" #: templates/debug_toolbar/panels/template_source.html:4 msgid "Template source:" msgstr "" #: templates/debug_toolbar/panels/templates.html:2 msgid "Template path" msgid_plural "Template paths" msgstr[0] "" msgstr[1] "" #: templates/debug_toolbar/panels/templates.html:13 msgid "Template" msgid_plural "Templates" msgstr[0] "" msgstr[1] "" #: templates/debug_toolbar/panels/templates.html:22 #: templates/debug_toolbar/panels/templates.html:40 msgid "Toggle context" msgstr "" #: templates/debug_toolbar/panels/templates.html:33 msgid "Context processor" msgid_plural "Context processors" msgstr[0] "" msgstr[1] "" #: templates/debug_toolbar/panels/timer.html:2 msgid "Resource usage" msgstr "" #: templates/debug_toolbar/panels/timer.html:10 msgid "Resource" msgstr "" #: templates/debug_toolbar/panels/timer.html:26 msgid "Browser timing" msgstr "" #: templates/debug_toolbar/panels/timer.html:35 msgid "Timing attribute" msgstr "" #: templates/debug_toolbar/panels/timer.html:37 msgid "Milliseconds since navigation start (+length)" msgstr "" #: templates/debug_toolbar/panels/versions.html:10 msgid "Package" msgstr "" #: templates/debug_toolbar/panels/versions.html:11 msgid "Name" msgstr "" #: templates/debug_toolbar/panels/versions.html:12 msgid "Version" msgstr "" #: templates/debug_toolbar/redirect.html:10 msgid "Location:" msgstr "" #: templates/debug_toolbar/redirect.html:12 msgid "" "The Django Debug Toolbar has intercepted a redirect to the above URL for " "debug viewing purposes. You can click the above link to continue with the " "redirect as normal." msgstr "" #: views.py:16 msgid "" "Data for this panel isn't available anymore. Please reload the page and " "retry." msgstr "" python-django-debug-toolbar-5.2.0/debug_toolbar/locale/es/000077500000000000000000000000001500406072000234735ustar00rootroot00000000000000python-django-debug-toolbar-5.2.0/debug_toolbar/locale/es/LC_MESSAGES/000077500000000000000000000000001500406072000252605ustar00rootroot00000000000000python-django-debug-toolbar-5.2.0/debug_toolbar/locale/es/LC_MESSAGES/django.mo000066400000000000000000000235311500406072000270630ustar00rootroot00000000000000d J   l- N . . G Y k  )     ".QFW   $ N"q z(  '  (0 5BJOXg{ -  1 : EO_ dnv{     . ; H Ubjs h  ""C f5s &:  ! 0 <GVjox   iy2 4xT$Oy+B W eq  %" H(0 7oB $45I1[     +AG d o{7 8  $ / D L [ c h l       !!/!H! L! Z!h! y!!!!!!!!p!9o"i"Q#e#Dy#####9$B$ W$+b$$% %%%% %%% &&!&<&A& Z&f&&&& &&& &&PnWUE&|+$9th%C0~`)q<GxO5K6gzwZ D>M@,(NXo"TVL]abfi8Y;d1?\S :Hl'B 2 !=*.v[/ys3#{mIrp RQ -J_Aje47F}ck^u%(cache_calls)d call in %(time).2fms%(cache_calls)d calls in %(time).2fms%(count)s similar queries.%(num)s query%(num)s queries%(num_receivers)d receiver of %(num_signals)d signals%(num_receivers)d receivers of %(num_signals)d signals%(num_receivers)d receiver of 1 signal%(num_receivers)d receivers of 1 signal%(num_used)s file used%(num_used)s files used%(payload_count)s file%(payload_count)s files%(stime)0.3f msec%(total)0.3f msec%(total_time)0.3f msec%(utime)0.3f msec%(vcsw)d voluntary, %(ivcsw)d involuntary(prefix %(prefix)s)(unknown)ActionActiveArgumentsAutocommitBackendBrowser timingCPU: %(cum)0.2fms (%(total)0.2fms)CacheCache calls from %(count)d backendCache calls from %(count)d backendsCache hitsCache missesCallCallsCommandsConnection:Context processorContext processorsContext switchesCookiesCountCumTimeData for this panel isn't available anymore. Please reload the page and retry.DatabaseDebug ToolbarDisable for next and successive requestsDuplicated %(dupes)s times.Elapsed timeEmpty setEnable for next and successive requestsErrorExecuted SQLGET dataHeadersHideHide toolbarHistoryIdleIn errorIn transactionIntercept redirectsIsolation level:KeyKeyword argumentsLocationLocation:MethodMilliseconds since navigation start (+length)NameNo GET dataNo POST dataNo SQL queries were recorded during this request.No cookiesNo originNo session dataNonePOST dataPackagePathPerProfilingQueryRead committedRead uncommittedReceiversRepeatable readRequestRequest VariablesRequest headersResourceResource usageResponse headersSQLSQL explainedSQL profiledSQL selectedSerializableSession dataSettingSettingsSettings from %sShow toolbarSignalSignalsSince the WSGI environ inherits the environment of the server, only a significant subset is shown below.Static fileStatic filesStatic file appStatic file appsStatic file pathStatic file pathsStatic filesStatic files (%(num_found)s found, %(num_used)s used)StatusSummarySystem CPU timeTemplateTemplatesTemplate pathTemplate pathsTemplate source:TemplatesTemplates (%(num_templates)s rendered)The Django Debug Toolbar has intercepted a redirect to the above URL for debug viewing purposes. You can click the above link to continue with the redirect as normal.TimeTime (ms)TimelineTiming attributeToggle contextTotTimeTotal CPU timeTotal callsTotal timeTotal: %0.2fmsTransaction status:TypeURL nameUnknownUser CPU timeValueVariableVersionVersionsView functionView informationWSGI environand %(dupes)s duplicatesProject-Id-Version: Django Debug Toolbar Report-Msgid-Bugs-To: PO-Revision-Date: 2010-11-30 00:00+0000 Last-Translator: Daniel Iglesias , 2021 Language-Team: Spanish (http://app.transifex.com/django-debug-toolbar/django-debug-toolbar/language/es/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: es Plural-Forms: nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2; %(cache_calls)d llamada en %(time).2fms%(cache_calls)d llamadas en %(time).2fms%(cache_calls)d llamadas en %(time).2fms%(count)s consultas similares. %(num)s consulta%(num)s consultas%(num)s consultas%(num_receivers)d receptor de %(num_signals)d señales%(num_receivers)d receptores de %(num_signals)d señales%(num_receivers)d receptores de %(num_signals)d señales%(num_receivers)d receptor de 1 señal%(num_receivers)d receptores de 1 señal%(num_receivers)d receptores de 1 señal%(num_used)s archivo usado%(num_used)s archivos usados%(num_used)s archivos usados%(payload_count)s archivo%(payload_count)s archivos%(payload_count)s archivos%(stime)0.3f mseg%(total)0.3f mseg%(total_time)0.3f mseg%(utime)0.3f mseg%(vcsw)d voluntario, %(ivcsw)d involuntario(prefijo %(prefix)s)(desconocido)AcciónActivoArgumentosAutocommitBackendDistribución de tiempos de navegadorCPU: %(cum)0.2fms (%(total)0.2fms)Cache%(count)d llamadas al Cache desde el backend%(count)d llamadas al Caché desde backends%(count)d llamadas al Caché desde backendsAciertos de cachéErrores de cachéLlamarLlamadasComandosConexión:Procesador de contextoProcesadores de contextoProcesadores de contextoCambios de contextoCookiesContarTiempoAcumLa información de este panel ya no se encuentra disponible. Por favor recargue la página y pruebe nuevamente.Base de datosBarra de herramientas de DepuraciónDeshabilitar para el próximo y sucesivos peticionesRepetidas %(dupes)s veces.Tiempo transcurridoEstablecer VacíoHabilitar para el próximo y sucesivos peticionesErrorSQL EjecutadoDatos del GETEncabezadosOcultarOcutar barra de herramientasHistorialInactivoEn errorEn transacciónInterceptar re-direcionamientoNivel de aislamiento:ClaveArgumentos por palabra claveUbicaciónUbicación:MétodoMilisegundos desde inicio de la navegación (+longitud)NombreSin datos GETSin datos POSTNo se registraron consultas SQL durante ésta petición.Sin cookiesSin origenSin datos de sesiónNingunoDatos del POSTPaqueteRutaPorAnálisis de rendimientoQueryLeer cambios permanentesLeer cambios tentativosReceptoresLectura repetiblePeticiónVariables de la peticiónEncabezados de peticionesRecursoUso de recursosEncabezados de respuestaSQLSQL explicadoSQL analizadoSQL seleccionadoSerializableDatos de sesiónConfiguraciónConfiguracionesValores procedentes de %sMostrar barra de herramientasSeñalSeñalesYa que el entorno WSGI hereda el entorno del servidor, solo un subconjunto significativo es mostrado más abajo.Archivo estáticoArchivos estáticosArchivos estáticosAplicación a archivos estáticosAplicaciones de archivos estáticosAplicaciones de archivos estáticosRuta a archivos estáticoRutas a archivos estáticosRutas a archivos estáticosArchivos estáticosArchivos estáticos (%(num_found)s encontrados, %(num_used)s en uso)EstadoResúmenTiempo en CPU del sistemaPlantillaPlantillasPlantillasRuta de plantillaRutas de plantillasRutas de plantillasFuente de plantilla:PlantillasPlantillas (%(num_templates)s renderizadas)El Django Debug Toolbar ha interceptado un re-direccionamiento a la dirección de Internet mostrada arriba, con el propósito de inspeccionarla. Usted puede hacer clic en el vínculo de arriba para continuar con el re-direccionamiento normalmente.TiempoTiempo (ms)Línea de tiempoAtributo de tiempoMostrar/Ocultar contextoTiempoTotTiempo total de CPULlamadas totalesTiempo totalTotal: %0.2fmsEstado de la transacción:TipoNombre de dirección URLDesconocidoTiempo en CPU de usuarioValorVariableVersiónVersionesFunción vistaInformación de VistaEntorno WSGIy %(dupes)s repetidospython-django-debug-toolbar-5.2.0/debug_toolbar/locale/es/LC_MESSAGES/django.po000066400000000000000000000464171500406072000270760ustar00rootroot00000000000000# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # # Translators: # jcatalan , 2014 # Daniel Iglesias , 2021 # Leonardo J. Caballero G. , 2013-2014,2020 # marcelor , 2013 # Sergio Infante , 2015 msgid "" msgstr "" "Project-Id-Version: Django Debug Toolbar\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2024-08-06 07:12-0500\n" "PO-Revision-Date: 2010-11-30 00:00+0000\n" "Last-Translator: Daniel Iglesias , 2021\n" "Language-Team: Spanish (http://app.transifex.com/django-debug-toolbar/django-debug-toolbar/language/es/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: es\n" "Plural-Forms: nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" #: apps.py:18 msgid "Debug Toolbar" msgstr "Barra de herramientas de Depuración" #: panels/alerts.py:67 #, python-brace-format msgid "" "Form with id \"{form_id}\" contains file input, but does not have the " "attribute enctype=\"multipart/form-data\"." msgstr "" #: panels/alerts.py:70 msgid "" "Form contains file input, but does not have the attribute " "enctype=\"multipart/form-data\"." msgstr "" #: panels/alerts.py:73 #, python-brace-format msgid "" "Input element references form with id \"{form_id}\", but the form does not " "have the attribute enctype=\"multipart/form-data\"." msgstr "" #: panels/alerts.py:77 msgid "Alerts" msgstr "" #: panels/cache.py:168 msgid "Cache" msgstr "Cache" #: panels/cache.py:174 #, python-format msgid "%(cache_calls)d call in %(time).2fms" msgid_plural "%(cache_calls)d calls in %(time).2fms" msgstr[0] "%(cache_calls)d llamada en %(time).2fms" msgstr[1] "%(cache_calls)d llamadas en %(time).2fms" msgstr[2] "%(cache_calls)d llamadas en %(time).2fms" #: panels/cache.py:183 #, python-format msgid "Cache calls from %(count)d backend" msgid_plural "Cache calls from %(count)d backends" msgstr[0] "%(count)d llamadas al Cache desde el backend" msgstr[1] "%(count)d llamadas al Caché desde backends" msgstr[2] "%(count)d llamadas al Caché desde backends" #: panels/headers.py:31 msgid "Headers" msgstr "Encabezados" #: panels/history/panel.py:19 panels/history/panel.py:20 msgid "History" msgstr "Historial" #: panels/profiling.py:140 msgid "Profiling" msgstr "Análisis de rendimiento" #: panels/redirects.py:17 msgid "Intercept redirects" msgstr "Interceptar re-direcionamiento" #: panels/request.py:16 msgid "Request" msgstr "Petición" #: panels/request.py:38 msgid "" msgstr "" #: panels/request.py:55 msgid "" msgstr "" #: panels/settings.py:17 msgid "Settings" msgstr "Configuraciones" #: panels/settings.py:20 #, python-format msgid "Settings from %s" msgstr "Valores procedentes de %s" #: panels/signals.py:57 #, python-format msgid "%(num_receivers)d receiver of 1 signal" msgid_plural "%(num_receivers)d receivers of 1 signal" msgstr[0] "%(num_receivers)d receptor de 1 señal" msgstr[1] "%(num_receivers)d receptores de 1 señal" msgstr[2] "%(num_receivers)d receptores de 1 señal" #: panels/signals.py:62 #, python-format msgid "%(num_receivers)d receiver of %(num_signals)d signals" msgid_plural "%(num_receivers)d receivers of %(num_signals)d signals" msgstr[0] "%(num_receivers)d receptor de %(num_signals)d señales" msgstr[1] "%(num_receivers)d receptores de %(num_signals)d señales" msgstr[2] "%(num_receivers)d receptores de %(num_signals)d señales" #: panels/signals.py:67 msgid "Signals" msgstr "Señales" #: panels/sql/panel.py:30 panels/sql/panel.py:41 msgid "Read uncommitted" msgstr "Leer cambios tentativos" #: panels/sql/panel.py:31 panels/sql/panel.py:43 msgid "Read committed" msgstr "Leer cambios permanentes" #: panels/sql/panel.py:32 panels/sql/panel.py:45 msgid "Repeatable read" msgstr "Lectura repetible" #: panels/sql/panel.py:33 panels/sql/panel.py:47 msgid "Serializable" msgstr "Serializable" #: panels/sql/panel.py:39 msgid "Autocommit" msgstr "Autocommit" #: panels/sql/panel.py:61 panels/sql/panel.py:71 msgid "Idle" msgstr "Inactivo" #: panels/sql/panel.py:62 panels/sql/panel.py:72 msgid "Active" msgstr "Activo" #: panels/sql/panel.py:63 panels/sql/panel.py:73 msgid "In transaction" msgstr "En transacción" #: panels/sql/panel.py:64 panels/sql/panel.py:74 msgid "In error" msgstr "En error" #: panels/sql/panel.py:65 panels/sql/panel.py:75 msgid "Unknown" msgstr "Desconocido" #: panels/sql/panel.py:162 msgid "SQL" msgstr "SQL" #: panels/sql/panel.py:168 #, python-format msgid "%(query_count)d query in %(sql_time).2fms" msgid_plural "%(query_count)d queries in %(sql_time).2fms" msgstr[0] "" msgstr[1] "" msgstr[2] "" #: panels/sql/panel.py:180 #, python-format msgid "SQL queries from %(count)d connection" msgid_plural "SQL queries from %(count)d connections" msgstr[0] "" msgstr[1] "" msgstr[2] "" #: panels/staticfiles.py:82 #, python-format msgid "Static files (%(num_found)s found, %(num_used)s used)" msgstr "Archivos estáticos (%(num_found)s encontrados, %(num_used)s en uso)" #: panels/staticfiles.py:103 msgid "Static files" msgstr "Archivos estáticos" #: panels/staticfiles.py:109 #, python-format msgid "%(num_used)s file used" msgid_plural "%(num_used)s files used" msgstr[0] "%(num_used)s archivo usado" msgstr[1] "%(num_used)s archivos usados" msgstr[2] "%(num_used)s archivos usados" #: panels/templates/panel.py:101 msgid "Templates" msgstr "Plantillas" #: panels/templates/panel.py:106 #, python-format msgid "Templates (%(num_templates)s rendered)" msgstr "Plantillas (%(num_templates)s renderizadas)" #: panels/templates/panel.py:195 msgid "No origin" msgstr "Sin origen" #: panels/timer.py:27 #, python-format msgid "CPU: %(cum)0.2fms (%(total)0.2fms)" msgstr "CPU: %(cum)0.2fms (%(total)0.2fms)" #: panels/timer.py:32 #, python-format msgid "Total: %0.2fms" msgstr "Total: %0.2fms" #: panels/timer.py:38 templates/debug_toolbar/panels/history.html:9 #: templates/debug_toolbar/panels/sql_explain.html:11 #: templates/debug_toolbar/panels/sql_profile.html:12 #: templates/debug_toolbar/panels/sql_select.html:11 msgid "Time" msgstr "Tiempo" #: panels/timer.py:46 msgid "User CPU time" msgstr "Tiempo en CPU de usuario" #: panels/timer.py:46 #, python-format msgid "%(utime)0.3f msec" msgstr "%(utime)0.3f mseg" #: panels/timer.py:47 msgid "System CPU time" msgstr "Tiempo en CPU del sistema" #: panels/timer.py:47 #, python-format msgid "%(stime)0.3f msec" msgstr "%(stime)0.3f mseg" #: panels/timer.py:48 msgid "Total CPU time" msgstr "Tiempo total de CPU" #: panels/timer.py:48 #, python-format msgid "%(total)0.3f msec" msgstr "%(total)0.3f mseg" #: panels/timer.py:49 msgid "Elapsed time" msgstr "Tiempo transcurrido" #: panels/timer.py:49 #, python-format msgid "%(total_time)0.3f msec" msgstr "%(total_time)0.3f mseg" #: panels/timer.py:51 msgid "Context switches" msgstr "Cambios de contexto" #: panels/timer.py:52 #, python-format msgid "%(vcsw)d voluntary, %(ivcsw)d involuntary" msgstr "%(vcsw)d voluntario, %(ivcsw)d involuntario" #: panels/versions.py:19 msgid "Versions" msgstr "Versiones" #: templates/debug_toolbar/base.html:23 msgid "Hide toolbar" msgstr "Ocutar barra de herramientas" #: templates/debug_toolbar/base.html:23 msgid "Hide" msgstr "Ocultar" #: templates/debug_toolbar/base.html:25 templates/debug_toolbar/base.html:26 msgid "Toggle Theme" msgstr "" #: templates/debug_toolbar/base.html:35 msgid "Show toolbar" msgstr "Mostrar barra de herramientas" #: templates/debug_toolbar/includes/panel_button.html:4 msgid "Disable for next and successive requests" msgstr "Deshabilitar para el próximo y sucesivos peticiones" #: templates/debug_toolbar/includes/panel_button.html:4 msgid "Enable for next and successive requests" msgstr "Habilitar para el próximo y sucesivos peticiones" #: templates/debug_toolbar/panels/alerts.html:4 msgid "Alerts found" msgstr "" #: templates/debug_toolbar/panels/alerts.html:11 msgid "No alerts found" msgstr "" #: templates/debug_toolbar/panels/cache.html:2 msgid "Summary" msgstr "Resúmen" #: templates/debug_toolbar/panels/cache.html:6 msgid "Total calls" msgstr "Llamadas totales" #: templates/debug_toolbar/panels/cache.html:7 msgid "Total time" msgstr "Tiempo total" #: templates/debug_toolbar/panels/cache.html:8 msgid "Cache hits" msgstr "Aciertos de caché" #: templates/debug_toolbar/panels/cache.html:9 msgid "Cache misses" msgstr "Errores de caché" #: templates/debug_toolbar/panels/cache.html:21 msgid "Commands" msgstr "Comandos" #: templates/debug_toolbar/panels/cache.html:39 msgid "Calls" msgstr "Llamadas" #: templates/debug_toolbar/panels/cache.html:43 #: templates/debug_toolbar/panels/sql.html:36 msgid "Time (ms)" msgstr "Tiempo (ms)" #: templates/debug_toolbar/panels/cache.html:44 msgid "Type" msgstr "Tipo" #: templates/debug_toolbar/panels/cache.html:45 #: templates/debug_toolbar/panels/request.html:8 msgid "Arguments" msgstr "Argumentos" #: templates/debug_toolbar/panels/cache.html:46 #: templates/debug_toolbar/panels/request.html:9 msgid "Keyword arguments" msgstr "Argumentos por palabra clave" #: templates/debug_toolbar/panels/cache.html:47 msgid "Backend" msgstr "Backend" #: templates/debug_toolbar/panels/headers.html:3 msgid "Request headers" msgstr "Encabezados de peticiones" #: templates/debug_toolbar/panels/headers.html:8 #: templates/debug_toolbar/panels/headers.html:27 #: templates/debug_toolbar/panels/headers.html:48 msgid "Key" msgstr "Clave" #: templates/debug_toolbar/panels/headers.html:9 #: templates/debug_toolbar/panels/headers.html:28 #: templates/debug_toolbar/panels/headers.html:49 #: templates/debug_toolbar/panels/history_tr.html:23 #: templates/debug_toolbar/panels/request_variables.html:12 #: templates/debug_toolbar/panels/settings.html:6 #: templates/debug_toolbar/panels/timer.html:11 msgid "Value" msgstr "Valor" #: templates/debug_toolbar/panels/headers.html:22 msgid "Response headers" msgstr "Encabezados de respuesta" #: templates/debug_toolbar/panels/headers.html:41 msgid "WSGI environ" msgstr "Entorno WSGI" #: templates/debug_toolbar/panels/headers.html:43 msgid "" "Since the WSGI environ inherits the environment of the server, only a " "significant subset is shown below." msgstr "Ya que el entorno WSGI hereda el entorno del servidor, solo un subconjunto significativo es mostrado más abajo." #: templates/debug_toolbar/panels/history.html:10 msgid "Method" msgstr "Método" #: templates/debug_toolbar/panels/history.html:11 #: templates/debug_toolbar/panels/staticfiles.html:43 msgid "Path" msgstr "Ruta" #: templates/debug_toolbar/panels/history.html:12 msgid "Request Variables" msgstr "Variables de la petición" #: templates/debug_toolbar/panels/history.html:13 msgid "Status" msgstr "Estado" #: templates/debug_toolbar/panels/history.html:14 #: templates/debug_toolbar/panels/sql.html:37 msgid "Action" msgstr "Acción" #: templates/debug_toolbar/panels/history_tr.html:22 #: templates/debug_toolbar/panels/request_variables.html:11 msgid "Variable" msgstr "Variable" #: templates/debug_toolbar/panels/profiling.html:5 msgid "Call" msgstr "Llamar" #: templates/debug_toolbar/panels/profiling.html:6 msgid "CumTime" msgstr "TiempoAcum" #: templates/debug_toolbar/panels/profiling.html:7 #: templates/debug_toolbar/panels/profiling.html:9 msgid "Per" msgstr "Por" #: templates/debug_toolbar/panels/profiling.html:8 msgid "TotTime" msgstr "TiempoTot" #: templates/debug_toolbar/panels/profiling.html:10 msgid "Count" msgstr "Contar" #: templates/debug_toolbar/panels/request.html:3 msgid "View information" msgstr "Información de Vista" #: templates/debug_toolbar/panels/request.html:7 msgid "View function" msgstr "Función vista" #: templates/debug_toolbar/panels/request.html:10 msgid "URL name" msgstr "Nombre de dirección URL" #: templates/debug_toolbar/panels/request.html:24 msgid "Cookies" msgstr "Cookies" #: templates/debug_toolbar/panels/request.html:27 msgid "No cookies" msgstr "Sin cookies" #: templates/debug_toolbar/panels/request.html:31 msgid "Session data" msgstr "Datos de sesión" #: templates/debug_toolbar/panels/request.html:34 msgid "No session data" msgstr "Sin datos de sesión" #: templates/debug_toolbar/panels/request.html:38 msgid "GET data" msgstr "Datos del GET" #: templates/debug_toolbar/panels/request.html:41 msgid "No GET data" msgstr "Sin datos GET" #: templates/debug_toolbar/panels/request.html:45 msgid "POST data" msgstr "Datos del POST" #: templates/debug_toolbar/panels/request.html:48 msgid "No POST data" msgstr "Sin datos POST" #: templates/debug_toolbar/panels/settings.html:5 msgid "Setting" msgstr "Configuración" #: templates/debug_toolbar/panels/signals.html:5 msgid "Signal" msgstr "Señal" #: templates/debug_toolbar/panels/signals.html:6 msgid "Receivers" msgstr "Receptores" #: templates/debug_toolbar/panels/sql.html:6 #, python-format msgid "%(num)s query" msgid_plural "%(num)s queries" msgstr[0] "%(num)s consulta" msgstr[1] "%(num)s consultas" msgstr[2] "%(num)s consultas" #: templates/debug_toolbar/panels/sql.html:8 #, python-format msgid "" "including %(count)s similar" msgstr "" #: templates/debug_toolbar/panels/sql.html:12 #, python-format msgid "" "and %(dupes)s duplicates" msgstr "y %(dupes)s repetidos" #: templates/debug_toolbar/panels/sql.html:34 msgid "Query" msgstr "Query" #: templates/debug_toolbar/panels/sql.html:35 #: templates/debug_toolbar/panels/timer.html:36 msgid "Timeline" msgstr "Línea de tiempo" #: templates/debug_toolbar/panels/sql.html:52 #, python-format msgid "%(count)s similar queries." msgstr "%(count)s consultas similares. " #: templates/debug_toolbar/panels/sql.html:58 #, python-format msgid "Duplicated %(dupes)s times." msgstr "Repetidas %(dupes)s veces." #: templates/debug_toolbar/panels/sql.html:95 msgid "Connection:" msgstr "Conexión:" #: templates/debug_toolbar/panels/sql.html:97 msgid "Isolation level:" msgstr "Nivel de aislamiento:" #: templates/debug_toolbar/panels/sql.html:100 msgid "Transaction status:" msgstr "Estado de la transacción:" #: templates/debug_toolbar/panels/sql.html:114 msgid "(unknown)" msgstr "(desconocido)" #: templates/debug_toolbar/panels/sql.html:123 msgid "No SQL queries were recorded during this request." msgstr "No se registraron consultas SQL durante ésta petición." #: templates/debug_toolbar/panels/sql_explain.html:4 msgid "SQL explained" msgstr "SQL explicado" #: templates/debug_toolbar/panels/sql_explain.html:9 #: templates/debug_toolbar/panels/sql_profile.html:10 #: templates/debug_toolbar/panels/sql_select.html:9 msgid "Executed SQL" msgstr "SQL Ejecutado" #: templates/debug_toolbar/panels/sql_explain.html:13 #: templates/debug_toolbar/panels/sql_profile.html:14 #: templates/debug_toolbar/panels/sql_select.html:13 msgid "Database" msgstr "Base de datos" #: templates/debug_toolbar/panels/sql_profile.html:4 msgid "SQL profiled" msgstr "SQL analizado" #: templates/debug_toolbar/panels/sql_profile.html:37 msgid "Error" msgstr "Error" #: templates/debug_toolbar/panels/sql_select.html:4 msgid "SQL selected" msgstr "SQL seleccionado" #: templates/debug_toolbar/panels/sql_select.html:36 msgid "Empty set" msgstr "Establecer Vacío" #: templates/debug_toolbar/panels/staticfiles.html:3 msgid "Static file path" msgid_plural "Static file paths" msgstr[0] "Ruta a archivos estático" msgstr[1] "Rutas a archivos estáticos" msgstr[2] "Rutas a archivos estáticos" #: templates/debug_toolbar/panels/staticfiles.html:7 #, python-format msgid "(prefix %(prefix)s)" msgstr "(prefijo %(prefix)s)" #: templates/debug_toolbar/panels/staticfiles.html:11 #: templates/debug_toolbar/panels/staticfiles.html:22 #: templates/debug_toolbar/panels/staticfiles.html:34 #: templates/debug_toolbar/panels/templates.html:10 #: templates/debug_toolbar/panels/templates.html:30 #: templates/debug_toolbar/panels/templates.html:47 msgid "None" msgstr "Ninguno" #: templates/debug_toolbar/panels/staticfiles.html:14 msgid "Static file app" msgid_plural "Static file apps" msgstr[0] "Aplicación a archivos estáticos" msgstr[1] "Aplicaciones de archivos estáticos" msgstr[2] "Aplicaciones de archivos estáticos" #: templates/debug_toolbar/panels/staticfiles.html:25 msgid "Static file" msgid_plural "Static files" msgstr[0] "Archivo estático" msgstr[1] "Archivos estáticos" msgstr[2] "Archivos estáticos" #: templates/debug_toolbar/panels/staticfiles.html:39 #, python-format msgid "%(payload_count)s file" msgid_plural "%(payload_count)s files" msgstr[0] "%(payload_count)s archivo" msgstr[1] "%(payload_count)s archivos" msgstr[2] "%(payload_count)s archivos" #: templates/debug_toolbar/panels/staticfiles.html:44 msgid "Location" msgstr "Ubicación" #: templates/debug_toolbar/panels/template_source.html:4 msgid "Template source:" msgstr "Fuente de plantilla:" #: templates/debug_toolbar/panels/templates.html:2 msgid "Template path" msgid_plural "Template paths" msgstr[0] "Ruta de plantilla" msgstr[1] "Rutas de plantillas" msgstr[2] "Rutas de plantillas" #: templates/debug_toolbar/panels/templates.html:13 msgid "Template" msgid_plural "Templates" msgstr[0] "Plantilla" msgstr[1] "Plantillas" msgstr[2] "Plantillas" #: templates/debug_toolbar/panels/templates.html:22 #: templates/debug_toolbar/panels/templates.html:40 msgid "Toggle context" msgstr "Mostrar/Ocultar contexto" #: templates/debug_toolbar/panels/templates.html:33 msgid "Context processor" msgid_plural "Context processors" msgstr[0] "Procesador de contexto" msgstr[1] "Procesadores de contexto" msgstr[2] "Procesadores de contexto" #: templates/debug_toolbar/panels/timer.html:2 msgid "Resource usage" msgstr "Uso de recursos" #: templates/debug_toolbar/panels/timer.html:10 msgid "Resource" msgstr "Recurso" #: templates/debug_toolbar/panels/timer.html:26 msgid "Browser timing" msgstr "Distribución de tiempos de navegador" #: templates/debug_toolbar/panels/timer.html:35 msgid "Timing attribute" msgstr "Atributo de tiempo" #: templates/debug_toolbar/panels/timer.html:37 msgid "Milliseconds since navigation start (+length)" msgstr "Milisegundos desde inicio de la navegación (+longitud)" #: templates/debug_toolbar/panels/versions.html:10 msgid "Package" msgstr "Paquete" #: templates/debug_toolbar/panels/versions.html:11 msgid "Name" msgstr "Nombre" #: templates/debug_toolbar/panels/versions.html:12 msgid "Version" msgstr "Versión" #: templates/debug_toolbar/redirect.html:10 msgid "Location:" msgstr "Ubicación:" #: templates/debug_toolbar/redirect.html:12 msgid "" "The Django Debug Toolbar has intercepted a redirect to the above URL for " "debug viewing purposes. You can click the above link to continue with the " "redirect as normal." msgstr "El Django Debug Toolbar ha interceptado un re-direccionamiento a la dirección de Internet mostrada arriba, con el propósito de inspeccionarla. Usted puede hacer clic en el vínculo de arriba para continuar con el re-direccionamiento normalmente." #: views.py:16 msgid "" "Data for this panel isn't available anymore. Please reload the page and " "retry." msgstr "La información de este panel ya no se encuentra disponible. Por favor recargue la página y pruebe nuevamente." python-django-debug-toolbar-5.2.0/debug_toolbar/locale/fa/000077500000000000000000000000001500406072000234525ustar00rootroot00000000000000python-django-debug-toolbar-5.2.0/debug_toolbar/locale/fa/LC_MESSAGES/000077500000000000000000000000001500406072000252375ustar00rootroot00000000000000python-django-debug-toolbar-5.2.0/debug_toolbar/locale/fa/LC_MESSAGES/django.mo000066400000000000000000000234351500406072000270450ustar00rootroot00000000000000,< J < lW N . UB     )  # - 7 E L S ] h p "  F   $'L]eNk (  #'-U [hqy ~ -3 8 D1Q     ,<ETe i wL     '.h6 5 &C "* 9 EP_sx   6eWv" #'D"l8 )2F ^jWw _j 9  "b-F"( AKN  '$9^p y :"#E=!%   & C d r    !!!2! A!cN!! !!! ""2"E"L"`"#g&# # ####.#N$c%l%%%%%%*%'&';&c&{& &&"& & && & && '4_#t:$xBOd[^}9gn&qC(aAP!*8`,6LyI{e|)F p@sRS  ?D%\l.-w"5;~T =McQ2i1G/v]VE<XK+r JkmoYZ3jU07zWN>b'Hufh%(cache_calls)d call in %(time).2fms%(cache_calls)d calls in %(time).2fms%(count)s similar queries.%(num_receivers)d receiver of %(num_signals)d signals%(num_receivers)d receivers of %(num_signals)d signals%(num_receivers)d receiver of 1 signal%(num_receivers)d receivers of 1 signal%(num_used)s file used%(num_used)s files used%(query_count)d query in %(sql_time).2fms%(query_count)d queries in %(sql_time).2fms%(stime)0.3f msec%(total)0.3f msec%(total_time)0.3f msec%(utime)0.3f msec%(vcsw)d voluntary, %(ivcsw)d involuntary(prefix %(prefix)s)(unknown)ActionActiveArgumentsAutocommitBackendBrowser timingCPU: %(cum)0.2fms (%(total)0.2fms)CacheCache calls from %(count)d backendCache calls from %(count)d backendsCache hitsCache missesCallCallsCommandsConnection:Context processorContext processorsContext switchesCookiesCountData for this panel isn't available anymore. Please reload the page and retry.DatabaseDebug ToolbarDisable for next and successive requestsDuplicated %(dupes)s times.Elapsed timeEmpty setEnable for next and successive requestsErrorExecuted SQLGET dataHeadersHideHide toolbarHistoryIdleIn errorIn transactionIntercept redirectsIsolation level:KeyKeyword argumentsLocationLocation:MethodMilliseconds since navigation start (+length)NameNo GET dataNo POST dataNo SQL queries were recorded during this request.No cookiesNo originNo session dataNonePOST dataPackagePathPerProfilingQueryRead committedRead uncommittedReceiversRepeatable readRequestRequest VariablesRequest headersResourceResource usageResponse headersSQLSQL explainedSQL profiledSQL queries from %(count)d connectionSQL queries from %(count)d connectionsSQL selectedSerializableSession dataSettingSettingsSettings from %sShow toolbarSignalSignalsSince the WSGI environ inherits the environment of the server, only a significant subset is shown below.Static filesStatic files (%(num_found)s found, %(num_used)s used)StatusSummarySystem CPU timeTemplate source:TemplatesTemplates (%(num_templates)s rendered)The Django Debug Toolbar has intercepted a redirect to the above URL for debug viewing purposes. You can click the above link to continue with the redirect as normal.TimeTime (ms)TimelineTiming attributeToggle contextTotTimeTotal CPU timeTotal callsTotal timeTotal: %0.2fmsTransaction status:TypeURL nameUnknownUser CPU timeValueVariableVersionVersionsView functionView informationWSGI environProject-Id-Version: Django Debug Toolbar Report-Msgid-Bugs-To: PO-Revision-Date: 2010-11-30 00:00+0000 Last-Translator: Elyas Ebrahimpour , 2024 Language-Team: Persian (http://app.transifex.com/django-debug-toolbar/django-debug-toolbar/language/fa/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: fa Plural-Forms: nplurals=2; plural=(n > 1); %(cache_calls)d فراخوان در %(time).2f میلی‌ثانیه%(cache_calls)d فراخوان در %(time).2f میلی‌ثانیه%(count)s کوئری مشابه%(num_receivers)d گیرنده از %(num_signals)d سیگنال%(num_receivers)d گیرنده از %(num_signals)d سیگنال%(num_receivers)d گیرنده از 1 سیگنال%(num_receivers)d گیرنده از 1 سیگنال%(num_used)s فایل استفاده شده%(num_used)s فایل استفاده شده%(query_count)d کوئری در %(sql_time).2f میلی‌ثانیه%(query_count)d کوئری در %(sql_time).2f میلی‌ثانیه%(stime)0.3f میلی‌ثانیه%(total)0.3f میلی ثانیه%(total_time)0.3f میلی‌ثانیه%(utime)0.3f میلی‌ثانیه%(vcsw)d اختیاری، %(ivcsw)d غیراختیاری(prefix %(prefix)s)(ناشناخته)<بدون نمایش><در دسترس نیست>اکشنفعالآرگومان هاکامیت خودکاربک اندزمان بندی مرورگرپردازنده: %(cum)0.2f میلی‌ثانیه (%(total)0.2f میلی‌ثانیه)Cacheفراخوان‌های کش از %(count)d بک‌اندفراخوان‌های کش از %(count)d بک‌اندهاCache hitsعدم دسترسی به کشCallفراخوانی هادستوراتکانکشن:پردازشگر محیطپردازشگرهای محیطتغییرات زمینهکوکی هاتعداددیتا برای نمایش در دسترس نیست. لطفا صفحه را ریفرش کنید.دیتابیسنوار ابزار دیباگغیر فعال کردن برای ریکوئست های پی در پی%(dupes)s بار تکرار شدهزمان سپری شدهset خالیفعال کردن برای ریکوئست های بعدی و پی در پیخطاکوئری اجرا شدهدیتای GETهدر هاپنهان کردنپنهان کردن toolbarتاریخچهIDLEدر خطادر تراکنشرهگیری تغییر مسیرهاسطح isolation:کلیدآرگومان های کیوردمکانمکان:متدمیلی‌ثانیه از آغاز ناوبری (+length)نامدیتای GET وجود ندارددیتای POST وجود نداردکوئری SQL ای در این ریکوئست ثبت نشده استکوکی ای وجود نداردبدون originدیتای سشن وجود نداردخالیدیتای POSTپکیجPathبرنمایه سازیکوئریخواندن با تاثیرخواندن بدون تاثیرReceiver هاخواندن تکرارپذیرریکوئستمتغیر های ریکوئستهدر های ریکوئستمنابعاستفاده منابعهدر های ریسپانساس کیو التوضیح SQLSQL profiledکوئری‌های SQL از %(count)d اتصالکوئری‌های SQL از %(count)d اتصالانتخاب شده SQLقابل سریالایز شدندیتای سشنتنظیماتتنظیماتتنظیمات از %sنمایش toolbarSignalسیگنال‌هااز آنجا که محیط WSGI محیط سرور را به ارث می برد ، فقط یک زیر مجموعه مهم در زیر نشان داده شده است.فایل های استاتیکفایل‌های استاتیک (%(num_found)s یافته شده، %(num_used)s استفاده شده)وضعیتخلاصهزمان CPU سیستممنبع تمپلیت:تمپلیت هاتمپلیت ها (%(num_templates)s rendered)نوار ابزار اشکال‌زدای Django یک هدایت به URL بالا را به منظور مشاهده اشکال توسط ابزار اشکال‌زدای افزونه کرده است. می‌توانید بر روی پیوند بالا کلیک کنید تا با هدایت به صورت عادی ادامه دهید.زمانزمان (میلی ثانیه)تایملاینویژگی زمان بندیتغییر متنزمان نهاییزمان کل سی پی یوتعداد نهایی کال کردن هازمان نهاییمجموع: %0.2f میلی‌ثانیهوضعیت تراکنشنوعنام URLناشناختهزمان سی پی یو کاربرمقدارمتغیرورژنورژن هاتابع Viwاطلاعات Viewمحیط WSGIpython-django-debug-toolbar-5.2.0/debug_toolbar/locale/fa/LC_MESSAGES/django.po000066400000000000000000000464341500406072000270540ustar00rootroot00000000000000# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # # Translators: # Ali Soltani , 2021 # Elyas Ebrahimpour , 2024 msgid "" msgstr "" "Project-Id-Version: Django Debug Toolbar\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2024-08-06 07:12-0500\n" "PO-Revision-Date: 2010-11-30 00:00+0000\n" "Last-Translator: Elyas Ebrahimpour , 2024\n" "Language-Team: Persian (http://app.transifex.com/django-debug-toolbar/django-debug-toolbar/language/fa/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: fa\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" #: apps.py:18 msgid "Debug Toolbar" msgstr "نوار ابزار دیباگ" #: panels/alerts.py:67 #, python-brace-format msgid "" "Form with id \"{form_id}\" contains file input, but does not have the " "attribute enctype=\"multipart/form-data\"." msgstr "" #: panels/alerts.py:70 msgid "" "Form contains file input, but does not have the attribute " "enctype=\"multipart/form-data\"." msgstr "" #: panels/alerts.py:73 #, python-brace-format msgid "" "Input element references form with id \"{form_id}\", but the form does not " "have the attribute enctype=\"multipart/form-data\"." msgstr "" #: panels/alerts.py:77 msgid "Alerts" msgstr "" #: panels/cache.py:168 msgid "Cache" msgstr "Cache" #: panels/cache.py:174 #, python-format msgid "%(cache_calls)d call in %(time).2fms" msgid_plural "%(cache_calls)d calls in %(time).2fms" msgstr[0] "%(cache_calls)d فراخوان در %(time).2f میلی‌ثانیه" msgstr[1] "%(cache_calls)d فراخوان در %(time).2f میلی‌ثانیه" #: panels/cache.py:183 #, python-format msgid "Cache calls from %(count)d backend" msgid_plural "Cache calls from %(count)d backends" msgstr[0] "فراخوان‌های کش از %(count)d بک‌اند" msgstr[1] "فراخوان‌های کش از %(count)d بک‌اندها" #: panels/headers.py:31 msgid "Headers" msgstr "هدر ها" #: panels/history/panel.py:19 panels/history/panel.py:20 msgid "History" msgstr "تاریخچه" #: panels/profiling.py:140 msgid "Profiling" msgstr "نمایه سازی" #: panels/redirects.py:17 msgid "Intercept redirects" msgstr "رهگیری تغییر مسیرها" #: panels/request.py:16 msgid "Request" msgstr "ریکوئست" #: panels/request.py:38 msgid "" msgstr "<بدون نمایش>" #: panels/request.py:55 msgid "" msgstr "<در دسترس نیست>" #: panels/settings.py:17 msgid "Settings" msgstr "تنظیمات" #: panels/settings.py:20 #, python-format msgid "Settings from %s" msgstr "تنظیمات از %s" #: panels/signals.py:57 #, python-format msgid "%(num_receivers)d receiver of 1 signal" msgid_plural "%(num_receivers)d receivers of 1 signal" msgstr[0] "%(num_receivers)d گیرنده از 1 سیگنال" msgstr[1] "%(num_receivers)d گیرنده از 1 سیگنال" #: panels/signals.py:62 #, python-format msgid "%(num_receivers)d receiver of %(num_signals)d signals" msgid_plural "%(num_receivers)d receivers of %(num_signals)d signals" msgstr[0] "%(num_receivers)d گیرنده از %(num_signals)d سیگنال" msgstr[1] "%(num_receivers)d گیرنده از %(num_signals)d سیگنال" #: panels/signals.py:67 msgid "Signals" msgstr "سیگنال‌ها" #: panels/sql/panel.py:30 panels/sql/panel.py:41 msgid "Read uncommitted" msgstr "خواندن بدون تاثیر" #: panels/sql/panel.py:31 panels/sql/panel.py:43 msgid "Read committed" msgstr "خواندن با تاثیر" #: panels/sql/panel.py:32 panels/sql/panel.py:45 msgid "Repeatable read" msgstr "خواندن تکرارپذیر" #: panels/sql/panel.py:33 panels/sql/panel.py:47 msgid "Serializable" msgstr "قابل سریالایز شدن" #: panels/sql/panel.py:39 msgid "Autocommit" msgstr "کامیت خودکار" #: panels/sql/panel.py:61 panels/sql/panel.py:71 msgid "Idle" msgstr "IDLE" #: panels/sql/panel.py:62 panels/sql/panel.py:72 msgid "Active" msgstr "فعال" #: panels/sql/panel.py:63 panels/sql/panel.py:73 msgid "In transaction" msgstr "در تراکنش" #: panels/sql/panel.py:64 panels/sql/panel.py:74 msgid "In error" msgstr "در خطا" #: panels/sql/panel.py:65 panels/sql/panel.py:75 msgid "Unknown" msgstr "ناشناخته" #: panels/sql/panel.py:162 msgid "SQL" msgstr "اس کیو ال" #: panels/sql/panel.py:168 #, python-format msgid "%(query_count)d query in %(sql_time).2fms" msgid_plural "%(query_count)d queries in %(sql_time).2fms" msgstr[0] "%(query_count)d کوئری در %(sql_time).2f میلی‌ثانیه" msgstr[1] "%(query_count)d کوئری در %(sql_time).2f میلی‌ثانیه" #: panels/sql/panel.py:180 #, python-format msgid "SQL queries from %(count)d connection" msgid_plural "SQL queries from %(count)d connections" msgstr[0] "کوئری‌های SQL از %(count)d اتصال" msgstr[1] "کوئری‌های SQL از %(count)d اتصال" #: panels/staticfiles.py:82 #, python-format msgid "Static files (%(num_found)s found, %(num_used)s used)" msgstr "فایل‌های استاتیک (%(num_found)s یافته شده، %(num_used)s استفاده شده)" #: panels/staticfiles.py:103 msgid "Static files" msgstr "فایل های استاتیک" #: panels/staticfiles.py:109 #, python-format msgid "%(num_used)s file used" msgid_plural "%(num_used)s files used" msgstr[0] "%(num_used)s فایل استفاده شده" msgstr[1] "%(num_used)s فایل استفاده شده" #: panels/templates/panel.py:101 msgid "Templates" msgstr "تمپلیت ها" #: panels/templates/panel.py:106 #, python-format msgid "Templates (%(num_templates)s rendered)" msgstr "تمپلیت ها (%(num_templates)s rendered)" #: panels/templates/panel.py:195 msgid "No origin" msgstr "بدون origin" #: panels/timer.py:27 #, python-format msgid "CPU: %(cum)0.2fms (%(total)0.2fms)" msgstr "پردازنده: %(cum)0.2f میلی‌ثانیه (%(total)0.2f میلی‌ثانیه)" #: panels/timer.py:32 #, python-format msgid "Total: %0.2fms" msgstr "مجموع: %0.2f میلی‌ثانیه" #: panels/timer.py:38 templates/debug_toolbar/panels/history.html:9 #: templates/debug_toolbar/panels/sql_explain.html:11 #: templates/debug_toolbar/panels/sql_profile.html:12 #: templates/debug_toolbar/panels/sql_select.html:11 msgid "Time" msgstr "زمان" #: panels/timer.py:46 msgid "User CPU time" msgstr "زمان سی پی یو کاربر" #: panels/timer.py:46 #, python-format msgid "%(utime)0.3f msec" msgstr "%(utime)0.3f میلی‌ثانیه" #: panels/timer.py:47 msgid "System CPU time" msgstr "زمان CPU سیستم" #: panels/timer.py:47 #, python-format msgid "%(stime)0.3f msec" msgstr "%(stime)0.3f میلی‌ثانیه" #: panels/timer.py:48 msgid "Total CPU time" msgstr "زمان کل سی پی یو" #: panels/timer.py:48 #, python-format msgid "%(total)0.3f msec" msgstr "%(total)0.3f میلی ثانیه" #: panels/timer.py:49 msgid "Elapsed time" msgstr "زمان سپری شده" #: panels/timer.py:49 #, python-format msgid "%(total_time)0.3f msec" msgstr "%(total_time)0.3f میلی‌ثانیه" #: panels/timer.py:51 msgid "Context switches" msgstr "تغییرات زمینه" #: panels/timer.py:52 #, python-format msgid "%(vcsw)d voluntary, %(ivcsw)d involuntary" msgstr "%(vcsw)d اختیاری، %(ivcsw)d غیراختیاری" #: panels/versions.py:19 msgid "Versions" msgstr "ورژن ها" #: templates/debug_toolbar/base.html:23 msgid "Hide toolbar" msgstr "پنهان کردن toolbar" #: templates/debug_toolbar/base.html:23 msgid "Hide" msgstr "پنهان کردن" #: templates/debug_toolbar/base.html:25 templates/debug_toolbar/base.html:26 msgid "Toggle Theme" msgstr "" #: templates/debug_toolbar/base.html:35 msgid "Show toolbar" msgstr "نمایش toolbar" #: templates/debug_toolbar/includes/panel_button.html:4 msgid "Disable for next and successive requests" msgstr "غیر فعال کردن برای ریکوئست های پی در پی" #: templates/debug_toolbar/includes/panel_button.html:4 msgid "Enable for next and successive requests" msgstr "فعال کردن برای ریکوئست های بعدی و پی در پی" #: templates/debug_toolbar/panels/alerts.html:4 msgid "Alerts found" msgstr "" #: templates/debug_toolbar/panels/alerts.html:11 msgid "No alerts found" msgstr "" #: templates/debug_toolbar/panels/cache.html:2 msgid "Summary" msgstr "خلاصه" #: templates/debug_toolbar/panels/cache.html:6 msgid "Total calls" msgstr "تعداد نهایی کال کردن ها" #: templates/debug_toolbar/panels/cache.html:7 msgid "Total time" msgstr "زمان نهایی" #: templates/debug_toolbar/panels/cache.html:8 msgid "Cache hits" msgstr "Cache hits" #: templates/debug_toolbar/panels/cache.html:9 msgid "Cache misses" msgstr "عدم دسترسی به کش" #: templates/debug_toolbar/panels/cache.html:21 msgid "Commands" msgstr "دستورات" #: templates/debug_toolbar/panels/cache.html:39 msgid "Calls" msgstr "فراخوانی ها" #: templates/debug_toolbar/panels/cache.html:43 #: templates/debug_toolbar/panels/sql.html:36 msgid "Time (ms)" msgstr "زمان (میلی ثانیه)" #: templates/debug_toolbar/panels/cache.html:44 msgid "Type" msgstr "نوع" #: templates/debug_toolbar/panels/cache.html:45 #: templates/debug_toolbar/panels/request.html:8 msgid "Arguments" msgstr "آرگومان ها" #: templates/debug_toolbar/panels/cache.html:46 #: templates/debug_toolbar/panels/request.html:9 msgid "Keyword arguments" msgstr "آرگومان های کیورد" #: templates/debug_toolbar/panels/cache.html:47 msgid "Backend" msgstr "بک اند" #: templates/debug_toolbar/panels/headers.html:3 msgid "Request headers" msgstr "هدر های ریکوئست" #: templates/debug_toolbar/panels/headers.html:8 #: templates/debug_toolbar/panels/headers.html:27 #: templates/debug_toolbar/panels/headers.html:48 msgid "Key" msgstr "کلید" #: templates/debug_toolbar/panels/headers.html:9 #: templates/debug_toolbar/panels/headers.html:28 #: templates/debug_toolbar/panels/headers.html:49 #: templates/debug_toolbar/panels/history_tr.html:23 #: templates/debug_toolbar/panels/request_variables.html:12 #: templates/debug_toolbar/panels/settings.html:6 #: templates/debug_toolbar/panels/timer.html:11 msgid "Value" msgstr "مقدار" #: templates/debug_toolbar/panels/headers.html:22 msgid "Response headers" msgstr "هدر های ریسپانس" #: templates/debug_toolbar/panels/headers.html:41 msgid "WSGI environ" msgstr "محیط WSGI" #: templates/debug_toolbar/panels/headers.html:43 msgid "" "Since the WSGI environ inherits the environment of the server, only a " "significant subset is shown below." msgstr "از آنجا که محیط WSGI محیط سرور را به ارث می برد ، فقط یک زیر مجموعه مهم در زیر نشان داده شده است." #: templates/debug_toolbar/panels/history.html:10 msgid "Method" msgstr "متد" #: templates/debug_toolbar/panels/history.html:11 #: templates/debug_toolbar/panels/staticfiles.html:43 msgid "Path" msgstr "Path" #: templates/debug_toolbar/panels/history.html:12 msgid "Request Variables" msgstr "متغیر های ریکوئست" #: templates/debug_toolbar/panels/history.html:13 msgid "Status" msgstr "وضعیت" #: templates/debug_toolbar/panels/history.html:14 #: templates/debug_toolbar/panels/sql.html:37 msgid "Action" msgstr "اکشن" #: templates/debug_toolbar/panels/history_tr.html:22 #: templates/debug_toolbar/panels/request_variables.html:11 msgid "Variable" msgstr "متغیر" #: templates/debug_toolbar/panels/profiling.html:5 msgid "Call" msgstr "Call" #: templates/debug_toolbar/panels/profiling.html:6 msgid "CumTime" msgstr "" #: templates/debug_toolbar/panels/profiling.html:7 #: templates/debug_toolbar/panels/profiling.html:9 msgid "Per" msgstr "بر" #: templates/debug_toolbar/panels/profiling.html:8 msgid "TotTime" msgstr "زمان نهایی" #: templates/debug_toolbar/panels/profiling.html:10 msgid "Count" msgstr "تعداد" #: templates/debug_toolbar/panels/request.html:3 msgid "View information" msgstr "اطلاعات View" #: templates/debug_toolbar/panels/request.html:7 msgid "View function" msgstr "تابع Viw" #: templates/debug_toolbar/panels/request.html:10 msgid "URL name" msgstr "نام URL" #: templates/debug_toolbar/panels/request.html:24 msgid "Cookies" msgstr "کوکی ها" #: templates/debug_toolbar/panels/request.html:27 msgid "No cookies" msgstr "کوکی ای وجود ندارد" #: templates/debug_toolbar/panels/request.html:31 msgid "Session data" msgstr "دیتای سشن" #: templates/debug_toolbar/panels/request.html:34 msgid "No session data" msgstr "دیتای سشن وجود ندارد" #: templates/debug_toolbar/panels/request.html:38 msgid "GET data" msgstr "دیتای GET" #: templates/debug_toolbar/panels/request.html:41 msgid "No GET data" msgstr "دیتای GET وجود ندارد" #: templates/debug_toolbar/panels/request.html:45 msgid "POST data" msgstr "دیتای POST" #: templates/debug_toolbar/panels/request.html:48 msgid "No POST data" msgstr "دیتای POST وجود ندارد" #: templates/debug_toolbar/panels/settings.html:5 msgid "Setting" msgstr "تنظیمات" #: templates/debug_toolbar/panels/signals.html:5 msgid "Signal" msgstr "Signal" #: templates/debug_toolbar/panels/signals.html:6 msgid "Receivers" msgstr "Receiver ها" #: templates/debug_toolbar/panels/sql.html:6 #, python-format msgid "%(num)s query" msgid_plural "%(num)s queries" msgstr[0] "" msgstr[1] "" #: templates/debug_toolbar/panels/sql.html:8 #, python-format msgid "" "including %(count)s similar" msgstr "" #: templates/debug_toolbar/panels/sql.html:12 #, python-format msgid "" "and %(dupes)s duplicates" msgstr "" #: templates/debug_toolbar/panels/sql.html:34 msgid "Query" msgstr "کوئری" #: templates/debug_toolbar/panels/sql.html:35 #: templates/debug_toolbar/panels/timer.html:36 msgid "Timeline" msgstr "تایملاین" #: templates/debug_toolbar/panels/sql.html:52 #, python-format msgid "%(count)s similar queries." msgstr "%(count)s کوئری مشابه" #: templates/debug_toolbar/panels/sql.html:58 #, python-format msgid "Duplicated %(dupes)s times." msgstr "%(dupes)s بار تکرار شده" #: templates/debug_toolbar/panels/sql.html:95 msgid "Connection:" msgstr "کانکشن:" #: templates/debug_toolbar/panels/sql.html:97 msgid "Isolation level:" msgstr "سطح isolation:" #: templates/debug_toolbar/panels/sql.html:100 msgid "Transaction status:" msgstr "وضعیت تراکنش" #: templates/debug_toolbar/panels/sql.html:114 msgid "(unknown)" msgstr "(ناشناخته)" #: templates/debug_toolbar/panels/sql.html:123 msgid "No SQL queries were recorded during this request." msgstr "کوئری SQL ای در این ریکوئست ثبت نشده است" #: templates/debug_toolbar/panels/sql_explain.html:4 msgid "SQL explained" msgstr "توضیح SQL" #: templates/debug_toolbar/panels/sql_explain.html:9 #: templates/debug_toolbar/panels/sql_profile.html:10 #: templates/debug_toolbar/panels/sql_select.html:9 msgid "Executed SQL" msgstr "کوئری اجرا شده" #: templates/debug_toolbar/panels/sql_explain.html:13 #: templates/debug_toolbar/panels/sql_profile.html:14 #: templates/debug_toolbar/panels/sql_select.html:13 msgid "Database" msgstr "دیتابیس" #: templates/debug_toolbar/panels/sql_profile.html:4 msgid "SQL profiled" msgstr "SQL profiled" #: templates/debug_toolbar/panels/sql_profile.html:37 msgid "Error" msgstr "خطا" #: templates/debug_toolbar/panels/sql_select.html:4 msgid "SQL selected" msgstr "انتخاب شده SQL" #: templates/debug_toolbar/panels/sql_select.html:36 msgid "Empty set" msgstr "set خالی" #: templates/debug_toolbar/panels/staticfiles.html:3 msgid "Static file path" msgid_plural "Static file paths" msgstr[0] "" msgstr[1] "" #: templates/debug_toolbar/panels/staticfiles.html:7 #, python-format msgid "(prefix %(prefix)s)" msgstr "(prefix %(prefix)s)" #: templates/debug_toolbar/panels/staticfiles.html:11 #: templates/debug_toolbar/panels/staticfiles.html:22 #: templates/debug_toolbar/panels/staticfiles.html:34 #: templates/debug_toolbar/panels/templates.html:10 #: templates/debug_toolbar/panels/templates.html:30 #: templates/debug_toolbar/panels/templates.html:47 msgid "None" msgstr "خالی" #: templates/debug_toolbar/panels/staticfiles.html:14 msgid "Static file app" msgid_plural "Static file apps" msgstr[0] "" msgstr[1] "" #: templates/debug_toolbar/panels/staticfiles.html:25 msgid "Static file" msgid_plural "Static files" msgstr[0] "" msgstr[1] "" #: templates/debug_toolbar/panels/staticfiles.html:39 #, python-format msgid "%(payload_count)s file" msgid_plural "%(payload_count)s files" msgstr[0] "" msgstr[1] "" #: templates/debug_toolbar/panels/staticfiles.html:44 msgid "Location" msgstr "مکان" #: templates/debug_toolbar/panels/template_source.html:4 msgid "Template source:" msgstr "منبع تمپلیت:" #: templates/debug_toolbar/panels/templates.html:2 msgid "Template path" msgid_plural "Template paths" msgstr[0] "" msgstr[1] "" #: templates/debug_toolbar/panels/templates.html:13 msgid "Template" msgid_plural "Templates" msgstr[0] "" msgstr[1] "" #: templates/debug_toolbar/panels/templates.html:22 #: templates/debug_toolbar/panels/templates.html:40 msgid "Toggle context" msgstr "تغییر متن" #: templates/debug_toolbar/panels/templates.html:33 msgid "Context processor" msgid_plural "Context processors" msgstr[0] "پردازشگر محیط" msgstr[1] "پردازشگرهای محیط" #: templates/debug_toolbar/panels/timer.html:2 msgid "Resource usage" msgstr "استفاده منابع" #: templates/debug_toolbar/panels/timer.html:10 msgid "Resource" msgstr "منابع" #: templates/debug_toolbar/panels/timer.html:26 msgid "Browser timing" msgstr "زمان بندی مرورگر" #: templates/debug_toolbar/panels/timer.html:35 msgid "Timing attribute" msgstr "ویژگی زمان بندی" #: templates/debug_toolbar/panels/timer.html:37 msgid "Milliseconds since navigation start (+length)" msgstr "میلی‌ثانیه از آغاز ناوبری (+length)" #: templates/debug_toolbar/panels/versions.html:10 msgid "Package" msgstr "پکیج" #: templates/debug_toolbar/panels/versions.html:11 msgid "Name" msgstr "نام" #: templates/debug_toolbar/panels/versions.html:12 msgid "Version" msgstr "ورژن" #: templates/debug_toolbar/redirect.html:10 msgid "Location:" msgstr "مکان:" #: templates/debug_toolbar/redirect.html:12 msgid "" "The Django Debug Toolbar has intercepted a redirect to the above URL for " "debug viewing purposes. You can click the above link to continue with the " "redirect as normal." msgstr "نوار ابزار اشکال‌زدای Django یک هدایت به URL بالا را به منظور مشاهده اشکال توسط ابزار اشکال‌زدای افزونه کرده است. می‌توانید بر روی پیوند بالا کلیک کنید تا با هدایت به صورت عادی ادامه دهید." #: views.py:16 msgid "" "Data for this panel isn't available anymore. Please reload the page and " "retry." msgstr "دیتا برای نمایش در دسترس نیست. لطفا صفحه را ریفرش کنید." python-django-debug-toolbar-5.2.0/debug_toolbar/locale/fi/000077500000000000000000000000001500406072000234625ustar00rootroot00000000000000python-django-debug-toolbar-5.2.0/debug_toolbar/locale/fi/LC_MESSAGES/000077500000000000000000000000001500406072000252475ustar00rootroot00000000000000python-django-debug-toolbar-5.2.0/debug_toolbar/locale/fi/LC_MESSAGES/django.mo000066400000000000000000000101501500406072000270430ustar00rootroot00000000000000EDalJ<lZN(:Q cmt {" $  $ *7<ETeir w 1       $ 1 A T q &{             1 F  u! Y    , > K U _ "j   '    ,4: KX^g l y7   (=U!i/  $:?HOWB#)?  $A8, =-";*4(.956>E D< &1C3!'2%7 @+/0:%(cache_calls)d call in %(time).2fms%(cache_calls)d calls in %(time).2fms%(num)s query%(num)s queries%(num_receivers)d receiver of %(num_signals)d signals%(num_receivers)d receivers of %(num_signals)d signals%(num_receivers)d receiver of 1 signal%(num_receivers)d receivers of 1 signal%(stime)0.3f msec%(total)0.3f msec%(total_time)0.3f msec%(utime)0.3f msec(unknown)ActionActiveAutocommitCPU: %(cum)0.2fms (%(total)0.2fms)CacheCallConnection:Context processorContext processorsContext switchesCountCumTimeDatabaseElapsed timeEmpty setErrorExecuted SQLHideIn errorIn transactionIsolation level:KeyLocationNameNo GET dataNo POST dataNo SQL queries were recorded during this request.NonePathPerProfilingQueryReceiversResourceSQLSerializableSettingSettingsSignalSignalsStatic filesSystem CPU timeTemplateTemplatesTemplate pathTemplate pathsTemplatesTemplates (%(num_templates)s rendered)TimeTime (ms)TimelineTotTimeTotal CPU timeTransaction status:TypeUnknownUser CPU timeValueVariableVersionVersionsView informationProject-Id-Version: Django Debug Toolbar Report-Msgid-Bugs-To: PO-Revision-Date: 2010-11-30 00:00+0000 Last-Translator: Klaus Dahlén, 2012 Language-Team: Finnish (http://app.transifex.com/django-debug-toolbar/django-debug-toolbar/language/fi/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: fi Plural-Forms: nplurals=2; plural=(n != 1); %(cache_calls)d kutsu %(time).2fms%(cache_calls)d kutsua %(time).2fms%(num)s kysely%(num)s kyselyä%(num_receivers)d vastaanotin %(num_signals)d signaalille%(num_receivers)d vastaanotinta %(num_signals)d signaalille%(num_receivers)d vastaanotin 1 signaalille%(num_receivers)d vastaanotinta 1 signaalille%(stime)0.3f msek%(total)0.3f msek%(total_time)0.3f msek%(utime)0.3f msek(tuntematon)TapahtumaTapahtumaAutocommitCPU: %(cum)0.2fms (%(total)0.2fms)VälimuistiKutsuYhteys:KontekstiprosessoriKontekstiprosessoriKontekstin vivutMääräCumTimeTietokantaKulunut aikaTyhjä joukkoVirheSuoritettu SQLPiilotaVirheTapahtuman tila:Eristystaso:AvainSijaintiNimiEi GET-dataaEi POST-dataaTämän pyynnön aikana ei tehty yhtään SQL-kyselyä.NonePolku/ProfilointiKyselyVastaanottimetResurssiSQLMuuttujaAsetusAsetuksetSignaaliSignaalitStaattiset tiedostotJärjestelmän CPU-aikaSivupohjaSivupohjaSivupohjan polkuSivupohjan polkuAsettelupohjatAsetttelupohjat (%(num_templates)s renderöity)AikaAika (ms)AikajanaTotTimeCPU-aika yhteensäTapahtuman status:Tyyppi(tuntematon)Käyttäjän CPU-aikaArvoMuuttujaVersioVersiotNäkymän tiedotpython-django-debug-toolbar-5.2.0/debug_toolbar/locale/fi/LC_MESSAGES/django.po000066400000000000000000000404351500406072000270570ustar00rootroot00000000000000# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # # Translators: # Klaus Dahlén, 2012 msgid "" msgstr "" "Project-Id-Version: Django Debug Toolbar\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2024-08-06 07:12-0500\n" "PO-Revision-Date: 2010-11-30 00:00+0000\n" "Last-Translator: Klaus Dahlén, 2012\n" "Language-Team: Finnish (http://app.transifex.com/django-debug-toolbar/django-debug-toolbar/language/fi/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: fi\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: apps.py:18 msgid "Debug Toolbar" msgstr "" #: panels/alerts.py:67 #, python-brace-format msgid "" "Form with id \"{form_id}\" contains file input, but does not have the " "attribute enctype=\"multipart/form-data\"." msgstr "" #: panels/alerts.py:70 msgid "" "Form contains file input, but does not have the attribute " "enctype=\"multipart/form-data\"." msgstr "" #: panels/alerts.py:73 #, python-brace-format msgid "" "Input element references form with id \"{form_id}\", but the form does not " "have the attribute enctype=\"multipart/form-data\"." msgstr "" #: panels/alerts.py:77 msgid "Alerts" msgstr "" #: panels/cache.py:168 msgid "Cache" msgstr "Välimuisti" #: panels/cache.py:174 #, python-format msgid "%(cache_calls)d call in %(time).2fms" msgid_plural "%(cache_calls)d calls in %(time).2fms" msgstr[0] "%(cache_calls)d kutsu %(time).2fms" msgstr[1] "%(cache_calls)d kutsua %(time).2fms" #: panels/cache.py:183 #, python-format msgid "Cache calls from %(count)d backend" msgid_plural "Cache calls from %(count)d backends" msgstr[0] "" msgstr[1] "" #: panels/headers.py:31 msgid "Headers" msgstr "" #: panels/history/panel.py:19 panels/history/panel.py:20 msgid "History" msgstr "" #: panels/profiling.py:140 msgid "Profiling" msgstr "Profilointi" #: panels/redirects.py:17 msgid "Intercept redirects" msgstr "" #: panels/request.py:16 msgid "Request" msgstr "" #: panels/request.py:38 msgid "" msgstr "" #: panels/request.py:55 msgid "" msgstr "" #: panels/settings.py:17 msgid "Settings" msgstr "Asetukset" #: panels/settings.py:20 #, python-format msgid "Settings from %s" msgstr "" #: panels/signals.py:57 #, python-format msgid "%(num_receivers)d receiver of 1 signal" msgid_plural "%(num_receivers)d receivers of 1 signal" msgstr[0] "%(num_receivers)d vastaanotin 1 signaalille" msgstr[1] "%(num_receivers)d vastaanotinta 1 signaalille" #: panels/signals.py:62 #, python-format msgid "%(num_receivers)d receiver of %(num_signals)d signals" msgid_plural "%(num_receivers)d receivers of %(num_signals)d signals" msgstr[0] "%(num_receivers)d vastaanotin %(num_signals)d signaalille" msgstr[1] "%(num_receivers)d vastaanotinta %(num_signals)d signaalille" #: panels/signals.py:67 msgid "Signals" msgstr "Signaalit" #: panels/sql/panel.py:30 panels/sql/panel.py:41 msgid "Read uncommitted" msgstr "" #: panels/sql/panel.py:31 panels/sql/panel.py:43 msgid "Read committed" msgstr "" #: panels/sql/panel.py:32 panels/sql/panel.py:45 msgid "Repeatable read" msgstr "" #: panels/sql/panel.py:33 panels/sql/panel.py:47 msgid "Serializable" msgstr "Muuttuja" #: panels/sql/panel.py:39 msgid "Autocommit" msgstr "Autocommit" #: panels/sql/panel.py:61 panels/sql/panel.py:71 msgid "Idle" msgstr "" #: panels/sql/panel.py:62 panels/sql/panel.py:72 msgid "Active" msgstr "Tapahtuma" #: panels/sql/panel.py:63 panels/sql/panel.py:73 msgid "In transaction" msgstr "Tapahtuman tila:" #: panels/sql/panel.py:64 panels/sql/panel.py:74 msgid "In error" msgstr "Virhe" #: panels/sql/panel.py:65 panels/sql/panel.py:75 msgid "Unknown" msgstr "(tuntematon)" #: panels/sql/panel.py:162 msgid "SQL" msgstr "SQL" #: panels/sql/panel.py:168 #, python-format msgid "%(query_count)d query in %(sql_time).2fms" msgid_plural "%(query_count)d queries in %(sql_time).2fms" msgstr[0] "" msgstr[1] "" #: panels/sql/panel.py:180 #, python-format msgid "SQL queries from %(count)d connection" msgid_plural "SQL queries from %(count)d connections" msgstr[0] "" msgstr[1] "" #: panels/staticfiles.py:82 #, python-format msgid "Static files (%(num_found)s found, %(num_used)s used)" msgstr "" #: panels/staticfiles.py:103 msgid "Static files" msgstr "Staattiset tiedostot" #: panels/staticfiles.py:109 #, python-format msgid "%(num_used)s file used" msgid_plural "%(num_used)s files used" msgstr[0] "" msgstr[1] "" #: panels/templates/panel.py:101 msgid "Templates" msgstr "Asettelupohjat" #: panels/templates/panel.py:106 #, python-format msgid "Templates (%(num_templates)s rendered)" msgstr "Asetttelupohjat (%(num_templates)s renderöity)" #: panels/templates/panel.py:195 msgid "No origin" msgstr "" #: panels/timer.py:27 #, python-format msgid "CPU: %(cum)0.2fms (%(total)0.2fms)" msgstr "CPU: %(cum)0.2fms (%(total)0.2fms)" #: panels/timer.py:32 #, python-format msgid "Total: %0.2fms" msgstr "" #: panels/timer.py:38 templates/debug_toolbar/panels/history.html:9 #: templates/debug_toolbar/panels/sql_explain.html:11 #: templates/debug_toolbar/panels/sql_profile.html:12 #: templates/debug_toolbar/panels/sql_select.html:11 msgid "Time" msgstr "Aika" #: panels/timer.py:46 msgid "User CPU time" msgstr "Käyttäjän CPU-aika" #: panels/timer.py:46 #, python-format msgid "%(utime)0.3f msec" msgstr "%(utime)0.3f msek" #: panels/timer.py:47 msgid "System CPU time" msgstr "Järjestelmän CPU-aika" #: panels/timer.py:47 #, python-format msgid "%(stime)0.3f msec" msgstr "%(stime)0.3f msek" #: panels/timer.py:48 msgid "Total CPU time" msgstr "CPU-aika yhteensä" #: panels/timer.py:48 #, python-format msgid "%(total)0.3f msec" msgstr "%(total)0.3f msek" #: panels/timer.py:49 msgid "Elapsed time" msgstr "Kulunut aika" #: panels/timer.py:49 #, python-format msgid "%(total_time)0.3f msec" msgstr "%(total_time)0.3f msek" #: panels/timer.py:51 msgid "Context switches" msgstr "Kontekstin vivut" #: panels/timer.py:52 #, python-format msgid "%(vcsw)d voluntary, %(ivcsw)d involuntary" msgstr "" #: panels/versions.py:19 msgid "Versions" msgstr "Versiot" #: templates/debug_toolbar/base.html:23 msgid "Hide toolbar" msgstr "" #: templates/debug_toolbar/base.html:23 msgid "Hide" msgstr "Piilota" #: templates/debug_toolbar/base.html:25 templates/debug_toolbar/base.html:26 msgid "Toggle Theme" msgstr "" #: templates/debug_toolbar/base.html:35 msgid "Show toolbar" msgstr "" #: templates/debug_toolbar/includes/panel_button.html:4 msgid "Disable for next and successive requests" msgstr "" #: templates/debug_toolbar/includes/panel_button.html:4 msgid "Enable for next and successive requests" msgstr "" #: templates/debug_toolbar/panels/alerts.html:4 msgid "Alerts found" msgstr "" #: templates/debug_toolbar/panels/alerts.html:11 msgid "No alerts found" msgstr "" #: templates/debug_toolbar/panels/cache.html:2 msgid "Summary" msgstr "" #: templates/debug_toolbar/panels/cache.html:6 msgid "Total calls" msgstr "" #: templates/debug_toolbar/panels/cache.html:7 msgid "Total time" msgstr "" #: templates/debug_toolbar/panels/cache.html:8 msgid "Cache hits" msgstr "" #: templates/debug_toolbar/panels/cache.html:9 msgid "Cache misses" msgstr "" #: templates/debug_toolbar/panels/cache.html:21 msgid "Commands" msgstr "" #: templates/debug_toolbar/panels/cache.html:39 msgid "Calls" msgstr "" #: templates/debug_toolbar/panels/cache.html:43 #: templates/debug_toolbar/panels/sql.html:36 msgid "Time (ms)" msgstr "Aika (ms)" #: templates/debug_toolbar/panels/cache.html:44 msgid "Type" msgstr "Tyyppi" #: templates/debug_toolbar/panels/cache.html:45 #: templates/debug_toolbar/panels/request.html:8 msgid "Arguments" msgstr "" #: templates/debug_toolbar/panels/cache.html:46 #: templates/debug_toolbar/panels/request.html:9 msgid "Keyword arguments" msgstr "" #: templates/debug_toolbar/panels/cache.html:47 msgid "Backend" msgstr "" #: templates/debug_toolbar/panels/headers.html:3 msgid "Request headers" msgstr "" #: templates/debug_toolbar/panels/headers.html:8 #: templates/debug_toolbar/panels/headers.html:27 #: templates/debug_toolbar/panels/headers.html:48 msgid "Key" msgstr "Avain" #: templates/debug_toolbar/panels/headers.html:9 #: templates/debug_toolbar/panels/headers.html:28 #: templates/debug_toolbar/panels/headers.html:49 #: templates/debug_toolbar/panels/history_tr.html:23 #: templates/debug_toolbar/panels/request_variables.html:12 #: templates/debug_toolbar/panels/settings.html:6 #: templates/debug_toolbar/panels/timer.html:11 msgid "Value" msgstr "Arvo" #: templates/debug_toolbar/panels/headers.html:22 msgid "Response headers" msgstr "" #: templates/debug_toolbar/panels/headers.html:41 msgid "WSGI environ" msgstr "" #: templates/debug_toolbar/panels/headers.html:43 msgid "" "Since the WSGI environ inherits the environment of the server, only a " "significant subset is shown below." msgstr "" #: templates/debug_toolbar/panels/history.html:10 msgid "Method" msgstr "" #: templates/debug_toolbar/panels/history.html:11 #: templates/debug_toolbar/panels/staticfiles.html:43 msgid "Path" msgstr "Polku" #: templates/debug_toolbar/panels/history.html:12 msgid "Request Variables" msgstr "" #: templates/debug_toolbar/panels/history.html:13 msgid "Status" msgstr "" #: templates/debug_toolbar/panels/history.html:14 #: templates/debug_toolbar/panels/sql.html:37 msgid "Action" msgstr "Tapahtuma" #: templates/debug_toolbar/panels/history_tr.html:22 #: templates/debug_toolbar/panels/request_variables.html:11 msgid "Variable" msgstr "Muuttuja" #: templates/debug_toolbar/panels/profiling.html:5 msgid "Call" msgstr "Kutsu" #: templates/debug_toolbar/panels/profiling.html:6 msgid "CumTime" msgstr "CumTime" #: templates/debug_toolbar/panels/profiling.html:7 #: templates/debug_toolbar/panels/profiling.html:9 msgid "Per" msgstr "/" #: templates/debug_toolbar/panels/profiling.html:8 msgid "TotTime" msgstr "TotTime" #: templates/debug_toolbar/panels/profiling.html:10 msgid "Count" msgstr "Määrä" #: templates/debug_toolbar/panels/request.html:3 msgid "View information" msgstr "Näkymän tiedot" #: templates/debug_toolbar/panels/request.html:7 msgid "View function" msgstr "" #: templates/debug_toolbar/panels/request.html:10 msgid "URL name" msgstr "" #: templates/debug_toolbar/panels/request.html:24 msgid "Cookies" msgstr "" #: templates/debug_toolbar/panels/request.html:27 msgid "No cookies" msgstr "" #: templates/debug_toolbar/panels/request.html:31 msgid "Session data" msgstr "" #: templates/debug_toolbar/panels/request.html:34 msgid "No session data" msgstr "" #: templates/debug_toolbar/panels/request.html:38 msgid "GET data" msgstr "" #: templates/debug_toolbar/panels/request.html:41 msgid "No GET data" msgstr "Ei GET-dataa" #: templates/debug_toolbar/panels/request.html:45 msgid "POST data" msgstr "" #: templates/debug_toolbar/panels/request.html:48 msgid "No POST data" msgstr "Ei POST-dataa" #: templates/debug_toolbar/panels/settings.html:5 msgid "Setting" msgstr "Asetus" #: templates/debug_toolbar/panels/signals.html:5 msgid "Signal" msgstr "Signaali" #: templates/debug_toolbar/panels/signals.html:6 msgid "Receivers" msgstr "Vastaanottimet" #: templates/debug_toolbar/panels/sql.html:6 #, python-format msgid "%(num)s query" msgid_plural "%(num)s queries" msgstr[0] "%(num)s kysely" msgstr[1] "%(num)s kyselyä" #: templates/debug_toolbar/panels/sql.html:8 #, python-format msgid "" "including %(count)s similar" msgstr "" #: templates/debug_toolbar/panels/sql.html:12 #, python-format msgid "" "and %(dupes)s duplicates" msgstr "" #: templates/debug_toolbar/panels/sql.html:34 msgid "Query" msgstr "Kysely" #: templates/debug_toolbar/panels/sql.html:35 #: templates/debug_toolbar/panels/timer.html:36 msgid "Timeline" msgstr "Aikajana" #: templates/debug_toolbar/panels/sql.html:52 #, python-format msgid "%(count)s similar queries." msgstr "" #: templates/debug_toolbar/panels/sql.html:58 #, python-format msgid "Duplicated %(dupes)s times." msgstr "" #: templates/debug_toolbar/panels/sql.html:95 msgid "Connection:" msgstr "Yhteys:" #: templates/debug_toolbar/panels/sql.html:97 msgid "Isolation level:" msgstr "Eristystaso:" #: templates/debug_toolbar/panels/sql.html:100 msgid "Transaction status:" msgstr "Tapahtuman status:" #: templates/debug_toolbar/panels/sql.html:114 msgid "(unknown)" msgstr "(tuntematon)" #: templates/debug_toolbar/panels/sql.html:123 msgid "No SQL queries were recorded during this request." msgstr "Tämän pyynnön aikana ei tehty yhtään SQL-kyselyä." #: templates/debug_toolbar/panels/sql_explain.html:4 msgid "SQL explained" msgstr "" #: templates/debug_toolbar/panels/sql_explain.html:9 #: templates/debug_toolbar/panels/sql_profile.html:10 #: templates/debug_toolbar/panels/sql_select.html:9 msgid "Executed SQL" msgstr "Suoritettu SQL" #: templates/debug_toolbar/panels/sql_explain.html:13 #: templates/debug_toolbar/panels/sql_profile.html:14 #: templates/debug_toolbar/panels/sql_select.html:13 msgid "Database" msgstr "Tietokanta" #: templates/debug_toolbar/panels/sql_profile.html:4 msgid "SQL profiled" msgstr "" #: templates/debug_toolbar/panels/sql_profile.html:37 msgid "Error" msgstr "Virhe" #: templates/debug_toolbar/panels/sql_select.html:4 msgid "SQL selected" msgstr "" #: templates/debug_toolbar/panels/sql_select.html:36 msgid "Empty set" msgstr "Tyhjä joukko" #: templates/debug_toolbar/panels/staticfiles.html:3 msgid "Static file path" msgid_plural "Static file paths" msgstr[0] "" msgstr[1] "" #: templates/debug_toolbar/panels/staticfiles.html:7 #, python-format msgid "(prefix %(prefix)s)" msgstr "" #: templates/debug_toolbar/panels/staticfiles.html:11 #: templates/debug_toolbar/panels/staticfiles.html:22 #: templates/debug_toolbar/panels/staticfiles.html:34 #: templates/debug_toolbar/panels/templates.html:10 #: templates/debug_toolbar/panels/templates.html:30 #: templates/debug_toolbar/panels/templates.html:47 msgid "None" msgstr "None" #: templates/debug_toolbar/panels/staticfiles.html:14 msgid "Static file app" msgid_plural "Static file apps" msgstr[0] "" msgstr[1] "" #: templates/debug_toolbar/panels/staticfiles.html:25 msgid "Static file" msgid_plural "Static files" msgstr[0] "" msgstr[1] "Staattiset tiedostot" #: templates/debug_toolbar/panels/staticfiles.html:39 #, python-format msgid "%(payload_count)s file" msgid_plural "%(payload_count)s files" msgstr[0] "" msgstr[1] "" #: templates/debug_toolbar/panels/staticfiles.html:44 msgid "Location" msgstr "Sijainti" #: templates/debug_toolbar/panels/template_source.html:4 msgid "Template source:" msgstr "" #: templates/debug_toolbar/panels/templates.html:2 msgid "Template path" msgid_plural "Template paths" msgstr[0] "Sivupohjan polku" msgstr[1] "Sivupohjan polku" #: templates/debug_toolbar/panels/templates.html:13 msgid "Template" msgid_plural "Templates" msgstr[0] "Sivupohja" msgstr[1] "Sivupohja" #: templates/debug_toolbar/panels/templates.html:22 #: templates/debug_toolbar/panels/templates.html:40 msgid "Toggle context" msgstr "" #: templates/debug_toolbar/panels/templates.html:33 msgid "Context processor" msgid_plural "Context processors" msgstr[0] "Kontekstiprosessori" msgstr[1] "Kontekstiprosessori" #: templates/debug_toolbar/panels/timer.html:2 msgid "Resource usage" msgstr "" #: templates/debug_toolbar/panels/timer.html:10 msgid "Resource" msgstr "Resurssi" #: templates/debug_toolbar/panels/timer.html:26 msgid "Browser timing" msgstr "" #: templates/debug_toolbar/panels/timer.html:35 msgid "Timing attribute" msgstr "" #: templates/debug_toolbar/panels/timer.html:37 msgid "Milliseconds since navigation start (+length)" msgstr "" #: templates/debug_toolbar/panels/versions.html:10 msgid "Package" msgstr "" #: templates/debug_toolbar/panels/versions.html:11 msgid "Name" msgstr "Nimi" #: templates/debug_toolbar/panels/versions.html:12 msgid "Version" msgstr "Versio" #: templates/debug_toolbar/redirect.html:10 msgid "Location:" msgstr "" #: templates/debug_toolbar/redirect.html:12 msgid "" "The Django Debug Toolbar has intercepted a redirect to the above URL for " "debug viewing purposes. You can click the above link to continue with the " "redirect as normal." msgstr "" #: views.py:16 msgid "" "Data for this panel isn't available anymore. Please reload the page and " "retry." msgstr "" python-django-debug-toolbar-5.2.0/debug_toolbar/locale/fr/000077500000000000000000000000001500406072000234735ustar00rootroot00000000000000python-django-debug-toolbar-5.2.0/debug_toolbar/locale/fr/LC_MESSAGES/000077500000000000000000000000001500406072000252605ustar00rootroot00000000000000python-django-debug-toolbar-5.2.0/debug_toolbar/locale/fr/LC_MESSAGES/django.mo000066400000000000000000000243161500406072000270650ustar00rootroot00000000000000d J   l- N . . UG     )  ( 2 <JQ X bmu"F    $,QbjpNx ( # 0':b hu~   -@ E Q1^     '9IRar v L     '4;hC " 53:BR c&m; @JSds{     '4Is4v]OX4DTi+y  "1TyZ  Fb{ ](#Lf u$       % C Y ^ r ~  ;    A ?! N![!v! |!!!! !!!! !!!!" ("2"M"c" g" u""# #(# <# G#S#e###p#g$Vh$$G$% %)%?%T%&]%%l& r& }&&& &&& && '$' )' 3'A'\'c'l't'}''''D(QXVF'{,%:si&D1}b*=\HwP6L7 yv[!E?~NA-)OYn#UWM_chdgj9Z<f2@^T ;Im(C3 ">+/u]0xr4$zpJqo SR .KaBk58G|el`t%(cache_calls)d call in %(time).2fms%(cache_calls)d calls in %(time).2fms%(count)s similar queries.%(num)s query%(num)s queries%(num_receivers)d receiver of %(num_signals)d signals%(num_receivers)d receivers of %(num_signals)d signals%(num_receivers)d receiver of 1 signal%(num_receivers)d receivers of 1 signal%(num_used)s file used%(num_used)s files used%(payload_count)s file%(payload_count)s files%(query_count)d query in %(sql_time).2fms%(query_count)d queries in %(sql_time).2fms%(stime)0.3f msec%(total)0.3f msec%(total_time)0.3f msec%(utime)0.3f msec%(vcsw)d voluntary, %(ivcsw)d involuntary(prefix %(prefix)s)(unknown)ActionActiveArgumentsAutocommitBackendBrowser timingCPU: %(cum)0.2fms (%(total)0.2fms)CacheCache calls from %(count)d backendCache calls from %(count)d backendsCache hitsCache missesCallCallsCommandsConnection:Context processorContext processorsContext switchesCookiesCountCumTimeData for this panel isn't available anymore. Please reload the page and retry.DatabaseDebug ToolbarDisable for next and successive requestsDuplicated %(dupes)s times.Elapsed timeEmpty setEnable for next and successive requestsErrorExecuted SQLGET dataHeadersHideHide toolbarHistoryIdleIn errorIn transactionIntercept redirectsIsolation level:KeyKeyword argumentsLocationLocation:MethodMilliseconds since navigation start (+length)NameNo GET dataNo POST dataNo SQL queries were recorded during this request.No cookiesNo originNo session dataNonePOST dataPackagePathPerProfilingQueryRead committedRead uncommittedReceiversRepeatable readRequestRequest VariablesRequest headersResourceResource usageResponse headersSQLSQL explainedSQL profiledSQL queries from %(count)d connectionSQL queries from %(count)d connectionsSQL selectedSerializableSession dataSettingSettingsSettings from %sShow toolbarSignalSignalsSince the WSGI environ inherits the environment of the server, only a significant subset is shown below.Static file appStatic file appsStatic file pathStatic file pathsStatic filesStatic files (%(num_found)s found, %(num_used)s used)StatusSummarySystem CPU timeTemplate source:TemplatesTemplates (%(num_templates)s rendered)The Django Debug Toolbar has intercepted a redirect to the above URL for debug viewing purposes. You can click the above link to continue with the redirect as normal.TimeTime (ms)TimelineTiming attributeToggle contextTotTimeTotal CPU timeTotal callsTotal timeTotal: %0.2fmsTransaction status:TypeURL nameUnknownUser CPU timeValueVariableVersionVersionsView functionView informationWSGI environand %(dupes)s duplicatesincluding %(count)s similarProject-Id-Version: Django Debug Toolbar Report-Msgid-Bugs-To: PO-Revision-Date: 2010-11-30 00:00+0000 Last-Translator: Colin O'Brien , 2021 Language-Team: French (http://app.transifex.com/django-debug-toolbar/django-debug-toolbar/language/fr/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: fr Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2; %(cache_calls)d appel en %(time).2fms%(cache_calls)d appels en %(time).2fms%(cache_calls)d appels en %(time).2fms%(count)s requêtes similaires.%(num)s requête%(num)s requêtes%(num)s requêtes%(num_receivers)d receveur de %(num_signals)d signaux%(num_receivers)d receveurs de %(num_signals)d signaux%(num_receivers)d receveurs de %(num_signals)d signaux%(num_receivers)d receveur d'un signal%(num_receivers)d receveurs d'un signal%(num_receivers)d receveurs d'un signal%(num_used)s fichier utilisé%(num_used)s fichiers utilisés%(num_used)s fichiers utilisés%(payload_count)s fichier%(payload_count)s fichiers%(payload_count)s fichiers%(query_count)d requête en %(sql_time).2f ms%(query_count)d requêtes en %(sql_time).2f ms%(query_count)d requêtes en %(sql_time).2f ms%(stime)0.3f ms%(total)0.3f ms%(total_time)0.3f ms%(utime)0.3f ms%(vcsw)d volontaire, %(ivcsw)d involontaire(préfixe %(prefix)s)(indéterminé)ActionActifParamètresAuto validationMoteurChronologie du navigateurCPU: %(cum)0.2fms (%(total)0.2fms)CacheAppels au cache depuis %(count)d moteurAppels au cache depuis %(count)d moteursAppels au cache depuis %(count)d moteursSuccès de cacheDéfauts de cacheAppelAppelsCommandesConnexion :Processeur de contexteProcesseurs de contexteProcesseurs de contexteBasculements de contexteCookiesCompteTemps cumuléLes données de ce panneau ne sont plus disponibles. Rechargez la page et essayez à nouveau.Base de donnéesBarre d'outils de débogageDésactiver pour les requêtes suivantesDupliqué %(dupes)s fois.Temps écouléEnsemble videActiver pour les requêtes suivantesErreurSQL ExécutéDonnées GETEn-têtesMasquerMasquer la barre d'outilsHistoriqueInactifErreurTransaction en coursInterception des redirectionsNiveau d'isolation :CléParamètres nommésEmplacementEmplacement :MéthodeMillisecondes depuis le début de la navigation (+longueur)NomAucune donnée GETAucune donnée POSTAucune requête SQL n'a été enregistrée durant cette requête.Pas de cookiesSans OriginePas de données de sessionAucunDonnées POSTPaquetCheminParProfilageRequêteLecture validéeLecture non validéeReceveursLecture répétableRequêteVariables de RequêteEn-têtes de requêteRessourceUtilisation des ressourcesEn-têtes de réponseSQLSQL expliquéSQL profilérequêtes SQL venant de %(count)d connexionRequêtes SQL venant de %(count)d connexionsRequêtes SQL venant de %(count)d connexionsSQL sélectionnéSérialisableDonnées de sessionParamètreParamètresParamètres de %sAfficher la barre d'outilsSignalSignauxComme l'environnement WSGI hérite de celui du serveur, seul un sous-ensemble pertinent est affiché ci-dessous.Application de fichiers statiquesApplications de fichiers statiquesApplications de fichiers statiquesChemin de fichier statiqueChemins de fichiers statiquesChemins de fichiers statiquesFichiers statiquesFichiers statiques (%(num_found)s trouvé(s), %(num_used)s utilisé(s))ÉtatRésuméTemps CPU du systèmeSource du gabarit :GabaritsGabarits (%(num_templates)s affichés)La barre de débogage Django a intercepté une redirection vers l'URL ci-dessus afin de permettre la consultation des messages de débogage. Vous pouvez cliquer sur le lien ci-dessus pour continuer normalement avec la redirection.TempsTemps (ms)ChronologieAttribut mesuréAfficher/masquer le contexteTemps totalTemps total du CPUNombre total d'appelsTemps totalTotal : %0.2fmsÉtat de la transaction :TypeNom d'URLIndéterminéTemps CPU de l'utilisateurValeurVariableVersionVersionsFonction de vueAfficher l'informationEnvironnement WSGIet %(dupes)s en doublecomprenant %(count)s similairespython-django-debug-toolbar-5.2.0/debug_toolbar/locale/fr/LC_MESSAGES/django.po000066400000000000000000000471251500406072000270730ustar00rootroot00000000000000# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # # Translators: # Anthony Jorion , 2013 # c1b16e6c929c50740e884a23aafc8829_00449d9 , 2014 # Claude Paroz , 2013 # Colin O'Brien , 2021 # David Paccoud, 2009 # Dominick Rivard , 2013 # Maxime Abry , 2016 msgid "" msgstr "" "Project-Id-Version: Django Debug Toolbar\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2024-08-06 07:12-0500\n" "PO-Revision-Date: 2010-11-30 00:00+0000\n" "Last-Translator: Colin O'Brien , 2021\n" "Language-Team: French (http://app.transifex.com/django-debug-toolbar/django-debug-toolbar/language/fr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: fr\n" "Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" #: apps.py:18 msgid "Debug Toolbar" msgstr "Barre d'outils de débogage" #: panels/alerts.py:67 #, python-brace-format msgid "" "Form with id \"{form_id}\" contains file input, but does not have the " "attribute enctype=\"multipart/form-data\"." msgstr "" #: panels/alerts.py:70 msgid "" "Form contains file input, but does not have the attribute " "enctype=\"multipart/form-data\"." msgstr "" #: panels/alerts.py:73 #, python-brace-format msgid "" "Input element references form with id \"{form_id}\", but the form does not " "have the attribute enctype=\"multipart/form-data\"." msgstr "" #: panels/alerts.py:77 msgid "Alerts" msgstr "" #: panels/cache.py:168 msgid "Cache" msgstr "Cache" #: panels/cache.py:174 #, python-format msgid "%(cache_calls)d call in %(time).2fms" msgid_plural "%(cache_calls)d calls in %(time).2fms" msgstr[0] "%(cache_calls)d appel en %(time).2fms" msgstr[1] "%(cache_calls)d appels en %(time).2fms" msgstr[2] "%(cache_calls)d appels en %(time).2fms" #: panels/cache.py:183 #, python-format msgid "Cache calls from %(count)d backend" msgid_plural "Cache calls from %(count)d backends" msgstr[0] "Appels au cache depuis %(count)d moteur" msgstr[1] "Appels au cache depuis %(count)d moteurs" msgstr[2] "Appels au cache depuis %(count)d moteurs" #: panels/headers.py:31 msgid "Headers" msgstr "En-têtes" #: panels/history/panel.py:19 panels/history/panel.py:20 msgid "History" msgstr "Historique" #: panels/profiling.py:140 msgid "Profiling" msgstr "Profilage" #: panels/redirects.py:17 msgid "Intercept redirects" msgstr "Interception des redirections" #: panels/request.py:16 msgid "Request" msgstr "Requête" #: panels/request.py:38 msgid "" msgstr "" #: panels/request.py:55 msgid "" msgstr "" #: panels/settings.py:17 msgid "Settings" msgstr "Paramètres" #: panels/settings.py:20 #, python-format msgid "Settings from %s" msgstr "Paramètres de %s" #: panels/signals.py:57 #, python-format msgid "%(num_receivers)d receiver of 1 signal" msgid_plural "%(num_receivers)d receivers of 1 signal" msgstr[0] "%(num_receivers)d receveur d'un signal" msgstr[1] "%(num_receivers)d receveurs d'un signal" msgstr[2] "%(num_receivers)d receveurs d'un signal" #: panels/signals.py:62 #, python-format msgid "%(num_receivers)d receiver of %(num_signals)d signals" msgid_plural "%(num_receivers)d receivers of %(num_signals)d signals" msgstr[0] "%(num_receivers)d receveur de %(num_signals)d signaux" msgstr[1] "%(num_receivers)d receveurs de %(num_signals)d signaux" msgstr[2] "%(num_receivers)d receveurs de %(num_signals)d signaux" #: panels/signals.py:67 msgid "Signals" msgstr "Signaux" #: panels/sql/panel.py:30 panels/sql/panel.py:41 msgid "Read uncommitted" msgstr "Lecture non validée" #: panels/sql/panel.py:31 panels/sql/panel.py:43 msgid "Read committed" msgstr "Lecture validée" #: panels/sql/panel.py:32 panels/sql/panel.py:45 msgid "Repeatable read" msgstr "Lecture répétable" #: panels/sql/panel.py:33 panels/sql/panel.py:47 msgid "Serializable" msgstr "Sérialisable" #: panels/sql/panel.py:39 msgid "Autocommit" msgstr "Auto validation" #: panels/sql/panel.py:61 panels/sql/panel.py:71 msgid "Idle" msgstr "Inactif" #: panels/sql/panel.py:62 panels/sql/panel.py:72 msgid "Active" msgstr "Actif" #: panels/sql/panel.py:63 panels/sql/panel.py:73 msgid "In transaction" msgstr "Transaction en cours" #: panels/sql/panel.py:64 panels/sql/panel.py:74 msgid "In error" msgstr "Erreur" #: panels/sql/panel.py:65 panels/sql/panel.py:75 msgid "Unknown" msgstr "Indéterminé" #: panels/sql/panel.py:162 msgid "SQL" msgstr "SQL" #: panels/sql/panel.py:168 #, python-format msgid "%(query_count)d query in %(sql_time).2fms" msgid_plural "%(query_count)d queries in %(sql_time).2fms" msgstr[0] "%(query_count)d requête en %(sql_time).2f ms" msgstr[1] "%(query_count)d requêtes en %(sql_time).2f ms" msgstr[2] "%(query_count)d requêtes en %(sql_time).2f ms" #: panels/sql/panel.py:180 #, python-format msgid "SQL queries from %(count)d connection" msgid_plural "SQL queries from %(count)d connections" msgstr[0] "requêtes SQL venant de %(count)d connexion" msgstr[1] "Requêtes SQL venant de %(count)d connexions" msgstr[2] "Requêtes SQL venant de %(count)d connexions" #: panels/staticfiles.py:82 #, python-format msgid "Static files (%(num_found)s found, %(num_used)s used)" msgstr "Fichiers statiques (%(num_found)s trouvé(s), %(num_used)s utilisé(s))" #: panels/staticfiles.py:103 msgid "Static files" msgstr "Fichiers statiques" #: panels/staticfiles.py:109 #, python-format msgid "%(num_used)s file used" msgid_plural "%(num_used)s files used" msgstr[0] "%(num_used)s fichier utilisé" msgstr[1] "%(num_used)s fichiers utilisés" msgstr[2] "%(num_used)s fichiers utilisés" #: panels/templates/panel.py:101 msgid "Templates" msgstr "Gabarits" #: panels/templates/panel.py:106 #, python-format msgid "Templates (%(num_templates)s rendered)" msgstr "Gabarits (%(num_templates)s affichés)" #: panels/templates/panel.py:195 msgid "No origin" msgstr "Sans Origine" #: panels/timer.py:27 #, python-format msgid "CPU: %(cum)0.2fms (%(total)0.2fms)" msgstr "CPU: %(cum)0.2fms (%(total)0.2fms)" #: panels/timer.py:32 #, python-format msgid "Total: %0.2fms" msgstr "Total : %0.2fms" #: panels/timer.py:38 templates/debug_toolbar/panels/history.html:9 #: templates/debug_toolbar/panels/sql_explain.html:11 #: templates/debug_toolbar/panels/sql_profile.html:12 #: templates/debug_toolbar/panels/sql_select.html:11 msgid "Time" msgstr "Temps" #: panels/timer.py:46 msgid "User CPU time" msgstr "Temps CPU de l'utilisateur" #: panels/timer.py:46 #, python-format msgid "%(utime)0.3f msec" msgstr "%(utime)0.3f ms" #: panels/timer.py:47 msgid "System CPU time" msgstr "Temps CPU du système" #: panels/timer.py:47 #, python-format msgid "%(stime)0.3f msec" msgstr "%(stime)0.3f ms" #: panels/timer.py:48 msgid "Total CPU time" msgstr "Temps total du CPU" #: panels/timer.py:48 #, python-format msgid "%(total)0.3f msec" msgstr "%(total)0.3f ms" #: panels/timer.py:49 msgid "Elapsed time" msgstr "Temps écoulé" #: panels/timer.py:49 #, python-format msgid "%(total_time)0.3f msec" msgstr "%(total_time)0.3f ms" #: panels/timer.py:51 msgid "Context switches" msgstr "Basculements de contexte" #: panels/timer.py:52 #, python-format msgid "%(vcsw)d voluntary, %(ivcsw)d involuntary" msgstr "%(vcsw)d volontaire, %(ivcsw)d involontaire" #: panels/versions.py:19 msgid "Versions" msgstr "Versions" #: templates/debug_toolbar/base.html:23 msgid "Hide toolbar" msgstr "Masquer la barre d'outils" #: templates/debug_toolbar/base.html:23 msgid "Hide" msgstr "Masquer" #: templates/debug_toolbar/base.html:25 templates/debug_toolbar/base.html:26 msgid "Toggle Theme" msgstr "" #: templates/debug_toolbar/base.html:35 msgid "Show toolbar" msgstr "Afficher la barre d'outils" #: templates/debug_toolbar/includes/panel_button.html:4 msgid "Disable for next and successive requests" msgstr "Désactiver pour les requêtes suivantes" #: templates/debug_toolbar/includes/panel_button.html:4 msgid "Enable for next and successive requests" msgstr "Activer pour les requêtes suivantes" #: templates/debug_toolbar/panels/alerts.html:4 msgid "Alerts found" msgstr "" #: templates/debug_toolbar/panels/alerts.html:11 msgid "No alerts found" msgstr "" #: templates/debug_toolbar/panels/cache.html:2 msgid "Summary" msgstr "Résumé" #: templates/debug_toolbar/panels/cache.html:6 msgid "Total calls" msgstr "Nombre total d'appels" #: templates/debug_toolbar/panels/cache.html:7 msgid "Total time" msgstr "Temps total" #: templates/debug_toolbar/panels/cache.html:8 msgid "Cache hits" msgstr "Succès de cache" #: templates/debug_toolbar/panels/cache.html:9 msgid "Cache misses" msgstr "Défauts de cache" #: templates/debug_toolbar/panels/cache.html:21 msgid "Commands" msgstr "Commandes" #: templates/debug_toolbar/panels/cache.html:39 msgid "Calls" msgstr "Appels" #: templates/debug_toolbar/panels/cache.html:43 #: templates/debug_toolbar/panels/sql.html:36 msgid "Time (ms)" msgstr "Temps (ms)" #: templates/debug_toolbar/panels/cache.html:44 msgid "Type" msgstr "Type" #: templates/debug_toolbar/panels/cache.html:45 #: templates/debug_toolbar/panels/request.html:8 msgid "Arguments" msgstr "Paramètres" #: templates/debug_toolbar/panels/cache.html:46 #: templates/debug_toolbar/panels/request.html:9 msgid "Keyword arguments" msgstr "Paramètres nommés" #: templates/debug_toolbar/panels/cache.html:47 msgid "Backend" msgstr "Moteur" #: templates/debug_toolbar/panels/headers.html:3 msgid "Request headers" msgstr "En-têtes de requête" #: templates/debug_toolbar/panels/headers.html:8 #: templates/debug_toolbar/panels/headers.html:27 #: templates/debug_toolbar/panels/headers.html:48 msgid "Key" msgstr "Clé" #: templates/debug_toolbar/panels/headers.html:9 #: templates/debug_toolbar/panels/headers.html:28 #: templates/debug_toolbar/panels/headers.html:49 #: templates/debug_toolbar/panels/history_tr.html:23 #: templates/debug_toolbar/panels/request_variables.html:12 #: templates/debug_toolbar/panels/settings.html:6 #: templates/debug_toolbar/panels/timer.html:11 msgid "Value" msgstr "Valeur" #: templates/debug_toolbar/panels/headers.html:22 msgid "Response headers" msgstr "En-têtes de réponse" #: templates/debug_toolbar/panels/headers.html:41 msgid "WSGI environ" msgstr "Environnement WSGI" #: templates/debug_toolbar/panels/headers.html:43 msgid "" "Since the WSGI environ inherits the environment of the server, only a " "significant subset is shown below." msgstr "Comme l'environnement WSGI hérite de celui du serveur, seul un sous-ensemble pertinent est affiché ci-dessous." #: templates/debug_toolbar/panels/history.html:10 msgid "Method" msgstr "Méthode" #: templates/debug_toolbar/panels/history.html:11 #: templates/debug_toolbar/panels/staticfiles.html:43 msgid "Path" msgstr "Chemin" #: templates/debug_toolbar/panels/history.html:12 msgid "Request Variables" msgstr "Variables de Requête" #: templates/debug_toolbar/panels/history.html:13 msgid "Status" msgstr "État" #: templates/debug_toolbar/panels/history.html:14 #: templates/debug_toolbar/panels/sql.html:37 msgid "Action" msgstr "Action" #: templates/debug_toolbar/panels/history_tr.html:22 #: templates/debug_toolbar/panels/request_variables.html:11 msgid "Variable" msgstr "Variable" #: templates/debug_toolbar/panels/profiling.html:5 msgid "Call" msgstr "Appel" #: templates/debug_toolbar/panels/profiling.html:6 msgid "CumTime" msgstr "Temps cumulé" #: templates/debug_toolbar/panels/profiling.html:7 #: templates/debug_toolbar/panels/profiling.html:9 msgid "Per" msgstr "Par" #: templates/debug_toolbar/panels/profiling.html:8 msgid "TotTime" msgstr "Temps total" #: templates/debug_toolbar/panels/profiling.html:10 msgid "Count" msgstr "Compte" #: templates/debug_toolbar/panels/request.html:3 msgid "View information" msgstr "Afficher l'information" #: templates/debug_toolbar/panels/request.html:7 msgid "View function" msgstr "Fonction de vue" #: templates/debug_toolbar/panels/request.html:10 msgid "URL name" msgstr "Nom d'URL" #: templates/debug_toolbar/panels/request.html:24 msgid "Cookies" msgstr "Cookies" #: templates/debug_toolbar/panels/request.html:27 msgid "No cookies" msgstr "Pas de cookies" #: templates/debug_toolbar/panels/request.html:31 msgid "Session data" msgstr "Données de session" #: templates/debug_toolbar/panels/request.html:34 msgid "No session data" msgstr "Pas de données de session" #: templates/debug_toolbar/panels/request.html:38 msgid "GET data" msgstr "Données GET" #: templates/debug_toolbar/panels/request.html:41 msgid "No GET data" msgstr "Aucune donnée GET" #: templates/debug_toolbar/panels/request.html:45 msgid "POST data" msgstr "Données POST" #: templates/debug_toolbar/panels/request.html:48 msgid "No POST data" msgstr "Aucune donnée POST" #: templates/debug_toolbar/panels/settings.html:5 msgid "Setting" msgstr "Paramètre" #: templates/debug_toolbar/panels/signals.html:5 msgid "Signal" msgstr "Signal" #: templates/debug_toolbar/panels/signals.html:6 msgid "Receivers" msgstr "Receveurs" #: templates/debug_toolbar/panels/sql.html:6 #, python-format msgid "%(num)s query" msgid_plural "%(num)s queries" msgstr[0] "%(num)s requête" msgstr[1] "%(num)s requêtes" msgstr[2] "%(num)s requêtes" #: templates/debug_toolbar/panels/sql.html:8 #, python-format msgid "" "including %(count)s similar" msgstr "comprenant %(count)s similaires" #: templates/debug_toolbar/panels/sql.html:12 #, python-format msgid "" "and %(dupes)s duplicates" msgstr "et %(dupes)s en double" #: templates/debug_toolbar/panels/sql.html:34 msgid "Query" msgstr "Requête" #: templates/debug_toolbar/panels/sql.html:35 #: templates/debug_toolbar/panels/timer.html:36 msgid "Timeline" msgstr "Chronologie" #: templates/debug_toolbar/panels/sql.html:52 #, python-format msgid "%(count)s similar queries." msgstr "%(count)s requêtes similaires." #: templates/debug_toolbar/panels/sql.html:58 #, python-format msgid "Duplicated %(dupes)s times." msgstr "Dupliqué %(dupes)s fois." #: templates/debug_toolbar/panels/sql.html:95 msgid "Connection:" msgstr "Connexion :" #: templates/debug_toolbar/panels/sql.html:97 msgid "Isolation level:" msgstr "Niveau d'isolation :" #: templates/debug_toolbar/panels/sql.html:100 msgid "Transaction status:" msgstr "État de la transaction :" #: templates/debug_toolbar/panels/sql.html:114 msgid "(unknown)" msgstr "(indéterminé)" #: templates/debug_toolbar/panels/sql.html:123 msgid "No SQL queries were recorded during this request." msgstr "Aucune requête SQL n'a été enregistrée durant cette requête." #: templates/debug_toolbar/panels/sql_explain.html:4 msgid "SQL explained" msgstr "SQL expliqué" #: templates/debug_toolbar/panels/sql_explain.html:9 #: templates/debug_toolbar/panels/sql_profile.html:10 #: templates/debug_toolbar/panels/sql_select.html:9 msgid "Executed SQL" msgstr "SQL Exécuté" #: templates/debug_toolbar/panels/sql_explain.html:13 #: templates/debug_toolbar/panels/sql_profile.html:14 #: templates/debug_toolbar/panels/sql_select.html:13 msgid "Database" msgstr "Base de données" #: templates/debug_toolbar/panels/sql_profile.html:4 msgid "SQL profiled" msgstr "SQL profilé" #: templates/debug_toolbar/panels/sql_profile.html:37 msgid "Error" msgstr "Erreur" #: templates/debug_toolbar/panels/sql_select.html:4 msgid "SQL selected" msgstr "SQL sélectionné" #: templates/debug_toolbar/panels/sql_select.html:36 msgid "Empty set" msgstr "Ensemble vide" #: templates/debug_toolbar/panels/staticfiles.html:3 msgid "Static file path" msgid_plural "Static file paths" msgstr[0] "Chemin de fichier statique" msgstr[1] "Chemins de fichiers statiques" msgstr[2] "Chemins de fichiers statiques" #: templates/debug_toolbar/panels/staticfiles.html:7 #, python-format msgid "(prefix %(prefix)s)" msgstr "(préfixe %(prefix)s)" #: templates/debug_toolbar/panels/staticfiles.html:11 #: templates/debug_toolbar/panels/staticfiles.html:22 #: templates/debug_toolbar/panels/staticfiles.html:34 #: templates/debug_toolbar/panels/templates.html:10 #: templates/debug_toolbar/panels/templates.html:30 #: templates/debug_toolbar/panels/templates.html:47 msgid "None" msgstr "Aucun" #: templates/debug_toolbar/panels/staticfiles.html:14 msgid "Static file app" msgid_plural "Static file apps" msgstr[0] "Application de fichiers statiques" msgstr[1] "Applications de fichiers statiques" msgstr[2] "Applications de fichiers statiques" #: templates/debug_toolbar/panels/staticfiles.html:25 msgid "Static file" msgid_plural "Static files" msgstr[0] "" msgstr[1] "Fichiers statiques" msgstr[2] "Fichiers statiques" #: templates/debug_toolbar/panels/staticfiles.html:39 #, python-format msgid "%(payload_count)s file" msgid_plural "%(payload_count)s files" msgstr[0] "%(payload_count)s fichier" msgstr[1] "%(payload_count)s fichiers" msgstr[2] "%(payload_count)s fichiers" #: templates/debug_toolbar/panels/staticfiles.html:44 msgid "Location" msgstr "Emplacement" #: templates/debug_toolbar/panels/template_source.html:4 msgid "Template source:" msgstr "Source du gabarit :" #: templates/debug_toolbar/panels/templates.html:2 msgid "Template path" msgid_plural "Template paths" msgstr[0] "" msgstr[1] "Chemin du gabarit" msgstr[2] "Chemin du gabarit" #: templates/debug_toolbar/panels/templates.html:13 msgid "Template" msgid_plural "Templates" msgstr[0] "" msgstr[1] "Gabarit" msgstr[2] "Gabarit" #: templates/debug_toolbar/panels/templates.html:22 #: templates/debug_toolbar/panels/templates.html:40 msgid "Toggle context" msgstr "Afficher/masquer le contexte" #: templates/debug_toolbar/panels/templates.html:33 msgid "Context processor" msgid_plural "Context processors" msgstr[0] "Processeur de contexte" msgstr[1] "Processeurs de contexte" msgstr[2] "Processeurs de contexte" #: templates/debug_toolbar/panels/timer.html:2 msgid "Resource usage" msgstr "Utilisation des ressources" #: templates/debug_toolbar/panels/timer.html:10 msgid "Resource" msgstr "Ressource" #: templates/debug_toolbar/panels/timer.html:26 msgid "Browser timing" msgstr "Chronologie du navigateur" #: templates/debug_toolbar/panels/timer.html:35 msgid "Timing attribute" msgstr "Attribut mesuré" #: templates/debug_toolbar/panels/timer.html:37 msgid "Milliseconds since navigation start (+length)" msgstr "Millisecondes depuis le début de la navigation (+longueur)" #: templates/debug_toolbar/panels/versions.html:10 msgid "Package" msgstr "Paquet" #: templates/debug_toolbar/panels/versions.html:11 msgid "Name" msgstr "Nom" #: templates/debug_toolbar/panels/versions.html:12 msgid "Version" msgstr "Version" #: templates/debug_toolbar/redirect.html:10 msgid "Location:" msgstr "Emplacement :" #: templates/debug_toolbar/redirect.html:12 msgid "" "The Django Debug Toolbar has intercepted a redirect to the above URL for " "debug viewing purposes. You can click the above link to continue with the " "redirect as normal." msgstr "La barre de débogage Django a intercepté une redirection vers l'URL ci-dessus afin de permettre la consultation des messages de débogage. Vous pouvez cliquer sur le lien ci-dessus pour continuer normalement avec la redirection." #: views.py:16 msgid "" "Data for this panel isn't available anymore. Please reload the page and " "retry." msgstr "Les données de ce panneau ne sont plus disponibles. Rechargez la page et essayez à nouveau." python-django-debug-toolbar-5.2.0/debug_toolbar/locale/he/000077500000000000000000000000001500406072000234605ustar00rootroot00000000000000python-django-debug-toolbar-5.2.0/debug_toolbar/locale/he/LC_MESSAGES/000077500000000000000000000000001500406072000252455ustar00rootroot00000000000000python-django-debug-toolbar-5.2.0/debug_toolbar/locale/he/LC_MESSAGES/django.mo000066400000000000000000000025121500406072000270440ustar00rootroot00000000000000l    ' 3 @MT \fkpv N [h |    ") 0;   ActionActiveEmpty setErrorExecuted SQLHideIn errorKeyLocationNo GET dataNo POST dataSerializableSignalSignalsTemplatesTimeTypeValueVariableVersionsProject-Id-Version: Django Debug Toolbar Report-Msgid-Bugs-To: PO-Revision-Date: 2010-11-30 00:00+0000 Last-Translator: shaib , 2012 Language-Team: Hebrew (http://app.transifex.com/django-debug-toolbar/django-debug-toolbar/language/he/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: he Plural-Forms: nplurals=3; plural=(n == 1 && n % 1 == 0) ? 0 : (n == 2 && n % 1 == 0) ? 1: 2; פעילותפעילותקבוצה ריקהשגיאהSQL שבוצעהסתרשגיאהמפתחמקוםאין נתוני GETאין נתוני POSTמשתנהסיגנלסיגנליםתבניותזמןסוגערךמשתנהגירסאותpython-django-debug-toolbar-5.2.0/debug_toolbar/locale/he/LC_MESSAGES/django.po000066400000000000000000000372561500406072000270640ustar00rootroot00000000000000# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # # Translators: # shaib , 2012 msgid "" msgstr "" "Project-Id-Version: Django Debug Toolbar\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2024-08-06 07:12-0500\n" "PO-Revision-Date: 2010-11-30 00:00+0000\n" "Last-Translator: shaib , 2012\n" "Language-Team: Hebrew (http://app.transifex.com/django-debug-toolbar/django-debug-toolbar/language/he/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: he\n" "Plural-Forms: nplurals=3; plural=(n == 1 && n % 1 == 0) ? 0 : (n == 2 && n % 1 == 0) ? 1: 2;\n" #: apps.py:18 msgid "Debug Toolbar" msgstr "" #: panels/alerts.py:67 #, python-brace-format msgid "" "Form with id \"{form_id}\" contains file input, but does not have the " "attribute enctype=\"multipart/form-data\"." msgstr "" #: panels/alerts.py:70 msgid "" "Form contains file input, but does not have the attribute " "enctype=\"multipart/form-data\"." msgstr "" #: panels/alerts.py:73 #, python-brace-format msgid "" "Input element references form with id \"{form_id}\", but the form does not " "have the attribute enctype=\"multipart/form-data\"." msgstr "" #: panels/alerts.py:77 msgid "Alerts" msgstr "" #: panels/cache.py:168 msgid "Cache" msgstr "" #: panels/cache.py:174 #, python-format msgid "%(cache_calls)d call in %(time).2fms" msgid_plural "%(cache_calls)d calls in %(time).2fms" msgstr[0] "" msgstr[1] "" msgstr[2] "" #: panels/cache.py:183 #, python-format msgid "Cache calls from %(count)d backend" msgid_plural "Cache calls from %(count)d backends" msgstr[0] "" msgstr[1] "" msgstr[2] "" #: panels/headers.py:31 msgid "Headers" msgstr "" #: panels/history/panel.py:19 panels/history/panel.py:20 msgid "History" msgstr "" #: panels/profiling.py:140 msgid "Profiling" msgstr "" #: panels/redirects.py:17 msgid "Intercept redirects" msgstr "" #: panels/request.py:16 msgid "Request" msgstr "" #: panels/request.py:38 msgid "" msgstr "" #: panels/request.py:55 msgid "" msgstr "" #: panels/settings.py:17 msgid "Settings" msgstr "" #: panels/settings.py:20 #, python-format msgid "Settings from %s" msgstr "" #: panels/signals.py:57 #, python-format msgid "%(num_receivers)d receiver of 1 signal" msgid_plural "%(num_receivers)d receivers of 1 signal" msgstr[0] "" msgstr[1] "" msgstr[2] "" #: panels/signals.py:62 #, python-format msgid "%(num_receivers)d receiver of %(num_signals)d signals" msgid_plural "%(num_receivers)d receivers of %(num_signals)d signals" msgstr[0] "" msgstr[1] "" msgstr[2] "" #: panels/signals.py:67 msgid "Signals" msgstr "סיגנלים" #: panels/sql/panel.py:30 panels/sql/panel.py:41 msgid "Read uncommitted" msgstr "" #: panels/sql/panel.py:31 panels/sql/panel.py:43 msgid "Read committed" msgstr "" #: panels/sql/panel.py:32 panels/sql/panel.py:45 msgid "Repeatable read" msgstr "" #: panels/sql/panel.py:33 panels/sql/panel.py:47 msgid "Serializable" msgstr "משתנה" #: panels/sql/panel.py:39 msgid "Autocommit" msgstr "" #: panels/sql/panel.py:61 panels/sql/panel.py:71 msgid "Idle" msgstr "" #: panels/sql/panel.py:62 panels/sql/panel.py:72 msgid "Active" msgstr "פעילות" #: panels/sql/panel.py:63 panels/sql/panel.py:73 msgid "In transaction" msgstr "" #: panels/sql/panel.py:64 panels/sql/panel.py:74 msgid "In error" msgstr "שגיאה" #: panels/sql/panel.py:65 panels/sql/panel.py:75 msgid "Unknown" msgstr "" #: panels/sql/panel.py:162 msgid "SQL" msgstr "" #: panels/sql/panel.py:168 #, python-format msgid "%(query_count)d query in %(sql_time).2fms" msgid_plural "%(query_count)d queries in %(sql_time).2fms" msgstr[0] "" msgstr[1] "" msgstr[2] "" #: panels/sql/panel.py:180 #, python-format msgid "SQL queries from %(count)d connection" msgid_plural "SQL queries from %(count)d connections" msgstr[0] "" msgstr[1] "" msgstr[2] "" #: panels/staticfiles.py:82 #, python-format msgid "Static files (%(num_found)s found, %(num_used)s used)" msgstr "" #: panels/staticfiles.py:103 msgid "Static files" msgstr "" #: panels/staticfiles.py:109 #, python-format msgid "%(num_used)s file used" msgid_plural "%(num_used)s files used" msgstr[0] "" msgstr[1] "" msgstr[2] "" #: panels/templates/panel.py:101 msgid "Templates" msgstr "תבניות" #: panels/templates/panel.py:106 #, python-format msgid "Templates (%(num_templates)s rendered)" msgstr "" #: panels/templates/panel.py:195 msgid "No origin" msgstr "" #: panels/timer.py:27 #, python-format msgid "CPU: %(cum)0.2fms (%(total)0.2fms)" msgstr "" #: panels/timer.py:32 #, python-format msgid "Total: %0.2fms" msgstr "" #: panels/timer.py:38 templates/debug_toolbar/panels/history.html:9 #: templates/debug_toolbar/panels/sql_explain.html:11 #: templates/debug_toolbar/panels/sql_profile.html:12 #: templates/debug_toolbar/panels/sql_select.html:11 msgid "Time" msgstr "זמן" #: panels/timer.py:46 msgid "User CPU time" msgstr "" #: panels/timer.py:46 #, python-format msgid "%(utime)0.3f msec" msgstr "" #: panels/timer.py:47 msgid "System CPU time" msgstr "" #: panels/timer.py:47 #, python-format msgid "%(stime)0.3f msec" msgstr "" #: panels/timer.py:48 msgid "Total CPU time" msgstr "" #: panels/timer.py:48 #, python-format msgid "%(total)0.3f msec" msgstr "" #: panels/timer.py:49 msgid "Elapsed time" msgstr "" #: panels/timer.py:49 #, python-format msgid "%(total_time)0.3f msec" msgstr "" #: panels/timer.py:51 msgid "Context switches" msgstr "" #: panels/timer.py:52 #, python-format msgid "%(vcsw)d voluntary, %(ivcsw)d involuntary" msgstr "" #: panels/versions.py:19 msgid "Versions" msgstr "גירסאות" #: templates/debug_toolbar/base.html:23 msgid "Hide toolbar" msgstr "" #: templates/debug_toolbar/base.html:23 msgid "Hide" msgstr "הסתר" #: templates/debug_toolbar/base.html:25 templates/debug_toolbar/base.html:26 msgid "Toggle Theme" msgstr "" #: templates/debug_toolbar/base.html:35 msgid "Show toolbar" msgstr "" #: templates/debug_toolbar/includes/panel_button.html:4 msgid "Disable for next and successive requests" msgstr "" #: templates/debug_toolbar/includes/panel_button.html:4 msgid "Enable for next and successive requests" msgstr "" #: templates/debug_toolbar/panels/alerts.html:4 msgid "Alerts found" msgstr "" #: templates/debug_toolbar/panels/alerts.html:11 msgid "No alerts found" msgstr "" #: templates/debug_toolbar/panels/cache.html:2 msgid "Summary" msgstr "" #: templates/debug_toolbar/panels/cache.html:6 msgid "Total calls" msgstr "" #: templates/debug_toolbar/panels/cache.html:7 msgid "Total time" msgstr "" #: templates/debug_toolbar/panels/cache.html:8 msgid "Cache hits" msgstr "" #: templates/debug_toolbar/panels/cache.html:9 msgid "Cache misses" msgstr "" #: templates/debug_toolbar/panels/cache.html:21 msgid "Commands" msgstr "" #: templates/debug_toolbar/panels/cache.html:39 msgid "Calls" msgstr "" #: templates/debug_toolbar/panels/cache.html:43 #: templates/debug_toolbar/panels/sql.html:36 msgid "Time (ms)" msgstr "" #: templates/debug_toolbar/panels/cache.html:44 msgid "Type" msgstr "סוג" #: templates/debug_toolbar/panels/cache.html:45 #: templates/debug_toolbar/panels/request.html:8 msgid "Arguments" msgstr "" #: templates/debug_toolbar/panels/cache.html:46 #: templates/debug_toolbar/panels/request.html:9 msgid "Keyword arguments" msgstr "" #: templates/debug_toolbar/panels/cache.html:47 msgid "Backend" msgstr "" #: templates/debug_toolbar/panels/headers.html:3 msgid "Request headers" msgstr "" #: templates/debug_toolbar/panels/headers.html:8 #: templates/debug_toolbar/panels/headers.html:27 #: templates/debug_toolbar/panels/headers.html:48 msgid "Key" msgstr "מפתח" #: templates/debug_toolbar/panels/headers.html:9 #: templates/debug_toolbar/panels/headers.html:28 #: templates/debug_toolbar/panels/headers.html:49 #: templates/debug_toolbar/panels/history_tr.html:23 #: templates/debug_toolbar/panels/request_variables.html:12 #: templates/debug_toolbar/panels/settings.html:6 #: templates/debug_toolbar/panels/timer.html:11 msgid "Value" msgstr "ערך" #: templates/debug_toolbar/panels/headers.html:22 msgid "Response headers" msgstr "" #: templates/debug_toolbar/panels/headers.html:41 msgid "WSGI environ" msgstr "" #: templates/debug_toolbar/panels/headers.html:43 msgid "" "Since the WSGI environ inherits the environment of the server, only a " "significant subset is shown below." msgstr "" #: templates/debug_toolbar/panels/history.html:10 msgid "Method" msgstr "" #: templates/debug_toolbar/panels/history.html:11 #: templates/debug_toolbar/panels/staticfiles.html:43 msgid "Path" msgstr "" #: templates/debug_toolbar/panels/history.html:12 msgid "Request Variables" msgstr "" #: templates/debug_toolbar/panels/history.html:13 msgid "Status" msgstr "" #: templates/debug_toolbar/panels/history.html:14 #: templates/debug_toolbar/panels/sql.html:37 msgid "Action" msgstr "פעילות" #: templates/debug_toolbar/panels/history_tr.html:22 #: templates/debug_toolbar/panels/request_variables.html:11 msgid "Variable" msgstr "משתנה" #: templates/debug_toolbar/panels/profiling.html:5 msgid "Call" msgstr "" #: templates/debug_toolbar/panels/profiling.html:6 msgid "CumTime" msgstr "" #: templates/debug_toolbar/panels/profiling.html:7 #: templates/debug_toolbar/panels/profiling.html:9 msgid "Per" msgstr "" #: templates/debug_toolbar/panels/profiling.html:8 msgid "TotTime" msgstr "" #: templates/debug_toolbar/panels/profiling.html:10 msgid "Count" msgstr "" #: templates/debug_toolbar/panels/request.html:3 msgid "View information" msgstr "" #: templates/debug_toolbar/panels/request.html:7 msgid "View function" msgstr "" #: templates/debug_toolbar/panels/request.html:10 msgid "URL name" msgstr "" #: templates/debug_toolbar/panels/request.html:24 msgid "Cookies" msgstr "" #: templates/debug_toolbar/panels/request.html:27 msgid "No cookies" msgstr "" #: templates/debug_toolbar/panels/request.html:31 msgid "Session data" msgstr "" #: templates/debug_toolbar/panels/request.html:34 msgid "No session data" msgstr "" #: templates/debug_toolbar/panels/request.html:38 msgid "GET data" msgstr "" #: templates/debug_toolbar/panels/request.html:41 msgid "No GET data" msgstr "אין נתוני GET" #: templates/debug_toolbar/panels/request.html:45 msgid "POST data" msgstr "" #: templates/debug_toolbar/panels/request.html:48 msgid "No POST data" msgstr "אין נתוני POST" #: templates/debug_toolbar/panels/settings.html:5 msgid "Setting" msgstr "" #: templates/debug_toolbar/panels/signals.html:5 msgid "Signal" msgstr "סיגנל" #: templates/debug_toolbar/panels/signals.html:6 msgid "Receivers" msgstr "" #: templates/debug_toolbar/panels/sql.html:6 #, python-format msgid "%(num)s query" msgid_plural "%(num)s queries" msgstr[0] "" msgstr[1] "" msgstr[2] "" #: templates/debug_toolbar/panels/sql.html:8 #, python-format msgid "" "including %(count)s similar" msgstr "" #: templates/debug_toolbar/panels/sql.html:12 #, python-format msgid "" "and %(dupes)s duplicates" msgstr "" #: templates/debug_toolbar/panels/sql.html:34 msgid "Query" msgstr "" #: templates/debug_toolbar/panels/sql.html:35 #: templates/debug_toolbar/panels/timer.html:36 msgid "Timeline" msgstr "" #: templates/debug_toolbar/panels/sql.html:52 #, python-format msgid "%(count)s similar queries." msgstr "" #: templates/debug_toolbar/panels/sql.html:58 #, python-format msgid "Duplicated %(dupes)s times." msgstr "" #: templates/debug_toolbar/panels/sql.html:95 msgid "Connection:" msgstr "" #: templates/debug_toolbar/panels/sql.html:97 msgid "Isolation level:" msgstr "" #: templates/debug_toolbar/panels/sql.html:100 msgid "Transaction status:" msgstr "" #: templates/debug_toolbar/panels/sql.html:114 msgid "(unknown)" msgstr "" #: templates/debug_toolbar/panels/sql.html:123 msgid "No SQL queries were recorded during this request." msgstr "" #: templates/debug_toolbar/panels/sql_explain.html:4 msgid "SQL explained" msgstr "" #: templates/debug_toolbar/panels/sql_explain.html:9 #: templates/debug_toolbar/panels/sql_profile.html:10 #: templates/debug_toolbar/panels/sql_select.html:9 msgid "Executed SQL" msgstr "SQL שבוצע" #: templates/debug_toolbar/panels/sql_explain.html:13 #: templates/debug_toolbar/panels/sql_profile.html:14 #: templates/debug_toolbar/panels/sql_select.html:13 msgid "Database" msgstr "" #: templates/debug_toolbar/panels/sql_profile.html:4 msgid "SQL profiled" msgstr "" #: templates/debug_toolbar/panels/sql_profile.html:37 msgid "Error" msgstr "שגיאה" #: templates/debug_toolbar/panels/sql_select.html:4 msgid "SQL selected" msgstr "" #: templates/debug_toolbar/panels/sql_select.html:36 msgid "Empty set" msgstr "קבוצה ריקה" #: templates/debug_toolbar/panels/staticfiles.html:3 msgid "Static file path" msgid_plural "Static file paths" msgstr[0] "" msgstr[1] "" msgstr[2] "" #: templates/debug_toolbar/panels/staticfiles.html:7 #, python-format msgid "(prefix %(prefix)s)" msgstr "" #: templates/debug_toolbar/panels/staticfiles.html:11 #: templates/debug_toolbar/panels/staticfiles.html:22 #: templates/debug_toolbar/panels/staticfiles.html:34 #: templates/debug_toolbar/panels/templates.html:10 #: templates/debug_toolbar/panels/templates.html:30 #: templates/debug_toolbar/panels/templates.html:47 msgid "None" msgstr "" #: templates/debug_toolbar/panels/staticfiles.html:14 msgid "Static file app" msgid_plural "Static file apps" msgstr[0] "" msgstr[1] "" msgstr[2] "" #: templates/debug_toolbar/panels/staticfiles.html:25 msgid "Static file" msgid_plural "Static files" msgstr[0] "" msgstr[1] "" msgstr[2] "" #: templates/debug_toolbar/panels/staticfiles.html:39 #, python-format msgid "%(payload_count)s file" msgid_plural "%(payload_count)s files" msgstr[0] "" msgstr[1] "" msgstr[2] "" #: templates/debug_toolbar/panels/staticfiles.html:44 msgid "Location" msgstr "מקום" #: templates/debug_toolbar/panels/template_source.html:4 msgid "Template source:" msgstr "" #: templates/debug_toolbar/panels/templates.html:2 msgid "Template path" msgid_plural "Template paths" msgstr[0] "" msgstr[1] "" msgstr[2] "" #: templates/debug_toolbar/panels/templates.html:13 msgid "Template" msgid_plural "Templates" msgstr[0] "" msgstr[1] "תבנית" msgstr[2] "תבנית" #: templates/debug_toolbar/panels/templates.html:22 #: templates/debug_toolbar/panels/templates.html:40 msgid "Toggle context" msgstr "" #: templates/debug_toolbar/panels/templates.html:33 msgid "Context processor" msgid_plural "Context processors" msgstr[0] "" msgstr[1] "" msgstr[2] "" #: templates/debug_toolbar/panels/timer.html:2 msgid "Resource usage" msgstr "" #: templates/debug_toolbar/panels/timer.html:10 msgid "Resource" msgstr "" #: templates/debug_toolbar/panels/timer.html:26 msgid "Browser timing" msgstr "" #: templates/debug_toolbar/panels/timer.html:35 msgid "Timing attribute" msgstr "" #: templates/debug_toolbar/panels/timer.html:37 msgid "Milliseconds since navigation start (+length)" msgstr "" #: templates/debug_toolbar/panels/versions.html:10 msgid "Package" msgstr "" #: templates/debug_toolbar/panels/versions.html:11 msgid "Name" msgstr "" #: templates/debug_toolbar/panels/versions.html:12 msgid "Version" msgstr "" #: templates/debug_toolbar/redirect.html:10 msgid "Location:" msgstr "" #: templates/debug_toolbar/redirect.html:12 msgid "" "The Django Debug Toolbar has intercepted a redirect to the above URL for " "debug viewing purposes. You can click the above link to continue with the " "redirect as normal." msgstr "" #: views.py:16 msgid "" "Data for this panel isn't available anymore. Please reload the page and " "retry." msgstr "" python-django-debug-toolbar-5.2.0/debug_toolbar/locale/id/000077500000000000000000000000001500406072000234605ustar00rootroot00000000000000python-django-debug-toolbar-5.2.0/debug_toolbar/locale/id/LC_MESSAGES/000077500000000000000000000000001500406072000252455ustar00rootroot00000000000000python-django-debug-toolbar-5.2.0/debug_toolbar/locale/id/LC_MESSAGES/django.mo000066400000000000000000000047651500406072000270600ustar00rootroot000000000000000C( )3:"Ad iu{       (09@H an~    +" &1BRbq        * 8 H V _ e w           $.+"  ,& *'#0 -(!/)  %(unknown)ActionActiveCPU: %(cum)0.2fms (%(total)0.2fms)CallConnection:CountCumTimeDatabaseElapsed timeEmpty setExecuted SQLHideIn transactionIsolation level:KeyLocationNo GET dataNo POST dataNonePerReceiversResourceSQLSerializableSettingSettingsSignalSignalsStatic fileStatic filesStatic filesSystem CPU timeTemplate pathTemplate pathsTemplatesTimeTime (ms)TotTimeTotal CPU timeTransaction status:TypeUnknownUser CPU timeValueVariableVersionVersionsView informationProject-Id-Version: Django Debug Toolbar Report-Msgid-Bugs-To: PO-Revision-Date: 2010-11-30 00:00+0000 Last-Translator: Muhammad Panji , 2012 Language-Team: Indonesian (http://app.transifex.com/django-debug-toolbar/django-debug-toolbar/language/id/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: id Plural-Forms: nplurals=1; plural=0; (tidak diketahui)AksiAksiCPU: %(cum)0.2fms (%(total)0.2fms)PanggilKoneksi:HitungCumTimeBasis dataWaktu terlampauiHimpunan kosongSQL TereksekusiMenyembunyikanStatus transaksi:Tingkat isolasi:KunciLokasiTidak ada data GETTidak ada data POSTTidak adaPerPenerimaSumber dayaSQLVariabelPengaturanPengaturanSinyalSinyalBerkas statikBerkas statikCPU time sistemTemplate pathTemplateWaktuWaktu (milidetik)TotTimeCPU time totalStatus transaksi:Jenis(tidak diketahui)CPU time penggunaNilaiVariabelVersiVersiLihat informasipython-django-debug-toolbar-5.2.0/debug_toolbar/locale/id/LC_MESSAGES/django.po000066400000000000000000000370141500406072000270540ustar00rootroot00000000000000# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # # Translators: # Muhammad Panji , 2012 msgid "" msgstr "" "Project-Id-Version: Django Debug Toolbar\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2024-08-06 07:12-0500\n" "PO-Revision-Date: 2010-11-30 00:00+0000\n" "Last-Translator: Muhammad Panji , 2012\n" "Language-Team: Indonesian (http://app.transifex.com/django-debug-toolbar/django-debug-toolbar/language/id/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: id\n" "Plural-Forms: nplurals=1; plural=0;\n" #: apps.py:18 msgid "Debug Toolbar" msgstr "" #: panels/alerts.py:67 #, python-brace-format msgid "" "Form with id \"{form_id}\" contains file input, but does not have the " "attribute enctype=\"multipart/form-data\"." msgstr "" #: panels/alerts.py:70 msgid "" "Form contains file input, but does not have the attribute " "enctype=\"multipart/form-data\"." msgstr "" #: panels/alerts.py:73 #, python-brace-format msgid "" "Input element references form with id \"{form_id}\", but the form does not " "have the attribute enctype=\"multipart/form-data\"." msgstr "" #: panels/alerts.py:77 msgid "Alerts" msgstr "" #: panels/cache.py:168 msgid "Cache" msgstr "" #: panels/cache.py:174 #, python-format msgid "%(cache_calls)d call in %(time).2fms" msgid_plural "%(cache_calls)d calls in %(time).2fms" msgstr[0] "" #: panels/cache.py:183 #, python-format msgid "Cache calls from %(count)d backend" msgid_plural "Cache calls from %(count)d backends" msgstr[0] "" #: panels/headers.py:31 msgid "Headers" msgstr "" #: panels/history/panel.py:19 panels/history/panel.py:20 msgid "History" msgstr "" #: panels/profiling.py:140 msgid "Profiling" msgstr "" #: panels/redirects.py:17 msgid "Intercept redirects" msgstr "" #: panels/request.py:16 msgid "Request" msgstr "" #: panels/request.py:38 msgid "" msgstr "" #: panels/request.py:55 msgid "" msgstr "" #: panels/settings.py:17 msgid "Settings" msgstr "Pengaturan" #: panels/settings.py:20 #, python-format msgid "Settings from %s" msgstr "" #: panels/signals.py:57 #, python-format msgid "%(num_receivers)d receiver of 1 signal" msgid_plural "%(num_receivers)d receivers of 1 signal" msgstr[0] "" #: panels/signals.py:62 #, python-format msgid "%(num_receivers)d receiver of %(num_signals)d signals" msgid_plural "%(num_receivers)d receivers of %(num_signals)d signals" msgstr[0] "" #: panels/signals.py:67 msgid "Signals" msgstr "Sinyal" #: panels/sql/panel.py:30 panels/sql/panel.py:41 msgid "Read uncommitted" msgstr "" #: panels/sql/panel.py:31 panels/sql/panel.py:43 msgid "Read committed" msgstr "" #: panels/sql/panel.py:32 panels/sql/panel.py:45 msgid "Repeatable read" msgstr "" #: panels/sql/panel.py:33 panels/sql/panel.py:47 msgid "Serializable" msgstr "Variabel" #: panels/sql/panel.py:39 msgid "Autocommit" msgstr "" #: panels/sql/panel.py:61 panels/sql/panel.py:71 msgid "Idle" msgstr "" #: panels/sql/panel.py:62 panels/sql/panel.py:72 msgid "Active" msgstr "Aksi" #: panels/sql/panel.py:63 panels/sql/panel.py:73 msgid "In transaction" msgstr "Status transaksi:" #: panels/sql/panel.py:64 panels/sql/panel.py:74 msgid "In error" msgstr "" #: panels/sql/panel.py:65 panels/sql/panel.py:75 msgid "Unknown" msgstr "(tidak diketahui)" #: panels/sql/panel.py:162 msgid "SQL" msgstr "SQL" #: panels/sql/panel.py:168 #, python-format msgid "%(query_count)d query in %(sql_time).2fms" msgid_plural "%(query_count)d queries in %(sql_time).2fms" msgstr[0] "" #: panels/sql/panel.py:180 #, python-format msgid "SQL queries from %(count)d connection" msgid_plural "SQL queries from %(count)d connections" msgstr[0] "" #: panels/staticfiles.py:82 #, python-format msgid "Static files (%(num_found)s found, %(num_used)s used)" msgstr "" #: panels/staticfiles.py:103 msgid "Static files" msgstr "Berkas statik" #: panels/staticfiles.py:109 #, python-format msgid "%(num_used)s file used" msgid_plural "%(num_used)s files used" msgstr[0] "" #: panels/templates/panel.py:101 msgid "Templates" msgstr "Template" #: panels/templates/panel.py:106 #, python-format msgid "Templates (%(num_templates)s rendered)" msgstr "" #: panels/templates/panel.py:195 msgid "No origin" msgstr "" #: panels/timer.py:27 #, python-format msgid "CPU: %(cum)0.2fms (%(total)0.2fms)" msgstr "CPU: %(cum)0.2fms (%(total)0.2fms)" #: panels/timer.py:32 #, python-format msgid "Total: %0.2fms" msgstr "" #: panels/timer.py:38 templates/debug_toolbar/panels/history.html:9 #: templates/debug_toolbar/panels/sql_explain.html:11 #: templates/debug_toolbar/panels/sql_profile.html:12 #: templates/debug_toolbar/panels/sql_select.html:11 msgid "Time" msgstr "Waktu" #: panels/timer.py:46 msgid "User CPU time" msgstr "CPU time pengguna" #: panels/timer.py:46 #, python-format msgid "%(utime)0.3f msec" msgstr "" #: panels/timer.py:47 msgid "System CPU time" msgstr "CPU time sistem" #: panels/timer.py:47 #, python-format msgid "%(stime)0.3f msec" msgstr "" #: panels/timer.py:48 msgid "Total CPU time" msgstr "CPU time total" #: panels/timer.py:48 #, python-format msgid "%(total)0.3f msec" msgstr "" #: panels/timer.py:49 msgid "Elapsed time" msgstr "Waktu terlampaui" #: panels/timer.py:49 #, python-format msgid "%(total_time)0.3f msec" msgstr "" #: panels/timer.py:51 msgid "Context switches" msgstr "" #: panels/timer.py:52 #, python-format msgid "%(vcsw)d voluntary, %(ivcsw)d involuntary" msgstr "" #: panels/versions.py:19 msgid "Versions" msgstr "Versi" #: templates/debug_toolbar/base.html:23 msgid "Hide toolbar" msgstr "" #: templates/debug_toolbar/base.html:23 msgid "Hide" msgstr "Menyembunyikan" #: templates/debug_toolbar/base.html:25 templates/debug_toolbar/base.html:26 msgid "Toggle Theme" msgstr "" #: templates/debug_toolbar/base.html:35 msgid "Show toolbar" msgstr "" #: templates/debug_toolbar/includes/panel_button.html:4 msgid "Disable for next and successive requests" msgstr "" #: templates/debug_toolbar/includes/panel_button.html:4 msgid "Enable for next and successive requests" msgstr "" #: templates/debug_toolbar/panels/alerts.html:4 msgid "Alerts found" msgstr "" #: templates/debug_toolbar/panels/alerts.html:11 msgid "No alerts found" msgstr "" #: templates/debug_toolbar/panels/cache.html:2 msgid "Summary" msgstr "" #: templates/debug_toolbar/panels/cache.html:6 msgid "Total calls" msgstr "" #: templates/debug_toolbar/panels/cache.html:7 msgid "Total time" msgstr "" #: templates/debug_toolbar/panels/cache.html:8 msgid "Cache hits" msgstr "" #: templates/debug_toolbar/panels/cache.html:9 msgid "Cache misses" msgstr "" #: templates/debug_toolbar/panels/cache.html:21 msgid "Commands" msgstr "" #: templates/debug_toolbar/panels/cache.html:39 msgid "Calls" msgstr "" #: templates/debug_toolbar/panels/cache.html:43 #: templates/debug_toolbar/panels/sql.html:36 msgid "Time (ms)" msgstr "Waktu (milidetik)" #: templates/debug_toolbar/panels/cache.html:44 msgid "Type" msgstr "Jenis" #: templates/debug_toolbar/panels/cache.html:45 #: templates/debug_toolbar/panels/request.html:8 msgid "Arguments" msgstr "" #: templates/debug_toolbar/panels/cache.html:46 #: templates/debug_toolbar/panels/request.html:9 msgid "Keyword arguments" msgstr "" #: templates/debug_toolbar/panels/cache.html:47 msgid "Backend" msgstr "" #: templates/debug_toolbar/panels/headers.html:3 msgid "Request headers" msgstr "" #: templates/debug_toolbar/panels/headers.html:8 #: templates/debug_toolbar/panels/headers.html:27 #: templates/debug_toolbar/panels/headers.html:48 msgid "Key" msgstr "Kunci" #: templates/debug_toolbar/panels/headers.html:9 #: templates/debug_toolbar/panels/headers.html:28 #: templates/debug_toolbar/panels/headers.html:49 #: templates/debug_toolbar/panels/history_tr.html:23 #: templates/debug_toolbar/panels/request_variables.html:12 #: templates/debug_toolbar/panels/settings.html:6 #: templates/debug_toolbar/panels/timer.html:11 msgid "Value" msgstr "Nilai" #: templates/debug_toolbar/panels/headers.html:22 msgid "Response headers" msgstr "" #: templates/debug_toolbar/panels/headers.html:41 msgid "WSGI environ" msgstr "" #: templates/debug_toolbar/panels/headers.html:43 msgid "" "Since the WSGI environ inherits the environment of the server, only a " "significant subset is shown below." msgstr "" #: templates/debug_toolbar/panels/history.html:10 msgid "Method" msgstr "" #: templates/debug_toolbar/panels/history.html:11 #: templates/debug_toolbar/panels/staticfiles.html:43 msgid "Path" msgstr "" #: templates/debug_toolbar/panels/history.html:12 msgid "Request Variables" msgstr "" #: templates/debug_toolbar/panels/history.html:13 msgid "Status" msgstr "" #: templates/debug_toolbar/panels/history.html:14 #: templates/debug_toolbar/panels/sql.html:37 msgid "Action" msgstr "Aksi" #: templates/debug_toolbar/panels/history_tr.html:22 #: templates/debug_toolbar/panels/request_variables.html:11 msgid "Variable" msgstr "Variabel" #: templates/debug_toolbar/panels/profiling.html:5 msgid "Call" msgstr "Panggil" #: templates/debug_toolbar/panels/profiling.html:6 msgid "CumTime" msgstr "CumTime" #: templates/debug_toolbar/panels/profiling.html:7 #: templates/debug_toolbar/panels/profiling.html:9 msgid "Per" msgstr "Per" #: templates/debug_toolbar/panels/profiling.html:8 msgid "TotTime" msgstr "TotTime" #: templates/debug_toolbar/panels/profiling.html:10 msgid "Count" msgstr "Hitung" #: templates/debug_toolbar/panels/request.html:3 msgid "View information" msgstr "Lihat informasi" #: templates/debug_toolbar/panels/request.html:7 msgid "View function" msgstr "" #: templates/debug_toolbar/panels/request.html:10 msgid "URL name" msgstr "" #: templates/debug_toolbar/panels/request.html:24 msgid "Cookies" msgstr "" #: templates/debug_toolbar/panels/request.html:27 msgid "No cookies" msgstr "" #: templates/debug_toolbar/panels/request.html:31 msgid "Session data" msgstr "" #: templates/debug_toolbar/panels/request.html:34 msgid "No session data" msgstr "" #: templates/debug_toolbar/panels/request.html:38 msgid "GET data" msgstr "" #: templates/debug_toolbar/panels/request.html:41 msgid "No GET data" msgstr "Tidak ada data GET" #: templates/debug_toolbar/panels/request.html:45 msgid "POST data" msgstr "" #: templates/debug_toolbar/panels/request.html:48 msgid "No POST data" msgstr "Tidak ada data POST" #: templates/debug_toolbar/panels/settings.html:5 msgid "Setting" msgstr "Pengaturan" #: templates/debug_toolbar/panels/signals.html:5 msgid "Signal" msgstr "Sinyal" #: templates/debug_toolbar/panels/signals.html:6 msgid "Receivers" msgstr "Penerima" #: templates/debug_toolbar/panels/sql.html:6 #, python-format msgid "%(num)s query" msgid_plural "%(num)s queries" msgstr[0] "" #: templates/debug_toolbar/panels/sql.html:8 #, python-format msgid "" "including %(count)s similar" msgstr "" #: templates/debug_toolbar/panels/sql.html:12 #, python-format msgid "" "and %(dupes)s duplicates" msgstr "" #: templates/debug_toolbar/panels/sql.html:34 msgid "Query" msgstr "" #: templates/debug_toolbar/panels/sql.html:35 #: templates/debug_toolbar/panels/timer.html:36 msgid "Timeline" msgstr "" #: templates/debug_toolbar/panels/sql.html:52 #, python-format msgid "%(count)s similar queries." msgstr "" #: templates/debug_toolbar/panels/sql.html:58 #, python-format msgid "Duplicated %(dupes)s times." msgstr "" #: templates/debug_toolbar/panels/sql.html:95 msgid "Connection:" msgstr "Koneksi:" #: templates/debug_toolbar/panels/sql.html:97 msgid "Isolation level:" msgstr "Tingkat isolasi:" #: templates/debug_toolbar/panels/sql.html:100 msgid "Transaction status:" msgstr "Status transaksi:" #: templates/debug_toolbar/panels/sql.html:114 msgid "(unknown)" msgstr "(tidak diketahui)" #: templates/debug_toolbar/panels/sql.html:123 msgid "No SQL queries were recorded during this request." msgstr "" #: templates/debug_toolbar/panels/sql_explain.html:4 msgid "SQL explained" msgstr "" #: templates/debug_toolbar/panels/sql_explain.html:9 #: templates/debug_toolbar/panels/sql_profile.html:10 #: templates/debug_toolbar/panels/sql_select.html:9 msgid "Executed SQL" msgstr "SQL Tereksekusi" #: templates/debug_toolbar/panels/sql_explain.html:13 #: templates/debug_toolbar/panels/sql_profile.html:14 #: templates/debug_toolbar/panels/sql_select.html:13 msgid "Database" msgstr "Basis data" #: templates/debug_toolbar/panels/sql_profile.html:4 msgid "SQL profiled" msgstr "" #: templates/debug_toolbar/panels/sql_profile.html:37 msgid "Error" msgstr "" #: templates/debug_toolbar/panels/sql_select.html:4 msgid "SQL selected" msgstr "" #: templates/debug_toolbar/panels/sql_select.html:36 msgid "Empty set" msgstr "Himpunan kosong" #: templates/debug_toolbar/panels/staticfiles.html:3 msgid "Static file path" msgid_plural "Static file paths" msgstr[0] "" #: templates/debug_toolbar/panels/staticfiles.html:7 #, python-format msgid "(prefix %(prefix)s)" msgstr "" #: templates/debug_toolbar/panels/staticfiles.html:11 #: templates/debug_toolbar/panels/staticfiles.html:22 #: templates/debug_toolbar/panels/staticfiles.html:34 #: templates/debug_toolbar/panels/templates.html:10 #: templates/debug_toolbar/panels/templates.html:30 #: templates/debug_toolbar/panels/templates.html:47 msgid "None" msgstr "Tidak ada" #: templates/debug_toolbar/panels/staticfiles.html:14 msgid "Static file app" msgid_plural "Static file apps" msgstr[0] "" #: templates/debug_toolbar/panels/staticfiles.html:25 msgid "Static file" msgid_plural "Static files" msgstr[0] "Berkas statik" #: templates/debug_toolbar/panels/staticfiles.html:39 #, python-format msgid "%(payload_count)s file" msgid_plural "%(payload_count)s files" msgstr[0] "" #: templates/debug_toolbar/panels/staticfiles.html:44 msgid "Location" msgstr "Lokasi" #: templates/debug_toolbar/panels/template_source.html:4 msgid "Template source:" msgstr "" #: templates/debug_toolbar/panels/templates.html:2 msgid "Template path" msgid_plural "Template paths" msgstr[0] "Template path" #: templates/debug_toolbar/panels/templates.html:13 msgid "Template" msgid_plural "Templates" msgstr[0] "" #: templates/debug_toolbar/panels/templates.html:22 #: templates/debug_toolbar/panels/templates.html:40 msgid "Toggle context" msgstr "" #: templates/debug_toolbar/panels/templates.html:33 msgid "Context processor" msgid_plural "Context processors" msgstr[0] "" #: templates/debug_toolbar/panels/timer.html:2 msgid "Resource usage" msgstr "" #: templates/debug_toolbar/panels/timer.html:10 msgid "Resource" msgstr "Sumber daya" #: templates/debug_toolbar/panels/timer.html:26 msgid "Browser timing" msgstr "" #: templates/debug_toolbar/panels/timer.html:35 msgid "Timing attribute" msgstr "" #: templates/debug_toolbar/panels/timer.html:37 msgid "Milliseconds since navigation start (+length)" msgstr "" #: templates/debug_toolbar/panels/versions.html:10 msgid "Package" msgstr "" #: templates/debug_toolbar/panels/versions.html:11 msgid "Name" msgstr "" #: templates/debug_toolbar/panels/versions.html:12 msgid "Version" msgstr "Versi" #: templates/debug_toolbar/redirect.html:10 msgid "Location:" msgstr "" #: templates/debug_toolbar/redirect.html:12 msgid "" "The Django Debug Toolbar has intercepted a redirect to the above URL for " "debug viewing purposes. You can click the above link to continue with the " "redirect as normal." msgstr "" #: views.py:16 msgid "" "Data for this panel isn't available anymore. Please reload the page and " "retry." msgstr "" python-django-debug-toolbar-5.2.0/debug_toolbar/locale/it/000077500000000000000000000000001500406072000235005ustar00rootroot00000000000000python-django-debug-toolbar-5.2.0/debug_toolbar/locale/it/LC_MESSAGES/000077500000000000000000000000001500406072000252655ustar00rootroot00000000000000python-django-debug-toolbar-5.2.0/debug_toolbar/locale/it/LC_MESSAGES/django.mo000066400000000000000000000205411500406072000270660ustar00rootroot00000000000000|x Jy  l NO . .    7 )I s     "  F S ^ k p v  $     N &(/ X e'o  % .-8f k w1    #3;KTct x     h P"q 5  &'N  -5 D P[j~   z)/Y}GD 0G+Y    "&z, 7,>FMQU2 02 9F O\ev{  7 3>H     "7 ?Ka e q   a2HA{ 8 Aaw&U [ g p z         ! !!!*! 3!A! S!nfV"6adF5X?/ k !Bb +l8AI=N^i)`gT[WE,<jL2K Q' -Ht{he(qv\sCDZ4GPRYSz>7w10O@J.oUu9%3;$]:&#p_mM|y r*xc%(cache_calls)d call in %(time).2fms%(cache_calls)d calls in %(time).2fms%(num)s query%(num)s queries%(num_receivers)d receiver of %(num_signals)d signals%(num_receivers)d receivers of %(num_signals)d signals%(num_receivers)d receiver of 1 signal%(num_receivers)d receivers of 1 signal%(num_used)s file used%(num_used)s files used%(payload_count)s file%(payload_count)s files%(stime)0.3f msec%(total)0.3f msec%(total_time)0.3f msec%(utime)0.3f msec%(vcsw)d voluntary, %(ivcsw)d involuntary(prefix %(prefix)s)(unknown)ActionActiveArgumentsAutocommitBackendBrowser timingCPU: %(cum)0.2fms (%(total)0.2fms)CacheCache calls from %(count)d backendCache calls from %(count)d backendsCache hitsCache missesCallCallsCommandsConnection:Context processorContext processorsContext switchesCookiesCountCumTimeData for this panel isn't available anymore. Please reload the page and retry.DatabaseDisable for next and successive requestsElapsed timeEmpty setEnable for next and successive requestsErrorExecuted SQLGET dataHeadersHideHide toolbarIdleIn errorIn transactionIntercept redirectsIsolation level:KeyKeyword argumentsLocationLocation:Milliseconds since navigation start (+length)NameNo GET dataNo POST dataNo SQL queries were recorded during this request.No cookiesNo session dataNonePOST dataPathPerProfilingQueryRead committedRead uncommittedReceiversRepeatable readRequestRequest headersResourceResource usageResponse headersSQLSQL explainedSQL profiledSQL selectedSerializableSession dataSettingSettingsShow toolbarSignalSignalsSince the WSGI environ inherits the environment of the server, only a significant subset is shown below.Static file appStatic file appsStatic file pathStatic file pathsStatic filesStatic files (%(num_found)s found, %(num_used)s used)SummarySystem CPU timeTemplate pathTemplate pathsTemplate source:TemplatesTemplates (%(num_templates)s rendered)The Django Debug Toolbar has intercepted a redirect to the above URL for debug viewing purposes. You can click the above link to continue with the redirect as normal.TimeTime (ms)TimelineTiming attributeToggle contextTotTimeTotal CPU timeTotal callsTotal timeTotal: %0.2fmsTransaction status:TypeURL nameUnknownUser CPU timeValueVariableVersionVersionsView functionView informationWSGI environProject-Id-Version: Django Debug Toolbar Report-Msgid-Bugs-To: PO-Revision-Date: 2010-11-30 00:00+0000 Last-Translator: yakky , 2013-2014 Language-Team: Italian (http://app.transifex.com/django-debug-toolbar/django-debug-toolbar/language/it/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: it Plural-Forms: nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2; %(cache_calls)d chiamata in %(time).2fms%(cache_calls)d chiamate in %(time).2fms%(cache_calls)d chiamate in %(time).2fms%(num)s query%(num)s query%(num)s query%(num_receivers)d ricevitore di %(num_signals)d segnali%(num_receivers)d ricevitori di %(num_signals)d segnali%(num_receivers)d ricevitori di %(num_signals)d segnali%(num_receivers)d ricevitore di 1 segnale%(num_receivers)d ricevitori di 1 segnale%(num_receivers)d ricevitori di 1 segnale%(num_used)s file usato%(num_used)s file usati%(num_used)s file usati%(payload_count)s file%(payload_count)s file%(payload_count)s file%(stime)0.3f msec%(total)0.3f msec%(total_time)0.3f msec%(utime)0.3f msec%(vcsw)d volontario, %(ivcsw)d involontario(prefisso %(prefix)s)(sconosciuto)AzioneAzioneArgomentiAutocommitBackendTempo browserCPU: %(cum)0.2fms (%(total)0.2fms)CacheChiamate alla cache da %(count)d backendChiamate alla cache da %(count)d backendChiamate alla cache da %(count)d backendTrovati in cacheNon trovati in cacheChiamataChiamateComandiConnessione:Context processorContext processorsContext processorsCambi di contestoCookiesNumeroCumTimeNon sono più disponibili dati per questo pannello. Ricarica la pagina e riprova.DatabaseDisattiva per la prossima requests e le successiveTempo TrascorsoInsieme vuotoAbilita per la prossima requests e le successiveErroreSQL eseguitaDati GETIntestazioniNascondiNascondi ToolbarIdleErroreStato transazione:Intercetta ridirezioniIsolation level:NomeParole chiaveLocationLocation:Millisecondi dall'inizio della navigazione (+lunghezza)NomeNessun dato in GETNessuno dato in POSTNessuna Query SQL è stata registrata durante questa richiestaNessun cookieNessun dato in sessioneNessunoDati POSTPercorsoPerProfilazioneQueryRead committedRead uncommittedRicevitoriRepeatable readRequestHeader della requestRisorsaUso risorsaHeader della responseSQLSQL spigatoSQL profilatoSQL selezionatoSerializableDati di sessioneImpostazioneImpostazioniMostra ToolbarSegnaleSegnaliVisto che l'ambiente WSGI è ereditato dal server, sotto è mostrata solo la parte significativa.App file staticiApp file staticiApp file staticiPercorso file staticiPercorsi file staticiPercorsi file staticiFiles staticiFile statici (%(num_found)s trovati, %(num_used)s usati)SommarioTempo CPU sistemaPercorso dei templatePercorsi dei templatePercorsi dei templateSorgente del templateTemplateTemplates (%(num_templates)s rendered)Django Debug Toolbar ha intercettato un redirect verso la URL indicata per visualizzare il debug, Puoi cliccare sul link sopra per continuare normalmente con la redirezione.TempoDurata (ms)TimelineAttributoCambia contestoTotTimeTempo Totale CPUChiamate totaliTempo TotaleTotale: %0.2fmsStato transazione:TipoNome URL(sconosciuto)Tempo CPU utenteValoreVariabileVersioneVersioniFunzione ViewVedi InformazioniAmbiente WSGIpython-django-debug-toolbar-5.2.0/debug_toolbar/locale/it/LC_MESSAGES/django.po000066400000000000000000000445521500406072000271010ustar00rootroot00000000000000# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # # Translators: # Dario Agliottone , 2012 # Flavio Curella , 2013 # yakky , 2013-2014 msgid "" msgstr "" "Project-Id-Version: Django Debug Toolbar\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2024-08-06 07:12-0500\n" "PO-Revision-Date: 2010-11-30 00:00+0000\n" "Last-Translator: yakky , 2013-2014\n" "Language-Team: Italian (http://app.transifex.com/django-debug-toolbar/django-debug-toolbar/language/it/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: it\n" "Plural-Forms: nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" #: apps.py:18 msgid "Debug Toolbar" msgstr "" #: panels/alerts.py:67 #, python-brace-format msgid "" "Form with id \"{form_id}\" contains file input, but does not have the " "attribute enctype=\"multipart/form-data\"." msgstr "" #: panels/alerts.py:70 msgid "" "Form contains file input, but does not have the attribute " "enctype=\"multipart/form-data\"." msgstr "" #: panels/alerts.py:73 #, python-brace-format msgid "" "Input element references form with id \"{form_id}\", but the form does not " "have the attribute enctype=\"multipart/form-data\"." msgstr "" #: panels/alerts.py:77 msgid "Alerts" msgstr "" #: panels/cache.py:168 msgid "Cache" msgstr "Cache" #: panels/cache.py:174 #, python-format msgid "%(cache_calls)d call in %(time).2fms" msgid_plural "%(cache_calls)d calls in %(time).2fms" msgstr[0] "%(cache_calls)d chiamata in %(time).2fms" msgstr[1] "%(cache_calls)d chiamate in %(time).2fms" msgstr[2] "%(cache_calls)d chiamate in %(time).2fms" #: panels/cache.py:183 #, python-format msgid "Cache calls from %(count)d backend" msgid_plural "Cache calls from %(count)d backends" msgstr[0] "Chiamate alla cache da %(count)d backend" msgstr[1] "Chiamate alla cache da %(count)d backend" msgstr[2] "Chiamate alla cache da %(count)d backend" #: panels/headers.py:31 msgid "Headers" msgstr "Intestazioni" #: panels/history/panel.py:19 panels/history/panel.py:20 msgid "History" msgstr "" #: panels/profiling.py:140 msgid "Profiling" msgstr "Profilazione" #: panels/redirects.py:17 msgid "Intercept redirects" msgstr "Intercetta ridirezioni" #: panels/request.py:16 msgid "Request" msgstr "Request" #: panels/request.py:38 msgid "" msgstr "" #: panels/request.py:55 msgid "" msgstr "" #: panels/settings.py:17 msgid "Settings" msgstr "Impostazioni" #: panels/settings.py:20 #, python-format msgid "Settings from %s" msgstr "" #: panels/signals.py:57 #, python-format msgid "%(num_receivers)d receiver of 1 signal" msgid_plural "%(num_receivers)d receivers of 1 signal" msgstr[0] "%(num_receivers)d ricevitore di 1 segnale" msgstr[1] "%(num_receivers)d ricevitori di 1 segnale" msgstr[2] "%(num_receivers)d ricevitori di 1 segnale" #: panels/signals.py:62 #, python-format msgid "%(num_receivers)d receiver of %(num_signals)d signals" msgid_plural "%(num_receivers)d receivers of %(num_signals)d signals" msgstr[0] "%(num_receivers)d ricevitore di %(num_signals)d segnali" msgstr[1] "%(num_receivers)d ricevitori di %(num_signals)d segnali" msgstr[2] "%(num_receivers)d ricevitori di %(num_signals)d segnali" #: panels/signals.py:67 msgid "Signals" msgstr "Segnali" #: panels/sql/panel.py:30 panels/sql/panel.py:41 msgid "Read uncommitted" msgstr "Read uncommitted" #: panels/sql/panel.py:31 panels/sql/panel.py:43 msgid "Read committed" msgstr "Read committed" #: panels/sql/panel.py:32 panels/sql/panel.py:45 msgid "Repeatable read" msgstr "Repeatable read" #: panels/sql/panel.py:33 panels/sql/panel.py:47 msgid "Serializable" msgstr "Serializable" #: panels/sql/panel.py:39 msgid "Autocommit" msgstr "Autocommit" #: panels/sql/panel.py:61 panels/sql/panel.py:71 msgid "Idle" msgstr "Idle" #: panels/sql/panel.py:62 panels/sql/panel.py:72 msgid "Active" msgstr "Azione" #: panels/sql/panel.py:63 panels/sql/panel.py:73 msgid "In transaction" msgstr "Stato transazione:" #: panels/sql/panel.py:64 panels/sql/panel.py:74 msgid "In error" msgstr "Errore" #: panels/sql/panel.py:65 panels/sql/panel.py:75 msgid "Unknown" msgstr "(sconosciuto)" #: panels/sql/panel.py:162 msgid "SQL" msgstr "SQL" #: panels/sql/panel.py:168 #, python-format msgid "%(query_count)d query in %(sql_time).2fms" msgid_plural "%(query_count)d queries in %(sql_time).2fms" msgstr[0] "" msgstr[1] "" msgstr[2] "" #: panels/sql/panel.py:180 #, python-format msgid "SQL queries from %(count)d connection" msgid_plural "SQL queries from %(count)d connections" msgstr[0] "" msgstr[1] "" msgstr[2] "" #: panels/staticfiles.py:82 #, python-format msgid "Static files (%(num_found)s found, %(num_used)s used)" msgstr "File statici (%(num_found)s trovati, %(num_used)s usati)" #: panels/staticfiles.py:103 msgid "Static files" msgstr "Files statici" #: panels/staticfiles.py:109 #, python-format msgid "%(num_used)s file used" msgid_plural "%(num_used)s files used" msgstr[0] "%(num_used)s file usato" msgstr[1] "%(num_used)s file usati" msgstr[2] "%(num_used)s file usati" #: panels/templates/panel.py:101 msgid "Templates" msgstr "Template" #: panels/templates/panel.py:106 #, python-format msgid "Templates (%(num_templates)s rendered)" msgstr "Templates (%(num_templates)s rendered)" #: panels/templates/panel.py:195 msgid "No origin" msgstr "" #: panels/timer.py:27 #, python-format msgid "CPU: %(cum)0.2fms (%(total)0.2fms)" msgstr "CPU: %(cum)0.2fms (%(total)0.2fms)" #: panels/timer.py:32 #, python-format msgid "Total: %0.2fms" msgstr "Totale: %0.2fms" #: panels/timer.py:38 templates/debug_toolbar/panels/history.html:9 #: templates/debug_toolbar/panels/sql_explain.html:11 #: templates/debug_toolbar/panels/sql_profile.html:12 #: templates/debug_toolbar/panels/sql_select.html:11 msgid "Time" msgstr "Tempo" #: panels/timer.py:46 msgid "User CPU time" msgstr "Tempo CPU utente" #: panels/timer.py:46 #, python-format msgid "%(utime)0.3f msec" msgstr "%(utime)0.3f msec" #: panels/timer.py:47 msgid "System CPU time" msgstr "Tempo CPU sistema" #: panels/timer.py:47 #, python-format msgid "%(stime)0.3f msec" msgstr "%(stime)0.3f msec" #: panels/timer.py:48 msgid "Total CPU time" msgstr "Tempo Totale CPU" #: panels/timer.py:48 #, python-format msgid "%(total)0.3f msec" msgstr "%(total)0.3f msec" #: panels/timer.py:49 msgid "Elapsed time" msgstr "Tempo Trascorso" #: panels/timer.py:49 #, python-format msgid "%(total_time)0.3f msec" msgstr "%(total_time)0.3f msec" #: panels/timer.py:51 msgid "Context switches" msgstr "Cambi di contesto" #: panels/timer.py:52 #, python-format msgid "%(vcsw)d voluntary, %(ivcsw)d involuntary" msgstr "%(vcsw)d volontario, %(ivcsw)d involontario" #: panels/versions.py:19 msgid "Versions" msgstr "Versioni" #: templates/debug_toolbar/base.html:23 msgid "Hide toolbar" msgstr "Nascondi Toolbar" #: templates/debug_toolbar/base.html:23 msgid "Hide" msgstr "Nascondi" #: templates/debug_toolbar/base.html:25 templates/debug_toolbar/base.html:26 msgid "Toggle Theme" msgstr "" #: templates/debug_toolbar/base.html:35 msgid "Show toolbar" msgstr "Mostra Toolbar" #: templates/debug_toolbar/includes/panel_button.html:4 msgid "Disable for next and successive requests" msgstr "Disattiva per la prossima requests e le successive" #: templates/debug_toolbar/includes/panel_button.html:4 msgid "Enable for next and successive requests" msgstr "Abilita per la prossima requests e le successive" #: templates/debug_toolbar/panels/alerts.html:4 msgid "Alerts found" msgstr "" #: templates/debug_toolbar/panels/alerts.html:11 msgid "No alerts found" msgstr "" #: templates/debug_toolbar/panels/cache.html:2 msgid "Summary" msgstr "Sommario" #: templates/debug_toolbar/panels/cache.html:6 msgid "Total calls" msgstr "Chiamate totali" #: templates/debug_toolbar/panels/cache.html:7 msgid "Total time" msgstr "Tempo Totale" #: templates/debug_toolbar/panels/cache.html:8 msgid "Cache hits" msgstr "Trovati in cache" #: templates/debug_toolbar/panels/cache.html:9 msgid "Cache misses" msgstr "Non trovati in cache" #: templates/debug_toolbar/panels/cache.html:21 msgid "Commands" msgstr "Comandi" #: templates/debug_toolbar/panels/cache.html:39 msgid "Calls" msgstr "Chiamate" #: templates/debug_toolbar/panels/cache.html:43 #: templates/debug_toolbar/panels/sql.html:36 msgid "Time (ms)" msgstr "Durata (ms)" #: templates/debug_toolbar/panels/cache.html:44 msgid "Type" msgstr "Tipo" #: templates/debug_toolbar/panels/cache.html:45 #: templates/debug_toolbar/panels/request.html:8 msgid "Arguments" msgstr "Argomenti" #: templates/debug_toolbar/panels/cache.html:46 #: templates/debug_toolbar/panels/request.html:9 msgid "Keyword arguments" msgstr "Parole chiave" #: templates/debug_toolbar/panels/cache.html:47 msgid "Backend" msgstr "Backend" #: templates/debug_toolbar/panels/headers.html:3 msgid "Request headers" msgstr "Header della request" #: templates/debug_toolbar/panels/headers.html:8 #: templates/debug_toolbar/panels/headers.html:27 #: templates/debug_toolbar/panels/headers.html:48 msgid "Key" msgstr "Nome" #: templates/debug_toolbar/panels/headers.html:9 #: templates/debug_toolbar/panels/headers.html:28 #: templates/debug_toolbar/panels/headers.html:49 #: templates/debug_toolbar/panels/history_tr.html:23 #: templates/debug_toolbar/panels/request_variables.html:12 #: templates/debug_toolbar/panels/settings.html:6 #: templates/debug_toolbar/panels/timer.html:11 msgid "Value" msgstr "Valore" #: templates/debug_toolbar/panels/headers.html:22 msgid "Response headers" msgstr "Header della response" #: templates/debug_toolbar/panels/headers.html:41 msgid "WSGI environ" msgstr "Ambiente WSGI" #: templates/debug_toolbar/panels/headers.html:43 msgid "" "Since the WSGI environ inherits the environment of the server, only a " "significant subset is shown below." msgstr "Visto che l'ambiente WSGI è ereditato dal server, sotto è mostrata solo la parte significativa." #: templates/debug_toolbar/panels/history.html:10 msgid "Method" msgstr "" #: templates/debug_toolbar/panels/history.html:11 #: templates/debug_toolbar/panels/staticfiles.html:43 msgid "Path" msgstr "Percorso" #: templates/debug_toolbar/panels/history.html:12 msgid "Request Variables" msgstr "" #: templates/debug_toolbar/panels/history.html:13 msgid "Status" msgstr "" #: templates/debug_toolbar/panels/history.html:14 #: templates/debug_toolbar/panels/sql.html:37 msgid "Action" msgstr "Azione" #: templates/debug_toolbar/panels/history_tr.html:22 #: templates/debug_toolbar/panels/request_variables.html:11 msgid "Variable" msgstr "Variabile" #: templates/debug_toolbar/panels/profiling.html:5 msgid "Call" msgstr "Chiamata" #: templates/debug_toolbar/panels/profiling.html:6 msgid "CumTime" msgstr "CumTime" #: templates/debug_toolbar/panels/profiling.html:7 #: templates/debug_toolbar/panels/profiling.html:9 msgid "Per" msgstr "Per" #: templates/debug_toolbar/panels/profiling.html:8 msgid "TotTime" msgstr "TotTime" #: templates/debug_toolbar/panels/profiling.html:10 msgid "Count" msgstr "Numero" #: templates/debug_toolbar/panels/request.html:3 msgid "View information" msgstr "Vedi Informazioni" #: templates/debug_toolbar/panels/request.html:7 msgid "View function" msgstr "Funzione View" #: templates/debug_toolbar/panels/request.html:10 msgid "URL name" msgstr "Nome URL" #: templates/debug_toolbar/panels/request.html:24 msgid "Cookies" msgstr "Cookies" #: templates/debug_toolbar/panels/request.html:27 msgid "No cookies" msgstr "Nessun cookie" #: templates/debug_toolbar/panels/request.html:31 msgid "Session data" msgstr "Dati di sessione" #: templates/debug_toolbar/panels/request.html:34 msgid "No session data" msgstr "Nessun dato in sessione" #: templates/debug_toolbar/panels/request.html:38 msgid "GET data" msgstr "Dati GET" #: templates/debug_toolbar/panels/request.html:41 msgid "No GET data" msgstr "Nessun dato in GET" #: templates/debug_toolbar/panels/request.html:45 msgid "POST data" msgstr "Dati POST" #: templates/debug_toolbar/panels/request.html:48 msgid "No POST data" msgstr "Nessuno dato in POST" #: templates/debug_toolbar/panels/settings.html:5 msgid "Setting" msgstr "Impostazione" #: templates/debug_toolbar/panels/signals.html:5 msgid "Signal" msgstr "Segnale" #: templates/debug_toolbar/panels/signals.html:6 msgid "Receivers" msgstr "Ricevitori" #: templates/debug_toolbar/panels/sql.html:6 #, python-format msgid "%(num)s query" msgid_plural "%(num)s queries" msgstr[0] "%(num)s query" msgstr[1] "%(num)s query" msgstr[2] "%(num)s query" #: templates/debug_toolbar/panels/sql.html:8 #, python-format msgid "" "including %(count)s similar" msgstr "" #: templates/debug_toolbar/panels/sql.html:12 #, python-format msgid "" "and %(dupes)s duplicates" msgstr "" #: templates/debug_toolbar/panels/sql.html:34 msgid "Query" msgstr "Query" #: templates/debug_toolbar/panels/sql.html:35 #: templates/debug_toolbar/panels/timer.html:36 msgid "Timeline" msgstr "Timeline" #: templates/debug_toolbar/panels/sql.html:52 #, python-format msgid "%(count)s similar queries." msgstr "" #: templates/debug_toolbar/panels/sql.html:58 #, python-format msgid "Duplicated %(dupes)s times." msgstr "" #: templates/debug_toolbar/panels/sql.html:95 msgid "Connection:" msgstr "Connessione:" #: templates/debug_toolbar/panels/sql.html:97 msgid "Isolation level:" msgstr "Isolation level:" #: templates/debug_toolbar/panels/sql.html:100 msgid "Transaction status:" msgstr "Stato transazione:" #: templates/debug_toolbar/panels/sql.html:114 msgid "(unknown)" msgstr "(sconosciuto)" #: templates/debug_toolbar/panels/sql.html:123 msgid "No SQL queries were recorded during this request." msgstr "Nessuna Query SQL è stata registrata durante questa richiesta" #: templates/debug_toolbar/panels/sql_explain.html:4 msgid "SQL explained" msgstr "SQL spigato" #: templates/debug_toolbar/panels/sql_explain.html:9 #: templates/debug_toolbar/panels/sql_profile.html:10 #: templates/debug_toolbar/panels/sql_select.html:9 msgid "Executed SQL" msgstr "SQL eseguita" #: templates/debug_toolbar/panels/sql_explain.html:13 #: templates/debug_toolbar/panels/sql_profile.html:14 #: templates/debug_toolbar/panels/sql_select.html:13 msgid "Database" msgstr "Database" #: templates/debug_toolbar/panels/sql_profile.html:4 msgid "SQL profiled" msgstr "SQL profilato" #: templates/debug_toolbar/panels/sql_profile.html:37 msgid "Error" msgstr "Errore" #: templates/debug_toolbar/panels/sql_select.html:4 msgid "SQL selected" msgstr "SQL selezionato" #: templates/debug_toolbar/panels/sql_select.html:36 msgid "Empty set" msgstr "Insieme vuoto" #: templates/debug_toolbar/panels/staticfiles.html:3 msgid "Static file path" msgid_plural "Static file paths" msgstr[0] "Percorso file statici" msgstr[1] "Percorsi file statici" msgstr[2] "Percorsi file statici" #: templates/debug_toolbar/panels/staticfiles.html:7 #, python-format msgid "(prefix %(prefix)s)" msgstr "(prefisso %(prefix)s)" #: templates/debug_toolbar/panels/staticfiles.html:11 #: templates/debug_toolbar/panels/staticfiles.html:22 #: templates/debug_toolbar/panels/staticfiles.html:34 #: templates/debug_toolbar/panels/templates.html:10 #: templates/debug_toolbar/panels/templates.html:30 #: templates/debug_toolbar/panels/templates.html:47 msgid "None" msgstr "Nessuno" #: templates/debug_toolbar/panels/staticfiles.html:14 msgid "Static file app" msgid_plural "Static file apps" msgstr[0] "App file statici" msgstr[1] "App file statici" msgstr[2] "App file statici" #: templates/debug_toolbar/panels/staticfiles.html:25 msgid "Static file" msgid_plural "Static files" msgstr[0] "" msgstr[1] "Files statici" msgstr[2] "Files statici" #: templates/debug_toolbar/panels/staticfiles.html:39 #, python-format msgid "%(payload_count)s file" msgid_plural "%(payload_count)s files" msgstr[0] "%(payload_count)s file" msgstr[1] "%(payload_count)s file" msgstr[2] "%(payload_count)s file" #: templates/debug_toolbar/panels/staticfiles.html:44 msgid "Location" msgstr "Location" #: templates/debug_toolbar/panels/template_source.html:4 msgid "Template source:" msgstr "Sorgente del template" #: templates/debug_toolbar/panels/templates.html:2 msgid "Template path" msgid_plural "Template paths" msgstr[0] "Percorso dei template" msgstr[1] "Percorsi dei template" msgstr[2] "Percorsi dei template" #: templates/debug_toolbar/panels/templates.html:13 msgid "Template" msgid_plural "Templates" msgstr[0] "" msgstr[1] "Template" msgstr[2] "Template" #: templates/debug_toolbar/panels/templates.html:22 #: templates/debug_toolbar/panels/templates.html:40 msgid "Toggle context" msgstr "Cambia contesto" #: templates/debug_toolbar/panels/templates.html:33 msgid "Context processor" msgid_plural "Context processors" msgstr[0] "Context processor" msgstr[1] "Context processors" msgstr[2] "Context processors" #: templates/debug_toolbar/panels/timer.html:2 msgid "Resource usage" msgstr "Uso risorsa" #: templates/debug_toolbar/panels/timer.html:10 msgid "Resource" msgstr "Risorsa" #: templates/debug_toolbar/panels/timer.html:26 msgid "Browser timing" msgstr "Tempo browser" #: templates/debug_toolbar/panels/timer.html:35 msgid "Timing attribute" msgstr "Attributo" #: templates/debug_toolbar/panels/timer.html:37 msgid "Milliseconds since navigation start (+length)" msgstr "Millisecondi dall'inizio della navigazione (+lunghezza)" #: templates/debug_toolbar/panels/versions.html:10 msgid "Package" msgstr "" #: templates/debug_toolbar/panels/versions.html:11 msgid "Name" msgstr "Nome" #: templates/debug_toolbar/panels/versions.html:12 msgid "Version" msgstr "Versione" #: templates/debug_toolbar/redirect.html:10 msgid "Location:" msgstr "Location:" #: templates/debug_toolbar/redirect.html:12 msgid "" "The Django Debug Toolbar has intercepted a redirect to the above URL for " "debug viewing purposes. You can click the above link to continue with the " "redirect as normal." msgstr "Django Debug Toolbar ha intercettato un redirect verso la URL indicata per visualizzare il debug, Puoi cliccare sul link sopra per continuare normalmente con la redirezione." #: views.py:16 msgid "" "Data for this panel isn't available anymore. Please reload the page and " "retry." msgstr "Non sono più disponibili dati per questo pannello. Ricarica la pagina e riprova." python-django-debug-toolbar-5.2.0/debug_toolbar/locale/ja/000077500000000000000000000000001500406072000234565ustar00rootroot00000000000000python-django-debug-toolbar-5.2.0/debug_toolbar/locale/ja/LC_MESSAGES/000077500000000000000000000000001500406072000252435ustar00rootroot00000000000000python-django-debug-toolbar-5.2.0/debug_toolbar/locale/ja/LC_MESSAGES/django.mo000066400000000000000000000057331500406072000270520ustar00rootroot000000000000003GLh i w$   * /:JO T ^hp   " 5B U_ dnw `ov$    $ + D c j   *       7 D ` d }    3  ' : M ` g s        ,%#/  - 0('2* $"!.3&+ )1ArgumentsBackendCacheContext processorContext processorsCookiesDatabaseDebug ToolbarErrorExecuted SQLHeadersHideHide toolbarIntercept redirectsKeyKeyword argumentsNameNo cookiesNo session dataNonePathProfilingReceiversRequestRequest headersResourceResponse headersSQLSession dataSettingSettingsShow toolbarSignalSignalsStatic fileStatic filesStatic file appStatic file appsStatic file pathStatic file pathsStatic filesTemplateTemplatesTemplatesTimeTime (ms)TimelineURL nameValueVariableVersionVersionsView functionView informationProject-Id-Version: Django Debug Toolbar Report-Msgid-Bugs-To: PO-Revision-Date: 2010-11-30 00:00+0000 Last-Translator: Shinya Okano , 2012,2014,2020 Language-Team: Japanese (http://app.transifex.com/django-debug-toolbar/django-debug-toolbar/language/ja/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: ja Plural-Forms: nplurals=1; plural=0; <利用不可>引数バックエンドキャッシュコンテキストプロセッサークッキーデータベースデバッグツールバーエラー実行されたSQLヘッダー隠すツールバーを隠すリダイレクトに割込みキーキーワード引数名前クッキーはありませんセッションデータはありませんありませんパスプロファイルレシーバーリクエストリクエストヘッダーリソースレスポンスヘッダーSQLセッションデータ設定項目設定ツールバーを表示シグナルシグナル静的ファイル静的ファイルを含むアプリケーション静的ファイルのパス静的ファイルテンプレートテンプレート時間時間 (ms)タイムラインURL名値変数バージョンバージョンビュー関数ビューの情報python-django-debug-toolbar-5.2.0/debug_toolbar/locale/ja/LC_MESSAGES/django.po000066400000000000000000000375421500406072000270600ustar00rootroot00000000000000# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # # Translators: # Shinya Okano , 2012,2014,2020 msgid "" msgstr "" "Project-Id-Version: Django Debug Toolbar\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2024-08-06 07:12-0500\n" "PO-Revision-Date: 2010-11-30 00:00+0000\n" "Last-Translator: Shinya Okano , 2012,2014,2020\n" "Language-Team: Japanese (http://app.transifex.com/django-debug-toolbar/django-debug-toolbar/language/ja/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: ja\n" "Plural-Forms: nplurals=1; plural=0;\n" #: apps.py:18 msgid "Debug Toolbar" msgstr "デバッグツールバー" #: panels/alerts.py:67 #, python-brace-format msgid "" "Form with id \"{form_id}\" contains file input, but does not have the " "attribute enctype=\"multipart/form-data\"." msgstr "" #: panels/alerts.py:70 msgid "" "Form contains file input, but does not have the attribute " "enctype=\"multipart/form-data\"." msgstr "" #: panels/alerts.py:73 #, python-brace-format msgid "" "Input element references form with id \"{form_id}\", but the form does not " "have the attribute enctype=\"multipart/form-data\"." msgstr "" #: panels/alerts.py:77 msgid "Alerts" msgstr "" #: panels/cache.py:168 msgid "Cache" msgstr "キャッシュ" #: panels/cache.py:174 #, python-format msgid "%(cache_calls)d call in %(time).2fms" msgid_plural "%(cache_calls)d calls in %(time).2fms" msgstr[0] "" #: panels/cache.py:183 #, python-format msgid "Cache calls from %(count)d backend" msgid_plural "Cache calls from %(count)d backends" msgstr[0] "" #: panels/headers.py:31 msgid "Headers" msgstr "ヘッダー" #: panels/history/panel.py:19 panels/history/panel.py:20 msgid "History" msgstr "" #: panels/profiling.py:140 msgid "Profiling" msgstr "プロファイル" #: panels/redirects.py:17 msgid "Intercept redirects" msgstr "リダイレクトに割込み" #: panels/request.py:16 msgid "Request" msgstr "リクエスト" #: panels/request.py:38 msgid "" msgstr "" #: panels/request.py:55 msgid "" msgstr "<利用不可>" #: panels/settings.py:17 msgid "Settings" msgstr "設定" #: panels/settings.py:20 #, python-format msgid "Settings from %s" msgstr "" #: panels/signals.py:57 #, python-format msgid "%(num_receivers)d receiver of 1 signal" msgid_plural "%(num_receivers)d receivers of 1 signal" msgstr[0] "" #: panels/signals.py:62 #, python-format msgid "%(num_receivers)d receiver of %(num_signals)d signals" msgid_plural "%(num_receivers)d receivers of %(num_signals)d signals" msgstr[0] "" #: panels/signals.py:67 msgid "Signals" msgstr "シグナル" #: panels/sql/panel.py:30 panels/sql/panel.py:41 msgid "Read uncommitted" msgstr "" #: panels/sql/panel.py:31 panels/sql/panel.py:43 msgid "Read committed" msgstr "" #: panels/sql/panel.py:32 panels/sql/panel.py:45 msgid "Repeatable read" msgstr "" #: panels/sql/panel.py:33 panels/sql/panel.py:47 msgid "Serializable" msgstr "" #: panels/sql/panel.py:39 msgid "Autocommit" msgstr "" #: panels/sql/panel.py:61 panels/sql/panel.py:71 msgid "Idle" msgstr "" #: panels/sql/panel.py:62 panels/sql/panel.py:72 msgid "Active" msgstr "" #: panels/sql/panel.py:63 panels/sql/panel.py:73 msgid "In transaction" msgstr "" #: panels/sql/panel.py:64 panels/sql/panel.py:74 msgid "In error" msgstr "" #: panels/sql/panel.py:65 panels/sql/panel.py:75 msgid "Unknown" msgstr "" #: panels/sql/panel.py:162 msgid "SQL" msgstr "SQL" #: panels/sql/panel.py:168 #, python-format msgid "%(query_count)d query in %(sql_time).2fms" msgid_plural "%(query_count)d queries in %(sql_time).2fms" msgstr[0] "" #: panels/sql/panel.py:180 #, python-format msgid "SQL queries from %(count)d connection" msgid_plural "SQL queries from %(count)d connections" msgstr[0] "" #: panels/staticfiles.py:82 #, python-format msgid "Static files (%(num_found)s found, %(num_used)s used)" msgstr "" #: panels/staticfiles.py:103 msgid "Static files" msgstr "静的ファイル" #: panels/staticfiles.py:109 #, python-format msgid "%(num_used)s file used" msgid_plural "%(num_used)s files used" msgstr[0] "" #: panels/templates/panel.py:101 msgid "Templates" msgstr "テンプレート" #: panels/templates/panel.py:106 #, python-format msgid "Templates (%(num_templates)s rendered)" msgstr "" #: panels/templates/panel.py:195 msgid "No origin" msgstr "" #: panels/timer.py:27 #, python-format msgid "CPU: %(cum)0.2fms (%(total)0.2fms)" msgstr "" #: panels/timer.py:32 #, python-format msgid "Total: %0.2fms" msgstr "" #: panels/timer.py:38 templates/debug_toolbar/panels/history.html:9 #: templates/debug_toolbar/panels/sql_explain.html:11 #: templates/debug_toolbar/panels/sql_profile.html:12 #: templates/debug_toolbar/panels/sql_select.html:11 msgid "Time" msgstr "時間" #: panels/timer.py:46 msgid "User CPU time" msgstr "" #: panels/timer.py:46 #, python-format msgid "%(utime)0.3f msec" msgstr "" #: panels/timer.py:47 msgid "System CPU time" msgstr "" #: panels/timer.py:47 #, python-format msgid "%(stime)0.3f msec" msgstr "" #: panels/timer.py:48 msgid "Total CPU time" msgstr "" #: panels/timer.py:48 #, python-format msgid "%(total)0.3f msec" msgstr "" #: panels/timer.py:49 msgid "Elapsed time" msgstr "" #: panels/timer.py:49 #, python-format msgid "%(total_time)0.3f msec" msgstr "" #: panels/timer.py:51 msgid "Context switches" msgstr "" #: panels/timer.py:52 #, python-format msgid "%(vcsw)d voluntary, %(ivcsw)d involuntary" msgstr "" #: panels/versions.py:19 msgid "Versions" msgstr "バージョン" #: templates/debug_toolbar/base.html:23 msgid "Hide toolbar" msgstr "ツールバーを隠す" #: templates/debug_toolbar/base.html:23 msgid "Hide" msgstr "隠す" #: templates/debug_toolbar/base.html:25 templates/debug_toolbar/base.html:26 msgid "Toggle Theme" msgstr "" #: templates/debug_toolbar/base.html:35 msgid "Show toolbar" msgstr "ツールバーを表示" #: templates/debug_toolbar/includes/panel_button.html:4 msgid "Disable for next and successive requests" msgstr "" #: templates/debug_toolbar/includes/panel_button.html:4 msgid "Enable for next and successive requests" msgstr "" #: templates/debug_toolbar/panels/alerts.html:4 msgid "Alerts found" msgstr "" #: templates/debug_toolbar/panels/alerts.html:11 msgid "No alerts found" msgstr "" #: templates/debug_toolbar/panels/cache.html:2 msgid "Summary" msgstr "" #: templates/debug_toolbar/panels/cache.html:6 msgid "Total calls" msgstr "" #: templates/debug_toolbar/panels/cache.html:7 msgid "Total time" msgstr "" #: templates/debug_toolbar/panels/cache.html:8 msgid "Cache hits" msgstr "" #: templates/debug_toolbar/panels/cache.html:9 msgid "Cache misses" msgstr "" #: templates/debug_toolbar/panels/cache.html:21 msgid "Commands" msgstr "" #: templates/debug_toolbar/panels/cache.html:39 msgid "Calls" msgstr "" #: templates/debug_toolbar/panels/cache.html:43 #: templates/debug_toolbar/panels/sql.html:36 msgid "Time (ms)" msgstr "時間 (ms)" #: templates/debug_toolbar/panels/cache.html:44 msgid "Type" msgstr "" #: templates/debug_toolbar/panels/cache.html:45 #: templates/debug_toolbar/panels/request.html:8 msgid "Arguments" msgstr "引数" #: templates/debug_toolbar/panels/cache.html:46 #: templates/debug_toolbar/panels/request.html:9 msgid "Keyword arguments" msgstr "キーワード引数" #: templates/debug_toolbar/panels/cache.html:47 msgid "Backend" msgstr "バックエンド" #: templates/debug_toolbar/panels/headers.html:3 msgid "Request headers" msgstr "リクエストヘッダー" #: templates/debug_toolbar/panels/headers.html:8 #: templates/debug_toolbar/panels/headers.html:27 #: templates/debug_toolbar/panels/headers.html:48 msgid "Key" msgstr "キー" #: templates/debug_toolbar/panels/headers.html:9 #: templates/debug_toolbar/panels/headers.html:28 #: templates/debug_toolbar/panels/headers.html:49 #: templates/debug_toolbar/panels/history_tr.html:23 #: templates/debug_toolbar/panels/request_variables.html:12 #: templates/debug_toolbar/panels/settings.html:6 #: templates/debug_toolbar/panels/timer.html:11 msgid "Value" msgstr "値" #: templates/debug_toolbar/panels/headers.html:22 msgid "Response headers" msgstr "レスポンスヘッダー" #: templates/debug_toolbar/panels/headers.html:41 msgid "WSGI environ" msgstr "" #: templates/debug_toolbar/panels/headers.html:43 msgid "" "Since the WSGI environ inherits the environment of the server, only a " "significant subset is shown below." msgstr "" #: templates/debug_toolbar/panels/history.html:10 msgid "Method" msgstr "" #: templates/debug_toolbar/panels/history.html:11 #: templates/debug_toolbar/panels/staticfiles.html:43 msgid "Path" msgstr "パス" #: templates/debug_toolbar/panels/history.html:12 msgid "Request Variables" msgstr "" #: templates/debug_toolbar/panels/history.html:13 msgid "Status" msgstr "" #: templates/debug_toolbar/panels/history.html:14 #: templates/debug_toolbar/panels/sql.html:37 msgid "Action" msgstr "" #: templates/debug_toolbar/panels/history_tr.html:22 #: templates/debug_toolbar/panels/request_variables.html:11 msgid "Variable" msgstr "変数" #: templates/debug_toolbar/panels/profiling.html:5 msgid "Call" msgstr "" #: templates/debug_toolbar/panels/profiling.html:6 msgid "CumTime" msgstr "" #: templates/debug_toolbar/panels/profiling.html:7 #: templates/debug_toolbar/panels/profiling.html:9 msgid "Per" msgstr "" #: templates/debug_toolbar/panels/profiling.html:8 msgid "TotTime" msgstr "" #: templates/debug_toolbar/panels/profiling.html:10 msgid "Count" msgstr "" #: templates/debug_toolbar/panels/request.html:3 msgid "View information" msgstr "ビューの情報" #: templates/debug_toolbar/panels/request.html:7 msgid "View function" msgstr "ビュー関数" #: templates/debug_toolbar/panels/request.html:10 msgid "URL name" msgstr "URL名" #: templates/debug_toolbar/panels/request.html:24 msgid "Cookies" msgstr "クッキー" #: templates/debug_toolbar/panels/request.html:27 msgid "No cookies" msgstr "クッキーはありません" #: templates/debug_toolbar/panels/request.html:31 msgid "Session data" msgstr "セッションデータ" #: templates/debug_toolbar/panels/request.html:34 msgid "No session data" msgstr "セッションデータはありません" #: templates/debug_toolbar/panels/request.html:38 msgid "GET data" msgstr "" #: templates/debug_toolbar/panels/request.html:41 msgid "No GET data" msgstr "" #: templates/debug_toolbar/panels/request.html:45 msgid "POST data" msgstr "" #: templates/debug_toolbar/panels/request.html:48 msgid "No POST data" msgstr "" #: templates/debug_toolbar/panels/settings.html:5 msgid "Setting" msgstr "設定項目" #: templates/debug_toolbar/panels/signals.html:5 msgid "Signal" msgstr "シグナル" #: templates/debug_toolbar/panels/signals.html:6 msgid "Receivers" msgstr "レシーバー" #: templates/debug_toolbar/panels/sql.html:6 #, python-format msgid "%(num)s query" msgid_plural "%(num)s queries" msgstr[0] "" #: templates/debug_toolbar/panels/sql.html:8 #, python-format msgid "" "including %(count)s similar" msgstr "" #: templates/debug_toolbar/panels/sql.html:12 #, python-format msgid "" "and %(dupes)s duplicates" msgstr "" #: templates/debug_toolbar/panels/sql.html:34 msgid "Query" msgstr "" #: templates/debug_toolbar/panels/sql.html:35 #: templates/debug_toolbar/panels/timer.html:36 msgid "Timeline" msgstr "タイムライン" #: templates/debug_toolbar/panels/sql.html:52 #, python-format msgid "%(count)s similar queries." msgstr "" #: templates/debug_toolbar/panels/sql.html:58 #, python-format msgid "Duplicated %(dupes)s times." msgstr "" #: templates/debug_toolbar/panels/sql.html:95 msgid "Connection:" msgstr "" #: templates/debug_toolbar/panels/sql.html:97 msgid "Isolation level:" msgstr "" #: templates/debug_toolbar/panels/sql.html:100 msgid "Transaction status:" msgstr "" #: templates/debug_toolbar/panels/sql.html:114 msgid "(unknown)" msgstr "" #: templates/debug_toolbar/panels/sql.html:123 msgid "No SQL queries were recorded during this request." msgstr "" #: templates/debug_toolbar/panels/sql_explain.html:4 msgid "SQL explained" msgstr "" #: templates/debug_toolbar/panels/sql_explain.html:9 #: templates/debug_toolbar/panels/sql_profile.html:10 #: templates/debug_toolbar/panels/sql_select.html:9 msgid "Executed SQL" msgstr "実行されたSQL" #: templates/debug_toolbar/panels/sql_explain.html:13 #: templates/debug_toolbar/panels/sql_profile.html:14 #: templates/debug_toolbar/panels/sql_select.html:13 msgid "Database" msgstr "データベース" #: templates/debug_toolbar/panels/sql_profile.html:4 msgid "SQL profiled" msgstr "" #: templates/debug_toolbar/panels/sql_profile.html:37 msgid "Error" msgstr "エラー" #: templates/debug_toolbar/panels/sql_select.html:4 msgid "SQL selected" msgstr "" #: templates/debug_toolbar/panels/sql_select.html:36 msgid "Empty set" msgstr "" #: templates/debug_toolbar/panels/staticfiles.html:3 msgid "Static file path" msgid_plural "Static file paths" msgstr[0] "静的ファイルのパス" #: templates/debug_toolbar/panels/staticfiles.html:7 #, python-format msgid "(prefix %(prefix)s)" msgstr "" #: templates/debug_toolbar/panels/staticfiles.html:11 #: templates/debug_toolbar/panels/staticfiles.html:22 #: templates/debug_toolbar/panels/staticfiles.html:34 #: templates/debug_toolbar/panels/templates.html:10 #: templates/debug_toolbar/panels/templates.html:30 #: templates/debug_toolbar/panels/templates.html:47 msgid "None" msgstr "ありません" #: templates/debug_toolbar/panels/staticfiles.html:14 msgid "Static file app" msgid_plural "Static file apps" msgstr[0] "静的ファイルを含むアプリケーション" #: templates/debug_toolbar/panels/staticfiles.html:25 msgid "Static file" msgid_plural "Static files" msgstr[0] "静的ファイル" #: templates/debug_toolbar/panels/staticfiles.html:39 #, python-format msgid "%(payload_count)s file" msgid_plural "%(payload_count)s files" msgstr[0] "" #: templates/debug_toolbar/panels/staticfiles.html:44 msgid "Location" msgstr "" #: templates/debug_toolbar/panels/template_source.html:4 msgid "Template source:" msgstr "" #: templates/debug_toolbar/panels/templates.html:2 msgid "Template path" msgid_plural "Template paths" msgstr[0] "" #: templates/debug_toolbar/panels/templates.html:13 msgid "Template" msgid_plural "Templates" msgstr[0] "テンプレート" #: templates/debug_toolbar/panels/templates.html:22 #: templates/debug_toolbar/panels/templates.html:40 msgid "Toggle context" msgstr "" #: templates/debug_toolbar/panels/templates.html:33 msgid "Context processor" msgid_plural "Context processors" msgstr[0] "コンテキストプロセッサー" #: templates/debug_toolbar/panels/timer.html:2 msgid "Resource usage" msgstr "" #: templates/debug_toolbar/panels/timer.html:10 msgid "Resource" msgstr "リソース" #: templates/debug_toolbar/panels/timer.html:26 msgid "Browser timing" msgstr "" #: templates/debug_toolbar/panels/timer.html:35 msgid "Timing attribute" msgstr "" #: templates/debug_toolbar/panels/timer.html:37 msgid "Milliseconds since navigation start (+length)" msgstr "" #: templates/debug_toolbar/panels/versions.html:10 msgid "Package" msgstr "" #: templates/debug_toolbar/panels/versions.html:11 msgid "Name" msgstr "名前" #: templates/debug_toolbar/panels/versions.html:12 msgid "Version" msgstr "バージョン" #: templates/debug_toolbar/redirect.html:10 msgid "Location:" msgstr "" #: templates/debug_toolbar/redirect.html:12 msgid "" "The Django Debug Toolbar has intercepted a redirect to the above URL for " "debug viewing purposes. You can click the above link to continue with the " "redirect as normal." msgstr "" #: views.py:16 msgid "" "Data for this panel isn't available anymore. Please reload the page and " "retry." msgstr "" python-django-debug-toolbar-5.2.0/debug_toolbar/locale/ko/000077500000000000000000000000001500406072000234755ustar00rootroot00000000000000python-django-debug-toolbar-5.2.0/debug_toolbar/locale/ko/LC_MESSAGES/000077500000000000000000000000001500406072000252625ustar00rootroot00000000000000python-django-debug-toolbar-5.2.0/debug_toolbar/locale/ko/LC_MESSAGES/django.mo000066400000000000000000000204431500406072000270640ustar00rootroot00000000000000w J d  l N .Y . U  ! / 6 = G O ^ Fd    $   ! N' v  (  '  $-5 :GOT]l -  1  ?J Zdl q{   L J Wdlu h  $"E h5u &,   "6;DLR[c lz '}5+ aA3# 1<M   - 1?PW^ ep|, ?+My (  )6= DQn} +G es      " &1$Ch}    h 1?Q fBt   *.  .BTf{    u FqmL\g0Zoc'7t/VA#MYui ]J:O) s h@,. 3BkNbdn2$Wl>%<^9E(6w*5_?Q!H&8U4XRGSe IvCD-[ ;Ta`rPj1p"fK=+%(cache_calls)d call in %(time).2fms%(cache_calls)d calls in %(time).2fms%(count)s similar queries.%(num)s query%(num)s queries%(num_receivers)d receiver of %(num_signals)d signals%(num_receivers)d receivers of %(num_signals)d signals%(num_receivers)d receiver of 1 signal%(num_receivers)d receivers of 1 signal%(num_used)s file used%(num_used)s files used%(payload_count)s file%(payload_count)s files%(query_count)d query in %(sql_time).2fms%(query_count)d queries in %(sql_time).2fms(unknown)ActionActiveArgumentsBackendBrowser timingCacheCache calls from %(count)d backendCache calls from %(count)d backendsCache hitsCache missesCallCallsCommandsConnection:Context processorContext processorsContext switchesCookiesCountData for this panel isn't available anymore. Please reload the page and retry.DatabaseDebug ToolbarDisable for next and successive requestsDuplicated %(dupes)s times.Elapsed timeEmpty setEnable for next and successive requestsErrorExecuted SQLGET dataHeadersHideHide toolbarHistoryIdleIn errorIn transactionIntercept redirectsIsolation level:KeyKeyword argumentsLocationLocation:MethodMilliseconds since navigation start (+length)NameNo GET dataNo POST dataNo SQL queries were recorded during this request.No cookiesNo session dataPOST dataPackagePathProfilingQueryReceiversRequestRequest VariablesRequest headersResourceResource usageResponse headersSQLSQL explainedSQL profiledSQL queries from %(count)d connectionSQL queries from %(count)d connectionsSQL selectedSession dataSettingSettingsSettings from %sShow toolbarSignalSignalsSince the WSGI environ inherits the environment of the server, only a significant subset is shown below.Static fileStatic filesStatic file appStatic file appsStatic file pathStatic file pathsStatic filesStatic files (%(num_found)s found, %(num_used)s used)StatusSummaryTemplateTemplatesTemplate pathTemplate pathsTemplate source:TemplatesTemplates (%(num_templates)s rendered)The Django Debug Toolbar has intercepted a redirect to the above URL for debug viewing purposes. You can click the above link to continue with the redirect as normal.TimeTime (ms)TimelineTiming attributeToggle contextTotal callsTotal timeTransaction status:TypeURL nameUnknownValueVariableVersionVersionsView functionView informationWSGI environand %(dupes)s duplicatesincluding %(count)s similarProject-Id-Version: Django Debug Toolbar Report-Msgid-Bugs-To: PO-Revision-Date: 2010-11-30 00:00+0000 Last-Translator: yeongkwang, 2022 Language-Team: Korean (http://app.transifex.com/django-debug-toolbar/django-debug-toolbar/language/ko/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: ko Plural-Forms: nplurals=1; plural=0; %(time).2f 밀리초 동안 %(cache_calls)d번 호출%(count)s개의 유사한 쿼리%(num)s개의 쿼리%(num_signals)d개의 시그널 %(num_receivers)d개의 리시버1개의 시그널 %(num_receivers)d개의 리시버%(num_used)s개의 파일 사용됨%(payload_count)s개 파일%(sql_time).2f 밀리초 동안 %(query_count)d개의 쿼리(알 수 없음)<사용할 수 없음>액션활성매개변수백엔드브라우저 타이밍캐시백엔드에서 %(count)d개의 캐시 호출캐시 적중캐시 비적중호출호출명령커넥션:컨텍스트 프로세서컨텍스트 스위치쿠키개수이 패널의 데이터는 더이상 사용할 수 없습니다. 페이지를 새로고침한 뒤 다시 시도하십시오.데이터베이스Debug Toolbar다음 요청부터 비활성화 됩니다.%(dupes)s번 중복됩니다.경과 시간빈 셋다음 요청부터 활성화 됩니다.에러실행된 SQL 구문GET 요청 데이터헤더숨기기툴바 숨기기히스토리유휴에러트랜잭션리다이렉션 가로채기격리 수준:키키워드 매개변수위치위치:메서드탐색 시작후 밀리초 소요 (+길이)이름GET 요청 데이터 없음POST 요청 데이터 없음이 요청을 처리하는 동안 기록된 SQL 쿼리가 없습니다.쿠키 없음세션 데이터 없음POST 요청 데이터패키지경로프로파일링쿼리리시버요청요청 변수요청 헤더리소스리소스 사용량응답 헤더SQLSQL 설명SQL 성능 분석SQL 쿼리 %(count)d개의 커넥션선택된 SQL 구문세션 데이터설정설정설정 %s툴바 열기시그널시그널WSGI 환경이 서버 환경을 상속하므로 아래에는 중요한 하위 집합만 표시됩니다.정적 파일정적 파일 앱정적 파일 경로정적 파일정적 파일 (%(num_found)s개 찾음, %(num_used)s개 사용됨)상태 코드개요템플릿템플릿 경로템플릿 소스:템플릿템플릿 (%(num_templates)s개 렌더링)Django Debug Toolbar는 디버그 보기를 제공하기 위해 위 URL으로 리다이렉션을 가로챘습니다. 위 링크를 클릭하여 정상적으로 리다이렉션을 계속 할수 있습니다.시각시간 (ms)타임라인타이밍 속성컨텍스트 토글총 요청 개수총 소요 시간트랜잭션 상태:타입URL 명칭알 수 없음값변수버전버전View 함수View 정보WSGI 환경그리고 %(dupes)s개의 중복%(count)s 개의 유사한 쿼리 포함python-django-debug-toolbar-5.2.0/debug_toolbar/locale/ko/LC_MESSAGES/django.po000066400000000000000000000431331500406072000270700ustar00rootroot00000000000000# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # # Translators: # yeongkwang, 2022 msgid "" msgstr "" "Project-Id-Version: Django Debug Toolbar\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2024-08-06 07:12-0500\n" "PO-Revision-Date: 2010-11-30 00:00+0000\n" "Last-Translator: yeongkwang, 2022\n" "Language-Team: Korean (http://app.transifex.com/django-debug-toolbar/django-debug-toolbar/language/ko/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: ko\n" "Plural-Forms: nplurals=1; plural=0;\n" #: apps.py:18 msgid "Debug Toolbar" msgstr "Debug Toolbar" #: panels/alerts.py:67 #, python-brace-format msgid "" "Form with id \"{form_id}\" contains file input, but does not have the " "attribute enctype=\"multipart/form-data\"." msgstr "" #: panels/alerts.py:70 msgid "" "Form contains file input, but does not have the attribute " "enctype=\"multipart/form-data\"." msgstr "" #: panels/alerts.py:73 #, python-brace-format msgid "" "Input element references form with id \"{form_id}\", but the form does not " "have the attribute enctype=\"multipart/form-data\"." msgstr "" #: panels/alerts.py:77 msgid "Alerts" msgstr "" #: panels/cache.py:168 msgid "Cache" msgstr "캐시" #: panels/cache.py:174 #, python-format msgid "%(cache_calls)d call in %(time).2fms" msgid_plural "%(cache_calls)d calls in %(time).2fms" msgstr[0] "%(time).2f 밀리초 동안 %(cache_calls)d번 호출" #: panels/cache.py:183 #, python-format msgid "Cache calls from %(count)d backend" msgid_plural "Cache calls from %(count)d backends" msgstr[0] "백엔드에서 %(count)d개의 캐시 호출" #: panels/headers.py:31 msgid "Headers" msgstr "헤더" #: panels/history/panel.py:19 panels/history/panel.py:20 msgid "History" msgstr "히스토리" #: panels/profiling.py:140 msgid "Profiling" msgstr "프로파일링" #: panels/redirects.py:17 msgid "Intercept redirects" msgstr "리다이렉션 가로채기" #: panels/request.py:16 msgid "Request" msgstr "요청" #: panels/request.py:38 msgid "" msgstr "" #: panels/request.py:55 msgid "" msgstr "<사용할 수 없음>" #: panels/settings.py:17 msgid "Settings" msgstr "설정" #: panels/settings.py:20 #, python-format msgid "Settings from %s" msgstr "설정 %s" #: panels/signals.py:57 #, python-format msgid "%(num_receivers)d receiver of 1 signal" msgid_plural "%(num_receivers)d receivers of 1 signal" msgstr[0] "1개의 시그널 %(num_receivers)d개의 리시버" #: panels/signals.py:62 #, python-format msgid "%(num_receivers)d receiver of %(num_signals)d signals" msgid_plural "%(num_receivers)d receivers of %(num_signals)d signals" msgstr[0] "%(num_signals)d개의 시그널 %(num_receivers)d개의 리시버" #: panels/signals.py:67 msgid "Signals" msgstr "시그널" #: panels/sql/panel.py:30 panels/sql/panel.py:41 msgid "Read uncommitted" msgstr "" #: panels/sql/panel.py:31 panels/sql/panel.py:43 msgid "Read committed" msgstr "" #: panels/sql/panel.py:32 panels/sql/panel.py:45 msgid "Repeatable read" msgstr "" #: panels/sql/panel.py:33 panels/sql/panel.py:47 msgid "Serializable" msgstr "" #: panels/sql/panel.py:39 msgid "Autocommit" msgstr "" #: panels/sql/panel.py:61 panels/sql/panel.py:71 msgid "Idle" msgstr "유휴" #: panels/sql/panel.py:62 panels/sql/panel.py:72 msgid "Active" msgstr "활성" #: panels/sql/panel.py:63 panels/sql/panel.py:73 msgid "In transaction" msgstr "트랜잭션" #: panels/sql/panel.py:64 panels/sql/panel.py:74 msgid "In error" msgstr "에러" #: panels/sql/panel.py:65 panels/sql/panel.py:75 msgid "Unknown" msgstr "알 수 없음" #: panels/sql/panel.py:162 msgid "SQL" msgstr "SQL" #: panels/sql/panel.py:168 #, python-format msgid "%(query_count)d query in %(sql_time).2fms" msgid_plural "%(query_count)d queries in %(sql_time).2fms" msgstr[0] "%(sql_time).2f 밀리초 동안 %(query_count)d개의 쿼리" #: panels/sql/panel.py:180 #, python-format msgid "SQL queries from %(count)d connection" msgid_plural "SQL queries from %(count)d connections" msgstr[0] "SQL 쿼리 %(count)d개의 커넥션" #: panels/staticfiles.py:82 #, python-format msgid "Static files (%(num_found)s found, %(num_used)s used)" msgstr "정적 파일 (%(num_found)s개 찾음, %(num_used)s개 사용됨)" #: panels/staticfiles.py:103 msgid "Static files" msgstr "정적 파일" #: panels/staticfiles.py:109 #, python-format msgid "%(num_used)s file used" msgid_plural "%(num_used)s files used" msgstr[0] "%(num_used)s개의 파일 사용됨" #: panels/templates/panel.py:101 msgid "Templates" msgstr "템플릿" #: panels/templates/panel.py:106 #, python-format msgid "Templates (%(num_templates)s rendered)" msgstr "템플릿 (%(num_templates)s개 렌더링)" #: panels/templates/panel.py:195 msgid "No origin" msgstr "" #: panels/timer.py:27 #, python-format msgid "CPU: %(cum)0.2fms (%(total)0.2fms)" msgstr "" #: panels/timer.py:32 #, python-format msgid "Total: %0.2fms" msgstr "" #: panels/timer.py:38 templates/debug_toolbar/panels/history.html:9 #: templates/debug_toolbar/panels/sql_explain.html:11 #: templates/debug_toolbar/panels/sql_profile.html:12 #: templates/debug_toolbar/panels/sql_select.html:11 msgid "Time" msgstr "시각" #: panels/timer.py:46 msgid "User CPU time" msgstr "" #: panels/timer.py:46 #, python-format msgid "%(utime)0.3f msec" msgstr "" #: panels/timer.py:47 msgid "System CPU time" msgstr "" #: panels/timer.py:47 #, python-format msgid "%(stime)0.3f msec" msgstr "" #: panels/timer.py:48 msgid "Total CPU time" msgstr "" #: panels/timer.py:48 #, python-format msgid "%(total)0.3f msec" msgstr "" #: panels/timer.py:49 msgid "Elapsed time" msgstr "경과 시간" #: panels/timer.py:49 #, python-format msgid "%(total_time)0.3f msec" msgstr "" #: panels/timer.py:51 msgid "Context switches" msgstr "컨텍스트 스위치" #: panels/timer.py:52 #, python-format msgid "%(vcsw)d voluntary, %(ivcsw)d involuntary" msgstr "" #: panels/versions.py:19 msgid "Versions" msgstr "버전" #: templates/debug_toolbar/base.html:23 msgid "Hide toolbar" msgstr "툴바 숨기기" #: templates/debug_toolbar/base.html:23 msgid "Hide" msgstr "숨기기" #: templates/debug_toolbar/base.html:25 templates/debug_toolbar/base.html:26 msgid "Toggle Theme" msgstr "" #: templates/debug_toolbar/base.html:35 msgid "Show toolbar" msgstr "툴바 열기" #: templates/debug_toolbar/includes/panel_button.html:4 msgid "Disable for next and successive requests" msgstr "다음 요청부터 비활성화 됩니다." #: templates/debug_toolbar/includes/panel_button.html:4 msgid "Enable for next and successive requests" msgstr "다음 요청부터 활성화 됩니다." #: templates/debug_toolbar/panels/alerts.html:4 msgid "Alerts found" msgstr "" #: templates/debug_toolbar/panels/alerts.html:11 msgid "No alerts found" msgstr "" #: templates/debug_toolbar/panels/cache.html:2 msgid "Summary" msgstr "개요" #: templates/debug_toolbar/panels/cache.html:6 msgid "Total calls" msgstr "총 요청 개수" #: templates/debug_toolbar/panels/cache.html:7 msgid "Total time" msgstr "총 소요 시간" #: templates/debug_toolbar/panels/cache.html:8 msgid "Cache hits" msgstr "캐시 적중" #: templates/debug_toolbar/panels/cache.html:9 msgid "Cache misses" msgstr "캐시 비적중" #: templates/debug_toolbar/panels/cache.html:21 msgid "Commands" msgstr "명령" #: templates/debug_toolbar/panels/cache.html:39 msgid "Calls" msgstr "호출" #: templates/debug_toolbar/panels/cache.html:43 #: templates/debug_toolbar/panels/sql.html:36 msgid "Time (ms)" msgstr "시간 (ms)" #: templates/debug_toolbar/panels/cache.html:44 msgid "Type" msgstr "타입" #: templates/debug_toolbar/panels/cache.html:45 #: templates/debug_toolbar/panels/request.html:8 msgid "Arguments" msgstr "매개변수" #: templates/debug_toolbar/panels/cache.html:46 #: templates/debug_toolbar/panels/request.html:9 msgid "Keyword arguments" msgstr "키워드 매개변수" #: templates/debug_toolbar/panels/cache.html:47 msgid "Backend" msgstr "백엔드" #: templates/debug_toolbar/panels/headers.html:3 msgid "Request headers" msgstr "요청 헤더" #: templates/debug_toolbar/panels/headers.html:8 #: templates/debug_toolbar/panels/headers.html:27 #: templates/debug_toolbar/panels/headers.html:48 msgid "Key" msgstr "키" #: templates/debug_toolbar/panels/headers.html:9 #: templates/debug_toolbar/panels/headers.html:28 #: templates/debug_toolbar/panels/headers.html:49 #: templates/debug_toolbar/panels/history_tr.html:23 #: templates/debug_toolbar/panels/request_variables.html:12 #: templates/debug_toolbar/panels/settings.html:6 #: templates/debug_toolbar/panels/timer.html:11 msgid "Value" msgstr "값" #: templates/debug_toolbar/panels/headers.html:22 msgid "Response headers" msgstr "응답 헤더" #: templates/debug_toolbar/panels/headers.html:41 msgid "WSGI environ" msgstr "WSGI 환경" #: templates/debug_toolbar/panels/headers.html:43 msgid "" "Since the WSGI environ inherits the environment of the server, only a " "significant subset is shown below." msgstr "WSGI 환경이 서버 환경을 상속하므로 아래에는 중요한 하위 집합만 표시됩니다." #: templates/debug_toolbar/panels/history.html:10 msgid "Method" msgstr "메서드" #: templates/debug_toolbar/panels/history.html:11 #: templates/debug_toolbar/panels/staticfiles.html:43 msgid "Path" msgstr "경로" #: templates/debug_toolbar/panels/history.html:12 msgid "Request Variables" msgstr "요청 변수" #: templates/debug_toolbar/panels/history.html:13 msgid "Status" msgstr "상태 코드" #: templates/debug_toolbar/panels/history.html:14 #: templates/debug_toolbar/panels/sql.html:37 msgid "Action" msgstr "액션" #: templates/debug_toolbar/panels/history_tr.html:22 #: templates/debug_toolbar/panels/request_variables.html:11 msgid "Variable" msgstr "변수" #: templates/debug_toolbar/panels/profiling.html:5 msgid "Call" msgstr "호출" #: templates/debug_toolbar/panels/profiling.html:6 msgid "CumTime" msgstr "" #: templates/debug_toolbar/panels/profiling.html:7 #: templates/debug_toolbar/panels/profiling.html:9 msgid "Per" msgstr "" #: templates/debug_toolbar/panels/profiling.html:8 msgid "TotTime" msgstr "" #: templates/debug_toolbar/panels/profiling.html:10 msgid "Count" msgstr "개수" #: templates/debug_toolbar/panels/request.html:3 msgid "View information" msgstr "View 정보" #: templates/debug_toolbar/panels/request.html:7 msgid "View function" msgstr "View 함수" #: templates/debug_toolbar/panels/request.html:10 msgid "URL name" msgstr "URL 명칭" #: templates/debug_toolbar/panels/request.html:24 msgid "Cookies" msgstr "쿠키" #: templates/debug_toolbar/panels/request.html:27 msgid "No cookies" msgstr "쿠키 없음" #: templates/debug_toolbar/panels/request.html:31 msgid "Session data" msgstr "세션 데이터" #: templates/debug_toolbar/panels/request.html:34 msgid "No session data" msgstr "세션 데이터 없음" #: templates/debug_toolbar/panels/request.html:38 msgid "GET data" msgstr "GET 요청 데이터" #: templates/debug_toolbar/panels/request.html:41 msgid "No GET data" msgstr "GET 요청 데이터 없음" #: templates/debug_toolbar/panels/request.html:45 msgid "POST data" msgstr "POST 요청 데이터" #: templates/debug_toolbar/panels/request.html:48 msgid "No POST data" msgstr "POST 요청 데이터 없음" #: templates/debug_toolbar/panels/settings.html:5 msgid "Setting" msgstr "설정" #: templates/debug_toolbar/panels/signals.html:5 msgid "Signal" msgstr "시그널" #: templates/debug_toolbar/panels/signals.html:6 msgid "Receivers" msgstr "리시버" #: templates/debug_toolbar/panels/sql.html:6 #, python-format msgid "%(num)s query" msgid_plural "%(num)s queries" msgstr[0] "%(num)s개의 쿼리" #: templates/debug_toolbar/panels/sql.html:8 #, python-format msgid "" "including %(count)s similar" msgstr "%(count)s 개의 유사한 쿼리 포함" #: templates/debug_toolbar/panels/sql.html:12 #, python-format msgid "" "and %(dupes)s duplicates" msgstr "그리고 %(dupes)s개의 중복" #: templates/debug_toolbar/panels/sql.html:34 msgid "Query" msgstr "쿼리" #: templates/debug_toolbar/panels/sql.html:35 #: templates/debug_toolbar/panels/timer.html:36 msgid "Timeline" msgstr "타임라인" #: templates/debug_toolbar/panels/sql.html:52 #, python-format msgid "%(count)s similar queries." msgstr "%(count)s개의 유사한 쿼리" #: templates/debug_toolbar/panels/sql.html:58 #, python-format msgid "Duplicated %(dupes)s times." msgstr "%(dupes)s번 중복됩니다." #: templates/debug_toolbar/panels/sql.html:95 msgid "Connection:" msgstr "커넥션:" #: templates/debug_toolbar/panels/sql.html:97 msgid "Isolation level:" msgstr "격리 수준:" #: templates/debug_toolbar/panels/sql.html:100 msgid "Transaction status:" msgstr "트랜잭션 상태:" #: templates/debug_toolbar/panels/sql.html:114 msgid "(unknown)" msgstr "(알 수 없음)" #: templates/debug_toolbar/panels/sql.html:123 msgid "No SQL queries were recorded during this request." msgstr "이 요청을 처리하는 동안 기록된 SQL 쿼리가 없습니다." #: templates/debug_toolbar/panels/sql_explain.html:4 msgid "SQL explained" msgstr "SQL 설명" #: templates/debug_toolbar/panels/sql_explain.html:9 #: templates/debug_toolbar/panels/sql_profile.html:10 #: templates/debug_toolbar/panels/sql_select.html:9 msgid "Executed SQL" msgstr "실행된 SQL 구문" #: templates/debug_toolbar/panels/sql_explain.html:13 #: templates/debug_toolbar/panels/sql_profile.html:14 #: templates/debug_toolbar/panels/sql_select.html:13 msgid "Database" msgstr "데이터베이스" #: templates/debug_toolbar/panels/sql_profile.html:4 msgid "SQL profiled" msgstr "SQL 성능 분석" #: templates/debug_toolbar/panels/sql_profile.html:37 msgid "Error" msgstr "에러" #: templates/debug_toolbar/panels/sql_select.html:4 msgid "SQL selected" msgstr "선택된 SQL 구문" #: templates/debug_toolbar/panels/sql_select.html:36 msgid "Empty set" msgstr "빈 셋" #: templates/debug_toolbar/panels/staticfiles.html:3 msgid "Static file path" msgid_plural "Static file paths" msgstr[0] "정적 파일 경로" #: templates/debug_toolbar/panels/staticfiles.html:7 #, python-format msgid "(prefix %(prefix)s)" msgstr "" #: templates/debug_toolbar/panels/staticfiles.html:11 #: templates/debug_toolbar/panels/staticfiles.html:22 #: templates/debug_toolbar/panels/staticfiles.html:34 #: templates/debug_toolbar/panels/templates.html:10 #: templates/debug_toolbar/panels/templates.html:30 #: templates/debug_toolbar/panels/templates.html:47 msgid "None" msgstr "" #: templates/debug_toolbar/panels/staticfiles.html:14 msgid "Static file app" msgid_plural "Static file apps" msgstr[0] "정적 파일 앱" #: templates/debug_toolbar/panels/staticfiles.html:25 msgid "Static file" msgid_plural "Static files" msgstr[0] "정적 파일" #: templates/debug_toolbar/panels/staticfiles.html:39 #, python-format msgid "%(payload_count)s file" msgid_plural "%(payload_count)s files" msgstr[0] "%(payload_count)s개 파일" #: templates/debug_toolbar/panels/staticfiles.html:44 msgid "Location" msgstr "위치" #: templates/debug_toolbar/panels/template_source.html:4 msgid "Template source:" msgstr "템플릿 소스:" #: templates/debug_toolbar/panels/templates.html:2 msgid "Template path" msgid_plural "Template paths" msgstr[0] "템플릿 경로" #: templates/debug_toolbar/panels/templates.html:13 msgid "Template" msgid_plural "Templates" msgstr[0] "템플릿" #: templates/debug_toolbar/panels/templates.html:22 #: templates/debug_toolbar/panels/templates.html:40 msgid "Toggle context" msgstr "컨텍스트 토글" #: templates/debug_toolbar/panels/templates.html:33 msgid "Context processor" msgid_plural "Context processors" msgstr[0] "컨텍스트 프로세서" #: templates/debug_toolbar/panels/timer.html:2 msgid "Resource usage" msgstr "리소스 사용량" #: templates/debug_toolbar/panels/timer.html:10 msgid "Resource" msgstr "리소스" #: templates/debug_toolbar/panels/timer.html:26 msgid "Browser timing" msgstr "브라우저 타이밍" #: templates/debug_toolbar/panels/timer.html:35 msgid "Timing attribute" msgstr "타이밍 속성" #: templates/debug_toolbar/panels/timer.html:37 msgid "Milliseconds since navigation start (+length)" msgstr "탐색 시작후 밀리초 소요 (+길이)" #: templates/debug_toolbar/panels/versions.html:10 msgid "Package" msgstr "패키지" #: templates/debug_toolbar/panels/versions.html:11 msgid "Name" msgstr "이름" #: templates/debug_toolbar/panels/versions.html:12 msgid "Version" msgstr "버전" #: templates/debug_toolbar/redirect.html:10 msgid "Location:" msgstr "위치:" #: templates/debug_toolbar/redirect.html:12 msgid "" "The Django Debug Toolbar has intercepted a redirect to the above URL for " "debug viewing purposes. You can click the above link to continue with the " "redirect as normal." msgstr "Django Debug Toolbar는 디버그 보기를 제공하기 위해 위 URL으로 리다이렉션을 가로챘습니다. 위 링크를 클릭하여 정상적으로 리다이렉션을 계속 할수 있습니다." #: views.py:16 msgid "" "Data for this panel isn't available anymore. Please reload the page and " "retry." msgstr "이 패널의 데이터는 더이상 사용할 수 없습니다. 페이지를 새로고침한 뒤 다시 시도하십시오." python-django-debug-toolbar-5.2.0/debug_toolbar/locale/nl/000077500000000000000000000000001500406072000234755ustar00rootroot00000000000000python-django-debug-toolbar-5.2.0/debug_toolbar/locale/nl/LC_MESSAGES/000077500000000000000000000000001500406072000252625ustar00rootroot00000000000000python-django-debug-toolbar-5.2.0/debug_toolbar/locale/nl/LC_MESSAGES/django.mo000066400000000000000000000075641500406072000270750ustar00rootroot00000000000000EDallN^) $ . 8FM"Tw}        ", 4> DNW [ iv~  & ! + 4 < K Z n s {       r[ T # 5 G ^ .p     "     ! * 8 A F V _ i y             -<D MZk~ '    ".B ISZb=1E!&#  87) /.+ ;'3,%4(:D*<5 0C29 $A"6?@>-B%(num_receivers)d receiver of %(num_signals)d signals%(num_receivers)d receivers of %(num_signals)d signals%(num_receivers)d receiver of 1 signal%(num_receivers)d receivers of 1 signal%(stime)0.3f msec%(total)0.3f msec%(total_time)0.3f msec%(utime)0.3f msec%(vcsw)d voluntary, %(ivcsw)d involuntary(unknown)ActionActiveCPU: %(cum)0.2fms (%(total)0.2fms)CacheCallConnection:CountDatabaseElapsed timeEmpty setErrorExecuted SQLGET dataHideHide toolbarIn errorKeyLocationMethodNameNo GET dataNo POST dataNonePOST dataPackageProfilingQueryReceiversResourceSQLSQL explainedSerializableSettingSettingsShow toolbarSignalSignalsSummarySystem CPU timeTemplateTemplatesTemplate pathTemplate pathsTemplatesTemplates (%(num_templates)s rendered)TimeTime (ms)TimelineTotTimeTotal CPU timeTotal: %0.2fmsTransaction status:TypeUnknownUser CPU timeValueVariableVersionVersionsView informationProject-Id-Version: Django Debug Toolbar Report-Msgid-Bugs-To: PO-Revision-Date: 2010-11-30 00:00+0000 Last-Translator: Ingo Berben , 2012-2013 Language-Team: Dutch (http://app.transifex.com/django-debug-toolbar/django-debug-toolbar/language/nl/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: nl Plural-Forms: nplurals=2; plural=(n != 1); %(num_receivers)d ontvanger van %(num_signals)d signalen%(num_receivers)d ontvangers van %(num_signals)d signalen%(num_receivers)d ontvanger van 1 signaal%(num_receivers)d ontvangers van 1 signaal%(stime)0.3f msec%(total)0.3f msec%(total_time)0.3f msec%(utime)0.3f msec%(vcsw)d vrijwillig, %(ivcsw)d niet vrijwillig(niet gekend)ActieActiefCPU: %(cum)0.2fms (%(total)0.2fms)CacheOproepenVerbinding:AantalDatabaseVerlopen tijdLege setFoutUitgevoerde SQLGET dataVerbergenVerberg toolbarFoutiefSleutelLocatieMethodeNaamGeen GET dataGeen POST dataNonePOST dataPakketProfileringQueryOntvangersBronSQLSQL uitgelegdSerializeerbaarInstellingInstellingenBekijk toolbarSignaalSignalenSamenvattingSysteem CPU tijdTemplateTemplatesTemplatepadTemplatepadenTemplatesTemplates (%(num_templates)s gerenderd)TijdTijd (ms)TijdslijnTotTijdTotaal CPU tijdTotaal: %0.2fmsTransactiestatus:TypeNiet gekendGebruikers CPU tijdWaardeParameterVersieVersiesBekijk informatiepython-django-debug-toolbar-5.2.0/debug_toolbar/locale/nl/LC_MESSAGES/django.po000066400000000000000000000402511500406072000270660ustar00rootroot00000000000000# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # # Translators: # Ingo Berben , 2012-2013 msgid "" msgstr "" "Project-Id-Version: Django Debug Toolbar\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2024-08-06 07:12-0500\n" "PO-Revision-Date: 2010-11-30 00:00+0000\n" "Last-Translator: Ingo Berben , 2012-2013\n" "Language-Team: Dutch (http://app.transifex.com/django-debug-toolbar/django-debug-toolbar/language/nl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: nl\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: apps.py:18 msgid "Debug Toolbar" msgstr "" #: panels/alerts.py:67 #, python-brace-format msgid "" "Form with id \"{form_id}\" contains file input, but does not have the " "attribute enctype=\"multipart/form-data\"." msgstr "" #: panels/alerts.py:70 msgid "" "Form contains file input, but does not have the attribute " "enctype=\"multipart/form-data\"." msgstr "" #: panels/alerts.py:73 #, python-brace-format msgid "" "Input element references form with id \"{form_id}\", but the form does not " "have the attribute enctype=\"multipart/form-data\"." msgstr "" #: panels/alerts.py:77 msgid "Alerts" msgstr "" #: panels/cache.py:168 msgid "Cache" msgstr "Cache" #: panels/cache.py:174 #, python-format msgid "%(cache_calls)d call in %(time).2fms" msgid_plural "%(cache_calls)d calls in %(time).2fms" msgstr[0] "" msgstr[1] "" #: panels/cache.py:183 #, python-format msgid "Cache calls from %(count)d backend" msgid_plural "Cache calls from %(count)d backends" msgstr[0] "" msgstr[1] "" #: panels/headers.py:31 msgid "Headers" msgstr "" #: panels/history/panel.py:19 panels/history/panel.py:20 msgid "History" msgstr "" #: panels/profiling.py:140 msgid "Profiling" msgstr "Profilering" #: panels/redirects.py:17 msgid "Intercept redirects" msgstr "" #: panels/request.py:16 msgid "Request" msgstr "" #: panels/request.py:38 msgid "" msgstr "" #: panels/request.py:55 msgid "" msgstr "" #: panels/settings.py:17 msgid "Settings" msgstr "Instellingen" #: panels/settings.py:20 #, python-format msgid "Settings from %s" msgstr "" #: panels/signals.py:57 #, python-format msgid "%(num_receivers)d receiver of 1 signal" msgid_plural "%(num_receivers)d receivers of 1 signal" msgstr[0] "%(num_receivers)d ontvanger van 1 signaal" msgstr[1] "%(num_receivers)d ontvangers van 1 signaal" #: panels/signals.py:62 #, python-format msgid "%(num_receivers)d receiver of %(num_signals)d signals" msgid_plural "%(num_receivers)d receivers of %(num_signals)d signals" msgstr[0] "%(num_receivers)d ontvanger van %(num_signals)d signalen" msgstr[1] "%(num_receivers)d ontvangers van %(num_signals)d signalen" #: panels/signals.py:67 msgid "Signals" msgstr "Signalen" #: panels/sql/panel.py:30 panels/sql/panel.py:41 msgid "Read uncommitted" msgstr "" #: panels/sql/panel.py:31 panels/sql/panel.py:43 msgid "Read committed" msgstr "" #: panels/sql/panel.py:32 panels/sql/panel.py:45 msgid "Repeatable read" msgstr "" #: panels/sql/panel.py:33 panels/sql/panel.py:47 msgid "Serializable" msgstr "Serializeerbaar" #: panels/sql/panel.py:39 msgid "Autocommit" msgstr "" #: panels/sql/panel.py:61 panels/sql/panel.py:71 msgid "Idle" msgstr "" #: panels/sql/panel.py:62 panels/sql/panel.py:72 msgid "Active" msgstr "Actief" #: panels/sql/panel.py:63 panels/sql/panel.py:73 msgid "In transaction" msgstr "" #: panels/sql/panel.py:64 panels/sql/panel.py:74 msgid "In error" msgstr "Foutief" #: panels/sql/panel.py:65 panels/sql/panel.py:75 msgid "Unknown" msgstr "Niet gekend" #: panels/sql/panel.py:162 msgid "SQL" msgstr "SQL" #: panels/sql/panel.py:168 #, python-format msgid "%(query_count)d query in %(sql_time).2fms" msgid_plural "%(query_count)d queries in %(sql_time).2fms" msgstr[0] "" msgstr[1] "" #: panels/sql/panel.py:180 #, python-format msgid "SQL queries from %(count)d connection" msgid_plural "SQL queries from %(count)d connections" msgstr[0] "" msgstr[1] "" #: panels/staticfiles.py:82 #, python-format msgid "Static files (%(num_found)s found, %(num_used)s used)" msgstr "" #: panels/staticfiles.py:103 msgid "Static files" msgstr "" #: panels/staticfiles.py:109 #, python-format msgid "%(num_used)s file used" msgid_plural "%(num_used)s files used" msgstr[0] "" msgstr[1] "" #: panels/templates/panel.py:101 msgid "Templates" msgstr "Templates" #: panels/templates/panel.py:106 #, python-format msgid "Templates (%(num_templates)s rendered)" msgstr "Templates (%(num_templates)s gerenderd)" #: panels/templates/panel.py:195 msgid "No origin" msgstr "" #: panels/timer.py:27 #, python-format msgid "CPU: %(cum)0.2fms (%(total)0.2fms)" msgstr "CPU: %(cum)0.2fms (%(total)0.2fms)" #: panels/timer.py:32 #, python-format msgid "Total: %0.2fms" msgstr "Totaal: %0.2fms" #: panels/timer.py:38 templates/debug_toolbar/panels/history.html:9 #: templates/debug_toolbar/panels/sql_explain.html:11 #: templates/debug_toolbar/panels/sql_profile.html:12 #: templates/debug_toolbar/panels/sql_select.html:11 msgid "Time" msgstr "Tijd" #: panels/timer.py:46 msgid "User CPU time" msgstr "Gebruikers CPU tijd" #: panels/timer.py:46 #, python-format msgid "%(utime)0.3f msec" msgstr "%(utime)0.3f msec" #: panels/timer.py:47 msgid "System CPU time" msgstr "Systeem CPU tijd" #: panels/timer.py:47 #, python-format msgid "%(stime)0.3f msec" msgstr "%(stime)0.3f msec" #: panels/timer.py:48 msgid "Total CPU time" msgstr "Totaal CPU tijd" #: panels/timer.py:48 #, python-format msgid "%(total)0.3f msec" msgstr "%(total)0.3f msec" #: panels/timer.py:49 msgid "Elapsed time" msgstr "Verlopen tijd" #: panels/timer.py:49 #, python-format msgid "%(total_time)0.3f msec" msgstr "%(total_time)0.3f msec" #: panels/timer.py:51 msgid "Context switches" msgstr "" #: panels/timer.py:52 #, python-format msgid "%(vcsw)d voluntary, %(ivcsw)d involuntary" msgstr "%(vcsw)d vrijwillig, %(ivcsw)d niet vrijwillig" #: panels/versions.py:19 msgid "Versions" msgstr "Versies" #: templates/debug_toolbar/base.html:23 msgid "Hide toolbar" msgstr "Verberg toolbar" #: templates/debug_toolbar/base.html:23 msgid "Hide" msgstr "Verbergen" #: templates/debug_toolbar/base.html:25 templates/debug_toolbar/base.html:26 msgid "Toggle Theme" msgstr "" #: templates/debug_toolbar/base.html:35 msgid "Show toolbar" msgstr "Bekijk toolbar" #: templates/debug_toolbar/includes/panel_button.html:4 msgid "Disable for next and successive requests" msgstr "" #: templates/debug_toolbar/includes/panel_button.html:4 msgid "Enable for next and successive requests" msgstr "" #: templates/debug_toolbar/panels/alerts.html:4 msgid "Alerts found" msgstr "" #: templates/debug_toolbar/panels/alerts.html:11 msgid "No alerts found" msgstr "" #: templates/debug_toolbar/panels/cache.html:2 msgid "Summary" msgstr "Samenvatting" #: templates/debug_toolbar/panels/cache.html:6 msgid "Total calls" msgstr "" #: templates/debug_toolbar/panels/cache.html:7 msgid "Total time" msgstr "" #: templates/debug_toolbar/panels/cache.html:8 msgid "Cache hits" msgstr "" #: templates/debug_toolbar/panels/cache.html:9 msgid "Cache misses" msgstr "" #: templates/debug_toolbar/panels/cache.html:21 msgid "Commands" msgstr "" #: templates/debug_toolbar/panels/cache.html:39 msgid "Calls" msgstr "" #: templates/debug_toolbar/panels/cache.html:43 #: templates/debug_toolbar/panels/sql.html:36 msgid "Time (ms)" msgstr "Tijd (ms)" #: templates/debug_toolbar/panels/cache.html:44 msgid "Type" msgstr "Type" #: templates/debug_toolbar/panels/cache.html:45 #: templates/debug_toolbar/panels/request.html:8 msgid "Arguments" msgstr "" #: templates/debug_toolbar/panels/cache.html:46 #: templates/debug_toolbar/panels/request.html:9 msgid "Keyword arguments" msgstr "" #: templates/debug_toolbar/panels/cache.html:47 msgid "Backend" msgstr "" #: templates/debug_toolbar/panels/headers.html:3 msgid "Request headers" msgstr "" #: templates/debug_toolbar/panels/headers.html:8 #: templates/debug_toolbar/panels/headers.html:27 #: templates/debug_toolbar/panels/headers.html:48 msgid "Key" msgstr "Sleutel" #: templates/debug_toolbar/panels/headers.html:9 #: templates/debug_toolbar/panels/headers.html:28 #: templates/debug_toolbar/panels/headers.html:49 #: templates/debug_toolbar/panels/history_tr.html:23 #: templates/debug_toolbar/panels/request_variables.html:12 #: templates/debug_toolbar/panels/settings.html:6 #: templates/debug_toolbar/panels/timer.html:11 msgid "Value" msgstr "Waarde" #: templates/debug_toolbar/panels/headers.html:22 msgid "Response headers" msgstr "" #: templates/debug_toolbar/panels/headers.html:41 msgid "WSGI environ" msgstr "" #: templates/debug_toolbar/panels/headers.html:43 msgid "" "Since the WSGI environ inherits the environment of the server, only a " "significant subset is shown below." msgstr "" #: templates/debug_toolbar/panels/history.html:10 msgid "Method" msgstr "Methode" #: templates/debug_toolbar/panels/history.html:11 #: templates/debug_toolbar/panels/staticfiles.html:43 msgid "Path" msgstr "" #: templates/debug_toolbar/panels/history.html:12 msgid "Request Variables" msgstr "" #: templates/debug_toolbar/panels/history.html:13 msgid "Status" msgstr "" #: templates/debug_toolbar/panels/history.html:14 #: templates/debug_toolbar/panels/sql.html:37 msgid "Action" msgstr "Actie" #: templates/debug_toolbar/panels/history_tr.html:22 #: templates/debug_toolbar/panels/request_variables.html:11 msgid "Variable" msgstr "Parameter" #: templates/debug_toolbar/panels/profiling.html:5 msgid "Call" msgstr "Oproepen" #: templates/debug_toolbar/panels/profiling.html:6 msgid "CumTime" msgstr "" #: templates/debug_toolbar/panels/profiling.html:7 #: templates/debug_toolbar/panels/profiling.html:9 msgid "Per" msgstr "" #: templates/debug_toolbar/panels/profiling.html:8 msgid "TotTime" msgstr "TotTijd" #: templates/debug_toolbar/panels/profiling.html:10 msgid "Count" msgstr "Aantal" #: templates/debug_toolbar/panels/request.html:3 msgid "View information" msgstr "Bekijk informatie" #: templates/debug_toolbar/panels/request.html:7 msgid "View function" msgstr "" #: templates/debug_toolbar/panels/request.html:10 msgid "URL name" msgstr "" #: templates/debug_toolbar/panels/request.html:24 msgid "Cookies" msgstr "" #: templates/debug_toolbar/panels/request.html:27 msgid "No cookies" msgstr "" #: templates/debug_toolbar/panels/request.html:31 msgid "Session data" msgstr "" #: templates/debug_toolbar/panels/request.html:34 msgid "No session data" msgstr "" #: templates/debug_toolbar/panels/request.html:38 msgid "GET data" msgstr "GET data" #: templates/debug_toolbar/panels/request.html:41 msgid "No GET data" msgstr "Geen GET data" #: templates/debug_toolbar/panels/request.html:45 msgid "POST data" msgstr "POST data" #: templates/debug_toolbar/panels/request.html:48 msgid "No POST data" msgstr "Geen POST data" #: templates/debug_toolbar/panels/settings.html:5 msgid "Setting" msgstr "Instelling" #: templates/debug_toolbar/panels/signals.html:5 msgid "Signal" msgstr "Signaal" #: templates/debug_toolbar/panels/signals.html:6 msgid "Receivers" msgstr "Ontvangers" #: templates/debug_toolbar/panels/sql.html:6 #, python-format msgid "%(num)s query" msgid_plural "%(num)s queries" msgstr[0] "" msgstr[1] "" #: templates/debug_toolbar/panels/sql.html:8 #, python-format msgid "" "including %(count)s similar" msgstr "" #: templates/debug_toolbar/panels/sql.html:12 #, python-format msgid "" "and %(dupes)s duplicates" msgstr "" #: templates/debug_toolbar/panels/sql.html:34 msgid "Query" msgstr "Query" #: templates/debug_toolbar/panels/sql.html:35 #: templates/debug_toolbar/panels/timer.html:36 msgid "Timeline" msgstr "Tijdslijn" #: templates/debug_toolbar/panels/sql.html:52 #, python-format msgid "%(count)s similar queries." msgstr "" #: templates/debug_toolbar/panels/sql.html:58 #, python-format msgid "Duplicated %(dupes)s times." msgstr "" #: templates/debug_toolbar/panels/sql.html:95 msgid "Connection:" msgstr "Verbinding:" #: templates/debug_toolbar/panels/sql.html:97 msgid "Isolation level:" msgstr "" #: templates/debug_toolbar/panels/sql.html:100 msgid "Transaction status:" msgstr "Transactiestatus:" #: templates/debug_toolbar/panels/sql.html:114 msgid "(unknown)" msgstr "(niet gekend)" #: templates/debug_toolbar/panels/sql.html:123 msgid "No SQL queries were recorded during this request." msgstr "" #: templates/debug_toolbar/panels/sql_explain.html:4 msgid "SQL explained" msgstr "SQL uitgelegd" #: templates/debug_toolbar/panels/sql_explain.html:9 #: templates/debug_toolbar/panels/sql_profile.html:10 #: templates/debug_toolbar/panels/sql_select.html:9 msgid "Executed SQL" msgstr "Uitgevoerde SQL" #: templates/debug_toolbar/panels/sql_explain.html:13 #: templates/debug_toolbar/panels/sql_profile.html:14 #: templates/debug_toolbar/panels/sql_select.html:13 msgid "Database" msgstr "Database" #: templates/debug_toolbar/panels/sql_profile.html:4 msgid "SQL profiled" msgstr "" #: templates/debug_toolbar/panels/sql_profile.html:37 msgid "Error" msgstr "Fout" #: templates/debug_toolbar/panels/sql_select.html:4 msgid "SQL selected" msgstr "" #: templates/debug_toolbar/panels/sql_select.html:36 msgid "Empty set" msgstr "Lege set" #: templates/debug_toolbar/panels/staticfiles.html:3 msgid "Static file path" msgid_plural "Static file paths" msgstr[0] "" msgstr[1] "" #: templates/debug_toolbar/panels/staticfiles.html:7 #, python-format msgid "(prefix %(prefix)s)" msgstr "" #: templates/debug_toolbar/panels/staticfiles.html:11 #: templates/debug_toolbar/panels/staticfiles.html:22 #: templates/debug_toolbar/panels/staticfiles.html:34 #: templates/debug_toolbar/panels/templates.html:10 #: templates/debug_toolbar/panels/templates.html:30 #: templates/debug_toolbar/panels/templates.html:47 msgid "None" msgstr "None" #: templates/debug_toolbar/panels/staticfiles.html:14 msgid "Static file app" msgid_plural "Static file apps" msgstr[0] "" msgstr[1] "" #: templates/debug_toolbar/panels/staticfiles.html:25 msgid "Static file" msgid_plural "Static files" msgstr[0] "" msgstr[1] "" #: templates/debug_toolbar/panels/staticfiles.html:39 #, python-format msgid "%(payload_count)s file" msgid_plural "%(payload_count)s files" msgstr[0] "" msgstr[1] "" #: templates/debug_toolbar/panels/staticfiles.html:44 msgid "Location" msgstr "Locatie" #: templates/debug_toolbar/panels/template_source.html:4 msgid "Template source:" msgstr "" #: templates/debug_toolbar/panels/templates.html:2 msgid "Template path" msgid_plural "Template paths" msgstr[0] "Templatepad" msgstr[1] "Templatepaden" #: templates/debug_toolbar/panels/templates.html:13 msgid "Template" msgid_plural "Templates" msgstr[0] "Template" msgstr[1] "Templates" #: templates/debug_toolbar/panels/templates.html:22 #: templates/debug_toolbar/panels/templates.html:40 msgid "Toggle context" msgstr "" #: templates/debug_toolbar/panels/templates.html:33 msgid "Context processor" msgid_plural "Context processors" msgstr[0] "" msgstr[1] "" #: templates/debug_toolbar/panels/timer.html:2 msgid "Resource usage" msgstr "" #: templates/debug_toolbar/panels/timer.html:10 msgid "Resource" msgstr "Bron" #: templates/debug_toolbar/panels/timer.html:26 msgid "Browser timing" msgstr "" #: templates/debug_toolbar/panels/timer.html:35 msgid "Timing attribute" msgstr "" #: templates/debug_toolbar/panels/timer.html:37 msgid "Milliseconds since navigation start (+length)" msgstr "" #: templates/debug_toolbar/panels/versions.html:10 msgid "Package" msgstr "Pakket" #: templates/debug_toolbar/panels/versions.html:11 msgid "Name" msgstr "Naam" #: templates/debug_toolbar/panels/versions.html:12 msgid "Version" msgstr "Versie" #: templates/debug_toolbar/redirect.html:10 msgid "Location:" msgstr "" #: templates/debug_toolbar/redirect.html:12 msgid "" "The Django Debug Toolbar has intercepted a redirect to the above URL for " "debug viewing purposes. You can click the above link to continue with the " "redirect as normal." msgstr "" #: views.py:16 msgid "" "Data for this panel isn't available anymore. Please reload the page and " "retry." msgstr "" python-django-debug-toolbar-5.2.0/debug_toolbar/locale/pl/000077500000000000000000000000001500406072000234775ustar00rootroot00000000000000python-django-debug-toolbar-5.2.0/debug_toolbar/locale/pl/LC_MESSAGES/000077500000000000000000000000001500406072000252645ustar00rootroot00000000000000python-django-debug-toolbar-5.2.0/debug_toolbar/locale/pl/LC_MESSAGES/django.mo000066400000000000000000000127511500406072000270710ustar00rootroot00000000000000NkJlN.!8 J T ^ls z"F    . 4 = K X b h u }         1 . 3 = C R c m u ~     5     &' N S ] f u        6 Esc $ /=LR Ze"m 8 C N Xf        :K Q]csD   '. 2 =HPY?i 'O .+8d i s} . %G2B*<J' N!+, H#69"@:3CK701-IMLD E8)=F 5$(/?> ;4A&%(cache_calls)d call in %(time).2fms%(cache_calls)d calls in %(time).2fms%(num)s query%(num)s queries%(num_receivers)d receiver of %(num_signals)d signals%(num_receivers)d receivers of %(num_signals)d signals%(num_receivers)d receiver of 1 signal%(num_receivers)d receivers of 1 signal%(num_used)s file used%(num_used)s files used%(stime)0.3f msec%(total)0.3f msec%(total_time)0.3f msec%(utime)0.3f msec(unknown)ActionActiveAutocommitBackendCPU: %(cum)0.2fms (%(total)0.2fms)CacheCache calls from %(count)d backendCache calls from %(count)d backendsCallCallsCommandsConnection:Context switchesCountDatabaseDebug ToolbarElapsed timeEmpty setErrorExecuted SQLHeadersHideHide toolbarIdleIn errorIn transactionIntercept redirectsIsolation level:KeyLocationNameNo GET dataNo POST dataNo SQL queries were recorded during this request.NoneProfilingQueryRead committedRead uncommittedReceiversRequestResourceSQLSettingSettingsSignalSignalsStatic filesStatic files (%(num_found)s found, %(num_used)s used)SummaryTemplateTemplatesTemplate pathTemplate pathsTemplatesTemplates (%(num_templates)s rendered)TimeTime (ms)TimelineTotal: %0.2fmsTransaction status:TypeUnknownValueVariableVersionVersionsView informationProject-Id-Version: Django Debug Toolbar Report-Msgid-Bugs-To: PO-Revision-Date: 2010-11-30 00:00+0000 Last-Translator: Konrad Mosoń , 2013,2015 Language-Team: Polish (http://app.transifex.com/django-debug-toolbar/django-debug-toolbar/language/pl/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: pl Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3); %(cache_calls)d wywołanie w %(time).2fms%(cache_calls)d wywołania w %(time).2fms%(cache_calls)d wywołań w %(time).2fms%(cache_calls)d wywołań w %(time).2fms%(num)s zapytanie%(num)s zapytania%(num)s zapytań%(num)s zapytań%(num_receivers)d odbiora %(num_signals)d sygnału%(num_receivers)d odbiorców %(num_signals)d sygnałów%(num_receivers)d odbiorców %(num_signals)d sygnałów%(num_receivers)d odbiorców %(num_signals)d sygnałów%(num_receivers)d orbiorca 1 sygnału%(num_receivers)d odbiorców 1 sygnału%(num_receivers)d odbiorców 1 sygnału%(num_receivers)d odbiorców 1 sygnału%(num_used)s użyty plików%(num_used)s użyte plików%(num_used)s użytych plików%(num_used)s użytych plików%(stime)0.3f msec%(total)0.3f msec%(total_time)0.3f msec%(utime)0.3f msec(nieznany)AkcjaAktywneAutocommitBackendCPU: %(cum)0.2fms (%(total)0.2fms)CacheWywołań z cache z %(count)d backenduWywołań z cache z %(count)d backendówWywołań z cache z %(count)d backendówWywołań z cache z %(count)d backendówWywołanieWywołaniaPoleceniaPołączenie:Przełączenia kontekstuIlośćBaza danychDebug ToolbarCałkowity czasPusty zbiórBłądWykonane zapytanie SQLNagłówkiUkryjUkryj toolbarBezczynnyW błędzieW transakcjiPrzechwycone przekierowaniaPoziom izolacji:KluczLokalizacjaNazwaBrak danych GETBrak danych POSTŻadne zapytania SQL nie zostały odnotowane podczas tego zapytania.BrakProfilowanieZapytaniePrzeczytaj popełnionePrzeczaj niepopełnioneOdbiorcyZapytaniaZasóbSQLUstawienieUstawieniaSygnałSygnałyPliki statycznePliki statyczne (znaleziono %(num_found)s, użyto %(num_used)s)PodsumowanieTemplatkiTemplatkiTemplatkiTemplatkiŚcieżka templatkiŚcieżki templatekŚcieżki templatekŚcieżki templatekTemplatkiTemplatki (%(num_templates)s wyrenderowano)CzasCzas (ms)Oś czasuCałkowity czas: %0.2fmsStatus transakcji:TypNieznaneWartośćZmiennaWersjaWersjePokaż informacjepython-django-debug-toolbar-5.2.0/debug_toolbar/locale/pl/LC_MESSAGES/django.po000066400000000000000000000431751500406072000271000ustar00rootroot00000000000000# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # # Translators: # Konrad Mosoń , 2013,2015 msgid "" msgstr "" "Project-Id-Version: Django Debug Toolbar\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2024-08-06 07:12-0500\n" "PO-Revision-Date: 2010-11-30 00:00+0000\n" "Last-Translator: Konrad Mosoń , 2013,2015\n" "Language-Team: Polish (http://app.transifex.com/django-debug-toolbar/django-debug-toolbar/language/pl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: pl\n" "Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n" #: apps.py:18 msgid "Debug Toolbar" msgstr "Debug Toolbar" #: panels/alerts.py:67 #, python-brace-format msgid "" "Form with id \"{form_id}\" contains file input, but does not have the " "attribute enctype=\"multipart/form-data\"." msgstr "" #: panels/alerts.py:70 msgid "" "Form contains file input, but does not have the attribute " "enctype=\"multipart/form-data\"." msgstr "" #: panels/alerts.py:73 #, python-brace-format msgid "" "Input element references form with id \"{form_id}\", but the form does not " "have the attribute enctype=\"multipart/form-data\"." msgstr "" #: panels/alerts.py:77 msgid "Alerts" msgstr "" #: panels/cache.py:168 msgid "Cache" msgstr "Cache" #: panels/cache.py:174 #, python-format msgid "%(cache_calls)d call in %(time).2fms" msgid_plural "%(cache_calls)d calls in %(time).2fms" msgstr[0] "%(cache_calls)d wywołanie w %(time).2fms" msgstr[1] "%(cache_calls)d wywołania w %(time).2fms" msgstr[2] "%(cache_calls)d wywołań w %(time).2fms" msgstr[3] "%(cache_calls)d wywołań w %(time).2fms" #: panels/cache.py:183 #, python-format msgid "Cache calls from %(count)d backend" msgid_plural "Cache calls from %(count)d backends" msgstr[0] "Wywołań z cache z %(count)d backendu" msgstr[1] "Wywołań z cache z %(count)d backendów" msgstr[2] "Wywołań z cache z %(count)d backendów" msgstr[3] "Wywołań z cache z %(count)d backendów" #: panels/headers.py:31 msgid "Headers" msgstr "Nagłówki" #: panels/history/panel.py:19 panels/history/panel.py:20 msgid "History" msgstr "" #: panels/profiling.py:140 msgid "Profiling" msgstr "Profilowanie" #: panels/redirects.py:17 msgid "Intercept redirects" msgstr "Przechwycone przekierowania" #: panels/request.py:16 msgid "Request" msgstr "Zapytania" #: panels/request.py:38 msgid "" msgstr "" #: panels/request.py:55 msgid "" msgstr "" #: panels/settings.py:17 msgid "Settings" msgstr "Ustawienia" #: panels/settings.py:20 #, python-format msgid "Settings from %s" msgstr "" #: panels/signals.py:57 #, python-format msgid "%(num_receivers)d receiver of 1 signal" msgid_plural "%(num_receivers)d receivers of 1 signal" msgstr[0] "%(num_receivers)d orbiorca 1 sygnału" msgstr[1] "%(num_receivers)d odbiorców 1 sygnału" msgstr[2] "%(num_receivers)d odbiorców 1 sygnału" msgstr[3] "%(num_receivers)d odbiorców 1 sygnału" #: panels/signals.py:62 #, python-format msgid "%(num_receivers)d receiver of %(num_signals)d signals" msgid_plural "%(num_receivers)d receivers of %(num_signals)d signals" msgstr[0] "%(num_receivers)d odbiora %(num_signals)d sygnału" msgstr[1] "%(num_receivers)d odbiorców %(num_signals)d sygnałów" msgstr[2] "%(num_receivers)d odbiorców %(num_signals)d sygnałów" msgstr[3] "%(num_receivers)d odbiorców %(num_signals)d sygnałów" #: panels/signals.py:67 msgid "Signals" msgstr "Sygnały" #: panels/sql/panel.py:30 panels/sql/panel.py:41 msgid "Read uncommitted" msgstr "Przeczaj niepopełnione" #: panels/sql/panel.py:31 panels/sql/panel.py:43 msgid "Read committed" msgstr "Przeczytaj popełnione" #: panels/sql/panel.py:32 panels/sql/panel.py:45 msgid "Repeatable read" msgstr "" #: panels/sql/panel.py:33 panels/sql/panel.py:47 msgid "Serializable" msgstr "" #: panels/sql/panel.py:39 msgid "Autocommit" msgstr "Autocommit" #: panels/sql/panel.py:61 panels/sql/panel.py:71 msgid "Idle" msgstr "Bezczynny" #: panels/sql/panel.py:62 panels/sql/panel.py:72 msgid "Active" msgstr "Aktywne" #: panels/sql/panel.py:63 panels/sql/panel.py:73 msgid "In transaction" msgstr "W transakcji" #: panels/sql/panel.py:64 panels/sql/panel.py:74 msgid "In error" msgstr "W błędzie" #: panels/sql/panel.py:65 panels/sql/panel.py:75 msgid "Unknown" msgstr "Nieznane" #: panels/sql/panel.py:162 msgid "SQL" msgstr "SQL" #: panels/sql/panel.py:168 #, python-format msgid "%(query_count)d query in %(sql_time).2fms" msgid_plural "%(query_count)d queries in %(sql_time).2fms" msgstr[0] "" msgstr[1] "" msgstr[2] "" msgstr[3] "" #: panels/sql/panel.py:180 #, python-format msgid "SQL queries from %(count)d connection" msgid_plural "SQL queries from %(count)d connections" msgstr[0] "" msgstr[1] "" msgstr[2] "" msgstr[3] "" #: panels/staticfiles.py:82 #, python-format msgid "Static files (%(num_found)s found, %(num_used)s used)" msgstr "Pliki statyczne (znaleziono %(num_found)s, użyto %(num_used)s)" #: panels/staticfiles.py:103 msgid "Static files" msgstr "Pliki statyczne" #: panels/staticfiles.py:109 #, python-format msgid "%(num_used)s file used" msgid_plural "%(num_used)s files used" msgstr[0] "%(num_used)s użyty plików" msgstr[1] "%(num_used)s użyte plików" msgstr[2] "%(num_used)s użytych plików" msgstr[3] "%(num_used)s użytych plików" #: panels/templates/panel.py:101 msgid "Templates" msgstr "Templatki" #: panels/templates/panel.py:106 #, python-format msgid "Templates (%(num_templates)s rendered)" msgstr "Templatki (%(num_templates)s wyrenderowano)" #: panels/templates/panel.py:195 msgid "No origin" msgstr "" #: panels/timer.py:27 #, python-format msgid "CPU: %(cum)0.2fms (%(total)0.2fms)" msgstr "CPU: %(cum)0.2fms (%(total)0.2fms)" #: panels/timer.py:32 #, python-format msgid "Total: %0.2fms" msgstr "Całkowity czas: %0.2fms" #: panels/timer.py:38 templates/debug_toolbar/panels/history.html:9 #: templates/debug_toolbar/panels/sql_explain.html:11 #: templates/debug_toolbar/panels/sql_profile.html:12 #: templates/debug_toolbar/panels/sql_select.html:11 msgid "Time" msgstr "Czas" #: panels/timer.py:46 msgid "User CPU time" msgstr "" #: panels/timer.py:46 #, python-format msgid "%(utime)0.3f msec" msgstr "%(utime)0.3f msec" #: panels/timer.py:47 msgid "System CPU time" msgstr "" #: panels/timer.py:47 #, python-format msgid "%(stime)0.3f msec" msgstr "%(stime)0.3f msec" #: panels/timer.py:48 msgid "Total CPU time" msgstr "" #: panels/timer.py:48 #, python-format msgid "%(total)0.3f msec" msgstr "%(total)0.3f msec" #: panels/timer.py:49 msgid "Elapsed time" msgstr "Całkowity czas" #: panels/timer.py:49 #, python-format msgid "%(total_time)0.3f msec" msgstr "%(total_time)0.3f msec" #: panels/timer.py:51 msgid "Context switches" msgstr "Przełączenia kontekstu" #: panels/timer.py:52 #, python-format msgid "%(vcsw)d voluntary, %(ivcsw)d involuntary" msgstr "" #: panels/versions.py:19 msgid "Versions" msgstr "Wersje" #: templates/debug_toolbar/base.html:23 msgid "Hide toolbar" msgstr "Ukryj toolbar" #: templates/debug_toolbar/base.html:23 msgid "Hide" msgstr "Ukryj" #: templates/debug_toolbar/base.html:25 templates/debug_toolbar/base.html:26 msgid "Toggle Theme" msgstr "" #: templates/debug_toolbar/base.html:35 msgid "Show toolbar" msgstr "" #: templates/debug_toolbar/includes/panel_button.html:4 msgid "Disable for next and successive requests" msgstr "" #: templates/debug_toolbar/includes/panel_button.html:4 msgid "Enable for next and successive requests" msgstr "" #: templates/debug_toolbar/panels/alerts.html:4 msgid "Alerts found" msgstr "" #: templates/debug_toolbar/panels/alerts.html:11 msgid "No alerts found" msgstr "" #: templates/debug_toolbar/panels/cache.html:2 msgid "Summary" msgstr "Podsumowanie" #: templates/debug_toolbar/panels/cache.html:6 msgid "Total calls" msgstr "" #: templates/debug_toolbar/panels/cache.html:7 msgid "Total time" msgstr "" #: templates/debug_toolbar/panels/cache.html:8 msgid "Cache hits" msgstr "" #: templates/debug_toolbar/panels/cache.html:9 msgid "Cache misses" msgstr "" #: templates/debug_toolbar/panels/cache.html:21 msgid "Commands" msgstr "Polecenia" #: templates/debug_toolbar/panels/cache.html:39 msgid "Calls" msgstr "Wywołania" #: templates/debug_toolbar/panels/cache.html:43 #: templates/debug_toolbar/panels/sql.html:36 msgid "Time (ms)" msgstr "Czas (ms)" #: templates/debug_toolbar/panels/cache.html:44 msgid "Type" msgstr "Typ" #: templates/debug_toolbar/panels/cache.html:45 #: templates/debug_toolbar/panels/request.html:8 msgid "Arguments" msgstr "" #: templates/debug_toolbar/panels/cache.html:46 #: templates/debug_toolbar/panels/request.html:9 msgid "Keyword arguments" msgstr "" #: templates/debug_toolbar/panels/cache.html:47 msgid "Backend" msgstr "Backend" #: templates/debug_toolbar/panels/headers.html:3 msgid "Request headers" msgstr "" #: templates/debug_toolbar/panels/headers.html:8 #: templates/debug_toolbar/panels/headers.html:27 #: templates/debug_toolbar/panels/headers.html:48 msgid "Key" msgstr "Klucz" #: templates/debug_toolbar/panels/headers.html:9 #: templates/debug_toolbar/panels/headers.html:28 #: templates/debug_toolbar/panels/headers.html:49 #: templates/debug_toolbar/panels/history_tr.html:23 #: templates/debug_toolbar/panels/request_variables.html:12 #: templates/debug_toolbar/panels/settings.html:6 #: templates/debug_toolbar/panels/timer.html:11 msgid "Value" msgstr "Wartość" #: templates/debug_toolbar/panels/headers.html:22 msgid "Response headers" msgstr "" #: templates/debug_toolbar/panels/headers.html:41 msgid "WSGI environ" msgstr "" #: templates/debug_toolbar/panels/headers.html:43 msgid "" "Since the WSGI environ inherits the environment of the server, only a " "significant subset is shown below." msgstr "" #: templates/debug_toolbar/panels/history.html:10 msgid "Method" msgstr "" #: templates/debug_toolbar/panels/history.html:11 #: templates/debug_toolbar/panels/staticfiles.html:43 msgid "Path" msgstr "" #: templates/debug_toolbar/panels/history.html:12 msgid "Request Variables" msgstr "" #: templates/debug_toolbar/panels/history.html:13 msgid "Status" msgstr "" #: templates/debug_toolbar/panels/history.html:14 #: templates/debug_toolbar/panels/sql.html:37 msgid "Action" msgstr "Akcja" #: templates/debug_toolbar/panels/history_tr.html:22 #: templates/debug_toolbar/panels/request_variables.html:11 msgid "Variable" msgstr "Zmienna" #: templates/debug_toolbar/panels/profiling.html:5 msgid "Call" msgstr "Wywołanie" #: templates/debug_toolbar/panels/profiling.html:6 msgid "CumTime" msgstr "" #: templates/debug_toolbar/panels/profiling.html:7 #: templates/debug_toolbar/panels/profiling.html:9 msgid "Per" msgstr "" #: templates/debug_toolbar/panels/profiling.html:8 msgid "TotTime" msgstr "" #: templates/debug_toolbar/panels/profiling.html:10 msgid "Count" msgstr "Ilość" #: templates/debug_toolbar/panels/request.html:3 msgid "View information" msgstr "Pokaż informacje" #: templates/debug_toolbar/panels/request.html:7 msgid "View function" msgstr "" #: templates/debug_toolbar/panels/request.html:10 msgid "URL name" msgstr "" #: templates/debug_toolbar/panels/request.html:24 msgid "Cookies" msgstr "" #: templates/debug_toolbar/panels/request.html:27 msgid "No cookies" msgstr "" #: templates/debug_toolbar/panels/request.html:31 msgid "Session data" msgstr "" #: templates/debug_toolbar/panels/request.html:34 msgid "No session data" msgstr "" #: templates/debug_toolbar/panels/request.html:38 msgid "GET data" msgstr "" #: templates/debug_toolbar/panels/request.html:41 msgid "No GET data" msgstr "Brak danych GET" #: templates/debug_toolbar/panels/request.html:45 msgid "POST data" msgstr "" #: templates/debug_toolbar/panels/request.html:48 msgid "No POST data" msgstr "Brak danych POST" #: templates/debug_toolbar/panels/settings.html:5 msgid "Setting" msgstr "Ustawienie" #: templates/debug_toolbar/panels/signals.html:5 msgid "Signal" msgstr "Sygnał" #: templates/debug_toolbar/panels/signals.html:6 msgid "Receivers" msgstr "Odbiorcy" #: templates/debug_toolbar/panels/sql.html:6 #, python-format msgid "%(num)s query" msgid_plural "%(num)s queries" msgstr[0] "%(num)s zapytanie" msgstr[1] "%(num)s zapytania" msgstr[2] "%(num)s zapytań" msgstr[3] "%(num)s zapytań" #: templates/debug_toolbar/panels/sql.html:8 #, python-format msgid "" "including %(count)s similar" msgstr "" #: templates/debug_toolbar/panels/sql.html:12 #, python-format msgid "" "and %(dupes)s duplicates" msgstr "" #: templates/debug_toolbar/panels/sql.html:34 msgid "Query" msgstr "Zapytanie" #: templates/debug_toolbar/panels/sql.html:35 #: templates/debug_toolbar/panels/timer.html:36 msgid "Timeline" msgstr "Oś czasu" #: templates/debug_toolbar/panels/sql.html:52 #, python-format msgid "%(count)s similar queries." msgstr "" #: templates/debug_toolbar/panels/sql.html:58 #, python-format msgid "Duplicated %(dupes)s times." msgstr "" #: templates/debug_toolbar/panels/sql.html:95 msgid "Connection:" msgstr "Połączenie:" #: templates/debug_toolbar/panels/sql.html:97 msgid "Isolation level:" msgstr "Poziom izolacji:" #: templates/debug_toolbar/panels/sql.html:100 msgid "Transaction status:" msgstr "Status transakcji:" #: templates/debug_toolbar/panels/sql.html:114 msgid "(unknown)" msgstr "(nieznany)" #: templates/debug_toolbar/panels/sql.html:123 msgid "No SQL queries were recorded during this request." msgstr "Żadne zapytania SQL nie zostały odnotowane podczas tego zapytania." #: templates/debug_toolbar/panels/sql_explain.html:4 msgid "SQL explained" msgstr "" #: templates/debug_toolbar/panels/sql_explain.html:9 #: templates/debug_toolbar/panels/sql_profile.html:10 #: templates/debug_toolbar/panels/sql_select.html:9 msgid "Executed SQL" msgstr "Wykonane zapytanie SQL" #: templates/debug_toolbar/panels/sql_explain.html:13 #: templates/debug_toolbar/panels/sql_profile.html:14 #: templates/debug_toolbar/panels/sql_select.html:13 msgid "Database" msgstr "Baza danych" #: templates/debug_toolbar/panels/sql_profile.html:4 msgid "SQL profiled" msgstr "" #: templates/debug_toolbar/panels/sql_profile.html:37 msgid "Error" msgstr "Błąd" #: templates/debug_toolbar/panels/sql_select.html:4 msgid "SQL selected" msgstr "" #: templates/debug_toolbar/panels/sql_select.html:36 msgid "Empty set" msgstr "Pusty zbiór" #: templates/debug_toolbar/panels/staticfiles.html:3 msgid "Static file path" msgid_plural "Static file paths" msgstr[0] "" msgstr[1] "" msgstr[2] "" msgstr[3] "" #: templates/debug_toolbar/panels/staticfiles.html:7 #, python-format msgid "(prefix %(prefix)s)" msgstr "" #: templates/debug_toolbar/panels/staticfiles.html:11 #: templates/debug_toolbar/panels/staticfiles.html:22 #: templates/debug_toolbar/panels/staticfiles.html:34 #: templates/debug_toolbar/panels/templates.html:10 #: templates/debug_toolbar/panels/templates.html:30 #: templates/debug_toolbar/panels/templates.html:47 msgid "None" msgstr "Brak" #: templates/debug_toolbar/panels/staticfiles.html:14 msgid "Static file app" msgid_plural "Static file apps" msgstr[0] "" msgstr[1] "" msgstr[2] "" msgstr[3] "" #: templates/debug_toolbar/panels/staticfiles.html:25 msgid "Static file" msgid_plural "Static files" msgstr[0] "" msgstr[1] "" msgstr[2] "" msgstr[3] "" #: templates/debug_toolbar/panels/staticfiles.html:39 #, python-format msgid "%(payload_count)s file" msgid_plural "%(payload_count)s files" msgstr[0] "" msgstr[1] "" msgstr[2] "" msgstr[3] "" #: templates/debug_toolbar/panels/staticfiles.html:44 msgid "Location" msgstr "Lokalizacja" #: templates/debug_toolbar/panels/template_source.html:4 msgid "Template source:" msgstr "" #: templates/debug_toolbar/panels/templates.html:2 msgid "Template path" msgid_plural "Template paths" msgstr[0] "Ścieżka templatki" msgstr[1] "Ścieżki templatek" msgstr[2] "Ścieżki templatek" msgstr[3] "Ścieżki templatek" #: templates/debug_toolbar/panels/templates.html:13 msgid "Template" msgid_plural "Templates" msgstr[0] "Templatki" msgstr[1] "Templatki" msgstr[2] "Templatki" msgstr[3] "Templatki" #: templates/debug_toolbar/panels/templates.html:22 #: templates/debug_toolbar/panels/templates.html:40 msgid "Toggle context" msgstr "" #: templates/debug_toolbar/panels/templates.html:33 msgid "Context processor" msgid_plural "Context processors" msgstr[0] "" msgstr[1] "" msgstr[2] "" msgstr[3] "" #: templates/debug_toolbar/panels/timer.html:2 msgid "Resource usage" msgstr "" #: templates/debug_toolbar/panels/timer.html:10 msgid "Resource" msgstr "Zasób" #: templates/debug_toolbar/panels/timer.html:26 msgid "Browser timing" msgstr "" #: templates/debug_toolbar/panels/timer.html:35 msgid "Timing attribute" msgstr "" #: templates/debug_toolbar/panels/timer.html:37 msgid "Milliseconds since navigation start (+length)" msgstr "" #: templates/debug_toolbar/panels/versions.html:10 msgid "Package" msgstr "" #: templates/debug_toolbar/panels/versions.html:11 msgid "Name" msgstr "Nazwa" #: templates/debug_toolbar/panels/versions.html:12 msgid "Version" msgstr "Wersja" #: templates/debug_toolbar/redirect.html:10 msgid "Location:" msgstr "" #: templates/debug_toolbar/redirect.html:12 msgid "" "The Django Debug Toolbar has intercepted a redirect to the above URL for " "debug viewing purposes. You can click the above link to continue with the " "redirect as normal." msgstr "" #: views.py:16 msgid "" "Data for this panel isn't available anymore. Please reload the page and " "retry." msgstr "" python-django-debug-toolbar-5.2.0/debug_toolbar/locale/pt/000077500000000000000000000000001500406072000235075ustar00rootroot00000000000000python-django-debug-toolbar-5.2.0/debug_toolbar/locale/pt/LC_MESSAGES/000077500000000000000000000000001500406072000252745ustar00rootroot00000000000000python-django-debug-toolbar-5.2.0/debug_toolbar/locale/pt/LC_MESSAGES/django.mo000066400000000000000000000055671500406072000271100ustar00rootroot000000000000002C<HI ] gu|( '   )- 6@G L X1e     ) 1&;bgv/ , @ E S [ i n     4   # * 5 < D N ^ n |  <   *   , D I V \ f n ("%$)10* .'/ &  2,+#- !(prefix %(prefix)s)(unknown)ActionActiveCommandsDisable for next and successive requestsEmpty setEnable for next and successive requestsErrorExecuted SQLHideHide toolbarIn errorIntercept redirectsKeyLocationLocation:MethodNameNo GET dataNo POST dataNo SQL queries were recorded during this request.NonePOST dataPackageReceiversRequestResourceSerializableSettingSettingsShow toolbarSignalSignalsStatic fileStatic filesStatic filesSummaryTemplatesTemplates (%(num_templates)s rendered)TimeTotal: %0.2fmsTransaction status:TypeUnknownValueVariableVersionVersionsProject-Id-Version: Django Debug Toolbar Report-Msgid-Bugs-To: PO-Revision-Date: 2010-11-30 00:00+0000 Last-Translator: José Durães , 2014 Language-Team: Portuguese (http://app.transifex.com/django-debug-toolbar/django-debug-toolbar/language/pt/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: pt Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2; (prefixo %(prefix)s)(desconhecido)AcçãoAcçãoComandosDesactivar para o seguinte e sucessivos pedidosSet vazioActivar para o próximo e sucessivos pedidosErroSQL ExecutadoOcultarOcultar barraErroIntercetar redirecionamentosChaveLocalizaçãoLocalizaçãoMétodoNomeSem dados GETSem variáveis POSTNenhuma query SQL foi registada durante este pedido.Nenhumdados POSTPacoteReceptoresPedidoRecursoVariávelConfiguraçõesConfiguraçõesMostrar barraSinalSinaisFicheiro estáticoFicheiros estáticosFicheiros estáticosFicheiros estáticosResumoTemplatesTemplates (%(num_templates)s renderizados)TempoTotal: %0.2fmsEstado da transacção:TipoDesconhecidoValorVariávelVersãoVersõespython-django-debug-toolbar-5.2.0/debug_toolbar/locale/pt/LC_MESSAGES/django.po000066400000000000000000000403271500406072000271040ustar00rootroot00000000000000# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # # Translators: # José Durães , 2014 msgid "" msgstr "" "Project-Id-Version: Django Debug Toolbar\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2024-08-06 07:12-0500\n" "PO-Revision-Date: 2010-11-30 00:00+0000\n" "Last-Translator: José Durães , 2014\n" "Language-Team: Portuguese (http://app.transifex.com/django-debug-toolbar/django-debug-toolbar/language/pt/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: pt\n" "Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" #: apps.py:18 msgid "Debug Toolbar" msgstr "" #: panels/alerts.py:67 #, python-brace-format msgid "" "Form with id \"{form_id}\" contains file input, but does not have the " "attribute enctype=\"multipart/form-data\"." msgstr "" #: panels/alerts.py:70 msgid "" "Form contains file input, but does not have the attribute " "enctype=\"multipart/form-data\"." msgstr "" #: panels/alerts.py:73 #, python-brace-format msgid "" "Input element references form with id \"{form_id}\", but the form does not " "have the attribute enctype=\"multipart/form-data\"." msgstr "" #: panels/alerts.py:77 msgid "Alerts" msgstr "" #: panels/cache.py:168 msgid "Cache" msgstr "" #: panels/cache.py:174 #, python-format msgid "%(cache_calls)d call in %(time).2fms" msgid_plural "%(cache_calls)d calls in %(time).2fms" msgstr[0] "" msgstr[1] "" msgstr[2] "" #: panels/cache.py:183 #, python-format msgid "Cache calls from %(count)d backend" msgid_plural "Cache calls from %(count)d backends" msgstr[0] "" msgstr[1] "" msgstr[2] "" #: panels/headers.py:31 msgid "Headers" msgstr "" #: panels/history/panel.py:19 panels/history/panel.py:20 msgid "History" msgstr "" #: panels/profiling.py:140 msgid "Profiling" msgstr "" #: panels/redirects.py:17 msgid "Intercept redirects" msgstr "Intercetar redirecionamentos" #: panels/request.py:16 msgid "Request" msgstr "Pedido" #: panels/request.py:38 msgid "" msgstr "" #: panels/request.py:55 msgid "" msgstr "" #: panels/settings.py:17 msgid "Settings" msgstr "Configurações" #: panels/settings.py:20 #, python-format msgid "Settings from %s" msgstr "" #: panels/signals.py:57 #, python-format msgid "%(num_receivers)d receiver of 1 signal" msgid_plural "%(num_receivers)d receivers of 1 signal" msgstr[0] "" msgstr[1] "" msgstr[2] "" #: panels/signals.py:62 #, python-format msgid "%(num_receivers)d receiver of %(num_signals)d signals" msgid_plural "%(num_receivers)d receivers of %(num_signals)d signals" msgstr[0] "" msgstr[1] "" msgstr[2] "" #: panels/signals.py:67 msgid "Signals" msgstr "Sinais" #: panels/sql/panel.py:30 panels/sql/panel.py:41 msgid "Read uncommitted" msgstr "" #: panels/sql/panel.py:31 panels/sql/panel.py:43 msgid "Read committed" msgstr "" #: panels/sql/panel.py:32 panels/sql/panel.py:45 msgid "Repeatable read" msgstr "" #: panels/sql/panel.py:33 panels/sql/panel.py:47 msgid "Serializable" msgstr "Variável" #: panels/sql/panel.py:39 msgid "Autocommit" msgstr "" #: panels/sql/panel.py:61 panels/sql/panel.py:71 msgid "Idle" msgstr "" #: panels/sql/panel.py:62 panels/sql/panel.py:72 msgid "Active" msgstr "Acção" #: panels/sql/panel.py:63 panels/sql/panel.py:73 msgid "In transaction" msgstr "" #: panels/sql/panel.py:64 panels/sql/panel.py:74 msgid "In error" msgstr "Erro" #: panels/sql/panel.py:65 panels/sql/panel.py:75 msgid "Unknown" msgstr "Desconhecido" #: panels/sql/panel.py:162 msgid "SQL" msgstr "" #: panels/sql/panel.py:168 #, python-format msgid "%(query_count)d query in %(sql_time).2fms" msgid_plural "%(query_count)d queries in %(sql_time).2fms" msgstr[0] "" msgstr[1] "" msgstr[2] "" #: panels/sql/panel.py:180 #, python-format msgid "SQL queries from %(count)d connection" msgid_plural "SQL queries from %(count)d connections" msgstr[0] "" msgstr[1] "" msgstr[2] "" #: panels/staticfiles.py:82 #, python-format msgid "Static files (%(num_found)s found, %(num_used)s used)" msgstr "" #: panels/staticfiles.py:103 msgid "Static files" msgstr "Ficheiros estáticos" #: panels/staticfiles.py:109 #, python-format msgid "%(num_used)s file used" msgid_plural "%(num_used)s files used" msgstr[0] "" msgstr[1] "" msgstr[2] "" #: panels/templates/panel.py:101 msgid "Templates" msgstr "Templates" #: panels/templates/panel.py:106 #, python-format msgid "Templates (%(num_templates)s rendered)" msgstr "Templates (%(num_templates)s renderizados)" #: panels/templates/panel.py:195 msgid "No origin" msgstr "" #: panels/timer.py:27 #, python-format msgid "CPU: %(cum)0.2fms (%(total)0.2fms)" msgstr "" #: panels/timer.py:32 #, python-format msgid "Total: %0.2fms" msgstr "Total: %0.2fms" #: panels/timer.py:38 templates/debug_toolbar/panels/history.html:9 #: templates/debug_toolbar/panels/sql_explain.html:11 #: templates/debug_toolbar/panels/sql_profile.html:12 #: templates/debug_toolbar/panels/sql_select.html:11 msgid "Time" msgstr "Tempo" #: panels/timer.py:46 msgid "User CPU time" msgstr "" #: panels/timer.py:46 #, python-format msgid "%(utime)0.3f msec" msgstr "" #: panels/timer.py:47 msgid "System CPU time" msgstr "" #: panels/timer.py:47 #, python-format msgid "%(stime)0.3f msec" msgstr "" #: panels/timer.py:48 msgid "Total CPU time" msgstr "" #: panels/timer.py:48 #, python-format msgid "%(total)0.3f msec" msgstr "" #: panels/timer.py:49 msgid "Elapsed time" msgstr "" #: panels/timer.py:49 #, python-format msgid "%(total_time)0.3f msec" msgstr "" #: panels/timer.py:51 msgid "Context switches" msgstr "" #: panels/timer.py:52 #, python-format msgid "%(vcsw)d voluntary, %(ivcsw)d involuntary" msgstr "" #: panels/versions.py:19 msgid "Versions" msgstr "Versões" #: templates/debug_toolbar/base.html:23 msgid "Hide toolbar" msgstr "Ocultar barra" #: templates/debug_toolbar/base.html:23 msgid "Hide" msgstr "Ocultar" #: templates/debug_toolbar/base.html:25 templates/debug_toolbar/base.html:26 msgid "Toggle Theme" msgstr "" #: templates/debug_toolbar/base.html:35 msgid "Show toolbar" msgstr "Mostrar barra" #: templates/debug_toolbar/includes/panel_button.html:4 msgid "Disable for next and successive requests" msgstr "Desactivar para o seguinte e sucessivos pedidos" #: templates/debug_toolbar/includes/panel_button.html:4 msgid "Enable for next and successive requests" msgstr "Activar para o próximo e sucessivos pedidos" #: templates/debug_toolbar/panels/alerts.html:4 msgid "Alerts found" msgstr "" #: templates/debug_toolbar/panels/alerts.html:11 msgid "No alerts found" msgstr "" #: templates/debug_toolbar/panels/cache.html:2 msgid "Summary" msgstr "Resumo" #: templates/debug_toolbar/panels/cache.html:6 msgid "Total calls" msgstr "" #: templates/debug_toolbar/panels/cache.html:7 msgid "Total time" msgstr "" #: templates/debug_toolbar/panels/cache.html:8 msgid "Cache hits" msgstr "" #: templates/debug_toolbar/panels/cache.html:9 msgid "Cache misses" msgstr "" #: templates/debug_toolbar/panels/cache.html:21 msgid "Commands" msgstr "Comandos" #: templates/debug_toolbar/panels/cache.html:39 msgid "Calls" msgstr "" #: templates/debug_toolbar/panels/cache.html:43 #: templates/debug_toolbar/panels/sql.html:36 msgid "Time (ms)" msgstr "" #: templates/debug_toolbar/panels/cache.html:44 msgid "Type" msgstr "Tipo" #: templates/debug_toolbar/panels/cache.html:45 #: templates/debug_toolbar/panels/request.html:8 msgid "Arguments" msgstr "" #: templates/debug_toolbar/panels/cache.html:46 #: templates/debug_toolbar/panels/request.html:9 msgid "Keyword arguments" msgstr "" #: templates/debug_toolbar/panels/cache.html:47 msgid "Backend" msgstr "" #: templates/debug_toolbar/panels/headers.html:3 msgid "Request headers" msgstr "" #: templates/debug_toolbar/panels/headers.html:8 #: templates/debug_toolbar/panels/headers.html:27 #: templates/debug_toolbar/panels/headers.html:48 msgid "Key" msgstr "Chave" #: templates/debug_toolbar/panels/headers.html:9 #: templates/debug_toolbar/panels/headers.html:28 #: templates/debug_toolbar/panels/headers.html:49 #: templates/debug_toolbar/panels/history_tr.html:23 #: templates/debug_toolbar/panels/request_variables.html:12 #: templates/debug_toolbar/panels/settings.html:6 #: templates/debug_toolbar/panels/timer.html:11 msgid "Value" msgstr "Valor" #: templates/debug_toolbar/panels/headers.html:22 msgid "Response headers" msgstr "" #: templates/debug_toolbar/panels/headers.html:41 msgid "WSGI environ" msgstr "" #: templates/debug_toolbar/panels/headers.html:43 msgid "" "Since the WSGI environ inherits the environment of the server, only a " "significant subset is shown below." msgstr "" #: templates/debug_toolbar/panels/history.html:10 msgid "Method" msgstr "Método" #: templates/debug_toolbar/panels/history.html:11 #: templates/debug_toolbar/panels/staticfiles.html:43 msgid "Path" msgstr "" #: templates/debug_toolbar/panels/history.html:12 msgid "Request Variables" msgstr "" #: templates/debug_toolbar/panels/history.html:13 msgid "Status" msgstr "" #: templates/debug_toolbar/panels/history.html:14 #: templates/debug_toolbar/panels/sql.html:37 msgid "Action" msgstr "Acção" #: templates/debug_toolbar/panels/history_tr.html:22 #: templates/debug_toolbar/panels/request_variables.html:11 msgid "Variable" msgstr "Variável" #: templates/debug_toolbar/panels/profiling.html:5 msgid "Call" msgstr "" #: templates/debug_toolbar/panels/profiling.html:6 msgid "CumTime" msgstr "" #: templates/debug_toolbar/panels/profiling.html:7 #: templates/debug_toolbar/panels/profiling.html:9 msgid "Per" msgstr "" #: templates/debug_toolbar/panels/profiling.html:8 msgid "TotTime" msgstr "" #: templates/debug_toolbar/panels/profiling.html:10 msgid "Count" msgstr "" #: templates/debug_toolbar/panels/request.html:3 msgid "View information" msgstr "" #: templates/debug_toolbar/panels/request.html:7 msgid "View function" msgstr "" #: templates/debug_toolbar/panels/request.html:10 msgid "URL name" msgstr "" #: templates/debug_toolbar/panels/request.html:24 msgid "Cookies" msgstr "" #: templates/debug_toolbar/panels/request.html:27 msgid "No cookies" msgstr "" #: templates/debug_toolbar/panels/request.html:31 msgid "Session data" msgstr "" #: templates/debug_toolbar/panels/request.html:34 msgid "No session data" msgstr "" #: templates/debug_toolbar/panels/request.html:38 msgid "GET data" msgstr "" #: templates/debug_toolbar/panels/request.html:41 msgid "No GET data" msgstr "Sem dados GET" #: templates/debug_toolbar/panels/request.html:45 msgid "POST data" msgstr "dados POST" #: templates/debug_toolbar/panels/request.html:48 msgid "No POST data" msgstr "Sem variáveis POST" #: templates/debug_toolbar/panels/settings.html:5 msgid "Setting" msgstr "Configurações" #: templates/debug_toolbar/panels/signals.html:5 msgid "Signal" msgstr "Sinal" #: templates/debug_toolbar/panels/signals.html:6 msgid "Receivers" msgstr "Receptores" #: templates/debug_toolbar/panels/sql.html:6 #, python-format msgid "%(num)s query" msgid_plural "%(num)s queries" msgstr[0] "" msgstr[1] "" msgstr[2] "" #: templates/debug_toolbar/panels/sql.html:8 #, python-format msgid "" "including %(count)s similar" msgstr "" #: templates/debug_toolbar/panels/sql.html:12 #, python-format msgid "" "and %(dupes)s duplicates" msgstr "" #: templates/debug_toolbar/panels/sql.html:34 msgid "Query" msgstr "" #: templates/debug_toolbar/panels/sql.html:35 #: templates/debug_toolbar/panels/timer.html:36 msgid "Timeline" msgstr "" #: templates/debug_toolbar/panels/sql.html:52 #, python-format msgid "%(count)s similar queries." msgstr "" #: templates/debug_toolbar/panels/sql.html:58 #, python-format msgid "Duplicated %(dupes)s times." msgstr "" #: templates/debug_toolbar/panels/sql.html:95 msgid "Connection:" msgstr "" #: templates/debug_toolbar/panels/sql.html:97 msgid "Isolation level:" msgstr "" #: templates/debug_toolbar/panels/sql.html:100 msgid "Transaction status:" msgstr "Estado da transacção:" #: templates/debug_toolbar/panels/sql.html:114 msgid "(unknown)" msgstr "(desconhecido)" #: templates/debug_toolbar/panels/sql.html:123 msgid "No SQL queries were recorded during this request." msgstr "Nenhuma query SQL foi registada durante este pedido." #: templates/debug_toolbar/panels/sql_explain.html:4 msgid "SQL explained" msgstr "" #: templates/debug_toolbar/panels/sql_explain.html:9 #: templates/debug_toolbar/panels/sql_profile.html:10 #: templates/debug_toolbar/panels/sql_select.html:9 msgid "Executed SQL" msgstr "SQL Executado" #: templates/debug_toolbar/panels/sql_explain.html:13 #: templates/debug_toolbar/panels/sql_profile.html:14 #: templates/debug_toolbar/panels/sql_select.html:13 msgid "Database" msgstr "" #: templates/debug_toolbar/panels/sql_profile.html:4 msgid "SQL profiled" msgstr "" #: templates/debug_toolbar/panels/sql_profile.html:37 msgid "Error" msgstr "Erro" #: templates/debug_toolbar/panels/sql_select.html:4 msgid "SQL selected" msgstr "" #: templates/debug_toolbar/panels/sql_select.html:36 msgid "Empty set" msgstr "Set vazio" #: templates/debug_toolbar/panels/staticfiles.html:3 msgid "Static file path" msgid_plural "Static file paths" msgstr[0] "" msgstr[1] "" msgstr[2] "" #: templates/debug_toolbar/panels/staticfiles.html:7 #, python-format msgid "(prefix %(prefix)s)" msgstr "(prefixo %(prefix)s)" #: templates/debug_toolbar/panels/staticfiles.html:11 #: templates/debug_toolbar/panels/staticfiles.html:22 #: templates/debug_toolbar/panels/staticfiles.html:34 #: templates/debug_toolbar/panels/templates.html:10 #: templates/debug_toolbar/panels/templates.html:30 #: templates/debug_toolbar/panels/templates.html:47 msgid "None" msgstr "Nenhum" #: templates/debug_toolbar/panels/staticfiles.html:14 msgid "Static file app" msgid_plural "Static file apps" msgstr[0] "" msgstr[1] "" msgstr[2] "" #: templates/debug_toolbar/panels/staticfiles.html:25 msgid "Static file" msgid_plural "Static files" msgstr[0] "Ficheiro estático" msgstr[1] "Ficheiros estáticos" msgstr[2] "Ficheiros estáticos" #: templates/debug_toolbar/panels/staticfiles.html:39 #, python-format msgid "%(payload_count)s file" msgid_plural "%(payload_count)s files" msgstr[0] "" msgstr[1] "" msgstr[2] "" #: templates/debug_toolbar/panels/staticfiles.html:44 msgid "Location" msgstr "Localização" #: templates/debug_toolbar/panels/template_source.html:4 msgid "Template source:" msgstr "" #: templates/debug_toolbar/panels/templates.html:2 msgid "Template path" msgid_plural "Template paths" msgstr[0] "" msgstr[1] "Caminho da Template" msgstr[2] "Caminho da Template" #: templates/debug_toolbar/panels/templates.html:13 msgid "Template" msgid_plural "Templates" msgstr[0] "" msgstr[1] "" msgstr[2] "" #: templates/debug_toolbar/panels/templates.html:22 #: templates/debug_toolbar/panels/templates.html:40 msgid "Toggle context" msgstr "" #: templates/debug_toolbar/panels/templates.html:33 msgid "Context processor" msgid_plural "Context processors" msgstr[0] "" msgstr[1] "Processador de Contexto" msgstr[2] "Processador de Contexto" #: templates/debug_toolbar/panels/timer.html:2 msgid "Resource usage" msgstr "" #: templates/debug_toolbar/panels/timer.html:10 msgid "Resource" msgstr "Recurso" #: templates/debug_toolbar/panels/timer.html:26 msgid "Browser timing" msgstr "" #: templates/debug_toolbar/panels/timer.html:35 msgid "Timing attribute" msgstr "" #: templates/debug_toolbar/panels/timer.html:37 msgid "Milliseconds since navigation start (+length)" msgstr "" #: templates/debug_toolbar/panels/versions.html:10 msgid "Package" msgstr "Pacote" #: templates/debug_toolbar/panels/versions.html:11 msgid "Name" msgstr "Nome" #: templates/debug_toolbar/panels/versions.html:12 msgid "Version" msgstr "Versão" #: templates/debug_toolbar/redirect.html:10 msgid "Location:" msgstr "Localização" #: templates/debug_toolbar/redirect.html:12 msgid "" "The Django Debug Toolbar has intercepted a redirect to the above URL for " "debug viewing purposes. You can click the above link to continue with the " "redirect as normal." msgstr "" #: views.py:16 msgid "" "Data for this panel isn't available anymore. Please reload the page and " "retry." msgstr "" python-django-debug-toolbar-5.2.0/debug_toolbar/locale/pt_BR/000077500000000000000000000000001500406072000240725ustar00rootroot00000000000000python-django-debug-toolbar-5.2.0/debug_toolbar/locale/pt_BR/LC_MESSAGES/000077500000000000000000000000001500406072000256575ustar00rootroot00000000000000python-django-debug-toolbar-5.2.0/debug_toolbar/locale/pt_BR/LC_MESSAGES/django.mo000066400000000000000000000215021500406072000274560ustar00rootroot00000000000000 J  l: N . .% T f x  )      $ , "; ^ Fd       N Y b(p  '  +?PTf o-y  1    !+38 <FL[ lv       +2h: " 5 CK[n &t y    !'08 AO `myN4u`Ow- : OYiy  "v`q i= L&Z&    %4Rh n y4> < HSh o}   6 : HV fpq9=Pw\% N9    = ! !* !K!" "#"2"L"^"f"y" """" " """ "# # ### 4#2 g"r8$f?LaVY{7c&o@G[>}M #)6Z+4IwF~bz(C<n=qNO  A%Wj-e,u!39|P :J]0D_.tXRBTH*p yvikm^`U1hQ/5xSK;\'Esld%(cache_calls)d call in %(time).2fms%(cache_calls)d calls in %(time).2fms%(num)s query%(num)s queries%(num_receivers)d receiver of %(num_signals)d signals%(num_receivers)d receivers of %(num_signals)d signals%(num_receivers)d receiver of 1 signal%(num_receivers)d receivers of 1 signal%(num_used)s file used%(num_used)s files used%(payload_count)s file%(payload_count)s files%(stime)0.3f msec%(total)0.3f msec%(total_time)0.3f msec%(utime)0.3f msec%(vcsw)d voluntary, %(ivcsw)d involuntary(prefix %(prefix)s)(unknown)ActionActiveArgumentsAutocommitBackendBrowser timingCPU: %(cum)0.2fms (%(total)0.2fms)CacheCache calls from %(count)d backendCache calls from %(count)d backendsCache hitsCache missesCallCallsCommandsConnection:Context switchesCookiesCountCumTimeData for this panel isn't available anymore. Please reload the page and retry.DatabaseDebug ToolbarDisable for next and successive requestsElapsed timeEmpty setEnable for next and successive requestsErrorExecuted SQLGET dataHeadersHideHide toolbarIdleIn errorIn transactionIntercept redirectsIsolation level:KeyKeyword argumentsLocationLocation:Milliseconds since navigation start (+length)NameNo GET dataNo POST dataNo SQL queries were recorded during this request.No cookiesNo originNo session dataNonePOST dataPackagePathPerProfilingQueryRead committedRead uncommittedReceiversRepeatable readRequestRequest headersResourceResource usageResponse headersSQLSQL explainedSQL profiledSQL selectedSerializableSession dataSettingSettingsShow toolbarSignalSignalsSince the WSGI environ inherits the environment of the server, only a significant subset is shown below.Static fileStatic filesStatic file appStatic file appsStatic file pathStatic file pathsStatic filesStatic files (%(num_found)s found, %(num_used)s used)SummarySystem CPU timeTemplateTemplatesTemplate pathTemplate pathsTemplate source:TemplatesTemplates (%(num_templates)s rendered)The Django Debug Toolbar has intercepted a redirect to the above URL for debug viewing purposes. You can click the above link to continue with the redirect as normal.TimeTime (ms)TimelineTiming attributeToggle contextTotTimeTotal CPU timeTotal callsTotal timeTotal: %0.2fmsTransaction status:TypeURL nameUnknownUser CPU timeValueVariableVersionVersionsView functionView informationWSGI environProject-Id-Version: Django Debug Toolbar Report-Msgid-Bugs-To: PO-Revision-Date: 2010-11-30 00:00+0000 Last-Translator: Gladson , 2017 Language-Team: Portuguese (Brazil) (http://app.transifex.com/django-debug-toolbar/django-debug-toolbar/language/pt_BR/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: pt_BR Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2; %(cache_calls)d chamada em %(time).2fms%(cache_calls)d chamadas em %(time).2fms%(cache_calls)d chamadas em %(time).2fms%(num)s consulta%(num)s consultas%(num)s consultas%(num_receivers)d receptor de %(num_signals)d sinais%(num_receivers)d receptores de %(num_signals)d sinais%(num_receivers)d receptores de %(num_signals)d sinais%(num_receivers)d receptor de 1 sinal%(num_receivers)d receptores de 1 sinal%(num_receivers)d receptores de 1 sinal%(num_used)s arquivo utilizado%(num_used)s arquivos utilizados%(num_used)s arquivos utilizados%(payload_count)s arquivo%(payload_count)s arquivos%(payload_count)s arquivos%(stime)0.3f ms%(total)0.3f ms%(total_time)0.3f ms%(utime)0.3f ms%(vcsw)d voluntário, %(ivcsw)d involuntário(prefixo %(prefix)s)(unknown)AçãoAçãoArgumentosAutocommitBackendCronometragem do NavegadorCPU: %(cum)0.2fms (%(total)0.2fms)CacheChamadas ao cache de %(count)d backendChamadas ao cache de %(count)d backendsChamadas ao cache de %(count)d backendsAcessos ao cacheFalhas de cacheChamarChamadasComandosConexão:Mudanças de contextoCookiesContagemCumTimeOs dados para este painel não está mais disponível. Por favor, recarregue a página e tente novamente.Banco de dadosDebug ToolbarDesativar para próximas requisiçõesTempo decorridoConjunto vazioHabilitar para próximas requisiçõesErroSQL ExecutadaDados de GETCabeçalhosEsconderOcultar barra de ferramentasOciosoErroNa transaçãoInterceptar redirecionamentosNível de isolamento:ChaveArgumentosLocalizaçãoLocalização:Milissegundos desde início de navegação (+length)NomeNão há dados de GETNão há dados de POSTNenhuma consulta SQL foi registrada durante esta requisição.Sem CookiesSem origemSem dados de SessãoNenhumDados de POSTPacoteCaminhoPerProfilingQueryRead committedRead uncommittedRecebedoresLeitura repetidaRequisiçãoCabeçalhos de RequisiçãoRecursoUso de recursosCabeçalhos de RespostaSQLSQL explicadaSQL perfiladoSQL selecionadaVariávelDados de SessãoConfiguraçãoConfiguraçõesMostrar barra de ferramentasSinaisSinaisUma vez que o ambiente WSGI herda o ambiente do servidor, apenas um subconjunto significativo é mostrado abaixo.Arquivo estáticoArquivos estáticosArquivos estáticosArquivo estático de appArquivos estáticos de appsArquivos estáticos de appsCaminho do arquivo estáticoCaminho dos arquivos estáticosCaminho dos arquivos estáticosArquivos estáticosArquivos estáticos (%(num_found)s encontrados, %(num_used)s sendo utilizados)ResumoTempo de CPU do sistemaTemplateTemplatesTemplatesCaminho do TemplateCaminho do TemplatesCaminho do TemplatesOrigem do Template:TemplatesTemplates (%(num_templates)s renderizados)O Django Debug Toolbar interceptou um redirecionamento para a URL acima para fins de visualização de depuração. Você pode clicar no link acima para continuar com o redirecionamento normalmente.TempoTempo (ms)Linha do tempoAtributo de CronometragemAlternar contextoTotTimeTempo total de CPUTotal de chamadasTempo totalTotal: %0.2fmsStatus da transação:TipoNome da URLDesconhecidoTempo de CPU do usuárioValorVariávelVersãoVersõesFunção ViewVer informaçãoAmbiente WSGIpython-django-debug-toolbar-5.2.0/debug_toolbar/locale/pt_BR/LC_MESSAGES/django.po000066400000000000000000000452701500406072000274710ustar00rootroot00000000000000# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # # Translators: # Fábio C. Barrionuevo da Luz , 2013-2014 # Gladson , 2017 # Percy Pérez-Pinedo, 2009 msgid "" msgstr "" "Project-Id-Version: Django Debug Toolbar\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2024-08-06 07:12-0500\n" "PO-Revision-Date: 2010-11-30 00:00+0000\n" "Last-Translator: Gladson , 2017\n" "Language-Team: Portuguese (Brazil) (http://app.transifex.com/django-debug-toolbar/django-debug-toolbar/language/pt_BR/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: pt_BR\n" "Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" #: apps.py:18 msgid "Debug Toolbar" msgstr "Debug Toolbar" #: panels/alerts.py:67 #, python-brace-format msgid "" "Form with id \"{form_id}\" contains file input, but does not have the " "attribute enctype=\"multipart/form-data\"." msgstr "" #: panels/alerts.py:70 msgid "" "Form contains file input, but does not have the attribute " "enctype=\"multipart/form-data\"." msgstr "" #: panels/alerts.py:73 #, python-brace-format msgid "" "Input element references form with id \"{form_id}\", but the form does not " "have the attribute enctype=\"multipart/form-data\"." msgstr "" #: panels/alerts.py:77 msgid "Alerts" msgstr "" #: panels/cache.py:168 msgid "Cache" msgstr "Cache" #: panels/cache.py:174 #, python-format msgid "%(cache_calls)d call in %(time).2fms" msgid_plural "%(cache_calls)d calls in %(time).2fms" msgstr[0] "%(cache_calls)d chamada em %(time).2fms" msgstr[1] "%(cache_calls)d chamadas em %(time).2fms" msgstr[2] "%(cache_calls)d chamadas em %(time).2fms" #: panels/cache.py:183 #, python-format msgid "Cache calls from %(count)d backend" msgid_plural "Cache calls from %(count)d backends" msgstr[0] "Chamadas ao cache de %(count)d backend" msgstr[1] "Chamadas ao cache de %(count)d backends" msgstr[2] "Chamadas ao cache de %(count)d backends" #: panels/headers.py:31 msgid "Headers" msgstr "Cabeçalhos" #: panels/history/panel.py:19 panels/history/panel.py:20 msgid "History" msgstr "" #: panels/profiling.py:140 msgid "Profiling" msgstr "Profiling" #: panels/redirects.py:17 msgid "Intercept redirects" msgstr "Interceptar redirecionamentos" #: panels/request.py:16 msgid "Request" msgstr "Requisição" #: panels/request.py:38 msgid "" msgstr "" #: panels/request.py:55 msgid "" msgstr "" #: panels/settings.py:17 msgid "Settings" msgstr "Configurações" #: panels/settings.py:20 #, python-format msgid "Settings from %s" msgstr "" #: panels/signals.py:57 #, python-format msgid "%(num_receivers)d receiver of 1 signal" msgid_plural "%(num_receivers)d receivers of 1 signal" msgstr[0] "%(num_receivers)d receptor de 1 sinal" msgstr[1] "%(num_receivers)d receptores de 1 sinal" msgstr[2] "%(num_receivers)d receptores de 1 sinal" #: panels/signals.py:62 #, python-format msgid "%(num_receivers)d receiver of %(num_signals)d signals" msgid_plural "%(num_receivers)d receivers of %(num_signals)d signals" msgstr[0] "%(num_receivers)d receptor de %(num_signals)d sinais" msgstr[1] "%(num_receivers)d receptores de %(num_signals)d sinais" msgstr[2] "%(num_receivers)d receptores de %(num_signals)d sinais" #: panels/signals.py:67 msgid "Signals" msgstr "Sinais" #: panels/sql/panel.py:30 panels/sql/panel.py:41 msgid "Read uncommitted" msgstr "Read uncommitted" #: panels/sql/panel.py:31 panels/sql/panel.py:43 msgid "Read committed" msgstr "Read committed" #: panels/sql/panel.py:32 panels/sql/panel.py:45 msgid "Repeatable read" msgstr "Leitura repetida" #: panels/sql/panel.py:33 panels/sql/panel.py:47 msgid "Serializable" msgstr "Variável" #: panels/sql/panel.py:39 msgid "Autocommit" msgstr "Autocommit" #: panels/sql/panel.py:61 panels/sql/panel.py:71 msgid "Idle" msgstr "Ocioso" #: panels/sql/panel.py:62 panels/sql/panel.py:72 msgid "Active" msgstr "Ação" #: panels/sql/panel.py:63 panels/sql/panel.py:73 msgid "In transaction" msgstr "Na transação" #: panels/sql/panel.py:64 panels/sql/panel.py:74 msgid "In error" msgstr "Erro" #: panels/sql/panel.py:65 panels/sql/panel.py:75 msgid "Unknown" msgstr "Desconhecido" #: panels/sql/panel.py:162 msgid "SQL" msgstr "SQL" #: panels/sql/panel.py:168 #, python-format msgid "%(query_count)d query in %(sql_time).2fms" msgid_plural "%(query_count)d queries in %(sql_time).2fms" msgstr[0] "" msgstr[1] "" msgstr[2] "" #: panels/sql/panel.py:180 #, python-format msgid "SQL queries from %(count)d connection" msgid_plural "SQL queries from %(count)d connections" msgstr[0] "" msgstr[1] "" msgstr[2] "" #: panels/staticfiles.py:82 #, python-format msgid "Static files (%(num_found)s found, %(num_used)s used)" msgstr "Arquivos estáticos (%(num_found)s encontrados, %(num_used)s sendo utilizados)" #: panels/staticfiles.py:103 msgid "Static files" msgstr "Arquivos estáticos" #: panels/staticfiles.py:109 #, python-format msgid "%(num_used)s file used" msgid_plural "%(num_used)s files used" msgstr[0] "%(num_used)s arquivo utilizado" msgstr[1] "%(num_used)s arquivos utilizados" msgstr[2] "%(num_used)s arquivos utilizados" #: panels/templates/panel.py:101 msgid "Templates" msgstr "Templates" #: panels/templates/panel.py:106 #, python-format msgid "Templates (%(num_templates)s rendered)" msgstr "Templates (%(num_templates)s renderizados)" #: panels/templates/panel.py:195 msgid "No origin" msgstr "Sem origem" #: panels/timer.py:27 #, python-format msgid "CPU: %(cum)0.2fms (%(total)0.2fms)" msgstr "CPU: %(cum)0.2fms (%(total)0.2fms)" #: panels/timer.py:32 #, python-format msgid "Total: %0.2fms" msgstr "Total: %0.2fms" #: panels/timer.py:38 templates/debug_toolbar/panels/history.html:9 #: templates/debug_toolbar/panels/sql_explain.html:11 #: templates/debug_toolbar/panels/sql_profile.html:12 #: templates/debug_toolbar/panels/sql_select.html:11 msgid "Time" msgstr "Tempo" #: panels/timer.py:46 msgid "User CPU time" msgstr "Tempo de CPU do usuário" #: panels/timer.py:46 #, python-format msgid "%(utime)0.3f msec" msgstr "%(utime)0.3f ms" #: panels/timer.py:47 msgid "System CPU time" msgstr "Tempo de CPU do sistema" #: panels/timer.py:47 #, python-format msgid "%(stime)0.3f msec" msgstr "%(stime)0.3f ms" #: panels/timer.py:48 msgid "Total CPU time" msgstr "Tempo total de CPU" #: panels/timer.py:48 #, python-format msgid "%(total)0.3f msec" msgstr "%(total)0.3f ms" #: panels/timer.py:49 msgid "Elapsed time" msgstr "Tempo decorrido" #: panels/timer.py:49 #, python-format msgid "%(total_time)0.3f msec" msgstr "%(total_time)0.3f ms" #: panels/timer.py:51 msgid "Context switches" msgstr "Mudanças de contexto" #: panels/timer.py:52 #, python-format msgid "%(vcsw)d voluntary, %(ivcsw)d involuntary" msgstr "%(vcsw)d voluntário, %(ivcsw)d involuntário" #: panels/versions.py:19 msgid "Versions" msgstr "Versões" #: templates/debug_toolbar/base.html:23 msgid "Hide toolbar" msgstr "Ocultar barra de ferramentas" #: templates/debug_toolbar/base.html:23 msgid "Hide" msgstr "Esconder" #: templates/debug_toolbar/base.html:25 templates/debug_toolbar/base.html:26 msgid "Toggle Theme" msgstr "" #: templates/debug_toolbar/base.html:35 msgid "Show toolbar" msgstr "Mostrar barra de ferramentas" #: templates/debug_toolbar/includes/panel_button.html:4 msgid "Disable for next and successive requests" msgstr "Desativar para próximas requisições" #: templates/debug_toolbar/includes/panel_button.html:4 msgid "Enable for next and successive requests" msgstr "Habilitar para próximas requisições" #: templates/debug_toolbar/panels/alerts.html:4 msgid "Alerts found" msgstr "" #: templates/debug_toolbar/panels/alerts.html:11 msgid "No alerts found" msgstr "" #: templates/debug_toolbar/panels/cache.html:2 msgid "Summary" msgstr "Resumo" #: templates/debug_toolbar/panels/cache.html:6 msgid "Total calls" msgstr "Total de chamadas" #: templates/debug_toolbar/panels/cache.html:7 msgid "Total time" msgstr "Tempo total" #: templates/debug_toolbar/panels/cache.html:8 msgid "Cache hits" msgstr "Acessos ao cache" #: templates/debug_toolbar/panels/cache.html:9 msgid "Cache misses" msgstr "Falhas de cache" #: templates/debug_toolbar/panels/cache.html:21 msgid "Commands" msgstr "Comandos" #: templates/debug_toolbar/panels/cache.html:39 msgid "Calls" msgstr "Chamadas" #: templates/debug_toolbar/panels/cache.html:43 #: templates/debug_toolbar/panels/sql.html:36 msgid "Time (ms)" msgstr "Tempo (ms)" #: templates/debug_toolbar/panels/cache.html:44 msgid "Type" msgstr "Tipo" #: templates/debug_toolbar/panels/cache.html:45 #: templates/debug_toolbar/panels/request.html:8 msgid "Arguments" msgstr "Argumentos" #: templates/debug_toolbar/panels/cache.html:46 #: templates/debug_toolbar/panels/request.html:9 msgid "Keyword arguments" msgstr "Argumentos" #: templates/debug_toolbar/panels/cache.html:47 msgid "Backend" msgstr "Backend" #: templates/debug_toolbar/panels/headers.html:3 msgid "Request headers" msgstr "Cabeçalhos de Requisição" #: templates/debug_toolbar/panels/headers.html:8 #: templates/debug_toolbar/panels/headers.html:27 #: templates/debug_toolbar/panels/headers.html:48 msgid "Key" msgstr "Chave" #: templates/debug_toolbar/panels/headers.html:9 #: templates/debug_toolbar/panels/headers.html:28 #: templates/debug_toolbar/panels/headers.html:49 #: templates/debug_toolbar/panels/history_tr.html:23 #: templates/debug_toolbar/panels/request_variables.html:12 #: templates/debug_toolbar/panels/settings.html:6 #: templates/debug_toolbar/panels/timer.html:11 msgid "Value" msgstr "Valor" #: templates/debug_toolbar/panels/headers.html:22 msgid "Response headers" msgstr "Cabeçalhos de Resposta" #: templates/debug_toolbar/panels/headers.html:41 msgid "WSGI environ" msgstr "Ambiente WSGI" #: templates/debug_toolbar/panels/headers.html:43 msgid "" "Since the WSGI environ inherits the environment of the server, only a " "significant subset is shown below." msgstr "Uma vez que o ambiente WSGI herda o ambiente do servidor, apenas um subconjunto significativo é mostrado abaixo." #: templates/debug_toolbar/panels/history.html:10 msgid "Method" msgstr "" #: templates/debug_toolbar/panels/history.html:11 #: templates/debug_toolbar/panels/staticfiles.html:43 msgid "Path" msgstr "Caminho" #: templates/debug_toolbar/panels/history.html:12 msgid "Request Variables" msgstr "" #: templates/debug_toolbar/panels/history.html:13 msgid "Status" msgstr "" #: templates/debug_toolbar/panels/history.html:14 #: templates/debug_toolbar/panels/sql.html:37 msgid "Action" msgstr "Ação" #: templates/debug_toolbar/panels/history_tr.html:22 #: templates/debug_toolbar/panels/request_variables.html:11 msgid "Variable" msgstr "Variável" #: templates/debug_toolbar/panels/profiling.html:5 msgid "Call" msgstr "Chamar" #: templates/debug_toolbar/panels/profiling.html:6 msgid "CumTime" msgstr "CumTime" #: templates/debug_toolbar/panels/profiling.html:7 #: templates/debug_toolbar/panels/profiling.html:9 msgid "Per" msgstr "Per" #: templates/debug_toolbar/panels/profiling.html:8 msgid "TotTime" msgstr "TotTime" #: templates/debug_toolbar/panels/profiling.html:10 msgid "Count" msgstr "Contagem" #: templates/debug_toolbar/panels/request.html:3 msgid "View information" msgstr "Ver informação" #: templates/debug_toolbar/panels/request.html:7 msgid "View function" msgstr "Função View" #: templates/debug_toolbar/panels/request.html:10 msgid "URL name" msgstr "Nome da URL" #: templates/debug_toolbar/panels/request.html:24 msgid "Cookies" msgstr "Cookies" #: templates/debug_toolbar/panels/request.html:27 msgid "No cookies" msgstr "Sem Cookies" #: templates/debug_toolbar/panels/request.html:31 msgid "Session data" msgstr "Dados de Sessão" #: templates/debug_toolbar/panels/request.html:34 msgid "No session data" msgstr "Sem dados de Sessão" #: templates/debug_toolbar/panels/request.html:38 msgid "GET data" msgstr "Dados de GET" #: templates/debug_toolbar/panels/request.html:41 msgid "No GET data" msgstr "Não há dados de GET" #: templates/debug_toolbar/panels/request.html:45 msgid "POST data" msgstr "Dados de POST" #: templates/debug_toolbar/panels/request.html:48 msgid "No POST data" msgstr "Não há dados de POST" #: templates/debug_toolbar/panels/settings.html:5 msgid "Setting" msgstr "Configuração" #: templates/debug_toolbar/panels/signals.html:5 msgid "Signal" msgstr "Sinais" #: templates/debug_toolbar/panels/signals.html:6 msgid "Receivers" msgstr "Recebedores" #: templates/debug_toolbar/panels/sql.html:6 #, python-format msgid "%(num)s query" msgid_plural "%(num)s queries" msgstr[0] "%(num)s consulta" msgstr[1] "%(num)s consultas" msgstr[2] "%(num)s consultas" #: templates/debug_toolbar/panels/sql.html:8 #, python-format msgid "" "including %(count)s similar" msgstr "" #: templates/debug_toolbar/panels/sql.html:12 #, python-format msgid "" "and %(dupes)s duplicates" msgstr "" #: templates/debug_toolbar/panels/sql.html:34 msgid "Query" msgstr "Query" #: templates/debug_toolbar/panels/sql.html:35 #: templates/debug_toolbar/panels/timer.html:36 msgid "Timeline" msgstr "Linha do tempo" #: templates/debug_toolbar/panels/sql.html:52 #, python-format msgid "%(count)s similar queries." msgstr "" #: templates/debug_toolbar/panels/sql.html:58 #, python-format msgid "Duplicated %(dupes)s times." msgstr "" #: templates/debug_toolbar/panels/sql.html:95 msgid "Connection:" msgstr "Conexão:" #: templates/debug_toolbar/panels/sql.html:97 msgid "Isolation level:" msgstr "Nível de isolamento:" #: templates/debug_toolbar/panels/sql.html:100 msgid "Transaction status:" msgstr "Status da transação:" #: templates/debug_toolbar/panels/sql.html:114 msgid "(unknown)" msgstr "(unknown)" #: templates/debug_toolbar/panels/sql.html:123 msgid "No SQL queries were recorded during this request." msgstr "Nenhuma consulta SQL foi registrada durante esta requisição." #: templates/debug_toolbar/panels/sql_explain.html:4 msgid "SQL explained" msgstr "SQL explicada" #: templates/debug_toolbar/panels/sql_explain.html:9 #: templates/debug_toolbar/panels/sql_profile.html:10 #: templates/debug_toolbar/panels/sql_select.html:9 msgid "Executed SQL" msgstr "SQL Executada" #: templates/debug_toolbar/panels/sql_explain.html:13 #: templates/debug_toolbar/panels/sql_profile.html:14 #: templates/debug_toolbar/panels/sql_select.html:13 msgid "Database" msgstr "Banco de dados" #: templates/debug_toolbar/panels/sql_profile.html:4 msgid "SQL profiled" msgstr "SQL perfilado" #: templates/debug_toolbar/panels/sql_profile.html:37 msgid "Error" msgstr "Erro" #: templates/debug_toolbar/panels/sql_select.html:4 msgid "SQL selected" msgstr "SQL selecionada" #: templates/debug_toolbar/panels/sql_select.html:36 msgid "Empty set" msgstr "Conjunto vazio" #: templates/debug_toolbar/panels/staticfiles.html:3 msgid "Static file path" msgid_plural "Static file paths" msgstr[0] "Caminho do arquivo estático" msgstr[1] "Caminho dos arquivos estáticos" msgstr[2] "Caminho dos arquivos estáticos" #: templates/debug_toolbar/panels/staticfiles.html:7 #, python-format msgid "(prefix %(prefix)s)" msgstr "(prefixo %(prefix)s)" #: templates/debug_toolbar/panels/staticfiles.html:11 #: templates/debug_toolbar/panels/staticfiles.html:22 #: templates/debug_toolbar/panels/staticfiles.html:34 #: templates/debug_toolbar/panels/templates.html:10 #: templates/debug_toolbar/panels/templates.html:30 #: templates/debug_toolbar/panels/templates.html:47 msgid "None" msgstr "Nenhum" #: templates/debug_toolbar/panels/staticfiles.html:14 msgid "Static file app" msgid_plural "Static file apps" msgstr[0] "Arquivo estático de app" msgstr[1] "Arquivos estáticos de apps" msgstr[2] "Arquivos estáticos de apps" #: templates/debug_toolbar/panels/staticfiles.html:25 msgid "Static file" msgid_plural "Static files" msgstr[0] "Arquivo estático" msgstr[1] "Arquivos estáticos" msgstr[2] "Arquivos estáticos" #: templates/debug_toolbar/panels/staticfiles.html:39 #, python-format msgid "%(payload_count)s file" msgid_plural "%(payload_count)s files" msgstr[0] "%(payload_count)s arquivo" msgstr[1] "%(payload_count)s arquivos" msgstr[2] "%(payload_count)s arquivos" #: templates/debug_toolbar/panels/staticfiles.html:44 msgid "Location" msgstr "Localização" #: templates/debug_toolbar/panels/template_source.html:4 msgid "Template source:" msgstr "Origem do Template:" #: templates/debug_toolbar/panels/templates.html:2 msgid "Template path" msgid_plural "Template paths" msgstr[0] "Caminho do Template" msgstr[1] "Caminho do Templates" msgstr[2] "Caminho do Templates" #: templates/debug_toolbar/panels/templates.html:13 msgid "Template" msgid_plural "Templates" msgstr[0] "Template" msgstr[1] "Templates" msgstr[2] "Templates" #: templates/debug_toolbar/panels/templates.html:22 #: templates/debug_toolbar/panels/templates.html:40 msgid "Toggle context" msgstr "Alternar contexto" #: templates/debug_toolbar/panels/templates.html:33 msgid "Context processor" msgid_plural "Context processors" msgstr[0] "" msgstr[1] "Processador do Contexto" msgstr[2] "Processador do Contexto" #: templates/debug_toolbar/panels/timer.html:2 msgid "Resource usage" msgstr "Uso de recursos" #: templates/debug_toolbar/panels/timer.html:10 msgid "Resource" msgstr "Recurso" #: templates/debug_toolbar/panels/timer.html:26 msgid "Browser timing" msgstr "Cronometragem do Navegador" #: templates/debug_toolbar/panels/timer.html:35 msgid "Timing attribute" msgstr "Atributo de Cronometragem" #: templates/debug_toolbar/panels/timer.html:37 msgid "Milliseconds since navigation start (+length)" msgstr "Milissegundos desde início de navegação (+length)" #: templates/debug_toolbar/panels/versions.html:10 msgid "Package" msgstr "Pacote" #: templates/debug_toolbar/panels/versions.html:11 msgid "Name" msgstr "Nome" #: templates/debug_toolbar/panels/versions.html:12 msgid "Version" msgstr "Versão" #: templates/debug_toolbar/redirect.html:10 msgid "Location:" msgstr "Localização:" #: templates/debug_toolbar/redirect.html:12 msgid "" "The Django Debug Toolbar has intercepted a redirect to the above URL for " "debug viewing purposes. You can click the above link to continue with the " "redirect as normal." msgstr "O Django Debug Toolbar interceptou um redirecionamento para a URL acima para fins de visualização de depuração. Você pode clicar no link acima para continuar com o redirecionamento normalmente." #: views.py:16 msgid "" "Data for this panel isn't available anymore. Please reload the page and " "retry." msgstr "Os dados para este painel não está mais disponível. Por favor, recarregue a página e tente novamente." python-django-debug-toolbar-5.2.0/debug_toolbar/locale/ru/000077500000000000000000000000001500406072000235125ustar00rootroot00000000000000python-django-debug-toolbar-5.2.0/debug_toolbar/locale/ru/LC_MESSAGES/000077500000000000000000000000001500406072000252775ustar00rootroot00000000000000python-django-debug-toolbar-5.2.0/debug_toolbar/locale/ru/LC_MESSAGES/django.mo000066400000000000000000000337051500406072000271060ustar00rootroot00000000000000L ` Ja   l NR . . U Ugy)      $ .9A"PsFy   $.6<ND (  '. 4XAl *27@zO -M R ^1k     ",<DVfo~  L   "*3 DQXh` " &53ipx &    #7<E M[ajr { 6*]3/cGu i!{!!!?!!" )"7"N"_"p"#"" " """"##$)$ A$ L$Y$h$~$+%@% H%T%g%&,&AH&(&!&!&?& 7' D'jQ''U(Y( l(y((( (((%x) )))) ) * *P*o****(8+a+!p+#+++ ++++ ,,,#/,S, c,!p,!, ,',, - - -:-%. <. I.V.g.z.. .../C20v1!62gX2 2 2292s$3 33734 44%5,5#;5_5p55555"556 6 6,6=6 R6 _6l666637=<0o:Tk8^h7V Ee`jJ,;rxdi+OXU1(5@)%9~}{vQ'*S[Ba! |Cslu3wPKy"znb/gq &#R fp6.4-HMDIA?2ZNFY_c>]GLW\$ m t%(cache_calls)d call in %(time).2fms%(cache_calls)d calls in %(time).2fms%(count)s similar queries.%(num)s query%(num)s queries%(num_receivers)d receiver of %(num_signals)d signals%(num_receivers)d receivers of %(num_signals)d signals%(num_receivers)d receiver of 1 signal%(num_receivers)d receivers of 1 signal%(num_used)s file used%(num_used)s files used%(payload_count)s file%(payload_count)s files%(query_count)d query in %(sql_time).2fms%(query_count)d queries in %(sql_time).2fms%(stime)0.3f msec%(total)0.3f msec%(total_time)0.3f msec%(utime)0.3f msec%(vcsw)d voluntary, %(ivcsw)d involuntary(prefix %(prefix)s)(unknown)ActionActiveAlertsAlerts foundArgumentsAutocommitBackendBrowser timingCPU: %(cum)0.2fms (%(total)0.2fms)CacheCache calls from %(count)d backendCache calls from %(count)d backendsCache hitsCache missesCallCallsCommandsConnection:Context processorContext processorsContext switchesCookiesCountCumTimeData for this panel isn't available anymore. Please reload the page and retry.DatabaseDebug ToolbarDisable for next and successive requestsDuplicated %(dupes)s times.Elapsed timeEmpty setEnable for next and successive requestsErrorExecuted SQLForm contains file input, but does not have the attribute enctype="multipart/form-data".Form with id "{form_id}" contains file input, but does not have the attribute enctype="multipart/form-data".GET dataHeadersHideHide toolbarHistoryIdleIn errorIn transactionInput element references form with id "{form_id}", but the form does not have the attribute enctype="multipart/form-data".Intercept redirectsIsolation level:KeyKeyword argumentsLocationLocation:MethodMilliseconds since navigation start (+length)NameNo GET dataNo POST dataNo SQL queries were recorded during this request.No alerts foundNo cookiesNo originNo session dataNonePOST dataPackagePathPerProfilingQueryRead committedRead uncommittedReceiversRepeatable readRequestRequest VariablesRequest headersResourceResource usageResponse headersSQLSQL explainedSQL profiledSQL queries from %(count)d connectionSQL queries from %(count)d connectionsSQL selectedSerializableSession dataSettingSettingsSettings from %sShow toolbarSignalSignalsSince the WSGI environ inherits the environment of the server, only a significant subset is shown below.Static fileStatic filesStatic file appStatic file appsStatic file pathStatic file pathsStatic filesStatic files (%(num_found)s found, %(num_used)s used)StatusSummarySystem CPU timeTemplateTemplatesTemplate pathTemplate pathsTemplate source:TemplatesTemplates (%(num_templates)s rendered)The Django Debug Toolbar has intercepted a redirect to the above URL for debug viewing purposes. You can click the above link to continue with the redirect as normal.TimeTime (ms)TimelineTiming attributeToggle ThemeToggle contextTotTimeTotal CPU timeTotal callsTotal timeTotal: %0.2fmsTransaction status:TypeURL nameUnknownUser CPU timeValueVariableVersionVersionsView functionView informationWSGI environand %(dupes)s duplicatesincluding %(count)s similarProject-Id-Version: Django Debug Toolbar Report-Msgid-Bugs-To: PO-Revision-Date: 2010-11-30 00:00+0000 Last-Translator: Andrei Satsevich, 2025 Language-Team: Russian (http://app.transifex.com/django-debug-toolbar/django-debug-toolbar/language/ru/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: ru Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3); %(cache_calls)d обращение за %(time).2fms%(cache_calls)d обращения за %(time).2fms%(cache_calls)d обращений за %(time).2fms%(cache_calls)d обращений за %(time).2fms%(count)s похожих запросов.%(num)s запрос%(num)s запроса%(num)s запросов%(num)s запросов%(num_receivers)d получатель %(num_signals)d сигнала(ов)%(num_receivers)d получателя %(num_signals)d сигнала(ов)%(num_receivers)d получателей %(num_signals)d сигнала(ов)%(num_receivers)d получателей %(num_signals)d сигнала(ов)%(num_receivers)d получатель 1 сигнала%(num_receivers)d получателя 1 сигнала%(num_receivers)d получателей 1 сигнала%(num_receivers)d получателей 1 сигнала%(num_used)s файл используется %(num_used)s файла используется%(num_used)s файлов используется%(num_used)s файлов используется%(payload_count)s файл%(payload_count)s файла%(payload_count)s файлов%(payload_count)s файлов%(query_count)d запрос за %(sql_time).2f мс %(query_count)d запросов за %(sql_time).2f мс%(query_count)d запросов за %(sql_time).2f мс%(query_count)d запросов за %(sql_time).2f мс%(stime)0.3f мс%(total)0.3f мс%(total_time)0.3f мс%(utime)0.3f мс%(vcsw)d намеренных, %(ivcsw)d вынужденных(префикс %(prefix)s)(неизвестно)<нет view><недоступно>ДействиеДействиеОповещенияНайдены оповещенияАргументыAutocommitБэкендБраузерное времяCPU: %(cum)0.2fms (%(total)0.2fms)КэшОбращения к кэшу от %(count)d бэкендаОбращения к кэшу от %(count)d бэкендовОбращения к кэшу от %(count)d бэкендовОбращения к кэшу от %(count)d бэкендовCache хитовПромахи кэшаВызовВызовыКомандыСоединение:Контекст процессорКонтекст процессорыКонтекст процессорыКонтекст процессорыПереключений контекстаCookiesКол-воКумулВремДанные этой панели больше недоступны. Пожалуйста, перезагрузите страницу и попробуйте ещё раз.База данныхПанель отладкиОтключить для последующих запросовДублируется %(dupes)s раз.Затраченное времяНичего, ноль строкВключить для последующих запросовОшибкаЗапросФорма содержит файл, но не имеет атрибута enctype="multipart/form-data".Форма с идентификатором "{form_id}" содержит файл, но не имеет атрибута enctype="multipart/form-data".GETЗаголовкиСкрытьСкрыть панельИсторияОжиданиеОшибкаВ транзакцииЭлемент ввода ссылается на форму с id "{form_id}", но форма не имеет атрибута enctype="multipart/form-data".Перехват редиректовУровень изоляции:ЗаголовокИменованные аргументыМестоАдрес:МетодС начала навигации в мс (+продолжительность)НазваниеНет GET данныхНет POST данныхВо время обработки этого HTTP-запроса не было записано ни одного SQL-запроса.Оповещения не найденыНет cookiesБез происхожденияНет данных в сессииНетPOSTПакетПутьЗаВызовПрофилированиеЗапросRead committedRead uncommittedПолучатели сигналаRepeatable readЗапросЗапрос переменныхЗаголовки запросаРесурсПотребление ресурсовЗаголовки ответаSQLSQL ExplainПрофилирование SQLSQL-запросы из %(count)d соединенияSQL-запросы из %(count)d соединенийSQL-запросы из %(count)d соединенийSQL-запросы из %(count)d соединенийВыбранные SQL-запросыSerializableСессияПараметрНастройкиНастройки из %sПоказать панельСигналСигналыТак как WSGI-окружение наследует окружение сервера, ниже отображены лишь те из переменных, которые важны для нужд отладки.Статический файлСтатические файлыСтатические файлыСтатические файлыПриложение, использующее статические файлыПриложения, использующие статические файлыПриложения, использующие статические файлыПриложения, использующие статические файлыПуть к статическим файламПути к статическим файламПути к статическим файламПути к статическим файламСтатические файлыСтатические файлы (найдено %(num_found)s, используется %(num_used)s)СтатусСводкаSystem CPU timeШаблонШаблоныШаблоныШаблоныПуть к шаблонамПути к шаблонамПути к шаблонамПути к шаблонамИсточник шаблона:ШаблоныШаблоны (обработано %(num_templates)s)Django Debug Toolbar в перехватил редирект на адрес, указанный выше. Вы можете нажать на ссылку, чтобы выполнить переход самостоятельно.ВремяВремя (мс)Временная диаграммаСобытиеПереключатель темыКонтекстИтогВремяTotal CPU timeВсего вызововОбщее времяИтого: %0.2fmsСтатус транзакции:ТипURL NameНеизвестноUser CPU timeЗначениеПеременнаяВерсияВерсииView функцияViewWSGI-окружениеи %(dupes)s дубликатывключая %(count)s похожийpython-django-debug-toolbar-5.2.0/debug_toolbar/locale/ru/LC_MESSAGES/django.po000066400000000000000000000552651500406072000271160ustar00rootroot00000000000000# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # # Translators: # Andrei Satsevich, 2025 # Dmitri Bogomolov <4glitch@gmail.com>, 2014 # Ilya Baryshev , 2013 # Mikhail Korobov, 2009 # Алексей Борискин , 2013,2015,2024 msgid "" msgstr "" "Project-Id-Version: Django Debug Toolbar\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2024-08-06 07:12-0500\n" "PO-Revision-Date: 2010-11-30 00:00+0000\n" "Last-Translator: Andrei Satsevich, 2025\n" "Language-Team: Russian (http://app.transifex.com/django-debug-toolbar/django-debug-toolbar/language/ru/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: ru\n" "Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);\n" #: apps.py:18 msgid "Debug Toolbar" msgstr "Панель отладки" #: panels/alerts.py:67 #, python-brace-format msgid "" "Form with id \"{form_id}\" contains file input, but does not have the " "attribute enctype=\"multipart/form-data\"." msgstr "Форма с идентификатором \"{form_id}\" содержит файл, но не имеет атрибута enctype=\"multipart/form-data\"." #: panels/alerts.py:70 msgid "" "Form contains file input, but does not have the attribute " "enctype=\"multipart/form-data\"." msgstr "Форма содержит файл, но не имеет атрибута enctype=\"multipart/form-data\"." #: panels/alerts.py:73 #, python-brace-format msgid "" "Input element references form with id \"{form_id}\", but the form does not " "have the attribute enctype=\"multipart/form-data\"." msgstr "Элемент ввода ссылается на форму с id \"{form_id}\", но форма не имеет атрибута enctype=\"multipart/form-data\"." #: panels/alerts.py:77 msgid "Alerts" msgstr "Оповещения" #: panels/cache.py:168 msgid "Cache" msgstr "Кэш" #: panels/cache.py:174 #, python-format msgid "%(cache_calls)d call in %(time).2fms" msgid_plural "%(cache_calls)d calls in %(time).2fms" msgstr[0] "%(cache_calls)d обращение за %(time).2fms" msgstr[1] "%(cache_calls)d обращения за %(time).2fms" msgstr[2] "%(cache_calls)d обращений за %(time).2fms" msgstr[3] "%(cache_calls)d обращений за %(time).2fms" #: panels/cache.py:183 #, python-format msgid "Cache calls from %(count)d backend" msgid_plural "Cache calls from %(count)d backends" msgstr[0] "Обращения к кэшу от %(count)d бэкенда" msgstr[1] "Обращения к кэшу от %(count)d бэкендов" msgstr[2] "Обращения к кэшу от %(count)d бэкендов" msgstr[3] "Обращения к кэшу от %(count)d бэкендов" #: panels/headers.py:31 msgid "Headers" msgstr "Заголовки" #: panels/history/panel.py:19 panels/history/panel.py:20 msgid "History" msgstr "История" #: panels/profiling.py:140 msgid "Profiling" msgstr "Профилирование" #: panels/redirects.py:17 msgid "Intercept redirects" msgstr "Перехват редиректов" #: panels/request.py:16 msgid "Request" msgstr "Запрос" #: panels/request.py:38 msgid "" msgstr "<нет view>" #: panels/request.py:55 msgid "" msgstr "<недоступно>" #: panels/settings.py:17 msgid "Settings" msgstr "Настройки" #: panels/settings.py:20 #, python-format msgid "Settings from %s" msgstr "Настройки из %s" #: panels/signals.py:57 #, python-format msgid "%(num_receivers)d receiver of 1 signal" msgid_plural "%(num_receivers)d receivers of 1 signal" msgstr[0] "%(num_receivers)d получатель 1 сигнала" msgstr[1] "%(num_receivers)d получателя 1 сигнала" msgstr[2] "%(num_receivers)d получателей 1 сигнала" msgstr[3] "%(num_receivers)d получателей 1 сигнала" #: panels/signals.py:62 #, python-format msgid "%(num_receivers)d receiver of %(num_signals)d signals" msgid_plural "%(num_receivers)d receivers of %(num_signals)d signals" msgstr[0] "%(num_receivers)d получатель %(num_signals)d сигнала(ов)" msgstr[1] "%(num_receivers)d получателя %(num_signals)d сигнала(ов)" msgstr[2] "%(num_receivers)d получателей %(num_signals)d сигнала(ов)" msgstr[3] "%(num_receivers)d получателей %(num_signals)d сигнала(ов)" #: panels/signals.py:67 msgid "Signals" msgstr "Сигналы" #: panels/sql/panel.py:30 panels/sql/panel.py:41 msgid "Read uncommitted" msgstr "Read uncommitted" #: panels/sql/panel.py:31 panels/sql/panel.py:43 msgid "Read committed" msgstr "Read committed" #: panels/sql/panel.py:32 panels/sql/panel.py:45 msgid "Repeatable read" msgstr "Repeatable read" #: panels/sql/panel.py:33 panels/sql/panel.py:47 msgid "Serializable" msgstr "Serializable" #: panels/sql/panel.py:39 msgid "Autocommit" msgstr "Autocommit" #: panels/sql/panel.py:61 panels/sql/panel.py:71 msgid "Idle" msgstr "Ожидание" #: panels/sql/panel.py:62 panels/sql/panel.py:72 msgid "Active" msgstr "Действие" #: panels/sql/panel.py:63 panels/sql/panel.py:73 msgid "In transaction" msgstr "В транзакции" #: panels/sql/panel.py:64 panels/sql/panel.py:74 msgid "In error" msgstr "Ошибка" #: panels/sql/panel.py:65 panels/sql/panel.py:75 msgid "Unknown" msgstr "Неизвестно" #: panels/sql/panel.py:162 msgid "SQL" msgstr "SQL" #: panels/sql/panel.py:168 #, python-format msgid "%(query_count)d query in %(sql_time).2fms" msgid_plural "%(query_count)d queries in %(sql_time).2fms" msgstr[0] "%(query_count)d запрос за %(sql_time).2f мс " msgstr[1] "%(query_count)d запросов за %(sql_time).2f мс" msgstr[2] "%(query_count)d запросов за %(sql_time).2f мс" msgstr[3] "%(query_count)d запросов за %(sql_time).2f мс" #: panels/sql/panel.py:180 #, python-format msgid "SQL queries from %(count)d connection" msgid_plural "SQL queries from %(count)d connections" msgstr[0] "SQL-запросы из %(count)d соединения" msgstr[1] "SQL-запросы из %(count)d соединений" msgstr[2] "SQL-запросы из %(count)d соединений" msgstr[3] "SQL-запросы из %(count)d соединений" #: panels/staticfiles.py:82 #, python-format msgid "Static files (%(num_found)s found, %(num_used)s used)" msgstr "Статические файлы (найдено %(num_found)s, используется %(num_used)s)" #: panels/staticfiles.py:103 msgid "Static files" msgstr "Статические файлы" #: panels/staticfiles.py:109 #, python-format msgid "%(num_used)s file used" msgid_plural "%(num_used)s files used" msgstr[0] "%(num_used)s файл используется" msgstr[1] " %(num_used)s файла используется" msgstr[2] "%(num_used)s файлов используется" msgstr[3] "%(num_used)s файлов используется" #: panels/templates/panel.py:101 msgid "Templates" msgstr "Шаблоны" #: panels/templates/panel.py:106 #, python-format msgid "Templates (%(num_templates)s rendered)" msgstr "Шаблоны (обработано %(num_templates)s)" #: panels/templates/panel.py:195 msgid "No origin" msgstr "Без происхождения" #: panels/timer.py:27 #, python-format msgid "CPU: %(cum)0.2fms (%(total)0.2fms)" msgstr "CPU: %(cum)0.2fms (%(total)0.2fms)" #: panels/timer.py:32 #, python-format msgid "Total: %0.2fms" msgstr "Итого: %0.2fms" #: panels/timer.py:38 templates/debug_toolbar/panels/history.html:9 #: templates/debug_toolbar/panels/sql_explain.html:11 #: templates/debug_toolbar/panels/sql_profile.html:12 #: templates/debug_toolbar/panels/sql_select.html:11 msgid "Time" msgstr "Время" #: panels/timer.py:46 msgid "User CPU time" msgstr "User CPU time" #: panels/timer.py:46 #, python-format msgid "%(utime)0.3f msec" msgstr "%(utime)0.3f мс" #: panels/timer.py:47 msgid "System CPU time" msgstr "System CPU time" #: panels/timer.py:47 #, python-format msgid "%(stime)0.3f msec" msgstr "%(stime)0.3f мс" #: panels/timer.py:48 msgid "Total CPU time" msgstr "Total CPU time" #: panels/timer.py:48 #, python-format msgid "%(total)0.3f msec" msgstr "%(total)0.3f мс" #: panels/timer.py:49 msgid "Elapsed time" msgstr "Затраченное время" #: panels/timer.py:49 #, python-format msgid "%(total_time)0.3f msec" msgstr "%(total_time)0.3f мс" #: panels/timer.py:51 msgid "Context switches" msgstr "Переключений контекста" #: panels/timer.py:52 #, python-format msgid "%(vcsw)d voluntary, %(ivcsw)d involuntary" msgstr "%(vcsw)d намеренных, %(ivcsw)d вынужденных" #: panels/versions.py:19 msgid "Versions" msgstr "Версии" #: templates/debug_toolbar/base.html:23 msgid "Hide toolbar" msgstr "Скрыть панель" #: templates/debug_toolbar/base.html:23 msgid "Hide" msgstr "Скрыть" #: templates/debug_toolbar/base.html:25 templates/debug_toolbar/base.html:26 msgid "Toggle Theme" msgstr "Переключатель темы" #: templates/debug_toolbar/base.html:35 msgid "Show toolbar" msgstr "Показать панель" #: templates/debug_toolbar/includes/panel_button.html:4 msgid "Disable for next and successive requests" msgstr "Отключить для последующих запросов" #: templates/debug_toolbar/includes/panel_button.html:4 msgid "Enable for next and successive requests" msgstr "Включить для последующих запросов" #: templates/debug_toolbar/panels/alerts.html:4 msgid "Alerts found" msgstr "Найдены оповещения" #: templates/debug_toolbar/panels/alerts.html:11 msgid "No alerts found" msgstr "Оповещения не найдены" #: templates/debug_toolbar/panels/cache.html:2 msgid "Summary" msgstr "Сводка" #: templates/debug_toolbar/panels/cache.html:6 msgid "Total calls" msgstr "Всего вызовов" #: templates/debug_toolbar/panels/cache.html:7 msgid "Total time" msgstr "Общее время" #: templates/debug_toolbar/panels/cache.html:8 msgid "Cache hits" msgstr "Cache хитов" #: templates/debug_toolbar/panels/cache.html:9 msgid "Cache misses" msgstr "Промахи кэша" #: templates/debug_toolbar/panels/cache.html:21 msgid "Commands" msgstr "Команды" #: templates/debug_toolbar/panels/cache.html:39 msgid "Calls" msgstr "Вызовы" #: templates/debug_toolbar/panels/cache.html:43 #: templates/debug_toolbar/panels/sql.html:36 msgid "Time (ms)" msgstr "Время (мс)" #: templates/debug_toolbar/panels/cache.html:44 msgid "Type" msgstr "Тип" #: templates/debug_toolbar/panels/cache.html:45 #: templates/debug_toolbar/panels/request.html:8 msgid "Arguments" msgstr "Аргументы" #: templates/debug_toolbar/panels/cache.html:46 #: templates/debug_toolbar/panels/request.html:9 msgid "Keyword arguments" msgstr "Именованные аргументы" #: templates/debug_toolbar/panels/cache.html:47 msgid "Backend" msgstr "Бэкенд" #: templates/debug_toolbar/panels/headers.html:3 msgid "Request headers" msgstr "Заголовки запроса" #: templates/debug_toolbar/panels/headers.html:8 #: templates/debug_toolbar/panels/headers.html:27 #: templates/debug_toolbar/panels/headers.html:48 msgid "Key" msgstr "Заголовок" #: templates/debug_toolbar/panels/headers.html:9 #: templates/debug_toolbar/panels/headers.html:28 #: templates/debug_toolbar/panels/headers.html:49 #: templates/debug_toolbar/panels/history_tr.html:23 #: templates/debug_toolbar/panels/request_variables.html:12 #: templates/debug_toolbar/panels/settings.html:6 #: templates/debug_toolbar/panels/timer.html:11 msgid "Value" msgstr "Значение" #: templates/debug_toolbar/panels/headers.html:22 msgid "Response headers" msgstr "Заголовки ответа" #: templates/debug_toolbar/panels/headers.html:41 msgid "WSGI environ" msgstr "WSGI-окружение" #: templates/debug_toolbar/panels/headers.html:43 msgid "" "Since the WSGI environ inherits the environment of the server, only a " "significant subset is shown below." msgstr "Так как WSGI-окружение наследует окружение сервера, ниже отображены лишь те из переменных, которые важны для нужд отладки." #: templates/debug_toolbar/panels/history.html:10 msgid "Method" msgstr "Метод" #: templates/debug_toolbar/panels/history.html:11 #: templates/debug_toolbar/panels/staticfiles.html:43 msgid "Path" msgstr "Путь" #: templates/debug_toolbar/panels/history.html:12 msgid "Request Variables" msgstr "Запрос переменных" #: templates/debug_toolbar/panels/history.html:13 msgid "Status" msgstr "Статус" #: templates/debug_toolbar/panels/history.html:14 #: templates/debug_toolbar/panels/sql.html:37 msgid "Action" msgstr "Действие" #: templates/debug_toolbar/panels/history_tr.html:22 #: templates/debug_toolbar/panels/request_variables.html:11 msgid "Variable" msgstr "Переменная" #: templates/debug_toolbar/panels/profiling.html:5 msgid "Call" msgstr "Вызов" #: templates/debug_toolbar/panels/profiling.html:6 msgid "CumTime" msgstr "КумулВрем" #: templates/debug_toolbar/panels/profiling.html:7 #: templates/debug_toolbar/panels/profiling.html:9 msgid "Per" msgstr "ЗаВызов" #: templates/debug_toolbar/panels/profiling.html:8 msgid "TotTime" msgstr "ИтогВремя" #: templates/debug_toolbar/panels/profiling.html:10 msgid "Count" msgstr "Кол-во" #: templates/debug_toolbar/panels/request.html:3 msgid "View information" msgstr "View" #: templates/debug_toolbar/panels/request.html:7 msgid "View function" msgstr "View функция" #: templates/debug_toolbar/panels/request.html:10 msgid "URL name" msgstr "URL Name" #: templates/debug_toolbar/panels/request.html:24 msgid "Cookies" msgstr "Cookies" #: templates/debug_toolbar/panels/request.html:27 msgid "No cookies" msgstr "Нет cookies" #: templates/debug_toolbar/panels/request.html:31 msgid "Session data" msgstr "Сессия" #: templates/debug_toolbar/panels/request.html:34 msgid "No session data" msgstr "Нет данных в сессии" #: templates/debug_toolbar/panels/request.html:38 msgid "GET data" msgstr "GET" #: templates/debug_toolbar/panels/request.html:41 msgid "No GET data" msgstr "Нет GET данных" #: templates/debug_toolbar/panels/request.html:45 msgid "POST data" msgstr "POST" #: templates/debug_toolbar/panels/request.html:48 msgid "No POST data" msgstr "Нет POST данных" #: templates/debug_toolbar/panels/settings.html:5 msgid "Setting" msgstr "Параметр" #: templates/debug_toolbar/panels/signals.html:5 msgid "Signal" msgstr "Сигнал" #: templates/debug_toolbar/panels/signals.html:6 msgid "Receivers" msgstr "Получатели сигнала" #: templates/debug_toolbar/panels/sql.html:6 #, python-format msgid "%(num)s query" msgid_plural "%(num)s queries" msgstr[0] "%(num)s запрос" msgstr[1] "%(num)s запроса" msgstr[2] "%(num)s запросов" msgstr[3] "%(num)s запросов" #: templates/debug_toolbar/panels/sql.html:8 #, python-format msgid "" "including %(count)s similar" msgstr "включая %(count)s похожий" #: templates/debug_toolbar/panels/sql.html:12 #, python-format msgid "" "and %(dupes)s duplicates" msgstr "и %(dupes)s дубликаты" #: templates/debug_toolbar/panels/sql.html:34 msgid "Query" msgstr "Запрос" #: templates/debug_toolbar/panels/sql.html:35 #: templates/debug_toolbar/panels/timer.html:36 msgid "Timeline" msgstr "Временная диаграмма" #: templates/debug_toolbar/panels/sql.html:52 #, python-format msgid "%(count)s similar queries." msgstr "%(count)s похожих запросов." #: templates/debug_toolbar/panels/sql.html:58 #, python-format msgid "Duplicated %(dupes)s times." msgstr "Дублируется %(dupes)s раз." #: templates/debug_toolbar/panels/sql.html:95 msgid "Connection:" msgstr "Соединение:" #: templates/debug_toolbar/panels/sql.html:97 msgid "Isolation level:" msgstr "Уровень изоляции:" #: templates/debug_toolbar/panels/sql.html:100 msgid "Transaction status:" msgstr "Статус транзакции:" #: templates/debug_toolbar/panels/sql.html:114 msgid "(unknown)" msgstr "(неизвестно)" #: templates/debug_toolbar/panels/sql.html:123 msgid "No SQL queries were recorded during this request." msgstr "Во время обработки этого HTTP-запроса не было записано ни одного SQL-запроса." #: templates/debug_toolbar/panels/sql_explain.html:4 msgid "SQL explained" msgstr "SQL Explain" #: templates/debug_toolbar/panels/sql_explain.html:9 #: templates/debug_toolbar/panels/sql_profile.html:10 #: templates/debug_toolbar/panels/sql_select.html:9 msgid "Executed SQL" msgstr "Запрос" #: templates/debug_toolbar/panels/sql_explain.html:13 #: templates/debug_toolbar/panels/sql_profile.html:14 #: templates/debug_toolbar/panels/sql_select.html:13 msgid "Database" msgstr "База данных" #: templates/debug_toolbar/panels/sql_profile.html:4 msgid "SQL profiled" msgstr "Профилирование SQL" #: templates/debug_toolbar/panels/sql_profile.html:37 msgid "Error" msgstr "Ошибка" #: templates/debug_toolbar/panels/sql_select.html:4 msgid "SQL selected" msgstr "Выбранные SQL-запросы" #: templates/debug_toolbar/panels/sql_select.html:36 msgid "Empty set" msgstr "Ничего, ноль строк" #: templates/debug_toolbar/panels/staticfiles.html:3 msgid "Static file path" msgid_plural "Static file paths" msgstr[0] "Путь к статическим файлам" msgstr[1] "Пути к статическим файлам" msgstr[2] "Пути к статическим файлам" msgstr[3] "Пути к статическим файлам" #: templates/debug_toolbar/panels/staticfiles.html:7 #, python-format msgid "(prefix %(prefix)s)" msgstr "(префикс %(prefix)s)" #: templates/debug_toolbar/panels/staticfiles.html:11 #: templates/debug_toolbar/panels/staticfiles.html:22 #: templates/debug_toolbar/panels/staticfiles.html:34 #: templates/debug_toolbar/panels/templates.html:10 #: templates/debug_toolbar/panels/templates.html:30 #: templates/debug_toolbar/panels/templates.html:47 msgid "None" msgstr "Нет" #: templates/debug_toolbar/panels/staticfiles.html:14 msgid "Static file app" msgid_plural "Static file apps" msgstr[0] "Приложение, использующее статические файлы" msgstr[1] "Приложения, использующие статические файлы" msgstr[2] "Приложения, использующие статические файлы" msgstr[3] "Приложения, использующие статические файлы" #: templates/debug_toolbar/panels/staticfiles.html:25 msgid "Static file" msgid_plural "Static files" msgstr[0] "Статический файл" msgstr[1] "Статические файлы" msgstr[2] "Статические файлы" msgstr[3] "Статические файлы" #: templates/debug_toolbar/panels/staticfiles.html:39 #, python-format msgid "%(payload_count)s file" msgid_plural "%(payload_count)s files" msgstr[0] "%(payload_count)s файл" msgstr[1] "%(payload_count)s файла" msgstr[2] "%(payload_count)s файлов" msgstr[3] "%(payload_count)s файлов" #: templates/debug_toolbar/panels/staticfiles.html:44 msgid "Location" msgstr "Место" #: templates/debug_toolbar/panels/template_source.html:4 msgid "Template source:" msgstr "Источник шаблона:" #: templates/debug_toolbar/panels/templates.html:2 msgid "Template path" msgid_plural "Template paths" msgstr[0] "Путь к шаблонам" msgstr[1] "Пути к шаблонам" msgstr[2] "Пути к шаблонам" msgstr[3] "Пути к шаблонам" #: templates/debug_toolbar/panels/templates.html:13 msgid "Template" msgid_plural "Templates" msgstr[0] "Шаблон" msgstr[1] "Шаблоны" msgstr[2] "Шаблоны" msgstr[3] "Шаблоны" #: templates/debug_toolbar/panels/templates.html:22 #: templates/debug_toolbar/panels/templates.html:40 msgid "Toggle context" msgstr "Контекст" #: templates/debug_toolbar/panels/templates.html:33 msgid "Context processor" msgid_plural "Context processors" msgstr[0] "Контекст процессор" msgstr[1] "Контекст процессоры" msgstr[2] "Контекст процессоры" msgstr[3] "Контекст процессоры" #: templates/debug_toolbar/panels/timer.html:2 msgid "Resource usage" msgstr "Потребление ресурсов" #: templates/debug_toolbar/panels/timer.html:10 msgid "Resource" msgstr "Ресурс" #: templates/debug_toolbar/panels/timer.html:26 msgid "Browser timing" msgstr "Браузерное время" #: templates/debug_toolbar/panels/timer.html:35 msgid "Timing attribute" msgstr "Событие" #: templates/debug_toolbar/panels/timer.html:37 msgid "Milliseconds since navigation start (+length)" msgstr "С начала навигации в мс (+продолжительность)" #: templates/debug_toolbar/panels/versions.html:10 msgid "Package" msgstr "Пакет" #: templates/debug_toolbar/panels/versions.html:11 msgid "Name" msgstr "Название" #: templates/debug_toolbar/panels/versions.html:12 msgid "Version" msgstr "Версия" #: templates/debug_toolbar/redirect.html:10 msgid "Location:" msgstr "Адрес:" #: templates/debug_toolbar/redirect.html:12 msgid "" "The Django Debug Toolbar has intercepted a redirect to the above URL for " "debug viewing purposes. You can click the above link to continue with the " "redirect as normal." msgstr "Django Debug Toolbar в перехватил редирект на адрес, указанный выше. Вы можете нажать на ссылку, чтобы выполнить переход самостоятельно." #: views.py:16 msgid "" "Data for this panel isn't available anymore. Please reload the page and " "retry." msgstr "Данные этой панели больше недоступны. Пожалуйста, перезагрузите страницу и попробуйте ещё раз." python-django-debug-toolbar-5.2.0/debug_toolbar/locale/sk/000077500000000000000000000000001500406072000235015ustar00rootroot00000000000000python-django-debug-toolbar-5.2.0/debug_toolbar/locale/sk/LC_MESSAGES/000077500000000000000000000000001500406072000252665ustar00rootroot00000000000000python-django-debug-toolbar-5.2.0/debug_toolbar/locale/sk/LC_MESSAGES/django.mo000066400000000000000000000217301500406072000270700ustar00rootroot00000000000000} J  l N_ . .   0 G )Y      "  F c n {   $     N 6(? h u'  #5 >-Hv { 1     )3CK[ds      h `" 5/ @&Jq '0APX g s~   =Oi=Oax3    '"9\b   )W5d 1&X g0t     %9AW^.fD+ 3>DGPVe v   (2 A LWrzfon  G 8!A!'V!G~!! !+!"" " """"## $#2#C#T#X# a#l## ### ###ogV"6aeF5X?/ l !Bc +m8AI=N^j)`hT[WE,<kL2K Q'b -Hu|if(rw\tCDZ4GPRYS{>7x10O@J.pUv9%3;$]:&#q_nM}z s*yd%(cache_calls)d call in %(time).2fms%(cache_calls)d calls in %(time).2fms%(num)s query%(num)s queries%(num_receivers)d receiver of %(num_signals)d signals%(num_receivers)d receivers of %(num_signals)d signals%(num_receivers)d receiver of 1 signal%(num_receivers)d receivers of 1 signal%(num_used)s file used%(num_used)s files used%(payload_count)s file%(payload_count)s files%(stime)0.3f msec%(total)0.3f msec%(total_time)0.3f msec%(utime)0.3f msec%(vcsw)d voluntary, %(ivcsw)d involuntary(prefix %(prefix)s)(unknown)ActionActiveArgumentsAutocommitBackendBrowser timingCPU: %(cum)0.2fms (%(total)0.2fms)CacheCache calls from %(count)d backendCache calls from %(count)d backendsCache hitsCache missesCallCallsCommandsConnection:Context processorContext processorsContext switchesCookiesCountCumTimeData for this panel isn't available anymore. Please reload the page and retry.DatabaseDisable for next and successive requestsElapsed timeEmpty setEnable for next and successive requestsErrorExecuted SQLGET dataHeadersHideHide toolbarIdleIn errorIn transactionIntercept redirectsIsolation level:KeyKeyword argumentsLocationLocation:Milliseconds since navigation start (+length)NameNo GET dataNo POST dataNo SQL queries were recorded during this request.No cookiesNo session dataNonePOST dataPathPerProfilingQueryRead committedRead uncommittedReceiversRepeatable readRequestRequest headersResourceResource usageResponse headersSQLSQL explainedSQL profiledSQL selectedSerializableSession dataSettingSettingsShow toolbarSignalSignalsSince the WSGI environ inherits the environment of the server, only a significant subset is shown below.Static file appStatic file appsStatic file pathStatic file pathsStatic filesStatic files (%(num_found)s found, %(num_used)s used)SummarySystem CPU timeTemplateTemplatesTemplate pathTemplate pathsTemplate source:TemplatesTemplates (%(num_templates)s rendered)The Django Debug Toolbar has intercepted a redirect to the above URL for debug viewing purposes. You can click the above link to continue with the redirect as normal.TimeTime (ms)TimelineTiming attributeToggle contextTotTimeTotal CPU timeTotal callsTotal timeTotal: %0.2fmsTransaction status:TypeURL nameUnknownUser CPU timeValueVariableVersionVersionsView functionView informationWSGI environProject-Id-Version: Django Debug Toolbar Report-Msgid-Bugs-To: PO-Revision-Date: 2010-11-30 00:00+0000 Last-Translator: 18f25ad6fa9930fc67cb11aca9d16a27, 2013 Language-Team: Slovak (http://app.transifex.com/django-debug-toolbar/django-debug-toolbar/language/sk/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: sk Plural-Forms: nplurals=4; plural=(n % 1 == 0 && n == 1 ? 0 : n % 1 == 0 && n >= 2 && n <= 4 ? 1 : n % 1 != 0 ? 2: 3); %(cache_calls)d volanie za %(time).2fms%(cache_calls)d volaní za %(time).2fms%(cache_calls)d volaní za %(time).2fms%(cache_calls)d volaní za %(time).2fms%(num)s dopyt%(num)s dopytov%(num)s dopytov%(num)s dopytov%(num_receivers)d príjemca %(num_signals)d signálov%(num_receivers)d príjemcov %(num_signals)d signálov%(num_receivers)d príjemcov %(num_signals)d signálov%(num_receivers)d príjemcov %(num_signals)d signálov%(num_receivers)d príjemca 1 signálu%(num_receivers)d príjemcov 1 signálu%(num_receivers)d príjemcov 1 signálu%(num_receivers)d príjemcov 1 signálu%(num_used)s použitý súbor%(num_used)s použitých súborov%(num_used)s použitých súborov%(num_used)s použitých súborov%(payload_count)s súbor%(payload_count)s súborov%(payload_count)s súborov%(payload_count)s súborov%(stime)0.3f msek%(total)0.3f msek%(total_time)0.3f msek%(utime)0.3f msek%(vcsw)d dobrovoľných, %(ivcsw)d nedobrovoľných(prefix %(prefix)s)(neznámy)AkciaAkciaArgumentyAutocommitBackendČas prehliadačaCPU: %(cum)0.2fms (%(total)0.2fms)CacheCache volania z %(count)d backenduCache volania z %(count)d backendovCache volania z %(count)d backendovCache volania z %(count)d backendovVolaní cacheVynechania cacheVolanieVolaniaPríkazyPripojenie:Spracovateľ kontextuSpracovateľ kontextuSpracovateľ kontextuSpracovateľ kontextuPrepnutí kontextuCookiesPočetCumTimeDáta pre tento panel už nie sú k dispozícii. Načítajte si prosím stránku a skúste to znova.DatabázaZakázať pre ďalšie a nasledujúce požiadavkyUplynutý časPrázdny radPovoliť pre ďalšie a nasledujúce požiadavkyChybaVykonané SQLGET dátaHlavičkySkryťSkryť panel nástrojovNečinnýChybaStav transakcie:Zachytiť presmerovaniaÚroveň izolácie:KľúčKľúčové argumentyPolohaPoloha:Milisekúnd od spustenia navigácie (+dĺžka)MenoŽiadne GET dátaŽiadne POST dátaV priebehu tejto požiadavky neboli zaznamenané žiadne SQL dopyty.Žiadne cookiesŽiadne dáta relácieŽiadnyPOST dátaCestaZaAnalýzaDopytRead committedRead uncommittedPríjemcoviaOpakovateľné čítaniePožiadavkaHlavičky požiadavkyProstriedokVyužitie prostriedkovHlavičky odpovedeSQLSQL vysvetlenéSQL profilovanéSQL označenéPremennáDáta relácieNastavenieNastaveniaZobraziť panel nástrojovSignálSignályKeďže WSGI prostredie dedí z prostredia servera, je nižšie zobrazená iba významná podmnožina.Aplikácia pre statické súboryAplikácie pre statické súboryAplikácie pre statické súboryAplikácie pre statické súboryCesta k statickému súboruCesty k statickým súboromCesty k statickým súboromCesty k statickým súboromStatické súboryStatické súbory (%(num_found)s nájdených, %(num_used)s použitých)ZhrnutieSystémový čas CPUŠablónaŠablónaŠablónaŠablónaCesta k šablóneCesta k šablóneCesta k šablóneCesta k šablóneZdrojový kód šablóny:ŠablónyŠablóny (%(num_templates)s spracovaných)Django Debug Toolbar zachytil presmerovanie na vyššie uvedenú URL pre účely ladenia. Pre normálne presmerovanie môžete kliknúť na vyššie uvedený odkaz.ČasČas (ms)Časová osČasový atribútPrepnúť kontextTotTimeCelkový čas CPUCelkovo volaníCelkový časCelkovo: %0.2fmsStav transakcie:TypURL meno(neznámy)Užívateľský čas CPUHodnotaPremennáVerziaVerzieView funkciaZobraziť informácieWSGI prostrediepython-django-debug-toolbar-5.2.0/debug_toolbar/locale/sk/LC_MESSAGES/django.po000066400000000000000000000461231500406072000270760ustar00rootroot00000000000000# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # # Translators: # 18f25ad6fa9930fc67cb11aca9d16a27, 2012 # 18f25ad6fa9930fc67cb11aca9d16a27, 2013 # Rastislav Kober , 2012 msgid "" msgstr "" "Project-Id-Version: Django Debug Toolbar\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2024-08-06 07:12-0500\n" "PO-Revision-Date: 2010-11-30 00:00+0000\n" "Last-Translator: 18f25ad6fa9930fc67cb11aca9d16a27, 2013\n" "Language-Team: Slovak (http://app.transifex.com/django-debug-toolbar/django-debug-toolbar/language/sk/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: sk\n" "Plural-Forms: nplurals=4; plural=(n % 1 == 0 && n == 1 ? 0 : n % 1 == 0 && n >= 2 && n <= 4 ? 1 : n % 1 != 0 ? 2: 3);\n" #: apps.py:18 msgid "Debug Toolbar" msgstr "" #: panels/alerts.py:67 #, python-brace-format msgid "" "Form with id \"{form_id}\" contains file input, but does not have the " "attribute enctype=\"multipart/form-data\"." msgstr "" #: panels/alerts.py:70 msgid "" "Form contains file input, but does not have the attribute " "enctype=\"multipart/form-data\"." msgstr "" #: panels/alerts.py:73 #, python-brace-format msgid "" "Input element references form with id \"{form_id}\", but the form does not " "have the attribute enctype=\"multipart/form-data\"." msgstr "" #: panels/alerts.py:77 msgid "Alerts" msgstr "" #: panels/cache.py:168 msgid "Cache" msgstr "Cache" #: panels/cache.py:174 #, python-format msgid "%(cache_calls)d call in %(time).2fms" msgid_plural "%(cache_calls)d calls in %(time).2fms" msgstr[0] "%(cache_calls)d volanie za %(time).2fms" msgstr[1] "%(cache_calls)d volaní za %(time).2fms" msgstr[2] "%(cache_calls)d volaní za %(time).2fms" msgstr[3] "%(cache_calls)d volaní za %(time).2fms" #: panels/cache.py:183 #, python-format msgid "Cache calls from %(count)d backend" msgid_plural "Cache calls from %(count)d backends" msgstr[0] "Cache volania z %(count)d backendu" msgstr[1] "Cache volania z %(count)d backendov" msgstr[2] "Cache volania z %(count)d backendov" msgstr[3] "Cache volania z %(count)d backendov" #: panels/headers.py:31 msgid "Headers" msgstr "Hlavičky" #: panels/history/panel.py:19 panels/history/panel.py:20 msgid "History" msgstr "" #: panels/profiling.py:140 msgid "Profiling" msgstr "Analýza" #: panels/redirects.py:17 msgid "Intercept redirects" msgstr "Zachytiť presmerovania" #: panels/request.py:16 msgid "Request" msgstr "Požiadavka" #: panels/request.py:38 msgid "" msgstr "" #: panels/request.py:55 msgid "" msgstr "" #: panels/settings.py:17 msgid "Settings" msgstr "Nastavenia" #: panels/settings.py:20 #, python-format msgid "Settings from %s" msgstr "" #: panels/signals.py:57 #, python-format msgid "%(num_receivers)d receiver of 1 signal" msgid_plural "%(num_receivers)d receivers of 1 signal" msgstr[0] "%(num_receivers)d príjemca 1 signálu" msgstr[1] "%(num_receivers)d príjemcov 1 signálu" msgstr[2] "%(num_receivers)d príjemcov 1 signálu" msgstr[3] "%(num_receivers)d príjemcov 1 signálu" #: panels/signals.py:62 #, python-format msgid "%(num_receivers)d receiver of %(num_signals)d signals" msgid_plural "%(num_receivers)d receivers of %(num_signals)d signals" msgstr[0] "%(num_receivers)d príjemca %(num_signals)d signálov" msgstr[1] "%(num_receivers)d príjemcov %(num_signals)d signálov" msgstr[2] "%(num_receivers)d príjemcov %(num_signals)d signálov" msgstr[3] "%(num_receivers)d príjemcov %(num_signals)d signálov" #: panels/signals.py:67 msgid "Signals" msgstr "Signály" #: panels/sql/panel.py:30 panels/sql/panel.py:41 msgid "Read uncommitted" msgstr "Read uncommitted" #: panels/sql/panel.py:31 panels/sql/panel.py:43 msgid "Read committed" msgstr "Read committed" #: panels/sql/panel.py:32 panels/sql/panel.py:45 msgid "Repeatable read" msgstr "Opakovateľné čítanie" #: panels/sql/panel.py:33 panels/sql/panel.py:47 msgid "Serializable" msgstr "Premenná" #: panels/sql/panel.py:39 msgid "Autocommit" msgstr "Autocommit" #: panels/sql/panel.py:61 panels/sql/panel.py:71 msgid "Idle" msgstr "Nečinný" #: panels/sql/panel.py:62 panels/sql/panel.py:72 msgid "Active" msgstr "Akcia" #: panels/sql/panel.py:63 panels/sql/panel.py:73 msgid "In transaction" msgstr "Stav transakcie:" #: panels/sql/panel.py:64 panels/sql/panel.py:74 msgid "In error" msgstr "Chyba" #: panels/sql/panel.py:65 panels/sql/panel.py:75 msgid "Unknown" msgstr "(neznámy)" #: panels/sql/panel.py:162 msgid "SQL" msgstr "SQL" #: panels/sql/panel.py:168 #, python-format msgid "%(query_count)d query in %(sql_time).2fms" msgid_plural "%(query_count)d queries in %(sql_time).2fms" msgstr[0] "" msgstr[1] "" msgstr[2] "" msgstr[3] "" #: panels/sql/panel.py:180 #, python-format msgid "SQL queries from %(count)d connection" msgid_plural "SQL queries from %(count)d connections" msgstr[0] "" msgstr[1] "" msgstr[2] "" msgstr[3] "" #: panels/staticfiles.py:82 #, python-format msgid "Static files (%(num_found)s found, %(num_used)s used)" msgstr "Statické súbory (%(num_found)s nájdených, %(num_used)s použitých)" #: panels/staticfiles.py:103 msgid "Static files" msgstr "Statické súbory" #: panels/staticfiles.py:109 #, python-format msgid "%(num_used)s file used" msgid_plural "%(num_used)s files used" msgstr[0] "%(num_used)s použitý súbor" msgstr[1] "%(num_used)s použitých súborov" msgstr[2] "%(num_used)s použitých súborov" msgstr[3] "%(num_used)s použitých súborov" #: panels/templates/panel.py:101 msgid "Templates" msgstr "Šablóny" #: panels/templates/panel.py:106 #, python-format msgid "Templates (%(num_templates)s rendered)" msgstr "Šablóny (%(num_templates)s spracovaných)" #: panels/templates/panel.py:195 msgid "No origin" msgstr "" #: panels/timer.py:27 #, python-format msgid "CPU: %(cum)0.2fms (%(total)0.2fms)" msgstr "CPU: %(cum)0.2fms (%(total)0.2fms)" #: panels/timer.py:32 #, python-format msgid "Total: %0.2fms" msgstr "Celkovo: %0.2fms" #: panels/timer.py:38 templates/debug_toolbar/panels/history.html:9 #: templates/debug_toolbar/panels/sql_explain.html:11 #: templates/debug_toolbar/panels/sql_profile.html:12 #: templates/debug_toolbar/panels/sql_select.html:11 msgid "Time" msgstr "Čas" #: panels/timer.py:46 msgid "User CPU time" msgstr "Užívateľský čas CPU" #: panels/timer.py:46 #, python-format msgid "%(utime)0.3f msec" msgstr "%(utime)0.3f msek" #: panels/timer.py:47 msgid "System CPU time" msgstr "Systémový čas CPU" #: panels/timer.py:47 #, python-format msgid "%(stime)0.3f msec" msgstr "%(stime)0.3f msek" #: panels/timer.py:48 msgid "Total CPU time" msgstr "Celkový čas CPU" #: panels/timer.py:48 #, python-format msgid "%(total)0.3f msec" msgstr "%(total)0.3f msek" #: panels/timer.py:49 msgid "Elapsed time" msgstr "Uplynutý čas" #: panels/timer.py:49 #, python-format msgid "%(total_time)0.3f msec" msgstr "%(total_time)0.3f msek" #: panels/timer.py:51 msgid "Context switches" msgstr "Prepnutí kontextu" #: panels/timer.py:52 #, python-format msgid "%(vcsw)d voluntary, %(ivcsw)d involuntary" msgstr "%(vcsw)d dobrovoľných, %(ivcsw)d nedobrovoľných" #: panels/versions.py:19 msgid "Versions" msgstr "Verzie" #: templates/debug_toolbar/base.html:23 msgid "Hide toolbar" msgstr "Skryť panel nástrojov" #: templates/debug_toolbar/base.html:23 msgid "Hide" msgstr "Skryť" #: templates/debug_toolbar/base.html:25 templates/debug_toolbar/base.html:26 msgid "Toggle Theme" msgstr "" #: templates/debug_toolbar/base.html:35 msgid "Show toolbar" msgstr "Zobraziť panel nástrojov" #: templates/debug_toolbar/includes/panel_button.html:4 msgid "Disable for next and successive requests" msgstr "Zakázať pre ďalšie a nasledujúce požiadavky" #: templates/debug_toolbar/includes/panel_button.html:4 msgid "Enable for next and successive requests" msgstr "Povoliť pre ďalšie a nasledujúce požiadavky" #: templates/debug_toolbar/panels/alerts.html:4 msgid "Alerts found" msgstr "" #: templates/debug_toolbar/panels/alerts.html:11 msgid "No alerts found" msgstr "" #: templates/debug_toolbar/panels/cache.html:2 msgid "Summary" msgstr "Zhrnutie" #: templates/debug_toolbar/panels/cache.html:6 msgid "Total calls" msgstr "Celkovo volaní" #: templates/debug_toolbar/panels/cache.html:7 msgid "Total time" msgstr "Celkový čas" #: templates/debug_toolbar/panels/cache.html:8 msgid "Cache hits" msgstr "Volaní cache" #: templates/debug_toolbar/panels/cache.html:9 msgid "Cache misses" msgstr "Vynechania cache" #: templates/debug_toolbar/panels/cache.html:21 msgid "Commands" msgstr "Príkazy" #: templates/debug_toolbar/panels/cache.html:39 msgid "Calls" msgstr "Volania" #: templates/debug_toolbar/panels/cache.html:43 #: templates/debug_toolbar/panels/sql.html:36 msgid "Time (ms)" msgstr "Čas (ms)" #: templates/debug_toolbar/panels/cache.html:44 msgid "Type" msgstr "Typ" #: templates/debug_toolbar/panels/cache.html:45 #: templates/debug_toolbar/panels/request.html:8 msgid "Arguments" msgstr "Argumenty" #: templates/debug_toolbar/panels/cache.html:46 #: templates/debug_toolbar/panels/request.html:9 msgid "Keyword arguments" msgstr "Kľúčové argumenty" #: templates/debug_toolbar/panels/cache.html:47 msgid "Backend" msgstr "Backend" #: templates/debug_toolbar/panels/headers.html:3 msgid "Request headers" msgstr "Hlavičky požiadavky" #: templates/debug_toolbar/panels/headers.html:8 #: templates/debug_toolbar/panels/headers.html:27 #: templates/debug_toolbar/panels/headers.html:48 msgid "Key" msgstr "Kľúč" #: templates/debug_toolbar/panels/headers.html:9 #: templates/debug_toolbar/panels/headers.html:28 #: templates/debug_toolbar/panels/headers.html:49 #: templates/debug_toolbar/panels/history_tr.html:23 #: templates/debug_toolbar/panels/request_variables.html:12 #: templates/debug_toolbar/panels/settings.html:6 #: templates/debug_toolbar/panels/timer.html:11 msgid "Value" msgstr "Hodnota" #: templates/debug_toolbar/panels/headers.html:22 msgid "Response headers" msgstr "Hlavičky odpovede" #: templates/debug_toolbar/panels/headers.html:41 msgid "WSGI environ" msgstr "WSGI prostredie" #: templates/debug_toolbar/panels/headers.html:43 msgid "" "Since the WSGI environ inherits the environment of the server, only a " "significant subset is shown below." msgstr "Keďže WSGI prostredie dedí z prostredia servera, je nižšie zobrazená iba významná podmnožina." #: templates/debug_toolbar/panels/history.html:10 msgid "Method" msgstr "" #: templates/debug_toolbar/panels/history.html:11 #: templates/debug_toolbar/panels/staticfiles.html:43 msgid "Path" msgstr "Cesta" #: templates/debug_toolbar/panels/history.html:12 msgid "Request Variables" msgstr "" #: templates/debug_toolbar/panels/history.html:13 msgid "Status" msgstr "" #: templates/debug_toolbar/panels/history.html:14 #: templates/debug_toolbar/panels/sql.html:37 msgid "Action" msgstr "Akcia" #: templates/debug_toolbar/panels/history_tr.html:22 #: templates/debug_toolbar/panels/request_variables.html:11 msgid "Variable" msgstr "Premenná" #: templates/debug_toolbar/panels/profiling.html:5 msgid "Call" msgstr "Volanie" #: templates/debug_toolbar/panels/profiling.html:6 msgid "CumTime" msgstr "CumTime" #: templates/debug_toolbar/panels/profiling.html:7 #: templates/debug_toolbar/panels/profiling.html:9 msgid "Per" msgstr "Za" #: templates/debug_toolbar/panels/profiling.html:8 msgid "TotTime" msgstr "TotTime" #: templates/debug_toolbar/panels/profiling.html:10 msgid "Count" msgstr "Počet" #: templates/debug_toolbar/panels/request.html:3 msgid "View information" msgstr "Zobraziť informácie" #: templates/debug_toolbar/panels/request.html:7 msgid "View function" msgstr "View funkcia" #: templates/debug_toolbar/panels/request.html:10 msgid "URL name" msgstr "URL meno" #: templates/debug_toolbar/panels/request.html:24 msgid "Cookies" msgstr "Cookies" #: templates/debug_toolbar/panels/request.html:27 msgid "No cookies" msgstr "Žiadne cookies" #: templates/debug_toolbar/panels/request.html:31 msgid "Session data" msgstr "Dáta relácie" #: templates/debug_toolbar/panels/request.html:34 msgid "No session data" msgstr "Žiadne dáta relácie" #: templates/debug_toolbar/panels/request.html:38 msgid "GET data" msgstr "GET dáta" #: templates/debug_toolbar/panels/request.html:41 msgid "No GET data" msgstr "Žiadne GET dáta" #: templates/debug_toolbar/panels/request.html:45 msgid "POST data" msgstr "POST dáta" #: templates/debug_toolbar/panels/request.html:48 msgid "No POST data" msgstr "Žiadne POST dáta" #: templates/debug_toolbar/panels/settings.html:5 msgid "Setting" msgstr "Nastavenie" #: templates/debug_toolbar/panels/signals.html:5 msgid "Signal" msgstr "Signál" #: templates/debug_toolbar/panels/signals.html:6 msgid "Receivers" msgstr "Príjemcovia" #: templates/debug_toolbar/panels/sql.html:6 #, python-format msgid "%(num)s query" msgid_plural "%(num)s queries" msgstr[0] "%(num)s dopyt" msgstr[1] "%(num)s dopytov" msgstr[2] "%(num)s dopytov" msgstr[3] "%(num)s dopytov" #: templates/debug_toolbar/panels/sql.html:8 #, python-format msgid "" "including %(count)s similar" msgstr "" #: templates/debug_toolbar/panels/sql.html:12 #, python-format msgid "" "and %(dupes)s duplicates" msgstr "" #: templates/debug_toolbar/panels/sql.html:34 msgid "Query" msgstr "Dopyt" #: templates/debug_toolbar/panels/sql.html:35 #: templates/debug_toolbar/panels/timer.html:36 msgid "Timeline" msgstr "Časová os" #: templates/debug_toolbar/panels/sql.html:52 #, python-format msgid "%(count)s similar queries." msgstr "" #: templates/debug_toolbar/panels/sql.html:58 #, python-format msgid "Duplicated %(dupes)s times." msgstr "" #: templates/debug_toolbar/panels/sql.html:95 msgid "Connection:" msgstr "Pripojenie:" #: templates/debug_toolbar/panels/sql.html:97 msgid "Isolation level:" msgstr "Úroveň izolácie:" #: templates/debug_toolbar/panels/sql.html:100 msgid "Transaction status:" msgstr "Stav transakcie:" #: templates/debug_toolbar/panels/sql.html:114 msgid "(unknown)" msgstr "(neznámy)" #: templates/debug_toolbar/panels/sql.html:123 msgid "No SQL queries were recorded during this request." msgstr "V priebehu tejto požiadavky neboli zaznamenané žiadne SQL dopyty." #: templates/debug_toolbar/panels/sql_explain.html:4 msgid "SQL explained" msgstr "SQL vysvetlené" #: templates/debug_toolbar/panels/sql_explain.html:9 #: templates/debug_toolbar/panels/sql_profile.html:10 #: templates/debug_toolbar/panels/sql_select.html:9 msgid "Executed SQL" msgstr "Vykonané SQL" #: templates/debug_toolbar/panels/sql_explain.html:13 #: templates/debug_toolbar/panels/sql_profile.html:14 #: templates/debug_toolbar/panels/sql_select.html:13 msgid "Database" msgstr "Databáza" #: templates/debug_toolbar/panels/sql_profile.html:4 msgid "SQL profiled" msgstr "SQL profilované" #: templates/debug_toolbar/panels/sql_profile.html:37 msgid "Error" msgstr "Chyba" #: templates/debug_toolbar/panels/sql_select.html:4 msgid "SQL selected" msgstr "SQL označené" #: templates/debug_toolbar/panels/sql_select.html:36 msgid "Empty set" msgstr "Prázdny rad" #: templates/debug_toolbar/panels/staticfiles.html:3 msgid "Static file path" msgid_plural "Static file paths" msgstr[0] "Cesta k statickému súboru" msgstr[1] "Cesty k statickým súborom" msgstr[2] "Cesty k statickým súborom" msgstr[3] "Cesty k statickým súborom" #: templates/debug_toolbar/panels/staticfiles.html:7 #, python-format msgid "(prefix %(prefix)s)" msgstr "(prefix %(prefix)s)" #: templates/debug_toolbar/panels/staticfiles.html:11 #: templates/debug_toolbar/panels/staticfiles.html:22 #: templates/debug_toolbar/panels/staticfiles.html:34 #: templates/debug_toolbar/panels/templates.html:10 #: templates/debug_toolbar/panels/templates.html:30 #: templates/debug_toolbar/panels/templates.html:47 msgid "None" msgstr "Žiadny" #: templates/debug_toolbar/panels/staticfiles.html:14 msgid "Static file app" msgid_plural "Static file apps" msgstr[0] "Aplikácia pre statické súbory" msgstr[1] "Aplikácie pre statické súbory" msgstr[2] "Aplikácie pre statické súbory" msgstr[3] "Aplikácie pre statické súbory" #: templates/debug_toolbar/panels/staticfiles.html:25 msgid "Static file" msgid_plural "Static files" msgstr[0] "" msgstr[1] "" msgstr[2] "Statické súbory" msgstr[3] "Statické súbory" #: templates/debug_toolbar/panels/staticfiles.html:39 #, python-format msgid "%(payload_count)s file" msgid_plural "%(payload_count)s files" msgstr[0] "%(payload_count)s súbor" msgstr[1] "%(payload_count)s súborov" msgstr[2] "%(payload_count)s súborov" msgstr[3] "%(payload_count)s súborov" #: templates/debug_toolbar/panels/staticfiles.html:44 msgid "Location" msgstr "Poloha" #: templates/debug_toolbar/panels/template_source.html:4 msgid "Template source:" msgstr "Zdrojový kód šablóny:" #: templates/debug_toolbar/panels/templates.html:2 msgid "Template path" msgid_plural "Template paths" msgstr[0] "Cesta k šablóne" msgstr[1] "Cesta k šablóne" msgstr[2] "Cesta k šablóne" msgstr[3] "Cesta k šablóne" #: templates/debug_toolbar/panels/templates.html:13 msgid "Template" msgid_plural "Templates" msgstr[0] "Šablóna" msgstr[1] "Šablóna" msgstr[2] "Šablóna" msgstr[3] "Šablóna" #: templates/debug_toolbar/panels/templates.html:22 #: templates/debug_toolbar/panels/templates.html:40 msgid "Toggle context" msgstr "Prepnúť kontext" #: templates/debug_toolbar/panels/templates.html:33 msgid "Context processor" msgid_plural "Context processors" msgstr[0] "Spracovateľ kontextu" msgstr[1] "Spracovateľ kontextu" msgstr[2] "Spracovateľ kontextu" msgstr[3] "Spracovateľ kontextu" #: templates/debug_toolbar/panels/timer.html:2 msgid "Resource usage" msgstr "Využitie prostriedkov" #: templates/debug_toolbar/panels/timer.html:10 msgid "Resource" msgstr "Prostriedok" #: templates/debug_toolbar/panels/timer.html:26 msgid "Browser timing" msgstr "Čas prehliadača" #: templates/debug_toolbar/panels/timer.html:35 msgid "Timing attribute" msgstr "Časový atribút" #: templates/debug_toolbar/panels/timer.html:37 msgid "Milliseconds since navigation start (+length)" msgstr "Milisekúnd od spustenia navigácie (+dĺžka)" #: templates/debug_toolbar/panels/versions.html:10 msgid "Package" msgstr "" #: templates/debug_toolbar/panels/versions.html:11 msgid "Name" msgstr "Meno" #: templates/debug_toolbar/panels/versions.html:12 msgid "Version" msgstr "Verzia" #: templates/debug_toolbar/redirect.html:10 msgid "Location:" msgstr "Poloha:" #: templates/debug_toolbar/redirect.html:12 msgid "" "The Django Debug Toolbar has intercepted a redirect to the above URL for " "debug viewing purposes. You can click the above link to continue with the " "redirect as normal." msgstr "Django Debug Toolbar zachytil presmerovanie na vyššie uvedenú URL pre účely ladenia. Pre normálne presmerovanie môžete kliknúť na vyššie uvedený odkaz." #: views.py:16 msgid "" "Data for this panel isn't available anymore. Please reload the page and " "retry." msgstr "Dáta pre tento panel už nie sú k dispozícii. Načítajte si prosím stránku a skúste to znova." python-django-debug-toolbar-5.2.0/debug_toolbar/locale/sv_SE/000077500000000000000000000000001500406072000241035ustar00rootroot00000000000000python-django-debug-toolbar-5.2.0/debug_toolbar/locale/sv_SE/LC_MESSAGES/000077500000000000000000000000001500406072000256705ustar00rootroot00000000000000python-django-debug-toolbar-5.2.0/debug_toolbar/locale/sv_SE/LC_MESSAGES/django.mo000066400000000000000000000041241500406072000274700ustar00rootroot00000000000000*l;       +8= BL R\e iv~      ' -;BHM\lr {     &/ 7A)&( " ! %* '$#(unknown)ActionActiveCacheConnection:CountDatabaseEmpty setErrorExecuted SQLHideIn errorKeyLocationNameNo GET dataNo POST dataNonePathProfilingQueryReceiversResourceSQLSerializableSettingSettingsSignalSignalsStatic filesSummaryTemplateTemplatesTemplatesTimeTime (ms)UnknownValueVariableVersionVersionsView informationProject-Id-Version: Django Debug Toolbar Report-Msgid-Bugs-To: PO-Revision-Date: 2010-11-30 00:00+0000 Last-Translator: Alex Nordlund , 2012-2013 Language-Team: Swedish (Sweden) (http://app.transifex.com/django-debug-toolbar/django-debug-toolbar/language/sv_SE/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: sv_SE Plural-Forms: nplurals=2; plural=(n != 1); (okänd)ÅtgärdÅtgärdCacheAnslutning:RäknaDatabasTomt setFelmeddelandeUtförd SQLDöljFelmeddelandeNyckelPlatsNamnIngen GET dataIngen POST dataIngetSökvägProfileringFrågaMottagareResursSQLVariabelInställningInställningarSignalSignalerStatiska filerSammanfattningMallMallarMallarTidTid (ms)(okänd)VärdeVariabelVersionVersionerVisa informationenpython-django-debug-toolbar-5.2.0/debug_toolbar/locale/sv_SE/LC_MESSAGES/django.po000066400000000000000000000372261500406072000275040ustar00rootroot00000000000000# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # # Translators: # Alex Nordlund , 2012-2013 # Alex Nordlund , 2012 msgid "" msgstr "" "Project-Id-Version: Django Debug Toolbar\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2024-08-06 07:12-0500\n" "PO-Revision-Date: 2010-11-30 00:00+0000\n" "Last-Translator: Alex Nordlund , 2012-2013\n" "Language-Team: Swedish (Sweden) (http://app.transifex.com/django-debug-toolbar/django-debug-toolbar/language/sv_SE/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: sv_SE\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: apps.py:18 msgid "Debug Toolbar" msgstr "" #: panels/alerts.py:67 #, python-brace-format msgid "" "Form with id \"{form_id}\" contains file input, but does not have the " "attribute enctype=\"multipart/form-data\"." msgstr "" #: panels/alerts.py:70 msgid "" "Form contains file input, but does not have the attribute " "enctype=\"multipart/form-data\"." msgstr "" #: panels/alerts.py:73 #, python-brace-format msgid "" "Input element references form with id \"{form_id}\", but the form does not " "have the attribute enctype=\"multipart/form-data\"." msgstr "" #: panels/alerts.py:77 msgid "Alerts" msgstr "" #: panels/cache.py:168 msgid "Cache" msgstr "Cache" #: panels/cache.py:174 #, python-format msgid "%(cache_calls)d call in %(time).2fms" msgid_plural "%(cache_calls)d calls in %(time).2fms" msgstr[0] "" msgstr[1] "" #: panels/cache.py:183 #, python-format msgid "Cache calls from %(count)d backend" msgid_plural "Cache calls from %(count)d backends" msgstr[0] "" msgstr[1] "" #: panels/headers.py:31 msgid "Headers" msgstr "" #: panels/history/panel.py:19 panels/history/panel.py:20 msgid "History" msgstr "" #: panels/profiling.py:140 msgid "Profiling" msgstr "Profilering" #: panels/redirects.py:17 msgid "Intercept redirects" msgstr "" #: panels/request.py:16 msgid "Request" msgstr "" #: panels/request.py:38 msgid "" msgstr "" #: panels/request.py:55 msgid "" msgstr "" #: panels/settings.py:17 msgid "Settings" msgstr "Inställningar" #: panels/settings.py:20 #, python-format msgid "Settings from %s" msgstr "" #: panels/signals.py:57 #, python-format msgid "%(num_receivers)d receiver of 1 signal" msgid_plural "%(num_receivers)d receivers of 1 signal" msgstr[0] "" msgstr[1] "" #: panels/signals.py:62 #, python-format msgid "%(num_receivers)d receiver of %(num_signals)d signals" msgid_plural "%(num_receivers)d receivers of %(num_signals)d signals" msgstr[0] "" msgstr[1] "" #: panels/signals.py:67 msgid "Signals" msgstr "Signaler" #: panels/sql/panel.py:30 panels/sql/panel.py:41 msgid "Read uncommitted" msgstr "" #: panels/sql/panel.py:31 panels/sql/panel.py:43 msgid "Read committed" msgstr "" #: panels/sql/panel.py:32 panels/sql/panel.py:45 msgid "Repeatable read" msgstr "" #: panels/sql/panel.py:33 panels/sql/panel.py:47 msgid "Serializable" msgstr "Variabel" #: panels/sql/panel.py:39 msgid "Autocommit" msgstr "" #: panels/sql/panel.py:61 panels/sql/panel.py:71 msgid "Idle" msgstr "" #: panels/sql/panel.py:62 panels/sql/panel.py:72 msgid "Active" msgstr "Åtgärd" #: panels/sql/panel.py:63 panels/sql/panel.py:73 msgid "In transaction" msgstr "" #: panels/sql/panel.py:64 panels/sql/panel.py:74 msgid "In error" msgstr "Felmeddelande" #: panels/sql/panel.py:65 panels/sql/panel.py:75 msgid "Unknown" msgstr "(okänd)" #: panels/sql/panel.py:162 msgid "SQL" msgstr "SQL" #: panels/sql/panel.py:168 #, python-format msgid "%(query_count)d query in %(sql_time).2fms" msgid_plural "%(query_count)d queries in %(sql_time).2fms" msgstr[0] "" msgstr[1] "" #: panels/sql/panel.py:180 #, python-format msgid "SQL queries from %(count)d connection" msgid_plural "SQL queries from %(count)d connections" msgstr[0] "" msgstr[1] "" #: panels/staticfiles.py:82 #, python-format msgid "Static files (%(num_found)s found, %(num_used)s used)" msgstr "" #: panels/staticfiles.py:103 msgid "Static files" msgstr "Statiska filer" #: panels/staticfiles.py:109 #, python-format msgid "%(num_used)s file used" msgid_plural "%(num_used)s files used" msgstr[0] "" msgstr[1] "" #: panels/templates/panel.py:101 msgid "Templates" msgstr "Mallar" #: panels/templates/panel.py:106 #, python-format msgid "Templates (%(num_templates)s rendered)" msgstr "" #: panels/templates/panel.py:195 msgid "No origin" msgstr "" #: panels/timer.py:27 #, python-format msgid "CPU: %(cum)0.2fms (%(total)0.2fms)" msgstr "" #: panels/timer.py:32 #, python-format msgid "Total: %0.2fms" msgstr "" #: panels/timer.py:38 templates/debug_toolbar/panels/history.html:9 #: templates/debug_toolbar/panels/sql_explain.html:11 #: templates/debug_toolbar/panels/sql_profile.html:12 #: templates/debug_toolbar/panels/sql_select.html:11 msgid "Time" msgstr "Tid" #: panels/timer.py:46 msgid "User CPU time" msgstr "" #: panels/timer.py:46 #, python-format msgid "%(utime)0.3f msec" msgstr "" #: panels/timer.py:47 msgid "System CPU time" msgstr "" #: panels/timer.py:47 #, python-format msgid "%(stime)0.3f msec" msgstr "" #: panels/timer.py:48 msgid "Total CPU time" msgstr "" #: panels/timer.py:48 #, python-format msgid "%(total)0.3f msec" msgstr "" #: panels/timer.py:49 msgid "Elapsed time" msgstr "" #: panels/timer.py:49 #, python-format msgid "%(total_time)0.3f msec" msgstr "" #: panels/timer.py:51 msgid "Context switches" msgstr "" #: panels/timer.py:52 #, python-format msgid "%(vcsw)d voluntary, %(ivcsw)d involuntary" msgstr "" #: panels/versions.py:19 msgid "Versions" msgstr "Versioner" #: templates/debug_toolbar/base.html:23 msgid "Hide toolbar" msgstr "" #: templates/debug_toolbar/base.html:23 msgid "Hide" msgstr "Dölj" #: templates/debug_toolbar/base.html:25 templates/debug_toolbar/base.html:26 msgid "Toggle Theme" msgstr "" #: templates/debug_toolbar/base.html:35 msgid "Show toolbar" msgstr "" #: templates/debug_toolbar/includes/panel_button.html:4 msgid "Disable for next and successive requests" msgstr "" #: templates/debug_toolbar/includes/panel_button.html:4 msgid "Enable for next and successive requests" msgstr "" #: templates/debug_toolbar/panels/alerts.html:4 msgid "Alerts found" msgstr "" #: templates/debug_toolbar/panels/alerts.html:11 msgid "No alerts found" msgstr "" #: templates/debug_toolbar/panels/cache.html:2 msgid "Summary" msgstr "Sammanfattning" #: templates/debug_toolbar/panels/cache.html:6 msgid "Total calls" msgstr "" #: templates/debug_toolbar/panels/cache.html:7 msgid "Total time" msgstr "" #: templates/debug_toolbar/panels/cache.html:8 msgid "Cache hits" msgstr "" #: templates/debug_toolbar/panels/cache.html:9 msgid "Cache misses" msgstr "" #: templates/debug_toolbar/panels/cache.html:21 msgid "Commands" msgstr "" #: templates/debug_toolbar/panels/cache.html:39 msgid "Calls" msgstr "" #: templates/debug_toolbar/panels/cache.html:43 #: templates/debug_toolbar/panels/sql.html:36 msgid "Time (ms)" msgstr "Tid (ms)" #: templates/debug_toolbar/panels/cache.html:44 msgid "Type" msgstr "" #: templates/debug_toolbar/panels/cache.html:45 #: templates/debug_toolbar/panels/request.html:8 msgid "Arguments" msgstr "" #: templates/debug_toolbar/panels/cache.html:46 #: templates/debug_toolbar/panels/request.html:9 msgid "Keyword arguments" msgstr "" #: templates/debug_toolbar/panels/cache.html:47 msgid "Backend" msgstr "" #: templates/debug_toolbar/panels/headers.html:3 msgid "Request headers" msgstr "" #: templates/debug_toolbar/panels/headers.html:8 #: templates/debug_toolbar/panels/headers.html:27 #: templates/debug_toolbar/panels/headers.html:48 msgid "Key" msgstr "Nyckel" #: templates/debug_toolbar/panels/headers.html:9 #: templates/debug_toolbar/panels/headers.html:28 #: templates/debug_toolbar/panels/headers.html:49 #: templates/debug_toolbar/panels/history_tr.html:23 #: templates/debug_toolbar/panels/request_variables.html:12 #: templates/debug_toolbar/panels/settings.html:6 #: templates/debug_toolbar/panels/timer.html:11 msgid "Value" msgstr "Värde" #: templates/debug_toolbar/panels/headers.html:22 msgid "Response headers" msgstr "" #: templates/debug_toolbar/panels/headers.html:41 msgid "WSGI environ" msgstr "" #: templates/debug_toolbar/panels/headers.html:43 msgid "" "Since the WSGI environ inherits the environment of the server, only a " "significant subset is shown below." msgstr "" #: templates/debug_toolbar/panels/history.html:10 msgid "Method" msgstr "" #: templates/debug_toolbar/panels/history.html:11 #: templates/debug_toolbar/panels/staticfiles.html:43 msgid "Path" msgstr "Sökväg" #: templates/debug_toolbar/panels/history.html:12 msgid "Request Variables" msgstr "" #: templates/debug_toolbar/panels/history.html:13 msgid "Status" msgstr "" #: templates/debug_toolbar/panels/history.html:14 #: templates/debug_toolbar/panels/sql.html:37 msgid "Action" msgstr "Åtgärd" #: templates/debug_toolbar/panels/history_tr.html:22 #: templates/debug_toolbar/panels/request_variables.html:11 msgid "Variable" msgstr "Variabel" #: templates/debug_toolbar/panels/profiling.html:5 msgid "Call" msgstr "" #: templates/debug_toolbar/panels/profiling.html:6 msgid "CumTime" msgstr "" #: templates/debug_toolbar/panels/profiling.html:7 #: templates/debug_toolbar/panels/profiling.html:9 msgid "Per" msgstr "" #: templates/debug_toolbar/panels/profiling.html:8 msgid "TotTime" msgstr "" #: templates/debug_toolbar/panels/profiling.html:10 msgid "Count" msgstr "Räkna" #: templates/debug_toolbar/panels/request.html:3 msgid "View information" msgstr "Visa informationen" #: templates/debug_toolbar/panels/request.html:7 msgid "View function" msgstr "" #: templates/debug_toolbar/panels/request.html:10 msgid "URL name" msgstr "" #: templates/debug_toolbar/panels/request.html:24 msgid "Cookies" msgstr "" #: templates/debug_toolbar/panels/request.html:27 msgid "No cookies" msgstr "" #: templates/debug_toolbar/panels/request.html:31 msgid "Session data" msgstr "" #: templates/debug_toolbar/panels/request.html:34 msgid "No session data" msgstr "" #: templates/debug_toolbar/panels/request.html:38 msgid "GET data" msgstr "" #: templates/debug_toolbar/panels/request.html:41 msgid "No GET data" msgstr "Ingen GET data" #: templates/debug_toolbar/panels/request.html:45 msgid "POST data" msgstr "" #: templates/debug_toolbar/panels/request.html:48 msgid "No POST data" msgstr "Ingen POST data" #: templates/debug_toolbar/panels/settings.html:5 msgid "Setting" msgstr "Inställning" #: templates/debug_toolbar/panels/signals.html:5 msgid "Signal" msgstr "Signal" #: templates/debug_toolbar/panels/signals.html:6 msgid "Receivers" msgstr "Mottagare" #: templates/debug_toolbar/panels/sql.html:6 #, python-format msgid "%(num)s query" msgid_plural "%(num)s queries" msgstr[0] "" msgstr[1] "" #: templates/debug_toolbar/panels/sql.html:8 #, python-format msgid "" "including %(count)s similar" msgstr "" #: templates/debug_toolbar/panels/sql.html:12 #, python-format msgid "" "and %(dupes)s duplicates" msgstr "" #: templates/debug_toolbar/panels/sql.html:34 msgid "Query" msgstr "Fråga" #: templates/debug_toolbar/panels/sql.html:35 #: templates/debug_toolbar/panels/timer.html:36 msgid "Timeline" msgstr "" #: templates/debug_toolbar/panels/sql.html:52 #, python-format msgid "%(count)s similar queries." msgstr "" #: templates/debug_toolbar/panels/sql.html:58 #, python-format msgid "Duplicated %(dupes)s times." msgstr "" #: templates/debug_toolbar/panels/sql.html:95 msgid "Connection:" msgstr "Anslutning:" #: templates/debug_toolbar/panels/sql.html:97 msgid "Isolation level:" msgstr "" #: templates/debug_toolbar/panels/sql.html:100 msgid "Transaction status:" msgstr "" #: templates/debug_toolbar/panels/sql.html:114 msgid "(unknown)" msgstr "(okänd)" #: templates/debug_toolbar/panels/sql.html:123 msgid "No SQL queries were recorded during this request." msgstr "" #: templates/debug_toolbar/panels/sql_explain.html:4 msgid "SQL explained" msgstr "" #: templates/debug_toolbar/panels/sql_explain.html:9 #: templates/debug_toolbar/panels/sql_profile.html:10 #: templates/debug_toolbar/panels/sql_select.html:9 msgid "Executed SQL" msgstr "Utförd SQL" #: templates/debug_toolbar/panels/sql_explain.html:13 #: templates/debug_toolbar/panels/sql_profile.html:14 #: templates/debug_toolbar/panels/sql_select.html:13 msgid "Database" msgstr "Databas" #: templates/debug_toolbar/panels/sql_profile.html:4 msgid "SQL profiled" msgstr "" #: templates/debug_toolbar/panels/sql_profile.html:37 msgid "Error" msgstr "Felmeddelande" #: templates/debug_toolbar/panels/sql_select.html:4 msgid "SQL selected" msgstr "" #: templates/debug_toolbar/panels/sql_select.html:36 msgid "Empty set" msgstr "Tomt set" #: templates/debug_toolbar/panels/staticfiles.html:3 msgid "Static file path" msgid_plural "Static file paths" msgstr[0] "" msgstr[1] "" #: templates/debug_toolbar/panels/staticfiles.html:7 #, python-format msgid "(prefix %(prefix)s)" msgstr "" #: templates/debug_toolbar/panels/staticfiles.html:11 #: templates/debug_toolbar/panels/staticfiles.html:22 #: templates/debug_toolbar/panels/staticfiles.html:34 #: templates/debug_toolbar/panels/templates.html:10 #: templates/debug_toolbar/panels/templates.html:30 #: templates/debug_toolbar/panels/templates.html:47 msgid "None" msgstr "Inget" #: templates/debug_toolbar/panels/staticfiles.html:14 msgid "Static file app" msgid_plural "Static file apps" msgstr[0] "" msgstr[1] "" #: templates/debug_toolbar/panels/staticfiles.html:25 msgid "Static file" msgid_plural "Static files" msgstr[0] "" msgstr[1] "Statiska filer" #: templates/debug_toolbar/panels/staticfiles.html:39 #, python-format msgid "%(payload_count)s file" msgid_plural "%(payload_count)s files" msgstr[0] "" msgstr[1] "" #: templates/debug_toolbar/panels/staticfiles.html:44 msgid "Location" msgstr "Plats" #: templates/debug_toolbar/panels/template_source.html:4 msgid "Template source:" msgstr "" #: templates/debug_toolbar/panels/templates.html:2 msgid "Template path" msgid_plural "Template paths" msgstr[0] "" msgstr[1] "" #: templates/debug_toolbar/panels/templates.html:13 msgid "Template" msgid_plural "Templates" msgstr[0] "Mall" msgstr[1] "Mallar" #: templates/debug_toolbar/panels/templates.html:22 #: templates/debug_toolbar/panels/templates.html:40 msgid "Toggle context" msgstr "" #: templates/debug_toolbar/panels/templates.html:33 msgid "Context processor" msgid_plural "Context processors" msgstr[0] "" msgstr[1] "" #: templates/debug_toolbar/panels/timer.html:2 msgid "Resource usage" msgstr "" #: templates/debug_toolbar/panels/timer.html:10 msgid "Resource" msgstr "Resurs" #: templates/debug_toolbar/panels/timer.html:26 msgid "Browser timing" msgstr "" #: templates/debug_toolbar/panels/timer.html:35 msgid "Timing attribute" msgstr "" #: templates/debug_toolbar/panels/timer.html:37 msgid "Milliseconds since navigation start (+length)" msgstr "" #: templates/debug_toolbar/panels/versions.html:10 msgid "Package" msgstr "" #: templates/debug_toolbar/panels/versions.html:11 msgid "Name" msgstr "Namn" #: templates/debug_toolbar/panels/versions.html:12 msgid "Version" msgstr "Version" #: templates/debug_toolbar/redirect.html:10 msgid "Location:" msgstr "" #: templates/debug_toolbar/redirect.html:12 msgid "" "The Django Debug Toolbar has intercepted a redirect to the above URL for " "debug viewing purposes. You can click the above link to continue with the " "redirect as normal." msgstr "" #: views.py:16 msgid "" "Data for this panel isn't available anymore. Please reload the page and " "retry." msgstr "" python-django-debug-toolbar-5.2.0/debug_toolbar/locale/uk/000077500000000000000000000000001500406072000235035ustar00rootroot00000000000000python-django-debug-toolbar-5.2.0/debug_toolbar/locale/uk/LC_MESSAGES/000077500000000000000000000000001500406072000252705ustar00rootroot00000000000000python-django-debug-toolbar-5.2.0/debug_toolbar/locale/uk/LC_MESSAGES/django.mo000066400000000000000000000260161500406072000270740ustar00rootroot00000000000000sL J  l* N . . D V h  )     " = FC    $     N ] f (t '     &7;M V-`  1    % +5=MVev z h 6"W z5 & G &. = ITcw|   dU6!uNAS%o  '(=D : P]l{))S\o0>DUQe!t 4! ; %D j !u U   !g+!!! ! ! !" "" 7"#B" f"q" ")"%"""##68# o#|##o:$U$&&a& <'I'=g'''(F(5U({(* **'0*X*i*x*4***"+#+ *+'7+_+ p+ }+ +'+4++J8mW'D/C ;G3Me#"S+7 !ZhgKr^R6kpsnLf>2I\- aT)E_Nc?`.P*F1V<X 0O9BYq,oAH%@l([j4$&]b :i=QUd5%(cache_calls)d call in %(time).2fms%(cache_calls)d calls in %(time).2fms%(num)s query%(num)s queries%(num_receivers)d receiver of %(num_signals)d signals%(num_receivers)d receivers of %(num_signals)d signals%(num_receivers)d receiver of 1 signal%(num_receivers)d receivers of 1 signal%(num_used)s file used%(num_used)s files used%(payload_count)s file%(payload_count)s files%(stime)0.3f msec%(total)0.3f msec%(total_time)0.3f msec%(utime)0.3f msec%(vcsw)d voluntary, %(ivcsw)d involuntary(prefix %(prefix)s)ActionArgumentsAutocommitBackendBrowser timingCPU: %(cum)0.2fms (%(total)0.2fms)CacheCache calls from %(count)d backendCache calls from %(count)d backendsCache hitsCache missesCallCallsCommandsConnection:Context processorContext processorsContext switchesCookiesCountCumTimeData for this panel isn't available anymore. Please reload the page and retry.DatabaseDebug ToolbarDisable for next and successive requestsElapsed timeEmpty setEnable for next and successive requestsErrorExecuted SQLGET dataHeadersHideHide toolbarIntercept redirectsIsolation level:KeyKeyword argumentsLocationLocation:Milliseconds since navigation start (+length)NameNo GET dataNo POST dataNo SQL queries were recorded during this request.No cookiesNo originNo session dataNonePOST dataPathPerProfilingQueryReceiversRequestRequest headersResourceResource usageResponse headersSQLSession dataSettingSettingsShow toolbarSignalSignalsSince the WSGI environ inherits the environment of the server, only a significant subset is shown below.Static fileStatic filesStatic file appStatic file appsStatic file pathStatic file pathsStatic filesStatic files (%(num_found)s found, %(num_used)s used)SummarySystem CPU timeTemplateTemplatesTemplate pathTemplate pathsTemplate source:TemplatesTemplates (%(num_templates)s rendered)The Django Debug Toolbar has intercepted a redirect to the above URL for debug viewing purposes. You can click the above link to continue with the redirect as normal.TimeTime (ms)TimelineTiming attributeToggle contextTotTimeTotal CPU timeTotal callsTotal timeTotal: %0.2fmsTransaction status:TypeURL nameUser CPU timeValueVariableVersionVersionsView functionView informationWSGI environProject-Id-Version: Django Debug Toolbar Report-Msgid-Bugs-To: PO-Revision-Date: 2010-11-30 00:00+0000 Last-Translator: Illia Volochii , 2017 Language-Team: Ukrainian (http://app.transifex.com/django-debug-toolbar/django-debug-toolbar/language/uk/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: uk Plural-Forms: nplurals=4; plural=(n % 1 == 0 && n % 10 == 1 && n % 100 != 11 ? 0 : n % 1 == 0 && n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14) ? 1 : n % 1 == 0 && (n % 10 ==0 || (n % 10 >=5 && n % 10 <=9) || (n % 100 >=11 && n % 100 <=14 )) ? 2: 3); %(cache_calls)d виклик за %(time).2f мс%(cache_calls)d виклики за %(time).2f мс%(cache_calls)d викликів за %(time).2f мс%(cache_calls)d викликів за %(time).2f мс%(num)s запит%(num)s запити%(num)s запитів%(num)s запитів%(num_receivers)d отримувач %(num_signals)d сигналів%(num_receivers)d отримувача %(num_signals)d сигналів%(num_receivers)d отримувачів %(num_signals)d сигналів%(num_receivers)d отримувачів %(num_signals)d сигналів%(num_receivers)d отримувач 1 сигналу%(num_receivers)d отримувача 1 сигналу%(num_receivers)d отримувачів 1 сигналу%(num_receivers)d отримувачів 1 сигналуВикористано %(num_used)s файлВикористано %(num_used)s файлиВикористано %(num_used)s файлівВикористано %(num_used)s файлів%(payload_count)s файл%(payload_count)s файли%(payload_count)s файлів%(payload_count)s файлів%(stime)0.3f мс%(total)0.3f мс%(total_time)0.3f мс%(utime)0.3f мснавмисних - %(vcsw)d, мимовільних - %(ivcsw)d(префікс %(prefix)s)<немає відображення><відсутнє>ПодіяАргументиАвтофіксаціяБекендХронометраж браузераCPU: %(cum)0.2f мс (%(total)0.2f мс)КешВиклики кешу з %(count)d бекендуВиклики кешу із %(count)d бекендівВиклики кешу із %(count)d бекендівВиклики кешу із %(count)d бекендівКеш-попаданняКеш-промахиВикликВикликиКомандиПідключення:Процесор контекстуПроцесори контекстуПроцесори контекстуПроцесори контекстуПеремикачів контекстуКукиКількістьКумул. часДані для цієї панелі більше недоступні. Будь ласка, перезавантажте сторінку і спробуйте знову.База данихПанель Інструментів НалагодженняВідключити для наступного і подальших запитівВитрачений часПорожня множинаВключити для наступного і подальших запитівПомилкаВиконаний SQL запитGET даніЗаголовкиСховатиСховати панель інструментівПереривати запитиРівень ізоляції:КлючІменовані аргументиМісцеМісцезнаходження:Мілісекунд від початку навігації (+тривалість)ІмʼяНемає GET данихНемає POST данихЖодного SQL запиту не було записано протягом цього запитуНемає куківНемає походженняНемає даних сесіїНемаєPOST даніШляхЗа викликПрофілюванняЗапитОтримувачі сигналаЗапитЗаголовки запитуРесурсВикористання ресурсівЗаголовки відповідіSQLДані сесіїНалаштуванняНалаштуванняПоказати панель інструментівСигналСигналиОскільки середовище WSGI успадковує середовище сервера, тут показано лише найважливішу частину.Статичний файлСтатичні файлиСтатичні файлиСтатичні файлиЗастосунок, який використовує статичні файлиЗастосунки, які використовують статичні файлиЗастосунки, які використовують статичні файлиЗастосунки, які використовують статичні файлиШлях до статичних файлівШляхи до статичних файлівШляхи до статичних файлівШляхи до статичних файлівСтатичні файлиСтатичні файли (знайдено %(num_found)s, використано %(num_used)s)РезюмеСистемний час CPUШаблонШаблониШаблонівШаблонівШлях до шаблонівШляхи до шаблонівШляхи до шаблонівШляхи до шаблонівДжерело шаблону:ШаблониШаблони (оброблено %(num_templates)s)Панель Інструментів Налагодження Django перервала перенаправлення до вищевказаного URL задля налагодження перегляду. Ви можете натиснути на посилання вище, щоб продовжити перенаправлення у звичайному режимі.ЧасЧас (мс)Лінія часуАтрибут хронометражуКонтекстЗаг. часЗагальний час CPUЗагальна кількість викликівЗагальний часЗагалом: %0.2f мсСтатус транзакції:ТипІмʼя URLКористувацький час CPUЗначенняЗміннаВерсіяВерсіїФункція відображенняІнформація про відображенняСередовище WSGIpython-django-debug-toolbar-5.2.0/debug_toolbar/locale/uk/LC_MESSAGES/django.po000066400000000000000000000526031500406072000271000ustar00rootroot00000000000000# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # # Translators: # Illia Volochii , 2017 # Sergey Lysach , 2013 msgid "" msgstr "" "Project-Id-Version: Django Debug Toolbar\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2024-08-06 07:12-0500\n" "PO-Revision-Date: 2010-11-30 00:00+0000\n" "Last-Translator: Illia Volochii , 2017\n" "Language-Team: Ukrainian (http://app.transifex.com/django-debug-toolbar/django-debug-toolbar/language/uk/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: uk\n" "Plural-Forms: nplurals=4; plural=(n % 1 == 0 && n % 10 == 1 && n % 100 != 11 ? 0 : n % 1 == 0 && n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14) ? 1 : n % 1 == 0 && (n % 10 ==0 || (n % 10 >=5 && n % 10 <=9) || (n % 100 >=11 && n % 100 <=14 )) ? 2: 3);\n" #: apps.py:18 msgid "Debug Toolbar" msgstr "Панель Інструментів Налагодження" #: panels/alerts.py:67 #, python-brace-format msgid "" "Form with id \"{form_id}\" contains file input, but does not have the " "attribute enctype=\"multipart/form-data\"." msgstr "" #: panels/alerts.py:70 msgid "" "Form contains file input, but does not have the attribute " "enctype=\"multipart/form-data\"." msgstr "" #: panels/alerts.py:73 #, python-brace-format msgid "" "Input element references form with id \"{form_id}\", but the form does not " "have the attribute enctype=\"multipart/form-data\"." msgstr "" #: panels/alerts.py:77 msgid "Alerts" msgstr "" #: panels/cache.py:168 msgid "Cache" msgstr "Кеш" #: panels/cache.py:174 #, python-format msgid "%(cache_calls)d call in %(time).2fms" msgid_plural "%(cache_calls)d calls in %(time).2fms" msgstr[0] "%(cache_calls)d виклик за %(time).2f мс" msgstr[1] "%(cache_calls)d виклики за %(time).2f мс" msgstr[2] "%(cache_calls)d викликів за %(time).2f мс" msgstr[3] "%(cache_calls)d викликів за %(time).2f мс" #: panels/cache.py:183 #, python-format msgid "Cache calls from %(count)d backend" msgid_plural "Cache calls from %(count)d backends" msgstr[0] "Виклики кешу з %(count)d бекенду" msgstr[1] "Виклики кешу із %(count)d бекендів" msgstr[2] "Виклики кешу із %(count)d бекендів" msgstr[3] "Виклики кешу із %(count)d бекендів" #: panels/headers.py:31 msgid "Headers" msgstr "Заголовки" #: panels/history/panel.py:19 panels/history/panel.py:20 msgid "History" msgstr "" #: panels/profiling.py:140 msgid "Profiling" msgstr "Профілювання" #: panels/redirects.py:17 msgid "Intercept redirects" msgstr "Переривати запити" #: panels/request.py:16 msgid "Request" msgstr "Запит" #: panels/request.py:38 msgid "" msgstr "<немає відображення>" #: panels/request.py:55 msgid "" msgstr "<відсутнє>" #: panels/settings.py:17 msgid "Settings" msgstr "Налаштування" #: panels/settings.py:20 #, python-format msgid "Settings from %s" msgstr "" #: panels/signals.py:57 #, python-format msgid "%(num_receivers)d receiver of 1 signal" msgid_plural "%(num_receivers)d receivers of 1 signal" msgstr[0] "%(num_receivers)d отримувач 1 сигналу" msgstr[1] "%(num_receivers)d отримувача 1 сигналу" msgstr[2] "%(num_receivers)d отримувачів 1 сигналу" msgstr[3] "%(num_receivers)d отримувачів 1 сигналу" #: panels/signals.py:62 #, python-format msgid "%(num_receivers)d receiver of %(num_signals)d signals" msgid_plural "%(num_receivers)d receivers of %(num_signals)d signals" msgstr[0] "%(num_receivers)d отримувач %(num_signals)d сигналів" msgstr[1] "%(num_receivers)d отримувача %(num_signals)d сигналів" msgstr[2] "%(num_receivers)d отримувачів %(num_signals)d сигналів" msgstr[3] "%(num_receivers)d отримувачів %(num_signals)d сигналів" #: panels/signals.py:67 msgid "Signals" msgstr "Сигнали" #: panels/sql/panel.py:30 panels/sql/panel.py:41 msgid "Read uncommitted" msgstr "" #: panels/sql/panel.py:31 panels/sql/panel.py:43 msgid "Read committed" msgstr "" #: panels/sql/panel.py:32 panels/sql/panel.py:45 msgid "Repeatable read" msgstr "" #: panels/sql/panel.py:33 panels/sql/panel.py:47 msgid "Serializable" msgstr "" #: panels/sql/panel.py:39 msgid "Autocommit" msgstr "Автофіксація" #: panels/sql/panel.py:61 panels/sql/panel.py:71 msgid "Idle" msgstr "" #: panels/sql/panel.py:62 panels/sql/panel.py:72 msgid "Active" msgstr "" #: panels/sql/panel.py:63 panels/sql/panel.py:73 msgid "In transaction" msgstr "" #: panels/sql/panel.py:64 panels/sql/panel.py:74 msgid "In error" msgstr "" #: panels/sql/panel.py:65 panels/sql/panel.py:75 msgid "Unknown" msgstr "" #: panels/sql/panel.py:162 msgid "SQL" msgstr "SQL" #: panels/sql/panel.py:168 #, python-format msgid "%(query_count)d query in %(sql_time).2fms" msgid_plural "%(query_count)d queries in %(sql_time).2fms" msgstr[0] "" msgstr[1] "" msgstr[2] "" msgstr[3] "" #: panels/sql/panel.py:180 #, python-format msgid "SQL queries from %(count)d connection" msgid_plural "SQL queries from %(count)d connections" msgstr[0] "" msgstr[1] "" msgstr[2] "" msgstr[3] "" #: panels/staticfiles.py:82 #, python-format msgid "Static files (%(num_found)s found, %(num_used)s used)" msgstr "Статичні файли (знайдено %(num_found)s, використано %(num_used)s)" #: panels/staticfiles.py:103 msgid "Static files" msgstr "Статичні файли" #: panels/staticfiles.py:109 #, python-format msgid "%(num_used)s file used" msgid_plural "%(num_used)s files used" msgstr[0] "Використано %(num_used)s файл" msgstr[1] "Використано %(num_used)s файли" msgstr[2] "Використано %(num_used)s файлів" msgstr[3] "Використано %(num_used)s файлів" #: panels/templates/panel.py:101 msgid "Templates" msgstr "Шаблони" #: panels/templates/panel.py:106 #, python-format msgid "Templates (%(num_templates)s rendered)" msgstr "Шаблони (оброблено %(num_templates)s)" #: panels/templates/panel.py:195 msgid "No origin" msgstr "Немає походження" #: panels/timer.py:27 #, python-format msgid "CPU: %(cum)0.2fms (%(total)0.2fms)" msgstr "CPU: %(cum)0.2f мс (%(total)0.2f мс)" #: panels/timer.py:32 #, python-format msgid "Total: %0.2fms" msgstr "Загалом: %0.2f мс" #: panels/timer.py:38 templates/debug_toolbar/panels/history.html:9 #: templates/debug_toolbar/panels/sql_explain.html:11 #: templates/debug_toolbar/panels/sql_profile.html:12 #: templates/debug_toolbar/panels/sql_select.html:11 msgid "Time" msgstr "Час" #: panels/timer.py:46 msgid "User CPU time" msgstr "Користувацький час CPU" #: panels/timer.py:46 #, python-format msgid "%(utime)0.3f msec" msgstr "%(utime)0.3f мс" #: panels/timer.py:47 msgid "System CPU time" msgstr "Системний час CPU" #: panels/timer.py:47 #, python-format msgid "%(stime)0.3f msec" msgstr "%(stime)0.3f мс" #: panels/timer.py:48 msgid "Total CPU time" msgstr "Загальний час CPU" #: panels/timer.py:48 #, python-format msgid "%(total)0.3f msec" msgstr "%(total)0.3f мс" #: panels/timer.py:49 msgid "Elapsed time" msgstr "Витрачений час" #: panels/timer.py:49 #, python-format msgid "%(total_time)0.3f msec" msgstr "%(total_time)0.3f мс" #: panels/timer.py:51 msgid "Context switches" msgstr "Перемикачів контексту" #: panels/timer.py:52 #, python-format msgid "%(vcsw)d voluntary, %(ivcsw)d involuntary" msgstr "навмисних - %(vcsw)d, мимовільних - %(ivcsw)d" #: panels/versions.py:19 msgid "Versions" msgstr "Версії" #: templates/debug_toolbar/base.html:23 msgid "Hide toolbar" msgstr "Сховати панель інструментів" #: templates/debug_toolbar/base.html:23 msgid "Hide" msgstr "Сховати" #: templates/debug_toolbar/base.html:25 templates/debug_toolbar/base.html:26 msgid "Toggle Theme" msgstr "" #: templates/debug_toolbar/base.html:35 msgid "Show toolbar" msgstr "Показати панель інструментів" #: templates/debug_toolbar/includes/panel_button.html:4 msgid "Disable for next and successive requests" msgstr "Відключити для наступного і подальших запитів" #: templates/debug_toolbar/includes/panel_button.html:4 msgid "Enable for next and successive requests" msgstr "Включити для наступного і подальших запитів" #: templates/debug_toolbar/panels/alerts.html:4 msgid "Alerts found" msgstr "" #: templates/debug_toolbar/panels/alerts.html:11 msgid "No alerts found" msgstr "" #: templates/debug_toolbar/panels/cache.html:2 msgid "Summary" msgstr "Резюме" #: templates/debug_toolbar/panels/cache.html:6 msgid "Total calls" msgstr "Загальна кількість викликів" #: templates/debug_toolbar/panels/cache.html:7 msgid "Total time" msgstr "Загальний час" #: templates/debug_toolbar/panels/cache.html:8 msgid "Cache hits" msgstr "Кеш-попадання" #: templates/debug_toolbar/panels/cache.html:9 msgid "Cache misses" msgstr "Кеш-промахи" #: templates/debug_toolbar/panels/cache.html:21 msgid "Commands" msgstr "Команди" #: templates/debug_toolbar/panels/cache.html:39 msgid "Calls" msgstr "Виклики" #: templates/debug_toolbar/panels/cache.html:43 #: templates/debug_toolbar/panels/sql.html:36 msgid "Time (ms)" msgstr "Час (мс)" #: templates/debug_toolbar/panels/cache.html:44 msgid "Type" msgstr "Тип" #: templates/debug_toolbar/panels/cache.html:45 #: templates/debug_toolbar/panels/request.html:8 msgid "Arguments" msgstr "Аргументи" #: templates/debug_toolbar/panels/cache.html:46 #: templates/debug_toolbar/panels/request.html:9 msgid "Keyword arguments" msgstr "Іменовані аргументи" #: templates/debug_toolbar/panels/cache.html:47 msgid "Backend" msgstr "Бекенд" #: templates/debug_toolbar/panels/headers.html:3 msgid "Request headers" msgstr "Заголовки запиту" #: templates/debug_toolbar/panels/headers.html:8 #: templates/debug_toolbar/panels/headers.html:27 #: templates/debug_toolbar/panels/headers.html:48 msgid "Key" msgstr "Ключ" #: templates/debug_toolbar/panels/headers.html:9 #: templates/debug_toolbar/panels/headers.html:28 #: templates/debug_toolbar/panels/headers.html:49 #: templates/debug_toolbar/panels/history_tr.html:23 #: templates/debug_toolbar/panels/request_variables.html:12 #: templates/debug_toolbar/panels/settings.html:6 #: templates/debug_toolbar/panels/timer.html:11 msgid "Value" msgstr "Значення" #: templates/debug_toolbar/panels/headers.html:22 msgid "Response headers" msgstr "Заголовки відповіді" #: templates/debug_toolbar/panels/headers.html:41 msgid "WSGI environ" msgstr "Середовище WSGI" #: templates/debug_toolbar/panels/headers.html:43 msgid "" "Since the WSGI environ inherits the environment of the server, only a " "significant subset is shown below." msgstr "Оскільки середовище WSGI успадковує середовище сервера, тут показано лише найважливішу частину." #: templates/debug_toolbar/panels/history.html:10 msgid "Method" msgstr "" #: templates/debug_toolbar/panels/history.html:11 #: templates/debug_toolbar/panels/staticfiles.html:43 msgid "Path" msgstr "Шлях" #: templates/debug_toolbar/panels/history.html:12 msgid "Request Variables" msgstr "" #: templates/debug_toolbar/panels/history.html:13 msgid "Status" msgstr "" #: templates/debug_toolbar/panels/history.html:14 #: templates/debug_toolbar/panels/sql.html:37 msgid "Action" msgstr "Подія" #: templates/debug_toolbar/panels/history_tr.html:22 #: templates/debug_toolbar/panels/request_variables.html:11 msgid "Variable" msgstr "Змінна" #: templates/debug_toolbar/panels/profiling.html:5 msgid "Call" msgstr "Виклик" #: templates/debug_toolbar/panels/profiling.html:6 msgid "CumTime" msgstr "Кумул. час" #: templates/debug_toolbar/panels/profiling.html:7 #: templates/debug_toolbar/panels/profiling.html:9 msgid "Per" msgstr "За виклик" #: templates/debug_toolbar/panels/profiling.html:8 msgid "TotTime" msgstr "Заг. час" #: templates/debug_toolbar/panels/profiling.html:10 msgid "Count" msgstr "Кількість" #: templates/debug_toolbar/panels/request.html:3 msgid "View information" msgstr "Інформація про відображення" #: templates/debug_toolbar/panels/request.html:7 msgid "View function" msgstr "Функція відображення" #: templates/debug_toolbar/panels/request.html:10 msgid "URL name" msgstr "Імʼя URL" #: templates/debug_toolbar/panels/request.html:24 msgid "Cookies" msgstr "Куки" #: templates/debug_toolbar/panels/request.html:27 msgid "No cookies" msgstr "Немає куків" #: templates/debug_toolbar/panels/request.html:31 msgid "Session data" msgstr "Дані сесії" #: templates/debug_toolbar/panels/request.html:34 msgid "No session data" msgstr "Немає даних сесії" #: templates/debug_toolbar/panels/request.html:38 msgid "GET data" msgstr "GET дані" #: templates/debug_toolbar/panels/request.html:41 msgid "No GET data" msgstr "Немає GET даних" #: templates/debug_toolbar/panels/request.html:45 msgid "POST data" msgstr "POST дані" #: templates/debug_toolbar/panels/request.html:48 msgid "No POST data" msgstr "Немає POST даних" #: templates/debug_toolbar/panels/settings.html:5 msgid "Setting" msgstr "Налаштування" #: templates/debug_toolbar/panels/signals.html:5 msgid "Signal" msgstr "Сигнал" #: templates/debug_toolbar/panels/signals.html:6 msgid "Receivers" msgstr "Отримувачі сигнала" #: templates/debug_toolbar/panels/sql.html:6 #, python-format msgid "%(num)s query" msgid_plural "%(num)s queries" msgstr[0] "%(num)s запит" msgstr[1] "%(num)s запити" msgstr[2] "%(num)s запитів" msgstr[3] "%(num)s запитів" #: templates/debug_toolbar/panels/sql.html:8 #, python-format msgid "" "including %(count)s similar" msgstr "" #: templates/debug_toolbar/panels/sql.html:12 #, python-format msgid "" "and %(dupes)s duplicates" msgstr "" #: templates/debug_toolbar/panels/sql.html:34 msgid "Query" msgstr "Запит" #: templates/debug_toolbar/panels/sql.html:35 #: templates/debug_toolbar/panels/timer.html:36 msgid "Timeline" msgstr "Лінія часу" #: templates/debug_toolbar/panels/sql.html:52 #, python-format msgid "%(count)s similar queries." msgstr "" #: templates/debug_toolbar/panels/sql.html:58 #, python-format msgid "Duplicated %(dupes)s times." msgstr "" #: templates/debug_toolbar/panels/sql.html:95 msgid "Connection:" msgstr "Підключення:" #: templates/debug_toolbar/panels/sql.html:97 msgid "Isolation level:" msgstr "Рівень ізоляції:" #: templates/debug_toolbar/panels/sql.html:100 msgid "Transaction status:" msgstr "Статус транзакції:" #: templates/debug_toolbar/panels/sql.html:114 msgid "(unknown)" msgstr "" #: templates/debug_toolbar/panels/sql.html:123 msgid "No SQL queries were recorded during this request." msgstr "Жодного SQL запиту не було записано протягом цього запиту" #: templates/debug_toolbar/panels/sql_explain.html:4 msgid "SQL explained" msgstr "" #: templates/debug_toolbar/panels/sql_explain.html:9 #: templates/debug_toolbar/panels/sql_profile.html:10 #: templates/debug_toolbar/panels/sql_select.html:9 msgid "Executed SQL" msgstr "Виконаний SQL запит" #: templates/debug_toolbar/panels/sql_explain.html:13 #: templates/debug_toolbar/panels/sql_profile.html:14 #: templates/debug_toolbar/panels/sql_select.html:13 msgid "Database" msgstr "База даних" #: templates/debug_toolbar/panels/sql_profile.html:4 msgid "SQL profiled" msgstr "" #: templates/debug_toolbar/panels/sql_profile.html:37 msgid "Error" msgstr "Помилка" #: templates/debug_toolbar/panels/sql_select.html:4 msgid "SQL selected" msgstr "" #: templates/debug_toolbar/panels/sql_select.html:36 msgid "Empty set" msgstr "Порожня множина" #: templates/debug_toolbar/panels/staticfiles.html:3 msgid "Static file path" msgid_plural "Static file paths" msgstr[0] "Шлях до статичних файлів" msgstr[1] "Шляхи до статичних файлів" msgstr[2] "Шляхи до статичних файлів" msgstr[3] "Шляхи до статичних файлів" #: templates/debug_toolbar/panels/staticfiles.html:7 #, python-format msgid "(prefix %(prefix)s)" msgstr "(префікс %(prefix)s)" #: templates/debug_toolbar/panels/staticfiles.html:11 #: templates/debug_toolbar/panels/staticfiles.html:22 #: templates/debug_toolbar/panels/staticfiles.html:34 #: templates/debug_toolbar/panels/templates.html:10 #: templates/debug_toolbar/panels/templates.html:30 #: templates/debug_toolbar/panels/templates.html:47 msgid "None" msgstr "Немає" #: templates/debug_toolbar/panels/staticfiles.html:14 msgid "Static file app" msgid_plural "Static file apps" msgstr[0] "Застосунок, який використовує статичні файли" msgstr[1] "Застосунки, які використовують статичні файли" msgstr[2] "Застосунки, які використовують статичні файли" msgstr[3] "Застосунки, які використовують статичні файли" #: templates/debug_toolbar/panels/staticfiles.html:25 msgid "Static file" msgid_plural "Static files" msgstr[0] "Статичний файл" msgstr[1] "Статичні файли" msgstr[2] "Статичні файли" msgstr[3] "Статичні файли" #: templates/debug_toolbar/panels/staticfiles.html:39 #, python-format msgid "%(payload_count)s file" msgid_plural "%(payload_count)s files" msgstr[0] "%(payload_count)s файл" msgstr[1] "%(payload_count)s файли" msgstr[2] "%(payload_count)s файлів" msgstr[3] "%(payload_count)s файлів" #: templates/debug_toolbar/panels/staticfiles.html:44 msgid "Location" msgstr "Місце" #: templates/debug_toolbar/panels/template_source.html:4 msgid "Template source:" msgstr "Джерело шаблону:" #: templates/debug_toolbar/panels/templates.html:2 msgid "Template path" msgid_plural "Template paths" msgstr[0] "Шлях до шаблонів" msgstr[1] "Шляхи до шаблонів" msgstr[2] "Шляхи до шаблонів" msgstr[3] "Шляхи до шаблонів" #: templates/debug_toolbar/panels/templates.html:13 msgid "Template" msgid_plural "Templates" msgstr[0] "Шаблон" msgstr[1] "Шаблони" msgstr[2] "Шаблонів" msgstr[3] "Шаблонів" #: templates/debug_toolbar/panels/templates.html:22 #: templates/debug_toolbar/panels/templates.html:40 msgid "Toggle context" msgstr "Контекст" #: templates/debug_toolbar/panels/templates.html:33 msgid "Context processor" msgid_plural "Context processors" msgstr[0] "Процесор контексту" msgstr[1] "Процесори контексту" msgstr[2] "Процесори контексту" msgstr[3] "Процесори контексту" #: templates/debug_toolbar/panels/timer.html:2 msgid "Resource usage" msgstr "Використання ресурсів" #: templates/debug_toolbar/panels/timer.html:10 msgid "Resource" msgstr "Ресурс" #: templates/debug_toolbar/panels/timer.html:26 msgid "Browser timing" msgstr "Хронометраж браузера" #: templates/debug_toolbar/panels/timer.html:35 msgid "Timing attribute" msgstr "Атрибут хронометражу" #: templates/debug_toolbar/panels/timer.html:37 msgid "Milliseconds since navigation start (+length)" msgstr "Мілісекунд від початку навігації (+тривалість)" #: templates/debug_toolbar/panels/versions.html:10 msgid "Package" msgstr "" #: templates/debug_toolbar/panels/versions.html:11 msgid "Name" msgstr "Імʼя" #: templates/debug_toolbar/panels/versions.html:12 msgid "Version" msgstr "Версія" #: templates/debug_toolbar/redirect.html:10 msgid "Location:" msgstr "Місцезнаходження:" #: templates/debug_toolbar/redirect.html:12 msgid "" "The Django Debug Toolbar has intercepted a redirect to the above URL for " "debug viewing purposes. You can click the above link to continue with the " "redirect as normal." msgstr "Панель Інструментів Налагодження Django перервала перенаправлення до вищевказаного URL задля налагодження перегляду. Ви можете натиснути на посилання вище, щоб продовжити перенаправлення у звичайному режимі." #: views.py:16 msgid "" "Data for this panel isn't available anymore. Please reload the page and " "retry." msgstr "Дані для цієї панелі більше недоступні. Будь ласка, перезавантажте сторінку і спробуйте знову." python-django-debug-toolbar-5.2.0/debug_toolbar/locale/zh_CN/000077500000000000000000000000001500406072000240655ustar00rootroot00000000000000python-django-debug-toolbar-5.2.0/debug_toolbar/locale/zh_CN/LC_MESSAGES/000077500000000000000000000000001500406072000256525ustar00rootroot00000000000000python-django-debug-toolbar-5.2.0/debug_toolbar/locale/zh_CN/LC_MESSAGES/django.mo000066400000000000000000000176031500406072000274600ustar00rootroot00000000000000  J  l* N . . D V h  )      "+ N FT    $   Nn w(  '   #(1@Tei{ -  1 ' ,6; ?IO^ oy      !.5h= " 5FN^q &w |   $*3; DR cp."Q8c)*C!Wy   7!)( R_ov} ??  L V-d -%,3 CPTd k"u8 .2D!K mz     -: ISZjq^x  B cj|  'dk z !  '.@DKR Y eq3 f#q9%e@K`UXz8b'nFZ?|L!$*7Y,5HvE}ay)C m>pMN  A&Vi.d-"4:{O ;=\1W^/s[QBSG+o xuhIjl]_~T2gP06wRJ<t(Drkc%(cache_calls)d call in %(time).2fms%(cache_calls)d calls in %(time).2fms%(num)s query%(num)s queries%(num_receivers)d receiver of %(num_signals)d signals%(num_receivers)d receivers of %(num_signals)d signals%(num_receivers)d receiver of 1 signal%(num_receivers)d receivers of 1 signal%(num_used)s file used%(num_used)s files used%(payload_count)s file%(payload_count)s files%(stime)0.3f msec%(total)0.3f msec%(total_time)0.3f msec%(utime)0.3f msec%(vcsw)d voluntary, %(ivcsw)d involuntary(prefix %(prefix)s)(unknown)ActionActiveArgumentsAutocommitBackendBrowser timingCPU: %(cum)0.2fms (%(total)0.2fms)CacheCache calls from %(count)d backendCache calls from %(count)d backendsCache hitsCache missesCallCallsCommandsConnection:Context processorContext processorsContext switchesCookiesCountCumTimeData for this panel isn't available anymore. Please reload the page and retry.DatabaseDebug ToolbarDisable for next and successive requestsElapsed timeEmpty setEnable for next and successive requestsErrorExecuted SQLGET dataHeadersHideHide toolbarIdleIn errorIn transactionIntercept redirectsIsolation level:KeyKeyword argumentsLocationLocation:Milliseconds since navigation start (+length)NameNo GET dataNo POST dataNo SQL queries were recorded during this request.No cookiesNo session dataNonePOST dataPathPerProfilingQueryRead committedRead uncommittedReceiversRepeatable readRequestRequest headersResourceResource usageResponse headersSQLSQL explainedSQL profiledSQL selectedSerializableSession dataSettingSettingsShow toolbarSignalSignalsSince the WSGI environ inherits the environment of the server, only a significant subset is shown below.Static fileStatic filesStatic file appStatic file appsStatic file pathStatic file pathsStatic filesStatic files (%(num_found)s found, %(num_used)s used)SummarySystem CPU timeTemplateTemplatesTemplate pathTemplate pathsTemplate source:TemplatesTemplates (%(num_templates)s rendered)The Django Debug Toolbar has intercepted a redirect to the above URL for debug viewing purposes. You can click the above link to continue with the redirect as normal.TimeTime (ms)TimelineTiming attributeToggle contextTotTimeTotal CPU timeTotal callsTotal timeTotal: %0.2fmsTransaction status:TypeURL nameUnknownUser CPU timeValueVariableVersionVersionsView functionView informationWSGI environProject-Id-Version: Django Debug Toolbar Report-Msgid-Bugs-To: PO-Revision-Date: 2010-11-30 00:00+0000 Last-Translator: mozillazg , 2013-2014 Language-Team: Chinese (China) (http://app.transifex.com/django-debug-toolbar/django-debug-toolbar/language/zh_CN/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: zh_CN Plural-Forms: nplurals=1; plural=0; %(time).2f 毫秒内 %(cache_calls)d 次调用%(num)s 个查询%(num_signals)d 个信号 %(num_receivers)d 个接收者1个信号 %(num_receivers)d 个接收者%(num_used)s 个文件被使用%(payload_count)s 个文件%(stime)0.3f 毫秒%(total)0.3f 毫秒%(total_time)0.3f 毫秒%(utime)0.3f 毫秒%(vcsw)d 主动, %(ivcsw)d 被动(前缀 %(prefix)s)(未知)<没有 view><不可用>功能活跃参数自动提交后端浏览器计时CPU: %(cum)0.2f 毫秒 (总耗时: %(total)0.2f 毫秒)缓存来自 %(count)d 个后端的缓存调用缓存命中缓存未命中调用调用命令连接:Context processors上下文切换Cookies总的调用次数调用该函数及其内部调用其他函数花费的总时间当前面板的数据暂不可用。请刷新页面并重试。数据库Debug Toolbar针对下一个连续的请求禁用该功能耗时空集合针对下一个连续的请求启用该功能错误执行的 SQL 语句GET 请求数据HTTP 头隐藏隐藏工具栏空闲错误事务拦截重定向隔离级别键关键字参数位置位置:导航开始后的毫秒 (+长度)名称没有 GET 请求数据没有 POST 请求数据在处理这个请求期间没有记录到 SQL 查询。没有 cookies没有 session 数据空POST 请求数据路径平均每次调用花费的时间性能分析查询读取已提交的读取未提交的接收者可重复读取请求请求头资源资源使用响应头SQLSQL explain 分析SQL 性能分析选中的 SQL 语句可序列化Session 数据设置项设置显示工具栏信号信号由于 WSGI 的环境变量继承自 server,所以下面只显示了一些重要的子集。静态文件包含静态文件的应用静态文件路径静态文件静态文件 (%(num_found)s 个找到,%(num_used)s 个被使用)摘要系统 CPU 时间模板模板路径模板源:模板模板 (%(num_templates)s 个被渲染)Django Debug Toolbar 为了调试目的拦截了一个重定向到上面 URL 的请求。 您可以点击上面的链接继续执行重定向操作。时间时间(毫秒)时间线计时属性切换上下文调用该函数花费的总时间总的 CPU 时间总调用次数总耗时总共:%0.2f 毫秒事务状态:类型URL 名称未知用户 CPU 时间值变量版本版本View 函数View 信息WSGI 环境变量python-django-debug-toolbar-5.2.0/debug_toolbar/locale/zh_CN/LC_MESSAGES/django.po000066400000000000000000000424211500406072000274570ustar00rootroot00000000000000# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # # Translators: # mozillazg , 2013-2014 msgid "" msgstr "" "Project-Id-Version: Django Debug Toolbar\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2024-08-06 07:12-0500\n" "PO-Revision-Date: 2010-11-30 00:00+0000\n" "Last-Translator: mozillazg , 2013-2014\n" "Language-Team: Chinese (China) (http://app.transifex.com/django-debug-toolbar/django-debug-toolbar/language/zh_CN/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: zh_CN\n" "Plural-Forms: nplurals=1; plural=0;\n" #: apps.py:18 msgid "Debug Toolbar" msgstr "Debug Toolbar" #: panels/alerts.py:67 #, python-brace-format msgid "" "Form with id \"{form_id}\" contains file input, but does not have the " "attribute enctype=\"multipart/form-data\"." msgstr "" #: panels/alerts.py:70 msgid "" "Form contains file input, but does not have the attribute " "enctype=\"multipart/form-data\"." msgstr "" #: panels/alerts.py:73 #, python-brace-format msgid "" "Input element references form with id \"{form_id}\", but the form does not " "have the attribute enctype=\"multipart/form-data\"." msgstr "" #: panels/alerts.py:77 msgid "Alerts" msgstr "" #: panels/cache.py:168 msgid "Cache" msgstr "缓存" #: panels/cache.py:174 #, python-format msgid "%(cache_calls)d call in %(time).2fms" msgid_plural "%(cache_calls)d calls in %(time).2fms" msgstr[0] "%(time).2f 毫秒内 %(cache_calls)d 次调用" #: panels/cache.py:183 #, python-format msgid "Cache calls from %(count)d backend" msgid_plural "Cache calls from %(count)d backends" msgstr[0] "来自 %(count)d 个后端的缓存调用" #: panels/headers.py:31 msgid "Headers" msgstr "HTTP 头" #: panels/history/panel.py:19 panels/history/panel.py:20 msgid "History" msgstr "" #: panels/profiling.py:140 msgid "Profiling" msgstr "性能分析" #: panels/redirects.py:17 msgid "Intercept redirects" msgstr "拦截重定向" #: panels/request.py:16 msgid "Request" msgstr "请求" #: panels/request.py:38 msgid "" msgstr "<没有 view>" #: panels/request.py:55 msgid "" msgstr "<不可用>" #: panels/settings.py:17 msgid "Settings" msgstr "设置" #: panels/settings.py:20 #, python-format msgid "Settings from %s" msgstr "" #: panels/signals.py:57 #, python-format msgid "%(num_receivers)d receiver of 1 signal" msgid_plural "%(num_receivers)d receivers of 1 signal" msgstr[0] "1个信号 %(num_receivers)d 个接收者" #: panels/signals.py:62 #, python-format msgid "%(num_receivers)d receiver of %(num_signals)d signals" msgid_plural "%(num_receivers)d receivers of %(num_signals)d signals" msgstr[0] "%(num_signals)d 个信号 %(num_receivers)d 个接收者" #: panels/signals.py:67 msgid "Signals" msgstr "信号" #: panels/sql/panel.py:30 panels/sql/panel.py:41 msgid "Read uncommitted" msgstr "读取未提交的" #: panels/sql/panel.py:31 panels/sql/panel.py:43 msgid "Read committed" msgstr "读取已提交的" #: panels/sql/panel.py:32 panels/sql/panel.py:45 msgid "Repeatable read" msgstr "可重复读取" #: panels/sql/panel.py:33 panels/sql/panel.py:47 msgid "Serializable" msgstr "可序列化" #: panels/sql/panel.py:39 msgid "Autocommit" msgstr "自动提交" #: panels/sql/panel.py:61 panels/sql/panel.py:71 msgid "Idle" msgstr "空闲" #: panels/sql/panel.py:62 panels/sql/panel.py:72 msgid "Active" msgstr "活跃" #: panels/sql/panel.py:63 panels/sql/panel.py:73 msgid "In transaction" msgstr "事务" #: panels/sql/panel.py:64 panels/sql/panel.py:74 msgid "In error" msgstr "错误" #: panels/sql/panel.py:65 panels/sql/panel.py:75 msgid "Unknown" msgstr "未知" #: panels/sql/panel.py:162 msgid "SQL" msgstr "SQL" #: panels/sql/panel.py:168 #, python-format msgid "%(query_count)d query in %(sql_time).2fms" msgid_plural "%(query_count)d queries in %(sql_time).2fms" msgstr[0] "" #: panels/sql/panel.py:180 #, python-format msgid "SQL queries from %(count)d connection" msgid_plural "SQL queries from %(count)d connections" msgstr[0] "" #: panels/staticfiles.py:82 #, python-format msgid "Static files (%(num_found)s found, %(num_used)s used)" msgstr "静态文件 (%(num_found)s 个找到,%(num_used)s 个被使用)" #: panels/staticfiles.py:103 msgid "Static files" msgstr "静态文件" #: panels/staticfiles.py:109 #, python-format msgid "%(num_used)s file used" msgid_plural "%(num_used)s files used" msgstr[0] "%(num_used)s 个文件被使用" #: panels/templates/panel.py:101 msgid "Templates" msgstr "模板" #: panels/templates/panel.py:106 #, python-format msgid "Templates (%(num_templates)s rendered)" msgstr "模板 (%(num_templates)s 个被渲染)" #: panels/templates/panel.py:195 msgid "No origin" msgstr "" #: panels/timer.py:27 #, python-format msgid "CPU: %(cum)0.2fms (%(total)0.2fms)" msgstr "CPU: %(cum)0.2f 毫秒 (总耗时: %(total)0.2f 毫秒)" #: panels/timer.py:32 #, python-format msgid "Total: %0.2fms" msgstr "总共:%0.2f 毫秒" #: panels/timer.py:38 templates/debug_toolbar/panels/history.html:9 #: templates/debug_toolbar/panels/sql_explain.html:11 #: templates/debug_toolbar/panels/sql_profile.html:12 #: templates/debug_toolbar/panels/sql_select.html:11 msgid "Time" msgstr "时间" #: panels/timer.py:46 msgid "User CPU time" msgstr "用户 CPU 时间" #: panels/timer.py:46 #, python-format msgid "%(utime)0.3f msec" msgstr "%(utime)0.3f 毫秒" #: panels/timer.py:47 msgid "System CPU time" msgstr "系统 CPU 时间" #: panels/timer.py:47 #, python-format msgid "%(stime)0.3f msec" msgstr "%(stime)0.3f 毫秒" #: panels/timer.py:48 msgid "Total CPU time" msgstr "总的 CPU 时间" #: panels/timer.py:48 #, python-format msgid "%(total)0.3f msec" msgstr "%(total)0.3f 毫秒" #: panels/timer.py:49 msgid "Elapsed time" msgstr "耗时" #: panels/timer.py:49 #, python-format msgid "%(total_time)0.3f msec" msgstr "%(total_time)0.3f 毫秒" #: panels/timer.py:51 msgid "Context switches" msgstr "上下文切换" #: panels/timer.py:52 #, python-format msgid "%(vcsw)d voluntary, %(ivcsw)d involuntary" msgstr "%(vcsw)d 主动, %(ivcsw)d 被动" #: panels/versions.py:19 msgid "Versions" msgstr "版本" #: templates/debug_toolbar/base.html:23 msgid "Hide toolbar" msgstr "隐藏工具栏" #: templates/debug_toolbar/base.html:23 msgid "Hide" msgstr "隐藏" #: templates/debug_toolbar/base.html:25 templates/debug_toolbar/base.html:26 msgid "Toggle Theme" msgstr "" #: templates/debug_toolbar/base.html:35 msgid "Show toolbar" msgstr "显示工具栏" #: templates/debug_toolbar/includes/panel_button.html:4 msgid "Disable for next and successive requests" msgstr "针对下一个连续的请求禁用该功能" #: templates/debug_toolbar/includes/panel_button.html:4 msgid "Enable for next and successive requests" msgstr "针对下一个连续的请求启用该功能" #: templates/debug_toolbar/panels/alerts.html:4 msgid "Alerts found" msgstr "" #: templates/debug_toolbar/panels/alerts.html:11 msgid "No alerts found" msgstr "" #: templates/debug_toolbar/panels/cache.html:2 msgid "Summary" msgstr "摘要" #: templates/debug_toolbar/panels/cache.html:6 msgid "Total calls" msgstr "总调用次数" #: templates/debug_toolbar/panels/cache.html:7 msgid "Total time" msgstr "总耗时" #: templates/debug_toolbar/panels/cache.html:8 msgid "Cache hits" msgstr "缓存命中" #: templates/debug_toolbar/panels/cache.html:9 msgid "Cache misses" msgstr "缓存未命中" #: templates/debug_toolbar/panels/cache.html:21 msgid "Commands" msgstr "命令" #: templates/debug_toolbar/panels/cache.html:39 msgid "Calls" msgstr "调用" #: templates/debug_toolbar/panels/cache.html:43 #: templates/debug_toolbar/panels/sql.html:36 msgid "Time (ms)" msgstr "时间(毫秒)" #: templates/debug_toolbar/panels/cache.html:44 msgid "Type" msgstr "类型" #: templates/debug_toolbar/panels/cache.html:45 #: templates/debug_toolbar/panels/request.html:8 msgid "Arguments" msgstr "参数" #: templates/debug_toolbar/panels/cache.html:46 #: templates/debug_toolbar/panels/request.html:9 msgid "Keyword arguments" msgstr "关键字参数" #: templates/debug_toolbar/panels/cache.html:47 msgid "Backend" msgstr "后端" #: templates/debug_toolbar/panels/headers.html:3 msgid "Request headers" msgstr "请求头" #: templates/debug_toolbar/panels/headers.html:8 #: templates/debug_toolbar/panels/headers.html:27 #: templates/debug_toolbar/panels/headers.html:48 msgid "Key" msgstr "键" #: templates/debug_toolbar/panels/headers.html:9 #: templates/debug_toolbar/panels/headers.html:28 #: templates/debug_toolbar/panels/headers.html:49 #: templates/debug_toolbar/panels/history_tr.html:23 #: templates/debug_toolbar/panels/request_variables.html:12 #: templates/debug_toolbar/panels/settings.html:6 #: templates/debug_toolbar/panels/timer.html:11 msgid "Value" msgstr "值" #: templates/debug_toolbar/panels/headers.html:22 msgid "Response headers" msgstr "响应头" #: templates/debug_toolbar/panels/headers.html:41 msgid "WSGI environ" msgstr "WSGI 环境变量" #: templates/debug_toolbar/panels/headers.html:43 msgid "" "Since the WSGI environ inherits the environment of the server, only a " "significant subset is shown below." msgstr "由于 WSGI 的环境变量继承自 server,所以下面只显示了一些重要的子集。" #: templates/debug_toolbar/panels/history.html:10 msgid "Method" msgstr "" #: templates/debug_toolbar/panels/history.html:11 #: templates/debug_toolbar/panels/staticfiles.html:43 msgid "Path" msgstr "路径" #: templates/debug_toolbar/panels/history.html:12 msgid "Request Variables" msgstr "" #: templates/debug_toolbar/panels/history.html:13 msgid "Status" msgstr "" #: templates/debug_toolbar/panels/history.html:14 #: templates/debug_toolbar/panels/sql.html:37 msgid "Action" msgstr "功能" #: templates/debug_toolbar/panels/history_tr.html:22 #: templates/debug_toolbar/panels/request_variables.html:11 msgid "Variable" msgstr "变量" #: templates/debug_toolbar/panels/profiling.html:5 msgid "Call" msgstr "调用" #: templates/debug_toolbar/panels/profiling.html:6 msgid "CumTime" msgstr "调用该函数及其内部调用其他函数花费的总时间" #: templates/debug_toolbar/panels/profiling.html:7 #: templates/debug_toolbar/panels/profiling.html:9 msgid "Per" msgstr "平均每次调用花费的时间" #: templates/debug_toolbar/panels/profiling.html:8 msgid "TotTime" msgstr "调用该函数花费的总时间" #: templates/debug_toolbar/panels/profiling.html:10 msgid "Count" msgstr "总的调用次数" #: templates/debug_toolbar/panels/request.html:3 msgid "View information" msgstr "View 信息" #: templates/debug_toolbar/panels/request.html:7 msgid "View function" msgstr "View 函数" #: templates/debug_toolbar/panels/request.html:10 msgid "URL name" msgstr "URL 名称" #: templates/debug_toolbar/panels/request.html:24 msgid "Cookies" msgstr "Cookies" #: templates/debug_toolbar/panels/request.html:27 msgid "No cookies" msgstr "没有 cookies" #: templates/debug_toolbar/panels/request.html:31 msgid "Session data" msgstr "Session 数据" #: templates/debug_toolbar/panels/request.html:34 msgid "No session data" msgstr "没有 session 数据" #: templates/debug_toolbar/panels/request.html:38 msgid "GET data" msgstr "GET 请求数据" #: templates/debug_toolbar/panels/request.html:41 msgid "No GET data" msgstr "没有 GET 请求数据" #: templates/debug_toolbar/panels/request.html:45 msgid "POST data" msgstr "POST 请求数据" #: templates/debug_toolbar/panels/request.html:48 msgid "No POST data" msgstr "没有 POST 请求数据" #: templates/debug_toolbar/panels/settings.html:5 msgid "Setting" msgstr "设置项" #: templates/debug_toolbar/panels/signals.html:5 msgid "Signal" msgstr "信号" #: templates/debug_toolbar/panels/signals.html:6 msgid "Receivers" msgstr "接收者" #: templates/debug_toolbar/panels/sql.html:6 #, python-format msgid "%(num)s query" msgid_plural "%(num)s queries" msgstr[0] "%(num)s 个查询" #: templates/debug_toolbar/panels/sql.html:8 #, python-format msgid "" "including %(count)s similar" msgstr "" #: templates/debug_toolbar/panels/sql.html:12 #, python-format msgid "" "and %(dupes)s duplicates" msgstr "" #: templates/debug_toolbar/panels/sql.html:34 msgid "Query" msgstr "查询" #: templates/debug_toolbar/panels/sql.html:35 #: templates/debug_toolbar/panels/timer.html:36 msgid "Timeline" msgstr "时间线" #: templates/debug_toolbar/panels/sql.html:52 #, python-format msgid "%(count)s similar queries." msgstr "" #: templates/debug_toolbar/panels/sql.html:58 #, python-format msgid "Duplicated %(dupes)s times." msgstr "" #: templates/debug_toolbar/panels/sql.html:95 msgid "Connection:" msgstr "连接:" #: templates/debug_toolbar/panels/sql.html:97 msgid "Isolation level:" msgstr "隔离级别" #: templates/debug_toolbar/panels/sql.html:100 msgid "Transaction status:" msgstr "事务状态:" #: templates/debug_toolbar/panels/sql.html:114 msgid "(unknown)" msgstr "(未知)" #: templates/debug_toolbar/panels/sql.html:123 msgid "No SQL queries were recorded during this request." msgstr "在处理这个请求期间没有记录到 SQL 查询。" #: templates/debug_toolbar/panels/sql_explain.html:4 msgid "SQL explained" msgstr "SQL explain 分析" #: templates/debug_toolbar/panels/sql_explain.html:9 #: templates/debug_toolbar/panels/sql_profile.html:10 #: templates/debug_toolbar/panels/sql_select.html:9 msgid "Executed SQL" msgstr "执行的 SQL 语句" #: templates/debug_toolbar/panels/sql_explain.html:13 #: templates/debug_toolbar/panels/sql_profile.html:14 #: templates/debug_toolbar/panels/sql_select.html:13 msgid "Database" msgstr "数据库" #: templates/debug_toolbar/panels/sql_profile.html:4 msgid "SQL profiled" msgstr "SQL 性能分析" #: templates/debug_toolbar/panels/sql_profile.html:37 msgid "Error" msgstr "错误" #: templates/debug_toolbar/panels/sql_select.html:4 msgid "SQL selected" msgstr "选中的 SQL 语句" #: templates/debug_toolbar/panels/sql_select.html:36 msgid "Empty set" msgstr "空集合" #: templates/debug_toolbar/panels/staticfiles.html:3 msgid "Static file path" msgid_plural "Static file paths" msgstr[0] "静态文件路径" #: templates/debug_toolbar/panels/staticfiles.html:7 #, python-format msgid "(prefix %(prefix)s)" msgstr "(前缀 %(prefix)s)" #: templates/debug_toolbar/panels/staticfiles.html:11 #: templates/debug_toolbar/panels/staticfiles.html:22 #: templates/debug_toolbar/panels/staticfiles.html:34 #: templates/debug_toolbar/panels/templates.html:10 #: templates/debug_toolbar/panels/templates.html:30 #: templates/debug_toolbar/panels/templates.html:47 msgid "None" msgstr "空" #: templates/debug_toolbar/panels/staticfiles.html:14 msgid "Static file app" msgid_plural "Static file apps" msgstr[0] "包含静态文件的应用" #: templates/debug_toolbar/panels/staticfiles.html:25 msgid "Static file" msgid_plural "Static files" msgstr[0] "静态文件" #: templates/debug_toolbar/panels/staticfiles.html:39 #, python-format msgid "%(payload_count)s file" msgid_plural "%(payload_count)s files" msgstr[0] "%(payload_count)s 个文件" #: templates/debug_toolbar/panels/staticfiles.html:44 msgid "Location" msgstr "位置" #: templates/debug_toolbar/panels/template_source.html:4 msgid "Template source:" msgstr "模板源:" #: templates/debug_toolbar/panels/templates.html:2 msgid "Template path" msgid_plural "Template paths" msgstr[0] "模板路径" #: templates/debug_toolbar/panels/templates.html:13 msgid "Template" msgid_plural "Templates" msgstr[0] "模板" #: templates/debug_toolbar/panels/templates.html:22 #: templates/debug_toolbar/panels/templates.html:40 msgid "Toggle context" msgstr "切换上下文" #: templates/debug_toolbar/panels/templates.html:33 msgid "Context processor" msgid_plural "Context processors" msgstr[0] "Context processors" #: templates/debug_toolbar/panels/timer.html:2 msgid "Resource usage" msgstr "资源使用" #: templates/debug_toolbar/panels/timer.html:10 msgid "Resource" msgstr "资源" #: templates/debug_toolbar/panels/timer.html:26 msgid "Browser timing" msgstr "浏览器计时" #: templates/debug_toolbar/panels/timer.html:35 msgid "Timing attribute" msgstr "计时属性" #: templates/debug_toolbar/panels/timer.html:37 msgid "Milliseconds since navigation start (+length)" msgstr "导航开始后的毫秒 (+长度)" #: templates/debug_toolbar/panels/versions.html:10 msgid "Package" msgstr "" #: templates/debug_toolbar/panels/versions.html:11 msgid "Name" msgstr "名称" #: templates/debug_toolbar/panels/versions.html:12 msgid "Version" msgstr "版本" #: templates/debug_toolbar/redirect.html:10 msgid "Location:" msgstr "位置:" #: templates/debug_toolbar/redirect.html:12 msgid "" "The Django Debug Toolbar has intercepted a redirect to the above URL for " "debug viewing purposes. You can click the above link to continue with the " "redirect as normal." msgstr "Django Debug Toolbar 为了调试目的拦截了一个重定向到上面 URL 的请求。 您可以点击上面的链接继续执行重定向操作。" #: views.py:16 msgid "" "Data for this panel isn't available anymore. Please reload the page and " "retry." msgstr "当前面板的数据暂不可用。请刷新页面并重试。" python-django-debug-toolbar-5.2.0/debug_toolbar/management/000077500000000000000000000000001500406072000237415ustar00rootroot00000000000000python-django-debug-toolbar-5.2.0/debug_toolbar/management/__init__.py000066400000000000000000000000001500406072000260400ustar00rootroot00000000000000python-django-debug-toolbar-5.2.0/debug_toolbar/management/commands/000077500000000000000000000000001500406072000255425ustar00rootroot00000000000000python-django-debug-toolbar-5.2.0/debug_toolbar/management/commands/__init__.py000066400000000000000000000000001500406072000276410ustar00rootroot00000000000000python-django-debug-toolbar-5.2.0/debug_toolbar/management/commands/debugsqlshell.py000066400000000000000000000020361500406072000307530ustar00rootroot00000000000000from time import perf_counter import sqlparse from django.core.management.commands.shell import Command from django.db import connection if connection.vendor == "postgresql": from django.db.backends.postgresql import base as base_module else: from django.db.backends import utils as base_module # 'debugsqlshell' is the same as the 'shell'. # Command is required to exist to be loaded via # django.core.managementload_command_class __all__ = ["Command", "PrintQueryWrapper"] class PrintQueryWrapper(base_module.CursorDebugWrapper): def execute(self, sql, params=()): start_time = perf_counter() try: return self.cursor.execute(sql, params) finally: raw_sql = self.db.ops.last_executed_query(self.cursor, sql, params) end_time = perf_counter() duration = (end_time - start_time) * 1000 formatted_sql = sqlparse.format(raw_sql, reindent=True) print(f"{formatted_sql} [{duration:.2f}ms]") base_module.CursorDebugWrapper = PrintQueryWrapper python-django-debug-toolbar-5.2.0/debug_toolbar/middleware.py000066400000000000000000000157551500406072000243310ustar00rootroot00000000000000""" Debug Toolbar middleware """ import re import socket from functools import cache from asgiref.sync import ( async_to_sync, iscoroutinefunction, markcoroutinefunction, sync_to_async, ) from django.conf import settings from django.utils.module_loading import import_string from debug_toolbar import settings as dt_settings from debug_toolbar.toolbar import DebugToolbar from debug_toolbar.utils import clear_stack_trace_caches, is_processable_html_response def show_toolbar(request): """ Default function to determine whether to show the toolbar on a given page. """ if not settings.DEBUG: return False # Test: settings if request.META.get("REMOTE_ADDR") in settings.INTERNAL_IPS: return True # Test: Docker try: # This is a hack for docker installations. It attempts to look # up the IP address of the docker host. # This is not guaranteed to work. docker_ip = ( # Convert the last segment of the IP address to be .1 ".".join(socket.gethostbyname("host.docker.internal").rsplit(".")[:-1]) + ".1" ) if request.META.get("REMOTE_ADDR") == docker_ip: return True except socket.gaierror: # It's fine if the lookup errored since they may not be using docker pass # No test passed return False @cache def show_toolbar_func_or_path(): """ Fetch the show toolbar callback from settings Cached to avoid importing multiple times. """ # If SHOW_TOOLBAR_CALLBACK is a string, which is the recommended # setup, resolve it to the corresponding callable. func_or_path = dt_settings.get_config()["SHOW_TOOLBAR_CALLBACK"] if isinstance(func_or_path, str): return import_string(func_or_path) else: return func_or_path def get_show_toolbar(async_mode): """ Get the callback function to show the toolbar. Will wrap the function with sync_to_async or async_to_sync depending on the status of async_mode and whether the underlying function is a coroutine. """ show_toolbar = show_toolbar_func_or_path() is_coroutine = iscoroutinefunction(show_toolbar) if is_coroutine and not async_mode: show_toolbar = async_to_sync(show_toolbar) elif not is_coroutine and async_mode: show_toolbar = sync_to_async(show_toolbar) return show_toolbar class DebugToolbarMiddleware: """ Middleware to set up Debug Toolbar on incoming request and render toolbar on outgoing response. """ sync_capable = True async_capable = True def __init__(self, get_response): self.get_response = get_response # If get_response is a coroutine function, turns us into async mode so # a thread is not consumed during a whole request. self.async_mode = iscoroutinefunction(self.get_response) if self.async_mode: # Mark the class as async-capable, but do the actual switch inside # __call__ to avoid swapping out dunder methods. markcoroutinefunction(self) def __call__(self, request): # Decide whether the toolbar is active for this request. if self.async_mode: return self.__acall__(request) # Decide whether the toolbar is active for this request. show_toolbar = get_show_toolbar(async_mode=self.async_mode) if not show_toolbar(request) or DebugToolbar.is_toolbar_request(request): return self.get_response(request) toolbar = DebugToolbar(request, self.get_response) # Activate instrumentation ie. monkey-patch. for panel in toolbar.enabled_panels: panel.enable_instrumentation() try: # Run panels like Django middleware. response = toolbar.process_request(request) finally: clear_stack_trace_caches() # Deactivate instrumentation ie. monkey-unpatch. This must run # regardless of the response. Keep 'return' clauses below. for panel in reversed(toolbar.enabled_panels): panel.disable_instrumentation() return self._postprocess(request, response, toolbar) async def __acall__(self, request): # Decide whether the toolbar is active for this request. show_toolbar = get_show_toolbar(async_mode=self.async_mode) if not await show_toolbar(request) or DebugToolbar.is_toolbar_request(request): response = await self.get_response(request) return response toolbar = DebugToolbar(request, self.get_response) # Activate instrumentation ie. monkey-patch. for panel in toolbar.enabled_panels: if hasattr(panel, "aenable_instrumentation"): await panel.aenable_instrumentation() else: panel.enable_instrumentation() try: # Run panels like Django middleware. response = await toolbar.process_request(request) finally: clear_stack_trace_caches() # Deactivate instrumentation ie. monkey-unpatch. This must run # regardless of the response. Keep 'return' clauses below. for panel in reversed(toolbar.enabled_panels): panel.disable_instrumentation() return self._postprocess(request, response, toolbar) def _postprocess(self, request, response, toolbar): """ Post-process the response. """ # Generate the stats for all requests when the toolbar is being shown, # but not necessarily inserted. for panel in reversed(toolbar.enabled_panels): panel.generate_stats(request, response) panel.generate_server_timing(request, response) # Always render the toolbar for the history panel, even if it is not # included in the response. rendered = toolbar.render_toolbar() for header, value in self.get_headers(request, toolbar.enabled_panels).items(): response.headers[header] = value # Check for responses where the toolbar can't be inserted. if not is_processable_html_response(response): return response # Insert the toolbar in the response. content = response.content.decode(response.charset) insert_before = dt_settings.get_config()["INSERT_BEFORE"] pattern = re.escape(insert_before) bits = re.split(pattern, content, flags=re.IGNORECASE) if len(bits) > 1: bits[-2] += rendered response.content = insert_before.join(bits) if "Content-Length" in response: response["Content-Length"] = len(response.content) return response @staticmethod def get_headers(request, panels): headers = {} for panel in panels: for header, value in panel.get_headers(request).items(): if header in headers: headers[header] += f", {value}" else: headers[header] = value return headers python-django-debug-toolbar-5.2.0/debug_toolbar/panels/000077500000000000000000000000001500406072000231075ustar00rootroot00000000000000python-django-debug-toolbar-5.2.0/debug_toolbar/panels/__init__.py000066400000000000000000000204221500406072000252200ustar00rootroot00000000000000from django.core.handlers.asgi import ASGIRequest from django.template.loader import render_to_string from debug_toolbar import settings as dt_settings from debug_toolbar.utils import get_name_from_obj class Panel: """ Base class for panels. """ is_async = False def __init__(self, toolbar, get_response): self.toolbar = toolbar self.get_response = get_response # Private panel properties @property def panel_id(self): return self.__class__.__name__ @property def enabled(self) -> bool: # check if the panel is async compatible if not self.is_async and isinstance(self.toolbar.request, ASGIRequest): return False # The user's cookies should override the default value cookie_value = self.toolbar.request.COOKIES.get("djdt" + self.panel_id) if cookie_value is not None: return cookie_value == "on" # Check to see if settings has a default value for it disabled_panels = dt_settings.get_config()["DISABLE_PANELS"] panel_path = get_name_from_obj(self) # Some panels such as the SQLPanel and TemplatesPanel exist in a # panel module, but can be disabled without panel in the path. # For that reason, replace .panel. in the path and check for that # value in the disabled panels as well. return ( panel_path not in disabled_panels and panel_path.replace(".panel.", ".") not in disabled_panels ) # Titles and content @property def nav_title(self): """ Title shown in the side bar. Defaults to :attr:`title`. """ return self.title @property def nav_subtitle(self): """ Subtitle shown in the side bar. Defaults to the empty string. """ return "" @property def has_content(self): """ ``True`` if the panel can be displayed in full screen, ``False`` if it's only shown in the side bar. Defaults to ``True``. """ return True @property def is_historical(self): """ Panel supports rendering historical values. Defaults to :attr:`has_content`. """ return self.has_content @property def title(self): """ Title shown in the panel when it's displayed in full screen. Mandatory, unless the panel sets :attr:`has_content` to ``False``. """ raise NotImplementedError @property def template(self): """ Template used to render :attr:`content`. Mandatory, unless the panel sets :attr:`has_content` to ``False`` or overrides :attr:`content`. """ raise NotImplementedError @property def content(self): """ Content of the panel when it's displayed in full screen. By default this renders the template defined by :attr:`template`. Statistics stored with :meth:`record_stats` are available in the template's context. """ if self.has_content: return render_to_string(self.template, self.get_stats()) @property def scripts(self): """ Scripts used by the HTML content of the panel when it's displayed. When a panel is rendered on the frontend, the ``djdt.panel.render`` JavaScript event will be dispatched. The scripts can listen for this event to support dynamic functionality. """ return [] # Panel early initialization @classmethod def ready(cls): """ Perform early initialization for the panel. This should only include initialization or instrumentation that needs to be done unconditionally for the panel regardless of whether it is enabled for a particular request. It should be idempotent. """ # URLs for panel-specific views @classmethod def get_urls(cls): """ Return URLpatterns, if the panel has its own views. """ return [] # Enable and disable (expensive) instrumentation, must be idempotent def enable_instrumentation(self): """ Enable instrumentation to gather data for this panel. This usually means monkey-patching (!) or registering signal receivers. Any instrumentation with a non-negligible effect on performance should be installed by this method rather than at import time. Unless the toolbar or this panel is disabled, this method will be called early in ``DebugToolbarMiddleware``. It should be idempotent. Add the ``aenable_instrumentation`` method to a panel subclass to support async logic for instrumentation. """ def disable_instrumentation(self): """ Disable instrumentation to gather data for this panel. This is the opposite of :meth:`enable_instrumentation`. Unless the toolbar or this panel is disabled, this method will be called late in the middleware. It should be idempotent. """ # Store and retrieve stats (shared between panels for no good reason) def record_stats(self, stats): """ Store data gathered by the panel. ``stats`` is a :class:`dict`. Each call to ``record_stats`` updates the statistics dictionary. """ self.toolbar.stats.setdefault(self.panel_id, {}).update(stats) def get_stats(self): """ Access data stored by the panel. Returns a :class:`dict`. """ return self.toolbar.stats.get(self.panel_id, {}) def record_server_timing(self, key, title, value): """ Store data gathered by the panel. ``stats`` is a :class:`dict`. Each call to ``record_stats`` updates the statistics dictionary. """ data = {key: {"title": title, "value": value}} self.toolbar.server_timing_stats.setdefault(self.panel_id, {}).update(data) def get_server_timing_stats(self): """ Access data stored by the panel. Returns a :class:`dict`. """ return self.toolbar.server_timing_stats.get(self.panel_id, {}) # Standard middleware methods def process_request(self, request): """ Like __call__ in Django's middleware. Write panel logic related to the request there. Save data with :meth:`record_stats`. Return the existing response or overwrite it. """ return self.get_response(request) def get_headers(self, request): """ Get headers the panel needs to set. Called after :meth:`process_request ` and :meth:`process_request` Header values will be appended if multiple panels need to set it. By default it sets the Server-Timing header. Return dict of headers to be appended. """ headers = {} stats = self.get_server_timing_stats() if stats: headers["Server-Timing"] = ", ".join( # example: `SQLPanel_sql_time;dur=0;desc="SQL 0 queries"` '{}_{};dur={};desc="{}"'.format( self.panel_id, key, record.get("value"), record.get("title") ) for key, record in stats.items() ) return headers def generate_stats(self, request, response): """ Write panel logic related to the response there. Post-process data gathered while the view executed. Save data with :meth:`record_stats`. Called after :meth:`process_request `. Does not return a value. """ def generate_server_timing(self, request, response): """ Similar to :meth:`generate_stats `, Generate stats for Server Timing https://w3c.github.io/server-timing/ Does not return a value. """ @classmethod def run_checks(cls): """ Check that the integration is configured correctly for the panel. This will be called as a part of the Django checks system when the application is being setup. Return a list of :class:`django.core.checks.CheckMessage` instances. """ return [] python-django-debug-toolbar-5.2.0/debug_toolbar/panels/alerts.py000066400000000000000000000120611500406072000247530ustar00rootroot00000000000000from html.parser import HTMLParser from django.utils.translation import gettext_lazy as _ from debug_toolbar.panels import Panel from debug_toolbar.utils import is_processable_html_response class FormParser(HTMLParser): """ HTML form parser, used to check for invalid configurations of forms that take file inputs. """ def __init__(self): super().__init__() self.in_form = False self.current_form = {} self.forms = [] self.form_ids = [] self.referenced_file_inputs = [] def handle_starttag(self, tag, attrs): attrs = dict(attrs) if tag == "form": self.in_form = True form_id = attrs.get("id") if form_id: self.form_ids.append(form_id) self.current_form = { "file_form": False, "form_attrs": attrs, "submit_element_attrs": [], } elif ( self.in_form and tag == "input" and attrs.get("type") == "file" and (not attrs.get("form") or attrs.get("form") == "") ): self.current_form["file_form"] = True elif ( self.in_form and ( (tag == "input" and attrs.get("type") in {"submit", "image"}) or tag == "button" ) and (not attrs.get("form") or attrs.get("form") == "") ): self.current_form["submit_element_attrs"].append(attrs) elif tag == "input" and attrs.get("form"): self.referenced_file_inputs.append(attrs) def handle_endtag(self, tag): if tag == "form" and self.in_form: self.forms.append(self.current_form) self.in_form = False class AlertsPanel(Panel): """ A panel to alert users to issues. """ messages = { "form_id_missing_enctype": _( 'Form with id "{form_id}" contains file input, but does not have the attribute enctype="multipart/form-data".' ), "form_missing_enctype": _( 'Form contains file input, but does not have the attribute enctype="multipart/form-data".' ), "input_refs_form_missing_enctype": _( 'Input element references form with id "{form_id}", but the form does not have the attribute enctype="multipart/form-data".' ), } title = _("Alerts") is_async = True template = "debug_toolbar/panels/alerts.html" def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.alerts = [] @property def nav_subtitle(self): if alerts := self.get_stats().get("alerts"): alert_text = "alert" if len(alerts) == 1 else "alerts" return f"{len(alerts)} {alert_text}" else: return "" def add_alert(self, alert): self.alerts.append(alert) def check_invalid_file_form_configuration(self, html_content): """ Inspects HTML content for a form that includes a file input but does not have the encoding type set to multipart/form-data, and warns the user if so. """ parser = FormParser() parser.feed(html_content) # Check for file inputs directly inside a form that do not reference # any form through the form attribute for form in parser.forms: if ( form["file_form"] and form["form_attrs"].get("enctype") != "multipart/form-data" and not any( elem.get("formenctype") == "multipart/form-data" for elem in form["submit_element_attrs"] ) ): if form_id := form["form_attrs"].get("id"): alert = self.messages["form_id_missing_enctype"].format( form_id=form_id ) else: alert = self.messages["form_missing_enctype"] self.add_alert({"alert": alert}) # Check for file inputs that reference a form form_attrs_by_id = { form["form_attrs"].get("id"): form["form_attrs"] for form in parser.forms } for attrs in parser.referenced_file_inputs: form_id = attrs.get("form") if form_id and attrs.get("type") == "file": form_attrs = form_attrs_by_id.get(form_id) if form_attrs and form_attrs.get("enctype") != "multipart/form-data": alert = self.messages["input_refs_form_missing_enctype"].format( form_id=form_id ) self.add_alert({"alert": alert}) return self.alerts def generate_stats(self, request, response): if not is_processable_html_response(response): return html_content = response.content.decode(response.charset) self.check_invalid_file_form_configuration(html_content) # Further alert checks can go here # Write all alerts to record_stats self.record_stats({"alerts": self.alerts}) python-django-debug-toolbar-5.2.0/debug_toolbar/panels/cache.py000066400000000000000000000164671500406072000245420ustar00rootroot00000000000000import functools from time import perf_counter from asgiref.local import Local from django.conf import settings from django.core.cache import CacheHandler, caches from django.utils.translation import gettext_lazy as _, ngettext from debug_toolbar.panels import Panel from debug_toolbar.utils import get_stack_trace, get_template_info, render_stacktrace # The order of the methods in this list determines the order in which they are listed in # the Commands table in the panel content. WRAPPED_CACHE_METHODS = [ "add", "get", "set", "get_or_set", "touch", "delete", "clear", "get_many", "set_many", "delete_many", "has_key", "incr", "decr", "incr_version", "decr_version", ] def _monkey_patch_method(cache, name): original_method = getattr(cache, name) @functools.wraps(original_method) def wrapper(*args, **kwargs): panel = cache._djdt_panel if panel is None: return original_method(*args, **kwargs) else: return panel._record_call(cache, name, original_method, args, kwargs) setattr(cache, name, wrapper) def _monkey_patch_cache(cache): if not hasattr(cache, "_djdt_patched"): for name in WRAPPED_CACHE_METHODS: _monkey_patch_method(cache, name) cache._djdt_patched = True class CachePanel(Panel): """ Panel that displays the cache statistics. """ template = "debug_toolbar/panels/cache.html" is_async = True _context_locals = Local() def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.total_time = 0 self.hits = 0 self.misses = 0 self.calls = [] self.counts = dict.fromkeys(WRAPPED_CACHE_METHODS, 0) @classmethod def current_instance(cls): """ Return the currently enabled CachePanel instance or None. If a request is in process with a CachePanel enabled, this will return that panel (based on the current thread or async task). Otherwise it will return None. """ return getattr(cls._context_locals, "current_instance", None) @classmethod def ready(cls): if not hasattr(CacheHandler, "_djdt_patched"): # Wrap the CacheHander.create_connection() method to monkey patch any new # cache connections that are opened while instrumentation is enabled. In # the interests of thread safety, this is done once at startup time and # never removed. original_method = CacheHandler.create_connection @functools.wraps(original_method) def wrapper(self, alias): cache = original_method(self, alias) panel = cls.current_instance() if panel is not None: _monkey_patch_cache(cache) cache._djdt_panel = panel return cache CacheHandler.create_connection = wrapper CacheHandler._djdt_patched = True def _store_call_info( self, name, time_taken, return_value, args, kwargs, trace, template_info, backend, ): if name == "get" or name == "get_or_set": if return_value is None: self.misses += 1 else: self.hits += 1 elif name == "get_many": keys = kwargs["keys"] if "keys" in kwargs else args[0] self.hits += len(return_value) self.misses += len(keys) - len(return_value) time_taken *= 1000 self.total_time += time_taken self.counts[name] += 1 self.calls.append( { "time": time_taken, "name": name, "args": args, "kwargs": kwargs, "trace": render_stacktrace(trace), "template_info": template_info, "backend": backend, } ) def _record_call(self, cache, name, original_method, args, kwargs): # Some cache backends implement certain cache methods in terms of other cache # methods (e.g. get_or_set() in terms of get() and add()). In order to only # record the calls made directly by the user code, set the cache's _djdt_panel # attribute to None before invoking the original method, which will cause the # monkey-patched cache methods to skip recording additional calls made during # the course of this call, and then reset it back afterward. cache._djdt_panel = None try: start_time = perf_counter() value = original_method(*args, **kwargs) t = perf_counter() - start_time finally: cache._djdt_panel = self self._store_call_info( name=name, time_taken=t, return_value=value, args=args, kwargs=kwargs, trace=get_stack_trace(skip=2), template_info=get_template_info(), backend=cache, ) return value # Implement the Panel API nav_title = _("Cache") @property def nav_subtitle(self): cache_calls = len(self.calls) return ngettext( "%(cache_calls)d call in %(time).2fms", "%(cache_calls)d calls in %(time).2fms", cache_calls, ) % {"cache_calls": cache_calls, "time": self.total_time} @property def title(self): count = len(getattr(settings, "CACHES", ["default"])) return ngettext( "Cache calls from %(count)d backend", "Cache calls from %(count)d backends", count, ) % {"count": count} def enable_instrumentation(self): # Monkey patch all open cache connections. Django maintains cache connections # on a per-thread/async task basis, so this will not affect any concurrent # requests. The monkey patch of CacheHander.create_connection() installed in # the .ready() method will ensure that any new cache connections that get opened # during this request will also be monkey patched. for cache in caches.all(initialized_only=True): _monkey_patch_cache(cache) cache._djdt_panel = self # Mark this panel instance as the current one for the active thread/async task # context. This will be used by the CacheHander.create_connection() monkey # patch. self._context_locals.current_instance = self def disable_instrumentation(self): if hasattr(self._context_locals, "current_instance"): del self._context_locals.current_instance for cache in caches.all(initialized_only=True): cache._djdt_panel = None def generate_stats(self, request, response): self.record_stats( { "total_calls": len(self.calls), "calls": self.calls, "total_time": self.total_time, "hits": self.hits, "misses": self.misses, "counts": self.counts, } ) def generate_server_timing(self, request, response): stats = self.get_stats() value = stats.get("total_time", 0) title = "Cache {} Calls".format(stats.get("total_calls", 0)) self.record_server_timing("total_time", title, value) python-django-debug-toolbar-5.2.0/debug_toolbar/panels/headers.py000066400000000000000000000034301500406072000250740ustar00rootroot00000000000000from django.utils.translation import gettext_lazy as _ from debug_toolbar.panels import Panel class HeadersPanel(Panel): """ A panel to display HTTP headers. """ # List of environment variables we want to display ENVIRON_FILTER = { "CONTENT_LENGTH", "CONTENT_TYPE", "DJANGO_SETTINGS_MODULE", "GATEWAY_INTERFACE", "QUERY_STRING", "PATH_INFO", "PYTHONPATH", "REMOTE_ADDR", "REMOTE_HOST", "REQUEST_METHOD", "SCRIPT_NAME", "SERVER_NAME", "SERVER_PORT", "SERVER_PROTOCOL", "SERVER_SOFTWARE", "TZ", } title = _("Headers") is_async = True template = "debug_toolbar/panels/headers.html" def process_request(self, request): wsgi_env = sorted(request.META.items()) self.request_headers = { unmangle(k): v for (k, v) in wsgi_env if is_http_header(k) } if "Cookie" in self.request_headers: self.request_headers["Cookie"] = "=> see Request panel" self.environ = {k: v for (k, v) in wsgi_env if k in self.ENVIRON_FILTER} self.record_stats( {"request_headers": self.request_headers, "environ": self.environ} ) return super().process_request(request) def generate_stats(self, request, response): self.response_headers = dict(sorted(response.items())) self.record_stats({"response_headers": self.response_headers}) def is_http_header(wsgi_key): # The WSGI spec says that keys should be str objects in the environ dict, # but this isn't true in practice. See issues #449 and #482. return isinstance(wsgi_key, str) and wsgi_key.startswith("HTTP_") def unmangle(wsgi_key): return wsgi_key[5:].replace("_", "-").title() python-django-debug-toolbar-5.2.0/debug_toolbar/panels/history/000077500000000000000000000000001500406072000246105ustar00rootroot00000000000000python-django-debug-toolbar-5.2.0/debug_toolbar/panels/history/__init__.py000066400000000000000000000001301500406072000267130ustar00rootroot00000000000000from debug_toolbar.panels.history.panel import HistoryPanel __all__ = ["HistoryPanel"] python-django-debug-toolbar-5.2.0/debug_toolbar/panels/history/forms.py000066400000000000000000000004651500406072000263150ustar00rootroot00000000000000from django import forms class HistoryStoreForm(forms.Form): """ Validate params store_id: The key for the store instance to be fetched. """ store_id = forms.CharField(widget=forms.HiddenInput()) exclude_history = forms.BooleanField(widget=forms.HiddenInput(), required=False) python-django-debug-toolbar-5.2.0/debug_toolbar/panels/history/panel.py000066400000000000000000000072731500406072000262720ustar00rootroot00000000000000import contextlib import json from django.http.request import RawPostDataException from django.template.loader import render_to_string from django.templatetags.static import static from django.urls import path from django.utils import timezone from django.utils.translation import gettext_lazy as _ from debug_toolbar.panels import Panel from debug_toolbar.panels.history import views from debug_toolbar.panels.history.forms import HistoryStoreForm class HistoryPanel(Panel): """A panel to display History""" is_async = True title = _("History") nav_title = _("History") template = "debug_toolbar/panels/history.html" def get_headers(self, request): headers = super().get_headers(request) observe_request = self.toolbar.get_observe_request() store_id = self.toolbar.store_id if store_id and observe_request(request): headers["djdt-store-id"] = store_id return headers @property def enabled(self): # Do not show the history panel if the panels are rendered on request # rather than loaded via ajax. return super().enabled and not self.toolbar.should_render_panels() @property def is_historical(self): """The HistoryPanel should not be included in the historical panels.""" return False @classmethod def get_urls(cls): return [ path("history_sidebar/", views.history_sidebar, name="history_sidebar"), path("history_refresh/", views.history_refresh, name="history_refresh"), ] @property def nav_subtitle(self): return self.get_stats().get("request_url", "") def generate_stats(self, request, response): try: if request.method == "GET": data = request.GET.copy() else: data = request.POST.copy() # GraphQL tends to not be populated in POST. If the request seems # empty, check if it's a JSON request. if ( not data and request.body and request.headers.get("content-type") == "application/json" ): with contextlib.suppress(ValueError): data = json.loads(request.body) except RawPostDataException: # It is not guaranteed that we may read the request data (again). data = None self.record_stats( { "request_url": request.get_full_path(), "request_method": request.method, "status_code": response.status_code, "data": data, "time": timezone.now(), } ) @property def content(self): """Content of the panel when it's displayed in full screen. Fetch every store for the toolbar and include it in the template. """ stores = {} for id, toolbar in reversed(self.toolbar._store.items()): stores[id] = { "toolbar": toolbar, "form": HistoryStoreForm( initial={"store_id": id, "exclude_history": True} ), } return render_to_string( self.template, { "current_store_id": self.toolbar.store_id, "stores": stores, "refresh_form": HistoryStoreForm( initial={ "store_id": self.toolbar.store_id, "exclude_history": True, } ), }, ) @property def scripts(self): scripts = super().scripts scripts.append(static("debug_toolbar/js/history.js")) return scripts python-django-debug-toolbar-5.2.0/debug_toolbar/panels/history/views.py000066400000000000000000000053551500406072000263270ustar00rootroot00000000000000from django.http import HttpResponseBadRequest, JsonResponse from django.template.loader import render_to_string from debug_toolbar._compat import login_not_required from debug_toolbar.decorators import render_with_toolbar_language, require_show_toolbar from debug_toolbar.panels.history.forms import HistoryStoreForm from debug_toolbar.toolbar import DebugToolbar @login_not_required @require_show_toolbar @render_with_toolbar_language def history_sidebar(request): """Returns the selected debug toolbar history snapshot.""" form = HistoryStoreForm(request.GET) if form.is_valid(): store_id = form.cleaned_data["store_id"] toolbar = DebugToolbar.fetch(store_id) exclude_history = form.cleaned_data["exclude_history"] context = {} if toolbar is None: # When the store_id has been popped already due to # RESULTS_CACHE_SIZE return JsonResponse(context) for panel in toolbar.panels: if exclude_history and not panel.is_historical: continue panel_context = {"panel": panel} context[panel.panel_id] = { "button": render_to_string( "debug_toolbar/includes/panel_button.html", panel_context ), "content": render_to_string( "debug_toolbar/includes/panel_content.html", panel_context ), } return JsonResponse(context) return HttpResponseBadRequest("Form errors") @login_not_required @require_show_toolbar @render_with_toolbar_language def history_refresh(request): """Returns the refreshed list of table rows for the History Panel.""" form = HistoryStoreForm(request.GET) if form.is_valid(): requests = [] # Convert to list to handle mutations happening in parallel for id, toolbar in list(DebugToolbar._store.items()): requests.append( { "id": id, "content": render_to_string( "debug_toolbar/panels/history_tr.html", { "id": id, "store_context": { "toolbar": toolbar, "form": HistoryStoreForm( initial={ "store_id": id, "exclude_history": True, } ), }, }, ), } ) return JsonResponse({"requests": requests}) return HttpResponseBadRequest("Form errors") python-django-debug-toolbar-5.2.0/debug_toolbar/panels/profiling.py000066400000000000000000000132601500406072000254540ustar00rootroot00000000000000import cProfile import os from colorsys import hsv_to_rgb from pstats import Stats from django.conf import settings from django.utils.html import format_html from django.utils.translation import gettext_lazy as _ from debug_toolbar import settings as dt_settings from debug_toolbar.panels import Panel class FunctionCall: def __init__( self, statobj, func, depth=0, stats=None, id=0, parent_ids=None, hsv=(0, 0.5, 1) ): self.statobj = statobj self.func = func if stats: self.stats = stats else: self.stats = statobj.stats[func][:4] self.depth = depth self.id = id self.parent_ids = parent_ids or [] self.hsv = hsv def parent_classes(self): return self.parent_classes def background(self): r, g, b = hsv_to_rgb(*self.hsv) return f"rgb({r * 100:f}%,{g * 100:f}%,{b * 100:f}%)" def is_project_func(self): """ Check if the function is from the project code. Project code is identified by the BASE_DIR setting which is used in Django projects by default. """ if hasattr(settings, "BASE_DIR"): file_name, _, _ = self.func base_dir = str(settings.BASE_DIR) file_name = os.path.normpath(file_name) base_dir = os.path.normpath(base_dir) return file_name.startswith(base_dir) and not any( directory in file_name.split(os.path.sep) for directory in ["site-packages", "dist-packages"] ) return None def func_std_string(self): # match what old profile produced func_name = self.func if func_name[:2] == ("~", 0): # special case for built-in functions name = func_name[2] if name.startswith("<") and name.endswith(">"): return f"{{{name[1:-1]}}}" else: return name else: file_name, line_num, method = self.func idx = file_name.find("/site-packages/") if idx > -1: file_name = file_name[(idx + 14) :] split_path = file_name.rsplit(os.sep, 1) if len(split_path) > 1: file_path, file_name = file_name.rsplit(os.sep, 1) else: file_path = "" return format_html( '{0}/' '{1}' ' in {3}' '({2})', file_path, file_name, line_num, method, ) def subfuncs(self): h, s, v = self.hsv count = len(self.statobj.all_callees[self.func]) for i, (func, stats) in enumerate(self.statobj.all_callees[self.func].items()): h1 = h + ((i + 1) / count) / (self.depth + 1) s1 = 0 if self.stats[3] == 0 else s * (stats[3] / self.stats[3]) yield FunctionCall( self.statobj, func, self.depth + 1, stats=stats, id=str(self.id) + "_" + str(i), parent_ids=self.parent_ids + [self.id], hsv=(h1, s1, 1), ) def count(self): return self.stats[1] def tottime(self): return self.stats[2] def cumtime(self): cc, nc, tt, ct = self.stats return self.stats[3] def tottime_per_call(self): cc, nc, tt, ct = self.stats if nc == 0: return 0 return tt / nc def cumtime_per_call(self): cc, nc, tt, ct = self.stats if cc == 0: return 0 return ct / cc def indent(self): return 16 * self.depth class ProfilingPanel(Panel): """ Panel that displays profiling information. """ is_async = False title = _("Profiling") template = "debug_toolbar/panels/profiling.html" capture_project_code = dt_settings.get_config()["PROFILER_CAPTURE_PROJECT_CODE"] def process_request(self, request): self.profiler = cProfile.Profile() return self.profiler.runcall(super().process_request, request) def add_node(self, func_list, func, max_depth, cum_time): func_list.append(func) func.has_subfuncs = False if func.depth < max_depth: for subfunc in func.subfuncs(): # Always include the user's code if subfunc.stats[3] >= cum_time or ( self.capture_project_code and subfunc.is_project_func() and subfunc.stats[3] > 0 ): func.has_subfuncs = True self.add_node(func_list, subfunc, max_depth, cum_time) def generate_stats(self, request, response): if not hasattr(self, "profiler"): return None # Could be delayed until the panel content is requested (perf. optim.) self.profiler.create_stats() self.stats = Stats(self.profiler) self.stats.calc_callees() root_func = cProfile.label(super().process_request.__code__) if root_func in self.stats.stats: root = FunctionCall(self.stats, root_func, depth=0) func_list = [] cum_time_threshold = ( root.stats[3] / dt_settings.get_config()["PROFILER_THRESHOLD_RATIO"] ) self.add_node( func_list, root, dt_settings.get_config()["PROFILER_MAX_DEPTH"], cum_time_threshold, ) self.record_stats({"func_list": func_list}) python-django-debug-toolbar-5.2.0/debug_toolbar/panels/redirects.py000066400000000000000000000040341500406072000254460ustar00rootroot00000000000000from inspect import iscoroutine from django.template.response import SimpleTemplateResponse from django.utils.translation import gettext_lazy as _ from debug_toolbar.panels import Panel class RedirectsPanel(Panel): """ Panel that intercepts redirects and displays a page with debug info. """ has_content = False is_async = True nav_title = _("Intercept redirects") def _process_response(self, response): """ Common response processing logic. """ if 300 <= response.status_code < 400: if redirect_to := response.get("Location"): response = self.get_interception_response(response, redirect_to) response.render() return response async def aprocess_request(self, request, response_coroutine): """ Async version of process_request. used for accessing the response by awaiting it when running in ASGI. """ response = await response_coroutine return self._process_response(response) def process_request(self, request): response = super().process_request(request) if iscoroutine(response): return self.aprocess_request(request, response) return self._process_response(response) def get_interception_response(self, response, redirect_to): """ Hook method to allow subclasses to customize the interception response. """ status_line = f"{response.status_code} {response.reason_phrase}" cookies = response.cookies original_response = response context = { "redirect_to": redirect_to, "status_line": status_line, "toolbar": self.toolbar, "original_response": original_response, } # Using SimpleTemplateResponse avoids running global context processors. response = SimpleTemplateResponse("debug_toolbar/redirect.html", context) response.cookies = cookies response.original_response = original_response return response python-django-debug-toolbar-5.2.0/debug_toolbar/panels/request.py000066400000000000000000000037071500406072000251600ustar00rootroot00000000000000from django.http import Http404 from django.urls import resolve from django.utils.translation import gettext_lazy as _ from debug_toolbar.panels import Panel from debug_toolbar.utils import get_name_from_obj, sanitize_and_sort_request_vars class RequestPanel(Panel): """ A panel to display request variables (POST/GET, session, cookies). """ template = "debug_toolbar/panels/request.html" title = _("Request") @property def nav_subtitle(self): """ Show abbreviated name of view function as subtitle """ view_func = self.get_stats().get("view_func", "") return view_func.rsplit(".", 1)[-1] def generate_stats(self, request, response): self.record_stats( { "get": sanitize_and_sort_request_vars(request.GET), "post": sanitize_and_sort_request_vars(request.POST), "cookies": sanitize_and_sort_request_vars(request.COOKIES), } ) view_info = { "view_func": _(""), "view_args": "None", "view_kwargs": "None", "view_urlname": "None", } try: match = resolve(request.path_info) func, args, kwargs = match view_info["view_func"] = get_name_from_obj(func) view_info["view_args"] = args view_info["view_kwargs"] = kwargs if getattr(match, "url_name", False): url_name = match.url_name if match.namespaces: url_name = ":".join([*match.namespaces, url_name]) else: url_name = _("") view_info["view_urlname"] = url_name except Http404: pass self.record_stats(view_info) if hasattr(request, "session"): session_data = dict(request.session) self.record_stats({"session": sanitize_and_sort_request_vars(session_data)}) python-django-debug-toolbar-5.2.0/debug_toolbar/panels/settings.py000066400000000000000000000013031500406072000253160ustar00rootroot00000000000000from django.conf import settings from django.utils.translation import gettext_lazy as _ from django.views.debug import get_default_exception_reporter_filter from debug_toolbar.panels import Panel get_safe_settings = get_default_exception_reporter_filter().get_safe_settings class SettingsPanel(Panel): """ A panel to display all variables in django.conf.settings """ template = "debug_toolbar/panels/settings.html" is_async = True nav_title = _("Settings") def title(self): return _("Settings from %s") % settings.SETTINGS_MODULE def generate_stats(self, request, response): self.record_stats({"settings": dict(sorted(get_safe_settings().items()))}) python-django-debug-toolbar-5.2.0/debug_toolbar/panels/signals.py000066400000000000000000000065261500406072000251320ustar00rootroot00000000000000import weakref from django.core.signals import ( got_request_exception, request_finished, request_started, setting_changed, ) from django.db.backends.signals import connection_created from django.db.models.signals import ( class_prepared, m2m_changed, post_delete, post_init, post_migrate, post_save, pre_delete, pre_init, pre_migrate, pre_save, ) from django.utils.module_loading import import_string from django.utils.translation import gettext_lazy as _, ngettext from debug_toolbar.panels import Panel class SignalsPanel(Panel): template = "debug_toolbar/panels/signals.html" is_async = True SIGNALS = { "request_started": request_started, "request_finished": request_finished, "got_request_exception": got_request_exception, "connection_created": connection_created, "class_prepared": class_prepared, "pre_init": pre_init, "post_init": post_init, "pre_save": pre_save, "post_save": post_save, "pre_delete": pre_delete, "post_delete": post_delete, "m2m_changed": m2m_changed, "pre_migrate": pre_migrate, "post_migrate": post_migrate, "setting_changed": setting_changed, } def nav_subtitle(self): signals = self.get_stats()["signals"] num_receivers = sum(len(receivers) for name, receivers in signals) num_signals = len(signals) # here we have to handle a double count translation, hence the # hard coding of one signal if num_signals == 1: return ngettext( "%(num_receivers)d receiver of 1 signal", "%(num_receivers)d receivers of 1 signal", num_receivers, ) % {"num_receivers": num_receivers} return ngettext( "%(num_receivers)d receiver of %(num_signals)d signals", "%(num_receivers)d receivers of %(num_signals)d signals", num_receivers, ) % {"num_receivers": num_receivers, "num_signals": num_signals} title = _("Signals") @property def signals(self): signals = self.SIGNALS.copy() for signal in self.toolbar.config["EXTRA_SIGNALS"]: signal_name = signal.rsplit(".", 1)[-1] signals[signal_name] = import_string(signal) return signals def generate_stats(self, request, response): signals = [] for name, signal in sorted(self.signals.items()): receivers = [] for receiver in signal.receivers: receiver = receiver[1] if isinstance(receiver, weakref.ReferenceType): receiver = receiver() if receiver is None: continue receiver = getattr(receiver, "__wraps__", receiver) receiver_name = getattr(receiver, "__name__", str(receiver)) if getattr(receiver, "__self__", None) is not None: receiver_class_name = getattr( receiver.__self__, "__class__", type ).__name__ text = f"{receiver_class_name}.{receiver_name}" else: text = receiver_name receivers.append(text) signals.append((name, receivers)) self.record_stats({"signals": signals}) python-django-debug-toolbar-5.2.0/debug_toolbar/panels/sql/000077500000000000000000000000001500406072000237065ustar00rootroot00000000000000python-django-debug-toolbar-5.2.0/debug_toolbar/panels/sql/__init__.py000066400000000000000000000001141500406072000260130ustar00rootroot00000000000000from debug_toolbar.panels.sql.panel import SQLPanel __all__ = ["SQLPanel"] python-django-debug-toolbar-5.2.0/debug_toolbar/panels/sql/forms.py000066400000000000000000000032021500406072000254030ustar00rootroot00000000000000import json from django import forms from django.core.exceptions import ValidationError from django.db import connections from django.utils.functional import cached_property from debug_toolbar.panels.sql.utils import is_select_query, reformat_sql class SQLSelectForm(forms.Form): """ Validate params sql: The sql statement with interpolated params raw_sql: The sql statement with placeholders params: JSON encoded parameter values duration: time for SQL to execute passed in from toolbar just for redisplay """ sql = forms.CharField() raw_sql = forms.CharField() params = forms.CharField() alias = forms.CharField(required=False, initial="default") duration = forms.FloatField() def clean_raw_sql(self): value = self.cleaned_data["raw_sql"] if not is_select_query(value): raise ValidationError("Only 'select' queries are allowed.") return value def clean_params(self): value = self.cleaned_data["params"] try: return json.loads(value) except ValueError as exc: raise ValidationError("Is not valid JSON") from exc def clean_alias(self): value = self.cleaned_data["alias"] if value not in connections: raise ValidationError(f"Database alias '{value}' not found") return value def reformat_sql(self): return reformat_sql(self.cleaned_data["sql"], with_toggle=False) @property def connection(self): return connections[self.cleaned_data["alias"]] @cached_property def cursor(self): return self.connection.cursor() python-django-debug-toolbar-5.2.0/debug_toolbar/panels/sql/panel.py000066400000000000000000000275541500406072000253740ustar00rootroot00000000000000import uuid from collections import defaultdict from copy import copy from asgiref.sync import sync_to_async from django.db import connections from django.urls import path from django.utils.translation import gettext_lazy as _, ngettext from debug_toolbar import settings as dt_settings from debug_toolbar.forms import SignedDataForm from debug_toolbar.panels import Panel from debug_toolbar.panels.sql import views from debug_toolbar.panels.sql.forms import SQLSelectForm from debug_toolbar.panels.sql.tracking import wrap_cursor from debug_toolbar.panels.sql.utils import ( contrasting_color_generator, is_select_query, reformat_sql, ) from debug_toolbar.utils import render_stacktrace def get_isolation_level_display(vendor, level): if vendor == "postgresql": try: import psycopg choices = { # AUTOCOMMIT level does not exists in psycopg3 psycopg.IsolationLevel.READ_UNCOMMITTED: _("Read uncommitted"), psycopg.IsolationLevel.READ_COMMITTED: _("Read committed"), psycopg.IsolationLevel.REPEATABLE_READ: _("Repeatable read"), psycopg.IsolationLevel.SERIALIZABLE: _("Serializable"), } except ImportError: import psycopg2.extensions choices = { psycopg2.extensions.ISOLATION_LEVEL_AUTOCOMMIT: _("Autocommit"), psycopg2.extensions.ISOLATION_LEVEL_READ_UNCOMMITTED: _( "Read uncommitted" ), psycopg2.extensions.ISOLATION_LEVEL_READ_COMMITTED: _("Read committed"), psycopg2.extensions.ISOLATION_LEVEL_REPEATABLE_READ: _( "Repeatable read" ), psycopg2.extensions.ISOLATION_LEVEL_SERIALIZABLE: _("Serializable"), } else: raise ValueError(vendor) return choices.get(level) def get_transaction_status_display(vendor, level): if vendor == "postgresql": try: import psycopg choices = { psycopg.pq.TransactionStatus.IDLE: _("Idle"), psycopg.pq.TransactionStatus.ACTIVE: _("Active"), psycopg.pq.TransactionStatus.INTRANS: _("In transaction"), psycopg.pq.TransactionStatus.INERROR: _("In error"), psycopg.pq.TransactionStatus.UNKNOWN: _("Unknown"), } except ImportError: import psycopg2.extensions choices = { psycopg2.extensions.TRANSACTION_STATUS_IDLE: _("Idle"), psycopg2.extensions.TRANSACTION_STATUS_ACTIVE: _("Active"), psycopg2.extensions.TRANSACTION_STATUS_INTRANS: _("In transaction"), psycopg2.extensions.TRANSACTION_STATUS_INERROR: _("In error"), psycopg2.extensions.TRANSACTION_STATUS_UNKNOWN: _("Unknown"), } else: raise ValueError(vendor) return choices.get(level) def _similar_query_key(query): return query["raw_sql"] def _duplicate_query_key(query): raw_params = () if query["raw_params"] is None else tuple(query["raw_params"]) # repr() avoids problems because of unhashable types # (e.g. lists) when used as dictionary keys. # https://github.com/django-commons/django-debug-toolbar/issues/1091 return (query["raw_sql"], repr(raw_params)) def _process_query_groups(query_groups, databases, colors, name): counts = defaultdict(int) for (alias, _key), query_group in query_groups.items(): count = len(query_group) # Queries are similar / duplicates only if there are at least 2 of them. if count > 1: color = next(colors) for query in query_group: query[f"{name}_count"] = count query[f"{name}_color"] = color counts[alias] += count for alias, db_info in databases.items(): db_info[f"{name}_count"] = counts[alias] class SQLPanel(Panel): """ Panel that displays information about the SQL queries run while processing the request. """ is_async = True def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self._sql_time = 0 self._queries = [] self._databases = {} # synthetic transaction IDs, keyed by DB alias self._transaction_ids = {} def new_transaction_id(self, alias): """ Generate and return a new synthetic transaction ID for the specified DB alias. """ trans_id = uuid.uuid4().hex self._transaction_ids[alias] = trans_id return trans_id def current_transaction_id(self, alias): """ Return the current synthetic transaction ID for the specified DB alias. """ trans_id = self._transaction_ids.get(alias) # Sometimes it is not possible to detect the beginning of the first transaction, # so current_transaction_id() will be called before new_transaction_id(). In # that case there won't yet be a transaction ID. so it is necessary to generate # one using new_transaction_id(). if trans_id is None: trans_id = self.new_transaction_id(alias) return trans_id def record(self, **kwargs): self._queries.append(kwargs) alias = kwargs["alias"] if alias not in self._databases: self._databases[alias] = { "time_spent": kwargs["duration"], "num_queries": 1, } else: self._databases[alias]["time_spent"] += kwargs["duration"] self._databases[alias]["num_queries"] += 1 self._sql_time += kwargs["duration"] # Implement the Panel API nav_title = _("SQL") @property def nav_subtitle(self): query_count = len(self._queries) return ngettext( "%(query_count)d query in %(sql_time).2fms", "%(query_count)d queries in %(sql_time).2fms", query_count, ) % { "query_count": query_count, "sql_time": self._sql_time, } @property def title(self): count = len(self._databases) return ngettext( "SQL queries from %(count)d connection", "SQL queries from %(count)d connections", count, ) % {"count": count} template = "debug_toolbar/panels/sql.html" @classmethod def get_urls(cls): return [ path("sql_select/", views.sql_select, name="sql_select"), path("sql_explain/", views.sql_explain, name="sql_explain"), path("sql_profile/", views.sql_profile, name="sql_profile"), ] async def aenable_instrumentation(self): """ Async version of enable instrumentation. For async capable panels having async logic for instrumentation. """ await sync_to_async(self.enable_instrumentation)() def enable_instrumentation(self): # This is thread-safe because database connections are thread-local. for connection in connections.all(): wrap_cursor(connection) connection._djdt_logger = self def disable_instrumentation(self): for connection in connections.all(): connection._djdt_logger = None def generate_stats(self, request, response): colors = contrasting_color_generator() trace_colors = defaultdict(lambda: next(colors)) similar_query_groups = defaultdict(list) duplicate_query_groups = defaultdict(list) if self._queries: sql_warning_threshold = dt_settings.get_config()["SQL_WARNING_THRESHOLD"] width_ratio_tally = 0 factor = int(256.0 / (len(self._databases) * 2.5)) for n, db in enumerate(self._databases.values()): rgb = [0, 0, 0] color = n % 3 rgb[color] = 256 - n // 3 * factor nn = color # XXX: pretty sure this is horrible after so many aliases while rgb[color] < factor: nc = min(256 - rgb[color], 256) rgb[color] += nc nn += 1 if nn > 2: nn = 0 rgb[nn] = nc db["rgb_color"] = rgb # the last query recorded for each DB alias last_by_alias = {} for query in self._queries: alias = query["alias"] similar_query_groups[(alias, _similar_query_key(query))].append(query) duplicate_query_groups[(alias, _duplicate_query_key(query))].append( query ) trans_id = query.get("trans_id") prev_query = last_by_alias.get(alias, {}) prev_trans_id = prev_query.get("trans_id") # If two consecutive queries for a given DB alias have different # transaction ID values, a transaction started, finished, or both, so # annotate the queries as appropriate. if trans_id != prev_trans_id: if prev_trans_id is not None: prev_query["ends_trans"] = True if trans_id is not None: query["starts_trans"] = True if trans_id is not None: query["in_trans"] = True if "iso_level" in query: query["iso_level"] = get_isolation_level_display( query["vendor"], query["iso_level"] ) if "trans_status" in query: query["trans_status"] = get_transaction_status_display( query["vendor"], query["trans_status"] ) query["form"] = SignedDataForm( auto_id=None, initial=SQLSelectForm(initial=copy(query)).initial ) if query["sql"]: query["sql"] = reformat_sql(query["sql"], with_toggle=True) query["is_slow"] = query["duration"] > sql_warning_threshold query["is_select"] = is_select_query(query["raw_sql"]) query["rgb_color"] = self._databases[alias]["rgb_color"] try: query["width_ratio"] = (query["duration"] / self._sql_time) * 100 except ZeroDivisionError: query["width_ratio"] = 0 query["start_offset"] = width_ratio_tally query["end_offset"] = query["width_ratio"] + query["start_offset"] width_ratio_tally += query["width_ratio"] query["stacktrace"] = render_stacktrace(query["stacktrace"]) query["trace_color"] = trace_colors[query["stacktrace"]] last_by_alias[alias] = query # Close out any transactions that were in progress, since there is no # explicit way to know when a transaction finishes. for final_query in last_by_alias.values(): if final_query.get("trans_id") is not None: final_query["ends_trans"] = True group_colors = contrasting_color_generator() _process_query_groups( similar_query_groups, self._databases, group_colors, "similar" ) _process_query_groups( duplicate_query_groups, self._databases, group_colors, "duplicate" ) self.record_stats( { "databases": sorted( self._databases.items(), key=lambda x: -x[1]["time_spent"] ), "queries": self._queries, "sql_time": self._sql_time, } ) def generate_server_timing(self, request, response): stats = self.get_stats() title = "SQL {} queries".format(len(stats.get("queries", []))) value = stats.get("sql_time", 0) self.record_server_timing("sql_time", title, value) python-django-debug-toolbar-5.2.0/debug_toolbar/panels/sql/tracking.py000066400000000000000000000230721500406072000260660ustar00rootroot00000000000000import contextlib import contextvars import datetime import json from time import perf_counter import django.test.testcases from django.utils.encoding import force_str from debug_toolbar.utils import get_stack_trace, get_template_info try: import psycopg PostgresJson = psycopg.types.json.Jsonb STATUS_IN_TRANSACTION = psycopg.pq.TransactionStatus.INTRANS except ImportError: try: from psycopg2._json import Json as PostgresJson from psycopg2.extensions import STATUS_IN_TRANSACTION except ImportError: PostgresJson = None STATUS_IN_TRANSACTION = None # Prevents SQL queries from being sent to the DB. It's used # by the TemplatePanel to prevent the toolbar from issuing # additional queries. allow_sql = contextvars.ContextVar("debug-toolbar-allow-sql", default=True) class SQLQueryTriggered(Exception): """Thrown when template panel triggers a query""" def wrap_cursor(connection): # When running a SimpleTestCase, Django monkey patches some DatabaseWrapper # methods, including .cursor() and .chunked_cursor(), to raise an exception # if the test code tries to access the database, and then undoes the monkey # patching when the test case is finished. If we monkey patch those methods # also, Django's process of undoing those monkey patches will fail. To # avoid this failure, and because database access is not allowed during a # SimpleTestCase anyway, skip applying our instrumentation monkey patches if # we detect that Django has already monkey patched DatabaseWrapper.cursor(). if isinstance(connection.cursor, django.test.testcases._DatabaseFailure): return if not hasattr(connection, "_djdt_cursor"): connection._djdt_cursor = connection.cursor connection._djdt_chunked_cursor = connection.chunked_cursor connection._djdt_logger = None def cursor(*args, **kwargs): # Per the DB API cursor() does not accept any arguments. There's # some code in the wild which does not follow that convention, # so we pass on the arguments even though it's not clean. # See: # https://github.com/django-commons/django-debug-toolbar/pull/615 # https://github.com/django-commons/django-debug-toolbar/pull/896 logger = connection._djdt_logger cursor = connection._djdt_cursor(*args, **kwargs) if logger is None: return cursor mixin = NormalCursorMixin if allow_sql.get() else ExceptionCursorMixin return patch_cursor_wrapper_with_mixin(cursor.__class__, mixin)( cursor.cursor, connection, logger ) def chunked_cursor(*args, **kwargs): # prevent double wrapping # solves https://github.com/django-commons/django-debug-toolbar/issues/1239 logger = connection._djdt_logger cursor = connection._djdt_chunked_cursor(*args, **kwargs) if logger is not None and not isinstance(cursor, DjDTCursorWrapperMixin): mixin = NormalCursorMixin if allow_sql.get() else ExceptionCursorMixin return patch_cursor_wrapper_with_mixin(cursor.__class__, mixin)( cursor.cursor, connection, logger ) return cursor connection.cursor = cursor connection.chunked_cursor = chunked_cursor def patch_cursor_wrapper_with_mixin(base_wrapper, mixin): class DjDTCursorWrapper(mixin, base_wrapper): pass return DjDTCursorWrapper class DjDTCursorWrapperMixin: def __init__(self, cursor, db, logger): super().__init__(cursor, db) # logger must implement a ``record`` method self.logger = logger class ExceptionCursorMixin(DjDTCursorWrapperMixin): """ Wraps a cursor and raises an exception on any operation. Used in Templates panel. """ def __getattr__(self, attr): raise SQLQueryTriggered() class NormalCursorMixin(DjDTCursorWrapperMixin): """ Wraps a cursor and logs queries. """ def _decode(self, param): if PostgresJson and isinstance(param, PostgresJson): # psycopg3 if hasattr(param, "obj"): return param.dumps(param.obj) # psycopg2 if hasattr(param, "adapted"): return param.dumps(param.adapted) # If a sequence type, decode each element separately if isinstance(param, (tuple, list)): return [self._decode(element) for element in param] # If a dictionary type, decode each value separately if isinstance(param, dict): return {key: self._decode(value) for key, value in param.items()} # make sure datetime, date and time are converted to string by force_str CONVERT_TYPES = (datetime.datetime, datetime.date, datetime.time) try: return force_str(param, strings_only=not isinstance(param, CONVERT_TYPES)) except UnicodeDecodeError: return "(encoded string)" def _last_executed_query(self, sql, params): """Get the last executed query from the connection.""" # Django's psycopg3 backend creates a new cursor in its implementation of the # .last_executed_query() method. To avoid wrapping that cursor, temporarily set # the DatabaseWrapper's ._djdt_logger attribute to None. This will cause the # monkey-patched .cursor() and .chunked_cursor() methods to skip the wrapping # process during the .last_executed_query() call. self.db._djdt_logger = None try: return self.db.ops.last_executed_query(self.cursor, sql, params) finally: self.db._djdt_logger = self.logger def _record(self, method, sql, params): alias = self.db.alias vendor = self.db.vendor if vendor == "postgresql": # The underlying DB connection (as opposed to Django's wrapper) conn = self.db.connection initial_conn_status = conn.info.transaction_status start_time = perf_counter() try: return method(sql, params) finally: stop_time = perf_counter() duration = (stop_time - start_time) * 1000 _params = "" with contextlib.suppress(TypeError): # object JSON serializable? _params = json.dumps(self._decode(params)) template_info = get_template_info() # Sql might be an object (such as psycopg Composed). # For logging purposes, make sure it's str. if vendor == "postgresql" and not isinstance(sql, str): if isinstance(sql, bytes): sql = sql.decode("utf-8") else: sql = sql.as_string(conn) else: sql = str(sql) kwargs = { "vendor": vendor, "alias": alias, "sql": self._last_executed_query(sql, params), "duration": duration, "raw_sql": sql, "params": _params, "raw_params": params, "stacktrace": get_stack_trace(skip=2), "template_info": template_info, } if vendor == "postgresql": # If an erroneous query was ran on the connection, it might # be in a state where checking isolation_level raises an # exception. try: iso_level = conn.isolation_level except conn.InternalError: iso_level = "unknown" # PostgreSQL does not expose any sort of transaction ID, so it is # necessary to generate synthetic transaction IDs here. If the # connection was not in a transaction when the query started, and was # after the query finished, a new transaction definitely started, so get # a new transaction ID from logger.new_transaction_id(). If the query # was in a transaction both before and after executing, make the # assumption that it is the same transaction and get the current # transaction ID from logger.current_transaction_id(). There is an edge # case where Django can start a transaction before the first query # executes, so in that case logger.current_transaction_id() will # generate a new transaction ID since one does not already exist. final_conn_status = conn.info.transaction_status if final_conn_status == STATUS_IN_TRANSACTION: if initial_conn_status == STATUS_IN_TRANSACTION: trans_id = self.logger.current_transaction_id(alias) else: trans_id = self.logger.new_transaction_id(alias) else: trans_id = None kwargs.update( { "trans_id": trans_id, "trans_status": conn.info.transaction_status, "iso_level": iso_level, } ) # We keep `sql` to maintain backwards compatibility self.logger.record(**kwargs) def callproc(self, procname, params=None): return self._record(super().callproc, procname, params) def execute(self, sql, params=None): return self._record(super().execute, sql, params) def executemany(self, sql, param_list): return self._record(super().executemany, sql, param_list) python-django-debug-toolbar-5.2.0/debug_toolbar/panels/sql/utils.py000066400000000000000000000120511500406072000254170ustar00rootroot00000000000000from functools import cache, lru_cache from html import escape import sqlparse from django.dispatch import receiver from django.test.signals import setting_changed from sqlparse import tokens as T from debug_toolbar import settings as dt_settings class ElideSelectListsFilter: """sqlparse filter to elide the select list from top-level SELECT ... FROM clauses, if present""" def process(self, stream): allow_elision = True for token_type, value in stream: yield token_type, value if token_type in T.Keyword: keyword = value.upper() if allow_elision and keyword == "SELECT": yield from self.elide_until_from(stream) allow_elision = keyword in ["EXCEPT", "INTERSECT", "UNION"] @staticmethod def elide_until_from(stream): has_dot = False saved_tokens = [] for token_type, value in stream: if token_type in T.Keyword and value.upper() == "FROM": # Do not elide a select lists that do not contain dots (used to separate # table names from column names) in order to preserve # SELECT COUNT(*) AS `__count` FROM ... # and # SELECT (1) AS `a` FROM ... # queries. if not has_dot: yield from saved_tokens else: # U+2022: Unicode character 'BULLET' yield T.Other, " \u2022\u2022\u2022 " yield token_type, value break if not has_dot: if token_type in T.Punctuation and value == ".": has_dot = True else: saved_tokens.append((token_type, value)) class BoldKeywordFilter: """sqlparse filter to bold SQL keywords""" def process(self, stmt): idx = 0 while idx < len(stmt.tokens): token = stmt[idx] if token.is_keyword: stmt.insert_before(idx, sqlparse.sql.Token(T.Other, "")) stmt.insert_after( idx + 1, sqlparse.sql.Token(T.Other, ""), skip_ws=False, ) idx += 2 elif token.is_group: self.process(token) idx += 1 def escaped_value(token): # Don't escape T.Whitespace tokens because AlignedIndentFilter inserts its tokens as # T.Whitesapce, and in our case those tokens are actually HTML. if token.ttype in (T.Other, T.Whitespace): return token.value return escape(token.value, quote=False) class EscapedStringSerializer: """sqlparse post-processor to convert a Statement into a string escaped for inclusion in HTML .""" @staticmethod def process(stmt): return "".join(escaped_value(token) for token in stmt.flatten()) def is_select_query(sql): # UNION queries can start with "(". return sql.lower().lstrip(" (").startswith("select") def reformat_sql(sql, *, with_toggle=False): formatted = parse_sql(sql) if not with_toggle: return formatted simplified = parse_sql(sql, simplify=True) uncollapsed = f'{simplified}' collapsed = f'{formatted}' return collapsed + uncollapsed @lru_cache(maxsize=128) def parse_sql(sql, *, simplify=False): stack = get_filter_stack(simplify=simplify) return "".join(stack.run(sql)) @cache def get_filter_stack(*, simplify): stack = sqlparse.engine.FilterStack() if simplify: stack.preprocess.append(ElideSelectListsFilter()) else: if dt_settings.get_config()["PRETTIFY_SQL"]: stack.enable_grouping() stack.stmtprocess.append( sqlparse.filters.AlignedIndentFilter(char=" ", n="
") ) stack.stmtprocess.append(BoldKeywordFilter()) stack.postprocess.append(EscapedStringSerializer()) # Statement -> str return stack @receiver(setting_changed) def clear_caches(*, setting, **kwargs): if setting == "DEBUG_TOOLBAR_CONFIG": parse_sql.cache_clear() get_filter_stack.cache_clear() def contrasting_color_generator(): """ Generate contrasting colors by varying most significant bit of RGB first, and then vary subsequent bits systematically. """ def rgb_to_hex(rgb): return "#{:02x}{:02x}{:02x}".format(*tuple(rgb)) triples = [ (1, 0, 0), (0, 1, 0), (0, 0, 1), (1, 1, 0), (0, 1, 1), (1, 0, 1), (1, 1, 1), ] n = 1 << 7 so_far = [[0, 0, 0]] while True: if n == 0: # This happens after 2**24 colours; presumably, never yield "#000000" # black copy_so_far = list(so_far) for triple in triples: for previous in copy_so_far: rgb = [n * triple[i] + previous[i] for i in range(3)] so_far.append(rgb) yield rgb_to_hex(rgb) n >>= 1 python-django-debug-toolbar-5.2.0/debug_toolbar/panels/sql/views.py000066400000000000000000000124771500406072000254300ustar00rootroot00000000000000from django.http import HttpResponseBadRequest, JsonResponse from django.template.loader import render_to_string from django.views.decorators.csrf import csrf_exempt from debug_toolbar._compat import login_not_required from debug_toolbar.decorators import render_with_toolbar_language, require_show_toolbar from debug_toolbar.forms import SignedDataForm from debug_toolbar.panels.sql.forms import SQLSelectForm def get_signed_data(request): """Unpack a signed data form, if invalid returns None""" data = request.GET if request.method == "GET" else request.POST signed_form = SignedDataForm(data) if signed_form.is_valid(): return signed_form.verified_data() return None @csrf_exempt @login_not_required @require_show_toolbar @render_with_toolbar_language def sql_select(request): """Returns the output of the SQL SELECT statement""" verified_data = get_signed_data(request) if not verified_data: return HttpResponseBadRequest("Invalid signature") form = SQLSelectForm(verified_data) if form.is_valid(): sql = form.cleaned_data["raw_sql"] params = form.cleaned_data["params"] with form.cursor as cursor: cursor.execute(sql, params) headers = [d[0] for d in cursor.description] result = cursor.fetchall() context = { "result": result, "sql": form.reformat_sql(), "duration": form.cleaned_data["duration"], "headers": headers, "alias": form.cleaned_data["alias"], } content = render_to_string("debug_toolbar/panels/sql_select.html", context) return JsonResponse({"content": content}) return HttpResponseBadRequest("Form errors") @csrf_exempt @login_not_required @require_show_toolbar @render_with_toolbar_language def sql_explain(request): """Returns the output of the SQL EXPLAIN on the given query""" verified_data = get_signed_data(request) if not verified_data: return HttpResponseBadRequest("Invalid signature") form = SQLSelectForm(verified_data) if form.is_valid(): sql = form.cleaned_data["raw_sql"] params = form.cleaned_data["params"] vendor = form.connection.vendor with form.cursor as cursor: if vendor == "sqlite": # SQLite's EXPLAIN dumps the low-level opcodes generated for a query; # EXPLAIN QUERY PLAN dumps a more human-readable summary # See https://www.sqlite.org/lang_explain.html for details cursor.execute(f"EXPLAIN QUERY PLAN {sql}", params) elif vendor == "postgresql": cursor.execute(f"EXPLAIN ANALYZE {sql}", params) else: cursor.execute(f"EXPLAIN {sql}", params) headers = [d[0] for d in cursor.description] result = cursor.fetchall() context = { "result": result, "sql": form.reformat_sql(), "duration": form.cleaned_data["duration"], "headers": headers, "alias": form.cleaned_data["alias"], } content = render_to_string("debug_toolbar/panels/sql_explain.html", context) return JsonResponse({"content": content}) return HttpResponseBadRequest("Form errors") @csrf_exempt @login_not_required @require_show_toolbar @render_with_toolbar_language def sql_profile(request): """Returns the output of running the SQL and getting the profiling statistics""" verified_data = get_signed_data(request) if not verified_data: return HttpResponseBadRequest("Invalid signature") form = SQLSelectForm(verified_data) if form.is_valid(): sql = form.cleaned_data["raw_sql"] params = form.cleaned_data["params"] result = None headers = None result_error = None with form.cursor as cursor: try: cursor.execute("SET PROFILING=1") # Enable profiling cursor.execute(sql, params) # Execute SELECT cursor.execute("SET PROFILING=0") # Disable profiling # The Query ID should always be 1 here but I'll subselect to get # the last one just in case... cursor.execute( """ SELECT * FROM information_schema.profiling WHERE query_id = ( SELECT query_id FROM information_schema.profiling ORDER BY query_id DESC LIMIT 1 ) """ ) headers = [d[0] for d in cursor.description] result = cursor.fetchall() except Exception: result_error = ( "Profiling is either not available or not supported by your " "database." ) context = { "result": result, "result_error": result_error, "sql": form.reformat_sql(), "duration": form.cleaned_data["duration"], "headers": headers, "alias": form.cleaned_data["alias"], } content = render_to_string("debug_toolbar/panels/sql_profile.html", context) return JsonResponse({"content": content}) return HttpResponseBadRequest("Form errors") python-django-debug-toolbar-5.2.0/debug_toolbar/panels/staticfiles.py000066400000000000000000000132661500406072000260030ustar00rootroot00000000000000import contextlib import uuid from contextvars import ContextVar from os.path import join, normpath from django.contrib.staticfiles import finders, storage from django.dispatch import Signal from django.utils.translation import gettext_lazy as _, ngettext from debug_toolbar import panels class StaticFile: """ Representing the different properties of a static file. """ def __init__(self, *, path, url): self.path = path self._url = url def __str__(self): return self.path def real_path(self): return finders.find(self.path) def url(self): return self._url # This will record and map the StaticFile instances with its associated # request across threads and async concurrent requests state. request_id_context_var = ContextVar("djdt_request_id_store") record_static_file_signal = Signal() class URLMixin: def url(self, path): url = super().url(path) with contextlib.suppress(LookupError): # For LookupError: # The ContextVar wasn't set yet. Since the toolbar wasn't properly # configured to handle this request, we don't need to capture # the static file. request_id = request_id_context_var.get() record_static_file_signal.send( sender=self, staticfile=StaticFile(path=str(path), url=url), request_id=request_id, ) return url class StaticFilesPanel(panels.Panel): """ A panel to display the found staticfiles. """ is_async = True name = "Static files" template = "debug_toolbar/panels/staticfiles.html" @property def title(self): return _("Static files (%(num_found)s found, %(num_used)s used)") % { "num_found": self.num_found, "num_used": self.num_used, } def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.num_found = 0 self.used_paths = [] self.request_id = str(uuid.uuid4()) @classmethod def ready(cls): cls = storage.staticfiles_storage.__class__ if URLMixin not in cls.mro(): cls.__bases__ = (URLMixin, *cls.__bases__) def _store_static_files_signal_handler(self, sender, staticfile, **kwargs): # Only record the static file if the request_id matches the one # that was used to create the panel. # as sender of the signal and this handler will have multiple # concurrent connections and we want to avoid storing of same # staticfile from other connections as well. if request_id_context_var.get() == self.request_id: self.used_paths.append(staticfile) def enable_instrumentation(self): self.ctx_token = request_id_context_var.set(self.request_id) record_static_file_signal.connect(self._store_static_files_signal_handler) def disable_instrumentation(self): record_static_file_signal.disconnect(self._store_static_files_signal_handler) request_id_context_var.reset(self.ctx_token) @property def num_used(self): stats = self.get_stats() return stats and stats["num_used"] nav_title = _("Static files") @property def nav_subtitle(self): num_used = self.num_used return ngettext( "%(num_used)s file used", "%(num_used)s files used", num_used ) % {"num_used": num_used} def generate_stats(self, request, response): self.record_stats( { "num_found": self.num_found, "num_used": len(self.used_paths), "staticfiles": self.used_paths, "staticfiles_apps": self.get_staticfiles_apps(), "staticfiles_dirs": self.get_staticfiles_dirs(), "staticfiles_finders": self.get_staticfiles_finders(), } ) def get_staticfiles_finders(self): """ Returns a sorted mapping between the finder path and the list of relative and file system paths which that finder was able to find. """ finders_mapping = {} for finder in finders.get_finders(): try: for path, finder_storage in finder.list([]): if getattr(finder_storage, "prefix", None): prefixed_path = join(finder_storage.prefix, path) else: prefixed_path = path finder_cls = finder.__class__ finder_path = ".".join([finder_cls.__module__, finder_cls.__name__]) real_path = finder_storage.path(path) payload = (prefixed_path, real_path) finders_mapping.setdefault(finder_path, []).append(payload) self.num_found += 1 except OSError: # This error should be captured and presented as a part of run_checks. pass return finders_mapping def get_staticfiles_dirs(self): """ Returns a list of paths to inspect for additional static files """ dirs = [] for finder in finders.get_finders(): if isinstance(finder, finders.FileSystemFinder): dirs.extend(finder.locations) return [(prefix, normpath(dir)) for prefix, dir in dirs] def get_staticfiles_apps(self): """ Returns a list of app paths that have a static directory """ apps = [] for finder in finders.get_finders(): if isinstance(finder, finders.AppDirectoriesFinder): for app in finder.apps: if app not in apps: apps.append(app) return apps python-django-debug-toolbar-5.2.0/debug_toolbar/panels/templates/000077500000000000000000000000001500406072000251055ustar00rootroot00000000000000python-django-debug-toolbar-5.2.0/debug_toolbar/panels/templates/__init__.py000066400000000000000000000001361500406072000272160ustar00rootroot00000000000000from debug_toolbar.panels.templates.panel import TemplatesPanel __all__ = ["TemplatesPanel"] python-django-debug-toolbar-5.2.0/debug_toolbar/panels/templates/jinja2.py000066400000000000000000000015301500406072000266330ustar00rootroot00000000000000import functools from django.template.backends.jinja2 import Template as JinjaTemplate from django.template.context import make_context from django.test.signals import template_rendered def patch_jinja_render(): orig_render = JinjaTemplate.render @functools.wraps(orig_render) def wrapped_render(self, context=None, request=None): # This patching of render only instruments the rendering # of the immediate template. It won't include the parent template(s). self.name = self.template.name template_rendered.send( sender=self, template=self, context=make_context(context, request) ) return orig_render(self, context, request) if JinjaTemplate.render != wrapped_render: JinjaTemplate.original_render = JinjaTemplate.render JinjaTemplate.render = wrapped_render python-django-debug-toolbar-5.2.0/debug_toolbar/panels/templates/panel.py000066400000000000000000000214431500406072000265620ustar00rootroot00000000000000from contextlib import contextmanager from importlib.util import find_spec from os.path import normpath from pprint import pformat, saferepr from django import http from django.core import signing from django.db.models.query import QuerySet, RawQuerySet from django.template import RequestContext, Template from django.test.signals import template_rendered from django.test.utils import instrumented_test_render from django.urls import path from django.utils.translation import gettext_lazy as _ from debug_toolbar.panels import Panel from debug_toolbar.panels.sql.tracking import SQLQueryTriggered, allow_sql from debug_toolbar.panels.templates import views if find_spec("jinja2"): from debug_toolbar.panels.templates.jinja2 import patch_jinja_render patch_jinja_render() # Monkey-patch to enable the template_rendered signal. The receiver returns # immediately when the panel is disabled to keep the overhead small. # Code taken and adapted from Simon Willison and Django Snippets: # https://www.djangosnippets.org/snippets/766/ if Template._render != instrumented_test_render: Template.original_render = Template._render Template._render = instrumented_test_render # Monkey-patch to store items added by template context processors. The # overhead is sufficiently small to justify enabling it unconditionally. @contextmanager def _request_context_bind_template(self, template): if self.template is not None: raise RuntimeError("Context is already bound to a template") self.template = template # Set context processors according to the template engine's settings. processors = template.engine.template_context_processors + self._processors self.context_processors = {} updates = {} for processor in processors: name = f"{processor.__module__}.{processor.__name__}" context = processor(self.request) self.context_processors[name] = context updates.update(context) self.dicts[self._processors_index] = updates try: yield finally: self.template = None # Unset context processors. self.dicts[self._processors_index] = {} RequestContext.bind_template = _request_context_bind_template class TemplatesPanel(Panel): """ A panel that lists all templates used during processing of a response. """ is_async = True def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.templates = [] # An associated list of dictionaries and their prettified # representation. self.pformat_layers = [] def _store_template_info(self, sender, **kwargs): template, context = kwargs["template"], kwargs["context"] # Skip templates that we are generating through the debug toolbar. is_debug_toolbar_template = isinstance(template.name, str) and ( template.name.startswith("debug_toolbar/") or template.name.startswith( tuple(self.toolbar.config["SKIP_TEMPLATE_PREFIXES"]) ) ) if is_debug_toolbar_template: return kwargs["context"] = [ context_layer for context_layer in context.dicts if hasattr(context_layer, "items") and context_layer ] kwargs["context_processors"] = getattr(context, "context_processors", None) self.templates.append(kwargs) # Implement the Panel API nav_title = _("Templates") @property def title(self): num_templates = len(self.templates) return _("Templates (%(num_templates)s rendered)") % { "num_templates": num_templates } @property def nav_subtitle(self): if self.templates: return self.templates[0]["template"].name return "" template = "debug_toolbar/panels/templates.html" @classmethod def get_urls(cls): return [path("template_source/", views.template_source, name="template_source")] def enable_instrumentation(self): template_rendered.connect(self._store_template_info) def disable_instrumentation(self): template_rendered.disconnect(self._store_template_info) def process_context_list(self, context_layers): context_list = [] for context_layer in context_layers: # Check if the layer is in the cache. pformatted = None for key_values, _pformatted in self.pformat_layers: if key_values == context_layer: pformatted = _pformatted break if pformatted is None: temp_layer = {} for key, value in context_layer.items(): # Do not force evaluating LazyObject if hasattr(value, "_wrapped"): # SimpleLazyObject has __repr__ which includes actual value # if it has been already evaluated temp_layer[key] = repr(value) # Replace any request elements - they have a large # Unicode representation and the request data is # already made available from the Request panel. elif isinstance(value, http.HttpRequest): temp_layer[key] = "<>" # Replace the debugging sql_queries element. The SQL # data is already made available from the SQL panel. elif key == "sql_queries" and isinstance(value, list): temp_layer[key] = "<>" # Replace LANGUAGES, which is available in i18n context # processor elif key == "LANGUAGES" and isinstance(value, tuple): temp_layer[key] = "<>" # QuerySet would trigger the database: user can run the # query from SQL Panel elif isinstance(value, (QuerySet, RawQuerySet)): temp_layer[key] = ( f"<<{value.__class__.__name__.lower()} of {value.model._meta.label}>>" ) else: token = allow_sql.set(False) try: saferepr(value) # this MAY trigger a db query except SQLQueryTriggered: temp_layer[key] = "<>" except UnicodeEncodeError: temp_layer[key] = "<>" except Exception: temp_layer[key] = "<>" else: temp_layer[key] = value finally: allow_sql.reset(token) pformatted = pformat(temp_layer) self.pformat_layers.append((context_layer, pformatted)) context_list.append(pformatted) return context_list def generate_stats(self, request, response): template_context = [] for template_data in self.templates: info = {} # Clean up some info about templates template = template_data["template"] if hasattr(template, "origin") and template.origin and template.origin.name: template.origin_name = template.origin.name template.origin_hash = signing.dumps(template.origin.name) else: template.origin_name = _("No origin") template.origin_hash = "" info["template"] = template # Clean up context for better readability if self.toolbar.config["SHOW_TEMPLATE_CONTEXT"]: if "context_list" not in template_data: template_data["context_list"] = self.process_context_list( template_data.get("context", []) ) info["context"] = "\n".join(template_data["context_list"]) template_context.append(info) # Fetch context_processors/template_dirs from any template if self.templates: context_processors = self.templates[0]["context_processors"] template = self.templates[0]["template"] # django templates have the 'engine' attribute, while jinja # templates use 'backend' engine_backend = getattr(template, "engine", None) or template.backend template_dirs = engine_backend.dirs else: context_processors = None template_dirs = [] self.record_stats( { "templates": template_context, "template_dirs": [normpath(x) for x in template_dirs], "context_processors": context_processors, } ) python-django-debug-toolbar-5.2.0/debug_toolbar/panels/templates/views.py000066400000000000000000000047261500406072000266250ustar00rootroot00000000000000from django.core import signing from django.http import HttpResponseBadRequest, JsonResponse from django.template import Origin, TemplateDoesNotExist from django.template.engine import Engine from django.template.loader import render_to_string from django.utils.html import format_html, mark_safe from debug_toolbar._compat import login_not_required from debug_toolbar.decorators import render_with_toolbar_language, require_show_toolbar @login_not_required @require_show_toolbar @render_with_toolbar_language def template_source(request): """ Return the source of a template, syntax-highlighted by Pygments if it's available. """ template_origin_name = request.GET.get("template_origin") if template_origin_name is None: return HttpResponseBadRequest('"template_origin" key is required') try: template_origin_name = signing.loads(template_origin_name) except Exception: return HttpResponseBadRequest('"template_origin" is invalid') template_name = request.GET.get("template", template_origin_name) final_loaders = [] loaders = list(Engine.get_default().template_loaders) while loaders: loader = loaders.pop(0) if loader is not None: # Recursively unwrap loaders until we get to loaders which do not # themselves wrap other loaders. This adds support for # django.template.loaders.cached.Loader and the # django-template-partials loader (possibly among others) if hasattr(loader, "loaders"): loaders.extend(loader.loaders) else: final_loaders.append(loader) for loader in final_loaders: origin = Origin(template_origin_name) try: source = loader.get_contents(origin) break except TemplateDoesNotExist: pass else: source = f"Template Does Not Exist: {template_origin_name}" try: from pygments import highlight from pygments.formatters import HtmlFormatter from pygments.lexers import HtmlDjangoLexer except ModuleNotFoundError: source = format_html("{}", source) else: source = highlight(source, HtmlDjangoLexer(), HtmlFormatter(wrapcode=True)) source = mark_safe(source) content = render_to_string( "debug_toolbar/panels/template_source.html", {"source": source, "template_name": template_name}, ) return JsonResponse({"content": content}) python-django-debug-toolbar-5.2.0/debug_toolbar/panels/timer.py000066400000000000000000000101041500406072000245750ustar00rootroot00000000000000from time import perf_counter from django.template.loader import render_to_string from django.templatetags.static import static from django.utils.translation import gettext_lazy as _ from debug_toolbar.panels import Panel try: import resource # Not available on Win32 systems except ImportError: resource = None class TimerPanel(Panel): """ Panel that displays the time a response took in milliseconds. """ def nav_subtitle(self): stats = self.get_stats() if hasattr(self, "_start_rusage"): utime = self._end_rusage.ru_utime - self._start_rusage.ru_utime stime = self._end_rusage.ru_stime - self._start_rusage.ru_stime return _("CPU: %(cum)0.2fms (%(total)0.2fms)") % { "cum": (utime + stime) * 1000.0, "total": stats["total_time"], } elif "total_time" in stats: return _("Total: %0.2fms") % stats["total_time"] else: return "" has_content = resource is not None title = _("Time") template = "debug_toolbar/panels/timer.html" @property def content(self): stats = self.get_stats() rows = ( (_("User CPU time"), _("%(utime)0.3f msec") % stats), (_("System CPU time"), _("%(stime)0.3f msec") % stats), (_("Total CPU time"), _("%(total)0.3f msec") % stats), (_("Elapsed time"), _("%(total_time)0.3f msec") % stats), ( _("Context switches"), _("%(vcsw)d voluntary, %(ivcsw)d involuntary") % stats, ), ) return render_to_string(self.template, {"rows": rows}) @property def scripts(self): scripts = super().scripts scripts.append(static("debug_toolbar/js/timer.js")) return scripts def process_request(self, request): self._start_time = perf_counter() if self.has_content: self._start_rusage = resource.getrusage(resource.RUSAGE_SELF) return super().process_request(request) def generate_stats(self, request, response): stats = {} if hasattr(self, "_start_time"): stats["total_time"] = (perf_counter() - self._start_time) * 1000 if hasattr(self, "_start_rusage"): self._end_rusage = resource.getrusage(resource.RUSAGE_SELF) stats["utime"] = 1000 * self._elapsed_ru("ru_utime") stats["stime"] = 1000 * self._elapsed_ru("ru_stime") stats["total"] = stats["utime"] + stats["stime"] stats["vcsw"] = self._elapsed_ru("ru_nvcsw") stats["ivcsw"] = self._elapsed_ru("ru_nivcsw") stats["minflt"] = self._elapsed_ru("ru_minflt") stats["majflt"] = self._elapsed_ru("ru_majflt") # these are documented as not meaningful under Linux. If you're # running BSD feel free to enable them, and add any others that I # hadn't gotten to before I noticed that I was getting nothing but # zeroes and that the docs agreed. :-( # # stats['blkin'] = self._elapsed_ru('ru_inblock') # stats['blkout'] = self._elapsed_ru('ru_oublock') # stats['swap'] = self._elapsed_ru('ru_nswap') # stats['rss'] = self._end_rusage.ru_maxrss # stats['srss'] = self._end_rusage.ru_ixrss # stats['urss'] = self._end_rusage.ru_idrss # stats['usrss'] = self._end_rusage.ru_isrss self.record_stats(stats) def generate_server_timing(self, request, response): stats = self.get_stats() self.record_server_timing("utime", "User CPU time", stats.get("utime", 0)) self.record_server_timing("stime", "System CPU time", stats.get("stime", 0)) self.record_server_timing("total", "Total CPU time", stats.get("total", 0)) self.record_server_timing( "total_time", "Elapsed time", stats.get("total_time", 0) ) def _elapsed_ru(self, name): return getattr(self._end_rusage, name) - getattr(self._start_rusage, name) python-django-debug-toolbar-5.2.0/debug_toolbar/panels/versions.py000066400000000000000000000036721500406072000253410ustar00rootroot00000000000000import sys import django from django.apps import apps from django.utils.translation import gettext_lazy as _ from debug_toolbar.panels import Panel class VersionsPanel(Panel): """ Shows versions of Python, Django, and installed apps if possible. """ is_async = True @property def nav_subtitle(self): return f"Django {django.get_version()}" title = _("Versions") template = "debug_toolbar/panels/versions.html" def generate_stats(self, request, response): versions = [ ("Python", "", "%d.%d.%d" % sys.version_info[:3]), ("Django", "", self.get_app_version(django)), ] versions += list(self.gen_app_versions()) self.record_stats( {"versions": sorted(versions, key=lambda v: v[0]), "paths": sys.path} ) def gen_app_versions(self): for app_config in apps.get_app_configs(): name = app_config.verbose_name app = app_config.module version = self.get_app_version(app) if version: yield app.__name__, name, version def get_app_version(self, app): version = self.get_version_from_app(app) if isinstance(version, (list, tuple)): # We strip dots from the right because we do not want to show # trailing dots if there are empty elements in the list/tuple version = ".".join(str(o) for o in version).rstrip(".") return version def get_version_from_app(self, app): if hasattr(app, "get_version"): get_version = app.get_version if callable(get_version): try: return get_version() except TypeError: pass else: return get_version if hasattr(app, "VERSION"): return app.VERSION if hasattr(app, "__version__"): return app.__version__ return python-django-debug-toolbar-5.2.0/debug_toolbar/settings.py000066400000000000000000000064221500406072000240430ustar00rootroot00000000000000import sys import warnings from functools import cache from django.conf import settings from django.dispatch import receiver from django.test.signals import setting_changed CONFIG_DEFAULTS = { # Toolbar options "DISABLE_PANELS": { "debug_toolbar.panels.profiling.ProfilingPanel", "debug_toolbar.panels.redirects.RedirectsPanel", }, "INSERT_BEFORE": "", "RENDER_PANELS": None, "RESULTS_CACHE_SIZE": 25, "ROOT_TAG_EXTRA_ATTRS": "", "SHOW_COLLAPSED": False, "SHOW_TOOLBAR_CALLBACK": "debug_toolbar.middleware.show_toolbar", # Panel options "EXTRA_SIGNALS": [], "ENABLE_STACKTRACES": True, "ENABLE_STACKTRACES_LOCALS": False, "HIDE_IN_STACKTRACES": ( "socketserver", "threading", "wsgiref", "debug_toolbar", "django.db", "django.core.handlers", "django.core.servers", "django.utils.decorators", "django.utils.deprecation", "django.utils.functional", ), "PRETTIFY_SQL": True, "PROFILER_CAPTURE_PROJECT_CODE": True, "PROFILER_MAX_DEPTH": 10, "PROFILER_THRESHOLD_RATIO": 8, "SHOW_TEMPLATE_CONTEXT": True, "SKIP_TEMPLATE_PREFIXES": ("django/forms/widgets/", "admin/widgets/"), "SQL_WARNING_THRESHOLD": 500, # milliseconds "OBSERVE_REQUEST_CALLBACK": "debug_toolbar.toolbar.observe_request", "TOOLBAR_LANGUAGE": None, "IS_RUNNING_TESTS": "test" in sys.argv, "UPDATE_ON_FETCH": False, } @cache def get_config(): USER_CONFIG = getattr(settings, "DEBUG_TOOLBAR_CONFIG", {}) CONFIG = CONFIG_DEFAULTS.copy() CONFIG.update(USER_CONFIG) return CONFIG PANELS_DEFAULTS = [ "debug_toolbar.panels.history.HistoryPanel", "debug_toolbar.panels.versions.VersionsPanel", "debug_toolbar.panels.timer.TimerPanel", "debug_toolbar.panels.settings.SettingsPanel", "debug_toolbar.panels.headers.HeadersPanel", "debug_toolbar.panels.request.RequestPanel", "debug_toolbar.panels.sql.SQLPanel", "debug_toolbar.panels.staticfiles.StaticFilesPanel", "debug_toolbar.panels.templates.TemplatesPanel", "debug_toolbar.panels.alerts.AlertsPanel", "debug_toolbar.panels.cache.CachePanel", "debug_toolbar.panels.signals.SignalsPanel", "debug_toolbar.panels.redirects.RedirectsPanel", "debug_toolbar.panels.profiling.ProfilingPanel", ] @cache def get_panels(): try: PANELS = list(settings.DEBUG_TOOLBAR_PANELS) except AttributeError: PANELS = PANELS_DEFAULTS logging_panel = "debug_toolbar.panels.logging.LoggingPanel" if logging_panel in PANELS: PANELS = [panel for panel in PANELS if panel != logging_panel] warnings.warn( f"Please remove {logging_panel} from your DEBUG_TOOLBAR_PANELS setting.", DeprecationWarning, stacklevel=1, ) return PANELS @receiver(setting_changed) def update_toolbar_config(*, setting, **kwargs): """ Refresh configuration when overriding settings. """ if setting == "DEBUG_TOOLBAR_CONFIG": get_config.cache_clear() elif setting == "DEBUG_TOOLBAR_PANELS": from debug_toolbar.toolbar import DebugToolbar get_panels.cache_clear() DebugToolbar._panel_classes = None # Not implemented: invalidate debug_toolbar.urls. python-django-debug-toolbar-5.2.0/debug_toolbar/static/000077500000000000000000000000001500406072000231145ustar00rootroot00000000000000python-django-debug-toolbar-5.2.0/debug_toolbar/static/debug_toolbar/000077500000000000000000000000001500406072000257245ustar00rootroot00000000000000python-django-debug-toolbar-5.2.0/debug_toolbar/static/debug_toolbar/css/000077500000000000000000000000001500406072000265145ustar00rootroot00000000000000python-django-debug-toolbar-5.2.0/debug_toolbar/static/debug_toolbar/css/print.css000066400000000000000000000000531500406072000303600ustar00rootroot00000000000000#djDebug { display: none !important; } python-django-debug-toolbar-5.2.0/debug_toolbar/static/debug_toolbar/css/toolbar.css000066400000000000000000000714041500406072000306760ustar00rootroot00000000000000/* Variable definitions */ :root { /* Font families are the same as in Django admin/css/base.css */ --djdt-font-family-primary: "Segoe UI", system-ui, Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; --djdt-font-family-monospace: ui-monospace, Menlo, Monaco, "Cascadia Mono", "Segoe UI Mono", "Roboto Mono", "Oxygen Mono", "Ubuntu Monospace", "Source Code Pro", "Fira Mono", "Droid Sans Mono", "Courier New", monospace, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; } :root, #djDebug[data-theme="light"] { --djdt-font-color: black; --djdt-background-color: white; --djdt-panel-content-background-color: #eee; --djdt-panel-content-table-background-color: var(--djdt-background-color); --djdt-panel-title-background-color: #ffc; --djdt-djdt-panel-content-table-strip-background-color: #f5f5f5; --djdt--highlighted-background-color: lightgrey; --djdt-toggle-template-background-color: #bbb; --djdt-sql-font-color: #333; --djdt-pre-text-color: #555; --djdt-path-and-locals: #777; --djdt-stack-span-color: black; --djdt-template-highlight-color: #333; --djdt-table-border-color: #ccc; --djdt-button-border-color: var(--djdt-table-border-color); --djdt-pre-border-color: var(--djdt-table-border-color); --djdt-raw-border-color: var(--djdt-table-border-color); } #djDebug[data-theme="dark"] { --djdt-font-color: #f8f8f2; --djdt-background-color: #1e293bff; --djdt-panel-content-background-color: #0f1729ff; --djdt-panel-content-table-background-color: var(--djdt-background-color); --djdt-panel-title-background-color: #242432; --djdt-djdt-panel-content-table-strip-background-color: #324154ff; --djdt--highlighted-background-color: #2c2a7dff; --djdt-toggle-template-background-color: #282755; --djdt-sql-font-color: var(--djdt-font-color); --djdt-pre-text-color: var(--djdt-font-color); --djdt-path-and-locals: #65758cff; --djdt-stack-span-color: #7c8fa4; --djdt-template-highlight-color: var(--djdt-stack-span-color); --djdt-table-border-color: #324154ff; --djdt-button-border-color: var(--djdt-table-border-color); --djdt-pre-border-color: var(--djdt-table-border-color); --djdt-raw-border-color: var(--djdt-table-border-color); } /* Debug Toolbar CSS Reset, adapted from Eric Meyer's CSS Reset */ #djDebug { color: var(--djdt-font-color); background: var(--djdt-background-color); } #djDebug, #djDebug div, #djDebug span, #djDebug applet, #djDebug object, #djDebug iframe, #djDebug h1, #djDebug h2, #djDebug h3, #djDebug h4, #djDebug h5, #djDebug h6, #djDebug p, #djDebug blockquote, #djDebug pre, #djDebug a, #djDebug abbr, #djDebug acronym, #djDebug address, #djDebug big, #djDebug cite, #djDebug code, #djDebug del, #djDebug dfn, #djDebug em, #djDebug font, #djDebug img, #djDebug ins, #djDebug kbd, #djDebug q, #djDebug s, #djDebug samp, #djDebug small, #djDebug strike, #djDebug strong, #djDebug sub, #djDebug sup, #djDebug tt, #djDebug var, #djDebug b, #djDebug u, #djDebug i, #djDebug center, #djDebug dl, #djDebug dt, #djDebug dd, #djDebug ol, #djDebug ul, #djDebug li, #djDebug fieldset, #djDebug form, #djDebug label, #djDebug legend, #djDebug table, #djDebug caption, #djDebug tbody, #djDebug tfoot, #djDebug thead, #djDebug tr, #djDebug th, #djDebug td, #djDebug summary, #djDebug button { margin: 0; padding: 0; min-width: auto; width: auto; min-height: auto; height: auto; border: 0; outline: 0; font-size: 12px; line-height: 1.5em; color: var(--djdt-font-color); vertical-align: baseline; background-color: transparent; font-family: var(--djdt-font-family-primary); text-align: left; text-shadow: none; white-space: normal; transition: none; } #djDebug button { background-color: #eee; background-image: linear-gradient(to bottom, #eee, #cccccc); border: 1px solid var(--djdt-button-border-color); border-bottom: 1px solid #bbb; border-radius: 3px; color: #333; line-height: 1; padding: 0 8px; text-align: center; text-shadow: 0 1px 0 #eee; } #djDebug button:hover { background-color: #ddd; background-image: linear-gradient(to bottom, #ddd, #bbb); border-color: #bbb; border-bottom-color: #999; cursor: pointer; text-shadow: 0 1px 0 #ddd; } #djDebug button:active { border: 1px solid #aaa; border-bottom: 1px solid #888; box-shadow: inset 0 0 5px 2px #aaa, 0 1px 0 0 #eee; } #djDebug #djDebugToolbar { background-color: #111; width: 220px; z-index: 100000000; position: fixed; top: 0; bottom: 0; right: 0; opacity: 0.9; overflow-y: auto; } #djDebug #djDebugToolbar small { color: #999; } #djDebug #djDebugToolbar ul { margin: 0; padding: 0; list-style: none; } #djDebug #djDebugToolbar li { border-bottom: 1px solid #222; color: #fff; display: block; font-weight: bold; float: none; margin: 0; padding: 0; position: relative; width: auto; } #djDebug #djDebugToolbar input[type="checkbox"] { float: right; margin: 10px; } #djDebug #djDebugToolbar li > a, #djDebug #djDebugToolbar li > div.djdt-contentless { font-weight: normal; font-style: normal; text-decoration: none; display: block; font-size: 16px; padding: 7px 10px 8px 25px; color: #fff; } #djDebug #djDebugToolbar li > div.djdt-disabled { font-style: italic; color: #999; } #djDebug #djDebugToolbar li a:hover { color: #111; background-color: #ffc; } #djDebug #djDebugToolbar li.djdt-active { background: #333; } #djDebug #djDebugToolbar li.djdt-active:before { content: "▶"; font-family: var(--djdt-font-family-primary); position: absolute; left: 0; top: 50%; transform: translateY(-50%); color: #eee; font-size: 150%; } #djDebug #djDebugToolbar li.djdt-active a:hover { color: #b36a60; background-color: transparent; } #djDebug #djDebugToolbar li small { font-size: 12px; color: #999; font-style: normal; text-decoration: none; } #djDebug #djDebugToolbarHandle { position: fixed; transform: translateY(-100%) rotate(-90deg); transform-origin: right bottom; background-color: #fff; border: 1px solid #111; border-bottom: 0; top: 0; right: 0; z-index: 100000000; opacity: 0.75; } #djDebug #djShowToolBarButton { padding: 0 5px; border: 4px solid #fff; border-bottom-width: 0; color: #fff; font-size: 22px; font-weight: bold; background: #000; opacity: 0.6; } #djDebug #djShowToolBarButton:hover { background-color: #111; border-color: #ffe761; cursor: move; opacity: 1; } #djDebug #djShowToolBarD { color: #cf9; font-size: 22px; } #djDebug #djShowToolBarJ { color: #cf9; font-size: 16px; } #djDebug pre, #djDebug code { display: block; font-family: var(--djdt-font-family-monospace); overflow: auto; } #djDebug code { font-size: 12px; white-space: pre; } #djDebug pre { white-space: pre-wrap; color: var(--djdt-pre-text-color); border: 1px solid var(--djdt-pre-border-color); border-collapse: collapse; background-color: var(--djdt-background-color); padding: 2px 3px; margin-bottom: 3px; } #djDebug .djdt-panelContent { position: fixed; margin: 0; top: 0; right: 220px; bottom: 0; left: 0px; background-color: var(--djdt-panel-content-background-color); color: #666; z-index: 100000000; } #djDebug .djdt-panelContent > div { border-bottom: 1px solid #ddd; } #djDebug .djDebugPanelTitle { position: absolute; background-color: var(--djdt-panel-title-background-color); color: #666; padding-left: 20px; top: 0; right: 0; left: 0; height: 50px; } #djDebug .djDebugPanelTitle code { display: inline; font-size: inherit; } #djDebug .djDebugPanelContent { position: absolute; top: 50px; right: 0; bottom: 0; left: 0; height: auto; padding: 5px 0 0 20px; } #djDebug .djDebugPanelContent .djdt-loader { margin: 80px auto; border: 6px solid white; border-radius: 50%; border-top: 6px solid #ffe761; width: 38px; height: 38px; animation: spin 2s linear infinite; } @keyframes spin { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } } #djDebug .djDebugPanelContent .djdt-scroll { height: 100%; overflow: auto; display: block; padding: 0 10px 0 0; } #djDebug h3 { font-size: 24px; font-weight: normal; line-height: 50px; } #djDebug h4 { font-size: 20px; font-weight: bold; margin-top: 0.8em; } #djDebug .djdt-panelContent table { border: 1px solid var(--djdt-table-border-color); border-collapse: collapse; width: 100%; background-color: var(--djdt-panel-content-table-background-color); display: table; margin-top: 0.8em; overflow: auto; } #djDebug .djdt-panelContent tbody > tr:nth-child(odd):not(.djdt-highlighted) { background-color: var(--djdt-panel-content-table-strip-background-color); } #djDebug .djdt-panelContent tbody td, #djDebug .djdt-panelContent tbody th { vertical-align: top; padding: 2px 3px; } #djDebug .djdt-panelContent tbody td.djdt-time { text-align: center; } #djDebug .djdt-panelContent thead th { padding: 1px 6px 1px 3px; text-align: left; font-weight: bold; font-size: 14px; white-space: nowrap; } #djDebug .djdt-panelContent tbody th { width: 12em; text-align: right; color: #666; padding-right: 0.5em; } #djDebug .djTemplateContext { background-color: var(--djdt-background-color); } #djDebug .djdt-panelContent .djDebugClose { position: absolute; top: 4px; right: 15px; line-height: 16px; border: 6px solid #ddd; border-radius: 50%; background: #fff; color: #ddd; font-weight: 900; font-size: 20px; height: 36px; width: 36px; padding: 0 0 5px; box-sizing: border-box; display: grid; place-items: center; } #djDebug .djdt-panelContent .djDebugClose:hover { background: #c0695d; } #djDebug .djdt-panelContent dt, #djDebug .djdt-panelContent dd { display: block; } #djDebug .djdt-panelContent dt { margin-top: 0.75em; } #djDebug .djdt-panelContent dd { margin-left: 10px; } #djDebug a.toggleTemplate { padding: 4px; background-color: var(--djdt-toggle-template-background-color); border-radius: 3px; } #djDebug a.toggleTemplate:hover { padding: 4px; background-color: #444; color: #ffe761; border-radius: 3px; } #djDebug .djDebugCollapsed { color: var(--djdt-sql-font-color); } #djDebug .djDebugUncollapsed { color: var(--djdt-sql-font-color); } #djDebug .djUnselected { display: none; } #djDebug tr.djSelected { display: table-row; } #djDebug .djDebugSql { overflow-wrap: anywhere; } #djDebug .djSQLDetailsDiv tbody th { text-align: left; } #djDebug span.djDebugLineChart { background-color: #777; height: 3px; position: absolute; bottom: 0; top: 0; left: 0; display: block; z-index: 1000000001; } #djDebug span.djDebugLineChartWarning { background-color: #900; } #djDebug .highlight { color: var(--djdt-font-color); } #djDebug .highlight .err { color: var(--djdt-font-color); } /* Error */ /* Styles for pygments HTMLFormatter - This should match debug_toolbar/panels/templates/views.py::template_source - Each line needs to be prefixed with #djDebug .highlight as well. - The .w definition needs to include: white-space: pre-wrap To regenerate: from pygments.formatters import HtmlFormatter print(HtmlFormatter(wrapcode=True).get_style_defs()) */ #djDebug[data-theme="light"] .highlight pre { line-height: 125%; } #djDebug[data-theme="light"] .highlight td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } #djDebug[data-theme="light"] .highlight span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } #djDebug[data-theme="light"] .highlight td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } #djDebug[data-theme="light"] .highlight span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } #djDebug[data-theme="light"] .highlight .hll { background-color: #ffffcc; } #djDebug[data-theme="light"] .highlight .c { color: #3d7b7b; font-style: italic; } /* Comment */ #djDebug[data-theme="light"] .highlight .err { border: 1px solid #ff0000; } /* Error */ #djDebug[data-theme="light"] .highlight .k { color: #008000; font-weight: bold; } /* Keyword */ #djDebug[data-theme="light"] .highlight .o { color: #666666; } /* Operator */ #djDebug[data-theme="light"] .highlight .ch { color: #3d7b7b; font-style: italic; } /* Comment.Hashbang */ #djDebug[data-theme="light"] .highlight .cm { color: #3d7b7b; font-style: italic; } /* Comment.Multiline */ #djDebug[data-theme="light"] .highlight .cp { color: #9c6500; } /* Comment.Preproc */ #djDebug[data-theme="light"] .highlight .cpf { color: #3d7b7b; font-style: italic; } /* Comment.PreprocFile */ #djDebug[data-theme="light"] .highlight .c1 { color: #3d7b7b; font-style: italic; } /* Comment.Single */ #djDebug[data-theme="light"] .highlight .cs { color: #3d7b7b; font-style: italic; } /* Comment.Special */ #djDebug[data-theme="light"] .highlight .gd { color: #a00000; } /* Generic.Deleted */ #djDebug[data-theme="light"] .highlight .ge { font-style: italic; } /* Generic.Emph */ #djDebug[data-theme="light"] .highlight .ges { font-weight: bold; font-style: italic; } /* Generic.EmphStrong */ #djDebug[data-theme="light"] .highlight .gr { color: #e40000; } /* Generic.Error */ #djDebug[data-theme="light"] .highlight .gh { color: #000080; font-weight: bold; } /* Generic.Heading */ #djDebug[data-theme="light"] .highlight .gi { color: #008400; } /* Generic.Inserted */ #djDebug[data-theme="light"] .highlight .go { color: #717171; } /* Generic.Output */ #djDebug[data-theme="light"] .highlight .gp { color: #000080; font-weight: bold; } /* Generic.Prompt */ #djDebug[data-theme="light"] .highlight .gs { font-weight: bold; } /* Generic.Strong */ #djDebug[data-theme="light"] .highlight .gu { color: #800080; font-weight: bold; } /* Generic.Subheading */ #djDebug[data-theme="light"] .highlight .gt { color: #0044dd; } /* Generic.Traceback */ #djDebug[data-theme="light"] .highlight .kc { color: #008000; font-weight: bold; } /* Keyword.Constant */ #djDebug[data-theme="light"] .highlight .kd { color: #008000; font-weight: bold; } /* Keyword.Declaration */ #djDebug[data-theme="light"] .highlight .kn { color: #008000; font-weight: bold; } /* Keyword.Namespace */ #djDebug[data-theme="light"] .highlight .kp { color: #008000; } /* Keyword.Pseudo */ #djDebug[data-theme="light"] .highlight .kr { color: #008000; font-weight: bold; } /* Keyword.Reserved */ #djDebug[data-theme="light"] .highlight .kt { color: #b00040; } /* Keyword.Type */ #djDebug[data-theme="light"] .highlight .m { color: #666666; } /* Literal.Number */ #djDebug[data-theme="light"] .highlight .s { color: #ba2121; } /* Literal.String */ #djDebug[data-theme="light"] .highlight .na { color: #687822; } /* Name.Attribute */ #djDebug[data-theme="light"] .highlight .nb { color: #008000; } /* Name.Builtin */ #djDebug[data-theme="light"] .highlight .nc { color: #0000ff; font-weight: bold; } /* Name.Class */ #djDebug[data-theme="light"] .highlight .no { color: #880000; } /* Name.Constant */ #djDebug[data-theme="light"] .highlight .nd { color: #aa22ff; } /* Name.Decorator */ #djDebug[data-theme="light"] .highlight .ni { color: #717171; font-weight: bold; } /* Name.Entity */ #djDebug[data-theme="light"] .highlight .ne { color: #cb3f38; font-weight: bold; } /* Name.Exception */ #djDebug[data-theme="light"] .highlight .nf { color: #0000ff; } /* Name.Function */ #djDebug[data-theme="light"] .highlight .nl { color: #767600; } /* Name.Label */ #djDebug[data-theme="light"] .highlight .nn { color: #0000ff; font-weight: bold; } /* Name.Namespace */ #djDebug[data-theme="light"] .highlight .nt { color: #008000; font-weight: bold; } /* Name.Tag */ #djDebug[data-theme="light"] .highlight .nv { color: #19177c; } /* Name.Variable */ #djDebug[data-theme="light"] .highlight .ow { color: #aa22ff; font-weight: bold; } /* Operator.Word */ #djDebug[data-theme="light"] .highlight .w { color: #bbbbbb; white-space: pre-wrap; } /* Text.Whitespace */ #djDebug[data-theme="light"] .highlight .mb { color: #666666; } /* Literal.Number.Bin */ #djDebug[data-theme="light"] .highlight .mf { color: #666666; } /* Literal.Number.Float */ #djDebug[data-theme="light"] .highlight .mh { color: #666666; } /* Literal.Number.Hex */ #djDebug[data-theme="light"] .highlight .mi { color: #666666; } /* Literal.Number.Integer */ #djDebug[data-theme="light"] .highlight .mo { color: #666666; } /* Literal.Number.Oct */ #djDebug[data-theme="light"] .highlight .sa { color: #ba2121; } /* Literal.String.Affix */ #djDebug[data-theme="light"] .highlight .sb { color: #ba2121; } /* Literal.String.Backtick */ #djDebug[data-theme="light"] .highlight .sc { color: #ba2121; } /* Literal.String.Char */ #djDebug[data-theme="light"] .highlight .dl { color: #ba2121; } /* Literal.String.Delimiter */ #djDebug[data-theme="light"] .highlight .sd { color: #ba2121; font-style: italic; } /* Literal.String.Doc */ #djDebug[data-theme="light"] .highlight .s2 { color: #ba2121; } /* Literal.String.Double */ #djDebug[data-theme="light"] .highlight .se { color: #aa5d1f; font-weight: bold; } /* Literal.String.Escape */ #djDebug[data-theme="light"] .highlight .sh { color: #ba2121; } /* Literal.String.Heredoc */ #djDebug[data-theme="light"] .highlight .si { color: #a45a77; font-weight: bold; } /* Literal.String.Interpol */ #djDebug[data-theme="light"] .highlight .sx { color: #008000; } /* Literal.String.Other */ #djDebug[data-theme="light"] .highlight .sr { color: #a45a77; } /* Literal.String.Regex */ #djDebug[data-theme="light"] .highlight .s1 { color: #ba2121; } /* Literal.String.Single */ #djDebug[data-theme="light"] .highlight .ss { color: #19177c; } /* Literal.String.Symbol */ #djDebug[data-theme="light"] .highlight .bp { color: #008000; } /* Name.Builtin.Pseudo */ #djDebug[data-theme="light"] .highlight .fm { color: #0000ff; } /* Name.Function.Magic */ #djDebug[data-theme="light"] .highlight .vc { color: #19177c; } /* Name.Variable.Class */ #djDebug[data-theme="light"] .highlight .vg { color: #19177c; } /* Name.Variable.Global */ #djDebug[data-theme="light"] .highlight .vi { color: #19177c; } /* Name.Variable.Instance */ #djDebug[data-theme="light"] .highlight .vm { color: #19177c; } /* Name.Variable.Magic */ #djDebug[data-theme="light"] .highlight .il { color: #666666; } /* Literal.Number.Integer.Long */ #djDebug[data-theme="dark"] .highlight .hll { background-color: #f1fa8c; } #djDebug[data-theme="dark"] .highlight { background: #282a36; color: #f8f8f2; } #djDebug[data-theme="dark"] .highlight .c { color: #6272a4; } /* Comment */ #djDebug[data-theme="dark"] .highlight .err { color: #f8f8f2; } /* Error */ #djDebug[data-theme="dark"] .highlight .g { color: #f8f8f2; } /* Generic */ #djDebug[data-theme="dark"] .highlight .k { color: #ff79c6; } /* Keyword */ #djDebug[data-theme="dark"] .highlight .l { color: #f8f8f2; } /* Literal */ #djDebug[data-theme="dark"] .highlight .n { color: #f8f8f2; } /* Name */ #djDebug[data-theme="dark"] .highlight .o { color: #ff79c6; } /* Operator */ #djDebug[data-theme="dark"] .highlight .x { color: #f8f8f2; } /* Other */ #djDebug[data-theme="dark"] .highlight .p { color: #f8f8f2; } /* Punctuation */ #djDebug[data-theme="dark"] .highlight .ch { color: #6272a4; } /* Comment.Hashbang */ #djDebug[data-theme="dark"] .highlight .cm { color: #6272a4; } /* Comment.Multiline */ #djDebug[data-theme="dark"] .highlight .cp { color: #ff79c6; } /* Comment.Preproc */ #djDebug[data-theme="dark"] .highlight .cpf { color: #6272a4; } /* Comment.PreprocFile */ #djDebug[data-theme="dark"] .highlight .c1 { color: #6272a4; } /* Comment.Single */ #djDebug[data-theme="dark"] .highlight .cs { color: #6272a4; } /* Comment.Special */ #djDebug[data-theme="dark"] .highlight .gd { color: #8b080b; } /* Generic.Deleted */ #djDebug[data-theme="dark"] .highlight .ge { color: #f8f8f2; text-decoration: underline; } /* Generic.Emph */ #djDebug[data-theme="dark"] .highlight .gr { color: #f8f8f2; } /* Generic.Error */ #djDebug[data-theme="dark"] .highlight .gh { color: #f8f8f2; font-weight: bold; } /* Generic.Heading */ #djDebug[data-theme="dark"] .highlight .gi { color: #f8f8f2; font-weight: bold; } /* Generic.Inserted */ #djDebug[data-theme="dark"] .highlight .go { color: #44475a; } /* Generic.Output */ #djDebug[data-theme="dark"] .highlight .gp { color: #f8f8f2; } /* Generic.Prompt */ #djDebug[data-theme="dark"] .highlight .gs { color: #f8f8f2; } /* Generic.Strong */ #djDebug[data-theme="dark"] .highlight .gu { color: #f8f8f2; font-weight: bold; } /* Generic.Subheading */ #djDebug[data-theme="dark"] .highlight .gt { color: #f8f8f2; } /* Generic.Traceback */ #djDebug[data-theme="dark"] .highlight .kc { color: #ff79c6; } /* Keyword.Constant */ #djDebug[data-theme="dark"] .highlight .kd { color: #8be9fd; font-style: italic; } /* Keyword.Declaration */ #djDebug[data-theme="dark"] .highlight .kn { color: #ff79c6; } /* Keyword.Namespace */ #djDebug[data-theme="dark"] .highlight .kp { color: #ff79c6; } /* Keyword.Pseudo */ #djDebug[data-theme="dark"] .highlight .kr { color: #ff79c6; } /* Keyword.Reserved */ #djDebug[data-theme="dark"] .highlight .kt { color: #8be9fd; } /* Keyword.Type */ #djDebug[data-theme="dark"] .highlight .ld { color: #f8f8f2; } /* Literal.Date */ #djDebug[data-theme="dark"] .highlight .m { color: #bd93f9; } /* Literal.Number */ #djDebug[data-theme="dark"] .highlight .s { color: #f1fa8c; } /* Literal.String */ #djDebug[data-theme="dark"] .highlight .na { color: #50fa7b; } /* Name.Attribute */ #djDebug[data-theme="dark"] .highlight .nb { color: #8be9fd; font-style: italic; } /* Name.Builtin */ #djDebug[data-theme="dark"] .highlight .nc { color: #50fa7b; } /* Name.Class */ #djDebug[data-theme="dark"] .highlight .no { color: #f8f8f2; } /* Name.Constant */ #djDebug[data-theme="dark"] .highlight .nd { color: #f8f8f2; } /* Name.Decorator */ #djDebug[data-theme="dark"] .highlight .ni { color: #f8f8f2; } /* Name.Entity */ #djDebug[data-theme="dark"] .highlight .ne { color: #f8f8f2; } /* Name.Exception */ #djDebug[data-theme="dark"] .highlight .nf { color: #50fa7b; } /* Name.Function */ #djDebug[data-theme="dark"] .highlight .nl { color: #8be9fd; font-style: italic; } /* Name.Label */ #djDebug[data-theme="dark"] .highlight .nn { color: #f8f8f2; } /* Name.Namespace */ #djDebug[data-theme="dark"] .highlight .nx { color: #f8f8f2; } /* Name.Other */ #djDebug[data-theme="dark"] .highlight .py { color: #f8f8f2; } /* Name.Property */ #djDebug[data-theme="dark"] .highlight .nt { color: #ff79c6; } /* Name.Tag */ #djDebug[data-theme="dark"] .highlight .nv { color: #8be9fd; font-style: italic; } /* Name.Variable */ #djDebug[data-theme="dark"] .highlight .ow { color: #ff79c6; } /* Operator.Word */ #djDebug[data-theme="dark"] .highlight .w { color: #f8f8f2; } /* Text.Whitespace */ #djDebug[data-theme="dark"] .highlight .mb { color: #bd93f9; } /* Literal.Number.Bin */ #djDebug[data-theme="dark"] .highlight .mf { color: #bd93f9; } /* Literal.Number.Float */ #djDebug[data-theme="dark"] .highlight .mh { color: #bd93f9; } /* Literal.Number.Hex */ #djDebug[data-theme="dark"] .highlight .mi { color: #bd93f9; } /* Literal.Number.Integer */ #djDebug[data-theme="dark"] .highlight .mo { color: #bd93f9; } /* Literal.Number.Oct */ #djDebug[data-theme="dark"] .highlight .sa { color: #f1fa8c; } /* Literal.String.Affix */ #djDebug[data-theme="dark"] .highlight .sb { color: #f1fa8c; } /* Literal.String.Backtick */ #djDebug[data-theme="dark"] .highlight .sc { color: #f1fa8c; } /* Literal.String.Char */ #djDebug[data-theme="dark"] .highlight .dl { color: #f1fa8c; } /* Literal.String.Delimiter */ #djDebug[data-theme="dark"] .highlight .sd { color: #f1fa8c; } /* Literal.String.Doc */ #djDebug[data-theme="dark"] .highlight .s2 { color: #f1fa8c; } /* Literal.String.Double */ #djDebug[data-theme="dark"] .highlight .se { color: #f1fa8c; } /* Literal.String.Escape */ #djDebug[data-theme="dark"] .highlight .sh { color: #f1fa8c; } /* Literal.String.Heredoc */ #djDebug[data-theme="dark"] .highlight .si { color: #f1fa8c; } /* Literal.String.Interpol */ #djDebug[data-theme="dark"] .highlight .sx { color: #f1fa8c; } /* Literal.String.Other */ #djDebug[data-theme="dark"] .highlight .sr { color: #f1fa8c; } /* Literal.String.Regex */ #djDebug[data-theme="dark"] .highlight .s1 { color: #f1fa8c; } /* Literal.String.Single */ #djDebug[data-theme="dark"] .highlight .ss { color: #f1fa8c; } /* Literal.String.Symbol */ #djDebug[data-theme="dark"] .highlight .bp { color: #f8f8f2; font-style: italic; } /* Name.Builtin.Pseudo */ #djDebug[data-theme="dark"] .highlight .fm { color: #50fa7b; } /* Name.Function.Magic */ #djDebug[data-theme="dark"] .highlight .vc { color: #8be9fd; font-style: italic; } /* Name.Variable.Class */ #djDebug[data-theme="dark"] .highlight .vg { color: #8be9fd; font-style: italic; } /* Name.Variable.Global */ #djDebug[data-theme="dark"] .highlight .vi { color: #8be9fd; font-style: italic; } /* Name.Variable.Instance */ #djDebug[data-theme="dark"] .highlight .vm { color: #8be9fd; font-style: italic; } /* Name.Variable.Magic */ #djDebug[data-theme="dark"] .highlight .il { color: #bd93f9; } /* Literal.Number.Integer.Long */ #djDebug svg.djDebugLineChart { width: 100%; height: 1.5em; } #djDebug svg.djDebugLineChartWarning rect { fill: #900; } #djDebug svg.djDebugLineChartInTransaction rect { fill: #d3ff82; } #djDebug svg.djDebugLineChart line { stroke: #94b24d; } #djDebug .djDebugRowWarning .djdt-time { color: red; } #djDebug .djdt-panelContent table .djdt-toggle { width: 14px; padding-top: 3px; } #djDebug .djdt-panelContent table .djdt-actions { min-width: 70px; white-space: nowrap; } #djDebug .djdt-color:after { content: "\00a0"; } #djDebug .djToggleSwitch { box-sizing: content-box; padding: 0; border: 1px solid #999; border-radius: 0; width: 12px; color: #777; background: linear-gradient(to bottom, #fff, #dcdcdc); } #djDebug .djNoToggleSwitch { height: 14px; width: 14px; display: inline-block; } #djDebug .djSQLDetailsDiv { margin-top: 0.8em; } #djDebug .djdt-stack span { color: var(--djdt-stack-span-color); font-weight: bold; } #djDebug .djdt-stack span.djdt-path, #djDebug .djdt-stack pre.djdt-locals, #djDebug .djdt-stack pre.djdt-locals span { color: var(--djdt-path-and-locals); font-weight: normal; } #djDebug .djdt-stack span.djdt-code { font-weight: normal; } #djDebug .djdt-stack pre.djdt-locals { margin: 0 27px 27px 27px; } #djDebug .djdt-raw { background-color: #fff; border: 1px solid var(--djdt-raw-border-color); margin-top: 0.8em; padding: 5px; white-space: pre-wrap; } #djDebug .djdt-width-20 { width: 20%; } #djDebug .djdt-width-30 { width: 30%; } #djDebug .djdt-width-60 { width: 60%; } #djDebug .djdt-max-height-100 { max-height: 100%; } #djDebug .djdt-highlighted { background-color: var(--djdt--highlighted-background-color); } #djDebug tr.djdt-highlighted.djdt-profile-row { background-color: #ffc; } #djDebug tr.djdt-highlighted.djdt-profile-row:nth-child(2n + 1) { background-color: #dd9; } @keyframes djdt-flash-new { from { background-color: green; } to { background-color: inherit; } } #djDebug .flash-new { animation: djdt-flash-new 1s; } .djdt-hidden { display: none; } #djDebug #djDebugToolbar a#djToggleThemeButton { display: flex; align-items: center; cursor: pointer; } #djToggleThemeButton > svg { margin-left: auto; } #djDebug[data-user-theme="light"] #djToggleThemeButton svg.theme-light, #djDebug[data-user-theme="dark"] #djToggleThemeButton svg.theme-dark, #djDebug[data-user-theme="auto"] #djToggleThemeButton svg.theme-auto { display: block; height: 1rem; width: 1rem; } python-django-debug-toolbar-5.2.0/debug_toolbar/static/debug_toolbar/js/000077500000000000000000000000001500406072000263405ustar00rootroot00000000000000python-django-debug-toolbar-5.2.0/debug_toolbar/static/debug_toolbar/js/history.js000066400000000000000000000064511500406072000304050ustar00rootroot00000000000000import { $$, ajaxForm, replaceToolbarState } from "./utils.js"; const djDebug = document.getElementById("djDebug"); function difference(setA, setB) { const _difference = new Set(setA); for (const elem of setB) { _difference.delete(elem); } return _difference; } /** * Create an array of dataset properties from a NodeList. */ function pluckData(nodes, key) { return [...nodes].map((obj) => obj.dataset[key]); } function refreshHistory() { const formTarget = djDebug.querySelector(".refreshHistory"); const container = document.getElementById("djdtHistoryRequests"); const oldIds = new Set( pluckData(container.querySelectorAll("tr[data-store-id]"), "storeId") ); ajaxForm(formTarget) .then((data) => { // Remove existing rows first then re-populate with new data for (const node of container.querySelectorAll( "tr[data-store-id]" )) { node.remove(); } for (const request of data.requests) { container.innerHTML = request.content + container.innerHTML; } }) .then(() => { const allIds = new Set( pluckData( container.querySelectorAll("tr[data-store-id]"), "storeId" ) ); const newIds = difference(allIds, oldIds); const lastRequestId = newIds.values().next().value; return { allIds, newIds, lastRequestId, }; }) .then((refreshInfo) => { for (const newId of refreshInfo.newIds) { const row = container.querySelector( `tr[data-store-id="${newId}"]` ); row.classList.add("flash-new"); } setTimeout(() => { for (const row of container.querySelectorAll( "tr[data-store-id]" )) { row.classList.remove("flash-new"); } }, 2000); }); } function switchHistory(newStoreId) { const formTarget = djDebug.querySelector( `.switchHistory[data-store-id='${newStoreId}']` ); const tbody = formTarget.closest("tbody"); const highlighted = tbody.querySelector(".djdt-highlighted"); if (highlighted) { highlighted.classList.remove("djdt-highlighted"); } formTarget.closest("tr").classList.add("djdt-highlighted"); ajaxForm(formTarget).then((data) => { if (Object.keys(data).length === 0) { const container = document.getElementById("djdtHistoryRequests"); container.querySelector( `button[data-store-id="${newStoreId}"]` ).innerHTML = "Switch [EXPIRED]"; } replaceToolbarState(newStoreId, data); }); } $$.on(djDebug, "click", ".switchHistory", function (event) { event.preventDefault(); switchHistory(this.dataset.storeId); }); $$.on(djDebug, "click", ".refreshHistory", (event) => { event.preventDefault(); refreshHistory(); }); // We don't refresh the whole toolbar each fetch or ajax request, // so we need to refresh the history when we open the panel $$.onPanelRender(djDebug, "HistoryPanel", refreshHistory); python-django-debug-toolbar-5.2.0/debug_toolbar/static/debug_toolbar/js/redirect.js000066400000000000000000000000601500406072000304730ustar00rootroot00000000000000document.getElementById("redirect_to").focus(); python-django-debug-toolbar-5.2.0/debug_toolbar/static/debug_toolbar/js/timer.js000066400000000000000000000065421500406072000300250ustar00rootroot00000000000000import { $$ } from "./utils.js"; function insertBrowserTiming() { const timingOffset = performance.timing.navigationStart; const timingEnd = performance.timing.loadEventEnd; const totalTime = timingEnd - timingOffset; function getLeft(stat) { if (totalTime !== 0) { return ( ((performance.timing[stat] - timingOffset) / totalTime) * 100.0 ); } return 0; } function getCSSWidth(stat, endStat) { let width = 0; if (totalTime !== 0) { width = ((performance.timing[endStat] - performance.timing[stat]) / totalTime) * 100.0; } const denominator = 100.0 - getLeft(stat); if (denominator !== 0) { // Calculate relative percent (same as sql panel logic) width = (100.0 * width) / denominator; } else { width = 0; } return width < 1 ? "2px" : `${width}%`; } function addRow(tbody, stat, endStat) { const row = document.createElement("tr"); const elapsed = performance.timing[stat] - timingOffset; if (endStat) { const duration = performance.timing[endStat] - performance.timing[stat]; // Render a start through end bar row.innerHTML = ` ${stat.replace("Start", "")} ${elapsed} (+${duration}) `; row.querySelector("rect").setAttribute( "width", getCSSWidth(stat, endStat) ); } else { // Render a point in time row.innerHTML = ` ${stat} ${elapsed} `; row.querySelector("rect").setAttribute("width", 2); } row.querySelector("rect").setAttribute("x", getLeft(stat)); tbody.appendChild(row); } const browserTiming = document.getElementById("djDebugBrowserTiming"); // Determine if the browser timing section has already been rendered. if (browserTiming.classList.contains("djdt-hidden")) { const tbody = document.getElementById("djDebugBrowserTimingTableBody"); // This is a reasonably complete and ordered set of timing periods (2 params) and events (1 param) addRow(tbody, "domainLookupStart", "domainLookupEnd"); addRow(tbody, "connectStart", "connectEnd"); addRow(tbody, "requestStart", "responseEnd"); // There is no requestEnd addRow(tbody, "responseStart", "responseEnd"); addRow(tbody, "domLoading", "domComplete"); // Spans the events below addRow(tbody, "domInteractive"); addRow(tbody, "domContentLoadedEventStart", "domContentLoadedEventEnd"); addRow(tbody, "loadEventStart", "loadEventEnd"); browserTiming.classList.remove("djdt-hidden"); } } const djDebug = document.getElementById("djDebug"); // Insert the browser timing now since it's possible for this // script to miss the initial panel load event. insertBrowserTiming(); $$.onPanelRender(djDebug, "TimerPanel", insertBrowserTiming); python-django-debug-toolbar-5.2.0/debug_toolbar/static/debug_toolbar/js/toolbar.js000066400000000000000000000347231500406072000303510ustar00rootroot00000000000000import { $$, ajax, debounce, replaceToolbarState } from "./utils.js"; function onKeyDown(event) { if (event.keyCode === 27) { djdt.hideOneLevel(); } } function getDebugElement() { // Fetch the debug element from the DOM. // This is used to avoid writing the element's id // everywhere the element is being selected. A fixed reference // to the element should be avoided because the entire DOM could // be reloaded such as via HTMX boosting. return document.getElementById("djDebug"); } const djdt = { handleDragged: false, needUpdateOnFetch: false, init() { const djDebug = getDebugElement(); djdt.needUpdateOnFetch = djDebug.dataset.updateOnFetch === "True"; $$.on(djDebug, "click", "#djDebugPanelList li a", function (event) { event.preventDefault(); if (!this.className) { return; } const panelId = this.className; const current = document.getElementById(panelId); if ($$.visible(current)) { djdt.hidePanels(); } else { djdt.hidePanels(); $$.show(current); this.parentElement.classList.add("djdt-active"); const inner = current.querySelector( ".djDebugPanelContent .djdt-scroll" ); const storeId = djDebug.dataset.storeId; if (storeId && inner.children.length === 0) { const url = new URL( djDebug.dataset.renderPanelUrl, window.location ); url.searchParams.append("store_id", storeId); url.searchParams.append("panel_id", panelId); ajax(url).then((data) => { inner.previousElementSibling.remove(); // Remove AJAX loader inner.innerHTML = data.content; $$.executeScripts(data.scripts); $$.applyStyles(inner); djDebug.dispatchEvent( new CustomEvent("djdt.panel.render", { detail: { panelId: panelId }, }) ); }); } else { djDebug.dispatchEvent( new CustomEvent("djdt.panel.render", { detail: { panelId: panelId }, }) ); } } }); $$.on(djDebug, "click", ".djDebugClose", () => { djdt.hideOneLevel(); }); $$.on( djDebug, "click", ".djDebugPanelButton input[type=checkbox]", function () { djdt.cookie.set( this.dataset.cookie, this.checked ? "on" : "off", { path: "/", expires: 10, } ); } ); // Used by the SQL and template panels $$.on(djDebug, "click", ".remoteCall", function (event) { event.preventDefault(); let url; const ajaxData = {}; if (this.tagName === "BUTTON") { const form = this.closest("form"); url = this.formAction; ajaxData.method = form.method.toUpperCase(); ajaxData.body = new FormData(form); } else if (this.tagName === "A") { url = this.href; } ajax(url, ajaxData).then((data) => { const win = document.getElementById("djDebugWindow"); win.innerHTML = data.content; $$.show(win); }); }); // Used by the cache, profiling and SQL panels $$.on(djDebug, "click", ".djToggleSwitch", function () { const id = this.dataset.toggleId; const toggleOpen = "+"; const toggleClose = "-"; const openMe = this.textContent === toggleOpen; const name = this.dataset.toggleName; const container = document.getElementById(`${name}_${id}`); for (const el of container.querySelectorAll(".djDebugCollapsed")) { $$.toggle(el, openMe); } for (const el of container.querySelectorAll( ".djDebugUncollapsed" )) { $$.toggle(el, !openMe); } for (const el of this.closest( ".djDebugPanelContent" ).querySelectorAll(`.djToggleDetails_${id}`)) { if (openMe) { el.classList.add("djSelected"); el.classList.remove("djUnselected"); this.textContent = toggleClose; } else { el.classList.remove("djSelected"); el.classList.add("djUnselected"); this.textContent = toggleOpen; } const switch_ = el.querySelector(".djToggleSwitch"); if (switch_) { switch_.textContent = this.textContent; } } }); $$.on(djDebug, "click", "#djHideToolBarButton", (event) => { event.preventDefault(); djdt.hideToolbar(); }); $$.on(djDebug, "click", "#djShowToolBarButton", () => { if (!djdt.handleDragged) { djdt.showToolbar(); } }); let startPageY; let baseY; const handle = document.getElementById("djDebugToolbarHandle"); function onHandleMove(event) { // Chrome can send spurious mousemove events, so don't do anything unless the // cursor really moved. Otherwise, it will be impossible to expand the toolbar // due to djdt.handleDragged being set to true. if (djdt.handleDragged || event.pageY !== startPageY) { let top = baseY + event.pageY; if (top < 0) { top = 0; } else if (top + handle.offsetHeight > window.innerHeight) { top = window.innerHeight - handle.offsetHeight; } handle.style.top = `${top}px`; djdt.handleDragged = true; } } $$.on(djDebug, "mousedown", "#djShowToolBarButton", (event) => { event.preventDefault(); startPageY = event.pageY; baseY = handle.offsetTop - startPageY; document.addEventListener("mousemove", onHandleMove); document.addEventListener( "mouseup", (event) => { document.removeEventListener("mousemove", onHandleMove); if (djdt.handleDragged) { event.preventDefault(); localStorage.setItem("djdt.top", handle.offsetTop); requestAnimationFrame(() => { djdt.handleDragged = false; }); djdt.ensureHandleVisibility(); } }, { once: true } ); }); // Make sure the debug element is rendered at least once. // showToolbar will continue to show it in the future if the // entire DOM is reloaded. $$.show(djDebug); const show = localStorage.getItem("djdt.show") || djDebug.dataset.defaultShow; if (show === "true") { djdt.showToolbar(); } else { djdt.hideToolbar(); } if (djDebug.dataset.sidebarUrl !== undefined) { djdt.updateOnAjax(); } const prefersDark = window.matchMedia( "(prefers-color-scheme: dark)" ).matches; const themeList = prefersDark ? ["auto", "light", "dark"] : ["auto", "dark", "light"]; const setTheme = (theme) => { djDebug.setAttribute( "data-theme", theme === "auto" ? (prefersDark ? "dark" : "light") : theme ); djDebug.setAttribute("data-user-theme", theme); }; // Updates the theme using user settings let userTheme = localStorage.getItem("djdt.user-theme") || "auto"; setTheme(userTheme); // Adds the listener to the Theme Toggle Button $$.on(djDebug, "click", "#djToggleThemeButton", () => { const index = themeList.indexOf(userTheme); userTheme = themeList[(index + 1) % themeList.length]; localStorage.setItem("djdt.user-theme", userTheme); setTheme(userTheme); }); }, hidePanels() { const djDebug = getDebugElement(); $$.hide(document.getElementById("djDebugWindow")); for (const el of djDebug.querySelectorAll(".djdt-panelContent")) { $$.hide(el); } for (const el of document.querySelectorAll("#djDebugToolbar li")) { el.classList.remove("djdt-active"); } }, ensureHandleVisibility() { const handle = document.getElementById("djDebugToolbarHandle"); // set handle position const handleTop = Math.min( localStorage.getItem("djdt.top") || 265, window.innerHeight - handle.offsetWidth ); handle.style.top = `${handleTop}px`; }, hideToolbar() { djdt.hidePanels(); $$.hide(document.getElementById("djDebugToolbar")); const handle = document.getElementById("djDebugToolbarHandle"); $$.show(handle); djdt.ensureHandleVisibility(); window.addEventListener("resize", djdt.ensureHandleVisibility); document.removeEventListener("keydown", onKeyDown); localStorage.setItem("djdt.show", "false"); }, hideOneLevel() { const win = document.getElementById("djDebugWindow"); if ($$.visible(win)) { $$.hide(win); } else { const toolbar = document.getElementById("djDebugToolbar"); if (toolbar.querySelector("li.djdt-active")) { djdt.hidePanels(); } else { djdt.hideToolbar(); } } }, showToolbar() { document.addEventListener("keydown", onKeyDown); $$.show(document.getElementById("djDebug")); $$.hide(document.getElementById("djDebugToolbarHandle")); $$.show(document.getElementById("djDebugToolbar")); localStorage.setItem("djdt.show", "true"); window.removeEventListener("resize", djdt.ensureHandleVisibility); }, updateOnAjax() { const sidebarUrl = document.getElementById("djDebug").dataset.sidebarUrl; const slowjax = debounce(ajax, 200); function handleAjaxResponse(storeId) { const encodedStoreId = encodeURIComponent(storeId); const dest = `${sidebarUrl}?store_id=${encodedStoreId}`; slowjax(dest).then((data) => { if (djdt.needUpdateOnFetch) { replaceToolbarState(encodedStoreId, data); } }); } // Patch XHR / traditional AJAX requests const origOpen = XMLHttpRequest.prototype.open; XMLHttpRequest.prototype.open = function (...args) { this.addEventListener("load", function () { // Chromium emits a "Refused to get unsafe header" uncatchable warning // when the header can't be fetched. While it doesn't impede execution // it's worrisome to developers. if ( this.getAllResponseHeaders().indexOf("djdt-store-id") >= 0 ) { handleAjaxResponse(this.getResponseHeader("djdt-store-id")); } }); origOpen.apply(this, args); }; const origFetch = window.fetch; window.fetch = function (...args) { // Heads up! Before modifying this code, please be aware of the // possible unhandled errors that might arise from changing this. // For details, see // https://github.com/django-commons/django-debug-toolbar/pull/2100 const promise = origFetch.apply(this, args); return promise.then((response) => { if (response.headers.get("djdt-store-id") !== null) { try { handleAjaxResponse( response.headers.get("djdt-store-id") ); } catch (err) { throw new Error( `"${err.name}" occurred within django-debug-toolbar: ${err.message}` ); } } return response; }); }; }, cookie: { get(key) { if (!document.cookie.includes(key)) { return null; } const cookieArray = document.cookie.split("; "); const cookies = {}; for (const e of cookieArray) { const parts = e.split("="); cookies[parts[0]] = parts[1]; } return cookies[key]; }, set(key, value, options = {}) { if (typeof options.expires === "number") { const days = options.expires; const expires = new Date(); expires.setDate(expires.setDate() + days); options.expires = expires; } document.cookie = [ `${encodeURIComponent(key)}=${String(value)}`, options.expires ? `; expires=${options.expires.toUTCString()}` : "", options.path ? `; path=${options.path}` : "", options.domain ? `; domain=${options.domain}` : "", options.secure ? "; secure" : "", "samesite" in options ? `; samesite=${options.samesite}` : "; samesite=lax", ].join(""); return value; }, }, }; window.djdt = { show_toolbar: djdt.showToolbar, hide_toolbar: djdt.hideToolbar, init: djdt.init, close: djdt.hideOneLevel, cookie: djdt.cookie, }; if (document.readyState !== "loading") { djdt.init(); } else { document.addEventListener("DOMContentLoaded", djdt.init); } python-django-debug-toolbar-5.2.0/debug_toolbar/static/debug_toolbar/js/utils.js000066400000000000000000000111241500406072000300350ustar00rootroot00000000000000const $$ = { on(root, eventName, selector, fn) { root.removeEventListener(eventName, fn); root.addEventListener(eventName, (event) => { const target = event.target.closest(selector); if (root.contains(target)) { fn.call(target, event); } }); }, onPanelRender(root, panelId, fn) { /* This is a helper function to attach a handler for a `djdt.panel.render` event of a specific panel. root: The container element that the listener should be attached to. panelId: The Id of the panel. fn: A function to execute when the event is triggered. */ root.addEventListener("djdt.panel.render", (event) => { if (event.detail.panelId === panelId) { fn.call(event); } }); }, show(element) { element.classList.remove("djdt-hidden"); }, hide(element) { element.classList.add("djdt-hidden"); }, toggle(element, value) { if (value) { $$.show(element); } else { $$.hide(element); } }, visible(element) { return !element.classList.contains("djdt-hidden"); }, executeScripts(scripts) { for (const script of scripts) { const el = document.createElement("script"); el.type = "module"; el.src = script; el.async = true; document.head.appendChild(el); } }, applyStyles(container) { /* * Given a container element, apply styles set via data-djdt-styles attribute. * The format is data-djdt-styles="styleName1:value;styleName2:value2" * The style names should use the CSSStyleDeclaration camel cased names. */ for (const element of container.querySelectorAll( "[data-djdt-styles]" )) { const styles = element.dataset.djdtStyles || ""; for (const styleText of styles.split(";")) { const styleKeyPair = styleText.split(":"); if (styleKeyPair.length === 2) { const name = styleKeyPair[0].trim(); const value = styleKeyPair[1].trim(); element.style[name] = value; } } } }, }; function ajax(url, init) { return fetch(url, Object.assign({ credentials: "same-origin" }, init)) .then((response) => { if (response.ok) { return response .json() .catch((error) => Promise.reject( new Error( `The response is a invalid Json object : ${error}` ) ) ); } return Promise.reject( new Error(`${response.status}: ${response.statusText}`) ); }) .catch((error) => { const win = document.getElementById("djDebugWindow"); win.innerHTML = `

${error.message}

`; $$.show(win); throw error; }); } function ajaxForm(element) { const form = element.closest("form"); const url = new URL(form.action); const formData = new FormData(form); for (const [name, value] of formData.entries()) { url.searchParams.append(name, value); } const ajaxData = { method: form.method.toUpperCase(), }; return ajax(url, ajaxData); } function replaceToolbarState(newStoreId, data) { const djDebug = document.getElementById("djDebug"); djDebug.setAttribute("data-store-id", newStoreId); // Check if response is empty, it could be due to an expired storeId. for (const panelId of Object.keys(data)) { const panel = document.getElementById(panelId); if (panel) { panel.outerHTML = data[panelId].content; document.getElementById(`djdt-${panelId}`).outerHTML = data[panelId].button; } } } function debounce(func, delay) { let timer = null; let resolves = []; return (...args) => { clearTimeout(timer); timer = setTimeout(() => { const result = func(...args); for (const r of resolves) { r(result); } resolves = []; }, delay); return new Promise((r) => resolves.push(r)); }; } export { $$, ajax, ajaxForm, replaceToolbarState, debounce }; python-django-debug-toolbar-5.2.0/debug_toolbar/templates/000077500000000000000000000000001500406072000236235ustar00rootroot00000000000000python-django-debug-toolbar-5.2.0/debug_toolbar/templates/debug_toolbar/000077500000000000000000000000001500406072000264335ustar00rootroot00000000000000python-django-debug-toolbar-5.2.0/debug_toolbar/templates/debug_toolbar/base.html000066400000000000000000000040531500406072000302350ustar00rootroot00000000000000{% load i18n static %} {% block css %} {% endblock css %} {% block js %} {% endblock js %}
DJDT
{% for panel in toolbar.panels %} {% include "debug_toolbar/includes/panel_content.html" %} {% endfor %}
python-django-debug-toolbar-5.2.0/debug_toolbar/templates/debug_toolbar/includes/000077500000000000000000000000001500406072000302415ustar00rootroot00000000000000python-django-debug-toolbar-5.2.0/debug_toolbar/templates/debug_toolbar/includes/panel_button.html000066400000000000000000000015241500406072000336230ustar00rootroot00000000000000{% load i18n %}
  • {% if panel.has_content and panel.enabled %} {% else %} {% endif %}
  • python-django-debug-toolbar-5.2.0/debug_toolbar/templates/debug_toolbar/includes/panel_content.html000066400000000000000000000013501500406072000337570ustar00rootroot00000000000000{% load static %} {% if panel.has_content and panel.enabled %}

    {{ panel.title }}

    {% if toolbar.should_render_panels %} {% for script in panel.scripts %}{% endfor %}
    {{ panel.content }}
    {% else %}
    {% endif %}
    {% endif %} python-django-debug-toolbar-5.2.0/debug_toolbar/templates/debug_toolbar/includes/theme_selector.html000066400000000000000000000064101500406072000341320ustar00rootroot00000000000000 python-django-debug-toolbar-5.2.0/debug_toolbar/templates/debug_toolbar/panels/000077500000000000000000000000001500406072000277155ustar00rootroot00000000000000python-django-debug-toolbar-5.2.0/debug_toolbar/templates/debug_toolbar/panels/alerts.html000066400000000000000000000003721500406072000320770ustar00rootroot00000000000000{% load i18n %} {% if alerts %}

    {% translate "Alerts found" %}

    {% for alert in alerts %}
    • {{ alert.alert }}
    {% endfor %} {% else %}

    {% translate "No alerts found" %}

    {% endif %} python-django-debug-toolbar-5.2.0/debug_toolbar/templates/debug_toolbar/panels/cache.html000066400000000000000000000035351500406072000316540ustar00rootroot00000000000000{% load i18n %}

    {% translate "Summary" %}

    {% translate "Total calls" %} {% translate "Total time" %} {% translate "Cache hits" %} {% translate "Cache misses" %}
    {{ total_calls }} {{ total_time }} ms {{ hits }} {{ misses }}

    {% translate "Commands" %}

    {% for name in counts.keys %} {% endfor %} {% for value in counts.values %} {% endfor %}
    {{ name }}
    {{ value }}
    {% if calls %}

    {% translate "Calls" %}

    {% for call in calls %} {% endfor %}
    {% translate "Time (ms)" %} {% translate "Type" %} {% translate "Arguments" %} {% translate "Keyword arguments" %} {% translate "Backend" %}
    {{ call.time|floatformat:"4" }} {{ call.name|escape }} {{ call.args|escape }} {{ call.kwargs|escape }} {{ call.backend }}
    {{ call.trace }}
    {% endif %} python-django-debug-toolbar-5.2.0/debug_toolbar/templates/debug_toolbar/panels/headers.html000066400000000000000000000022771500406072000322260ustar00rootroot00000000000000{% load i18n %}

    {% translate "Request headers" %}

    {% for key, value in request_headers.items %} {% endfor %}
    {% translate "Key" %} {% translate "Value" %}
    {{ key|escape }} {{ value|escape }}

    {% translate "Response headers" %}

    {% for key, value in response_headers.items %} {% endfor %}
    {% translate "Key" %} {% translate "Value" %}
    {{ key|escape }} {{ value|escape }}

    {% translate "WSGI environ" %}

    {% translate "Since the WSGI environ inherits the environment of the server, only a significant subset is shown below." %}

    {% for key, value in environ.items %} {% endfor %}
    {% translate "Key" %} {% translate "Value" %}
    {{ key|escape }} {{ value|escape }}
    python-django-debug-toolbar-5.2.0/debug_toolbar/templates/debug_toolbar/panels/history.html000066400000000000000000000013471500406072000323110ustar00rootroot00000000000000{% load i18n static %}
    {{ refresh_form.as_div }}
    {% for id, store_context in stores.items %} {% include "debug_toolbar/panels/history_tr.html" %} {% endfor %}
    {% translate "Time" %} {% translate "Method" %} {% translate "Path" %} {% translate "Request Variables" %} {% translate "Status" %} {% translate "Action" %}
    python-django-debug-toolbar-5.2.0/debug_toolbar/templates/debug_toolbar/panels/history_tr.html000066400000000000000000000033641500406072000330170ustar00rootroot00000000000000{% load i18n %} {{ store_context.toolbar.stats.HistoryPanel.time|escape }}

    {{ store_context.toolbar.stats.HistoryPanel.request_method|escape }}

    {{ store_context.toolbar.stats.HistoryPanel.request_url|truncatechars:100|escape }}

    {% for key, value in store_context.toolbar.stats.HistoryPanel.data.items %} {% empty %} {% endfor %}
    {% translate "Variable" %} {% translate "Value" %}
    {{ key|pprint }} {{ value|pprint }}
    No data

    {{ store_context.toolbar.stats.HistoryPanel.status_code|escape }}

    {{ store_context.form.as_div }}
    python-django-debug-toolbar-5.2.0/debug_toolbar/templates/debug_toolbar/panels/profiling.html000066400000000000000000000024601500406072000325760ustar00rootroot00000000000000{% load i18n %} {% for call in func_list %} {% endfor %}
    {% translate "Call" %} {% translate "CumTime" %} {% translate "Per" %} {% translate "TotTime" %} {% translate "Per" %} {% translate "Count" %}
    {% if call.has_subfuncs %} {% else %} {% endif %} {{ call.func_std_string }}
    {{ call.cumtime|floatformat:3 }} {{ call.cumtime_per_call|floatformat:3 }} {{ call.tottime|floatformat:3 }} {{ call.tottime_per_call|floatformat:3 }} {{ call.count }}
    python-django-debug-toolbar-5.2.0/debug_toolbar/templates/debug_toolbar/panels/request.html000066400000000000000000000026171500406072000323010ustar00rootroot00000000000000{% load i18n %}

    {% translate "View information" %}

    {% translate "View function" %} {% translate "Arguments" %} {% translate "Keyword arguments" %} {% translate "URL name" %}
    {{ view_func }} {{ view_args|pprint }} {{ view_kwargs|pprint }} {{ view_urlname }}
    {% if cookies.list or cookies.raw %}

    {% translate "Cookies" %}

    {% include 'debug_toolbar/panels/request_variables.html' with variables=cookies %} {% else %}

    {% translate "No cookies" %}

    {% endif %} {% if session.list or session.raw %}

    {% translate "Session data" %}

    {% include 'debug_toolbar/panels/request_variables.html' with variables=session %} {% else %}

    {% translate "No session data" %}

    {% endif %} {% if get.list or get.raw %}

    {% translate "GET data" %}

    {% include 'debug_toolbar/panels/request_variables.html' with variables=get %} {% else %}

    {% translate "No GET data" %}

    {% endif %} {% if post.list or post.raw %}

    {% translate "POST data" %}

    {% include 'debug_toolbar/panels/request_variables.html' with variables=post %} {% else %}

    {% translate "No POST data" %}

    {% endif %} request_variables.html000066400000000000000000000010361500406072000342440ustar00rootroot00000000000000python-django-debug-toolbar-5.2.0/debug_toolbar/templates/debug_toolbar/panels{% load i18n %} {% if variables.list %} {% for key, value in variables.list %} {% endfor %}
    {% translate "Variable" %} {% translate "Value" %}
    {{ key|pprint }} {{ value|pprint }}
    {% elif variables.raw %} {{ variables.raw|pprint }} {% endif %} python-django-debug-toolbar-5.2.0/debug_toolbar/templates/debug_toolbar/panels/settings.html000066400000000000000000000005171500406072000324460ustar00rootroot00000000000000{% load i18n %} {% for name, value in settings.items %} {% endfor %}
    {% translate "Setting" %} {% translate "Value" %}
    {{ name }} {{ value|pprint }}
    python-django-debug-toolbar-5.2.0/debug_toolbar/templates/debug_toolbar/panels/signals.html000066400000000000000000000005201500406072000322400ustar00rootroot00000000000000{% load i18n %} {% for name, receivers in signals %} {% endfor %}
    {% translate "Signal" %} {% translate "Receivers" %}
    {{ name|escape }} {{ receivers|join:", " }}
    python-django-debug-toolbar-5.2.0/debug_toolbar/templates/debug_toolbar/panels/sql.html000066400000000000000000000133201500406072000314010ustar00rootroot00000000000000{% load i18n l10n %}
      {% for alias, info in databases %}
    • {{ alias }} {{ info.time_spent|floatformat:"2" }} ms ({% blocktranslate count num=info.num_queries %}{{ num }} query{% plural %}{{ num }} queries{% endblocktranslate %} {% if info.similar_count %} {% blocktranslate with count=info.similar_count trimmed %} including {{ count }} similar {% endblocktranslate %} {% if info.duplicate_count %} {% blocktranslate with dupes=info.duplicate_count trimmed %} and {{ dupes }} duplicates {% endblocktranslate %} {% endif %} {% endif %})
    • {% endfor %}
    {% if queries %} {% for query in queries %} {% endfor %}
    {% translate "Query" %} {% translate "Timeline" %} {% translate "Time (ms)" %} {% translate "Action" %}
    {{ query.sql|safe }}
    {% if query.similar_count %} {% blocktranslate with count=query.similar_count %}{{ count }} similar queries.{% endblocktranslate %} {% endif %} {% if query.duplicate_count %} {% blocktranslate with dupes=query.duplicate_count %}Duplicated {{ dupes }} times.{% endblocktranslate %} {% endif %}
    {% if query.starts_trans %} {% endif %} {% if query.ends_trans %} {% endif %} {{ query.duration|floatformat:"2" }} {% if query.params %} {% if query.is_select %}
    {{ query.form.as_div }} {% if query.vendor == 'mysql' %} {% endif %}
    {% endif %} {% endif %}

    {% translate "Connection:" %} {{ query.alias }}

    {% if query.iso_level %}

    {% translate "Isolation level:" %} {{ query.iso_level }}

    {% endif %} {% if query.trans_status %}

    {% translate "Transaction status:" %} {{ query.trans_status }}

    {% endif %} {% if query.stacktrace %}
    {{ query.stacktrace }}
    {% endif %} {% if query.template_info %} {% for line in query.template_info.context %} {% endfor %}
    {{ line.num }} {{ line.content }}

    {{ query.template_info.name|default:_("(unknown)") }}

    {% endif %}
    {% else %}

    {% translate "No SQL queries were recorded during this request." %}

    {% endif %} python-django-debug-toolbar-5.2.0/debug_toolbar/templates/debug_toolbar/panels/sql_explain.html000066400000000000000000000016461500406072000331310ustar00rootroot00000000000000{% load i18n %}

    {% translate "SQL explained" %}

    {% translate "Executed SQL" %}
    {{ sql|safe }}
    {% translate "Time" %}
    {{ duration }} ms
    {% translate "Database" %}
    {{ alias }}
    {% for h in headers %} {% endfor %} {% for row in result %} {% for column in row %} {% endfor %} {% endfor %}
    {{ h|upper }}
    {% if forloop.last %}{% endif %}{{ column|escape }}{% if forloop.last %}{% endif %}
    python-django-debug-toolbar-5.2.0/debug_toolbar/templates/debug_toolbar/panels/sql_profile.html000066400000000000000000000020431500406072000331210ustar00rootroot00000000000000{% load i18n %}

    {% translate "SQL profiled" %}

    {% if result %}
    {% translate "Executed SQL" %}
    {{ sql|safe }}
    {% translate "Time" %}
    {{ duration }} ms
    {% translate "Database" %}
    {{ alias }}
    {% for h in headers %} {% endfor %} {% for row in result %} {% for column in row %} {% endfor %} {% endfor %}
    {{ h|upper }}
    {{ column|escape }}
    {% else %}
    {% translate "Error" %}
    {{ result_error }}
    {% endif %}
    python-django-debug-toolbar-5.2.0/debug_toolbar/templates/debug_toolbar/panels/sql_select.html000066400000000000000000000017301500406072000327420ustar00rootroot00000000000000{% load i18n %}

    {% translate "SQL selected" %}

    {% translate "Executed SQL" %}
    {{ sql|safe }}
    {% translate "Time" %}
    {{ duration }} ms
    {% translate "Database" %}
    {{ alias }}
    {% if result %} {% for h in headers %} {% endfor %} {% for row in result %} {% for column in row %} {% endfor %} {% endfor %}
    {{ h|upper }}
    {{ column|escape }}
    {% else %}

    {% translate "Empty set" %}

    {% endif %}
    python-django-debug-toolbar-5.2.0/debug_toolbar/templates/debug_toolbar/panels/staticfiles.html000066400000000000000000000034011500406072000331130ustar00rootroot00000000000000{% load i18n %}

    {% blocktranslate count dirs_count=staticfiles_dirs|length %}Static file path{% plural %}Static file paths{% endblocktranslate %}

    {% if staticfiles_dirs %}
      {% for prefix, staticfiles_dir in staticfiles_dirs %}
    1. {{ staticfiles_dir }}{% if prefix %} {% blocktranslate %}(prefix {{ prefix }}){% endblocktranslate %}{% endif %}
    2. {% endfor %}
    {% else %}

    {% translate "None" %}

    {% endif %}

    {% blocktranslate count apps_count=staticfiles_apps|length %}Static file app{% plural %}Static file apps{% endblocktranslate %}

    {% if staticfiles_apps %}
      {% for static_app in staticfiles_apps %}
    1. {{ static_app }}
    2. {% endfor %}
    {% else %}

    {% translate "None" %}

    {% endif %}

    {% blocktranslate count staticfiles_count=staticfiles|length %}Static file{% plural %}Static files{% endblocktranslate %}

    {% if staticfiles %}
    {% for staticfile in staticfiles %}
    {{ staticfile }}
    {{ staticfile.real_path }}
    {% endfor %}
    {% else %}

    {% translate "None" %}

    {% endif %} {% for finder, payload in staticfiles_finders.items %}

    {{ finder }} ({% blocktranslate count payload_count=payload|length %}{{ payload_count }} file{% plural %}{{ payload_count }} files{% endblocktranslate %})

    {% for path, real_path in payload %} {% endfor %}
    {% translate 'Path' %} {% translate 'Location' %}
    {{ path }} {{ real_path }}
    {% endfor %} python-django-debug-toolbar-5.2.0/debug_toolbar/templates/debug_toolbar/panels/template_source.html000066400000000000000000000004361500406072000340010ustar00rootroot00000000000000{% load i18n %}

    {% translate "Template source:" %} {{ template_name }}

    {{ source }}
    python-django-debug-toolbar-5.2.0/debug_toolbar/templates/debug_toolbar/panels/templates.html000066400000000000000000000033101500406072000325760ustar00rootroot00000000000000{% load i18n %}

    {% blocktranslate count template_count=template_dirs|length %}Template path{% plural %}Template paths{% endblocktranslate %}

    {% if template_dirs %}
      {% for template in template_dirs %}
    1. {{ template }}
    2. {% endfor %}
    {% else %}

    {% translate "None" %}

    {% endif %}

    {% blocktranslate count template_count=templates|length %}Template{% plural %}Templates{% endblocktranslate %}

    {% if templates %}
    {% for template in templates %}
    {{ template.template.name|addslashes }}
    {{ template.template.origin_name|addslashes }}
    {% if template.context %}
    {% translate "Toggle context" %} {{ template.context }}
    {% endif %} {% endfor %}
    {% else %}

    {% translate "None" %}

    {% endif %}

    {% blocktranslate count context_processors_count=context_processors|length %}Context processor{% plural %}Context processors{% endblocktranslate %}

    {% if context_processors %}
    {% for key, value in context_processors.items %}
    {{ key|escape }}
    {% translate "Toggle context" %} {{ value|escape }}
    {% endfor %}
    {% else %}

    {% translate "None" %}

    {% endif %} python-django-debug-toolbar-5.2.0/debug_toolbar/templates/debug_toolbar/panels/timer.html000066400000000000000000000020341500406072000317220ustar00rootroot00000000000000{% load i18n %}

    {% translate "Resource usage" %}

    {% for key, value in rows %} {% endfor %}
    {% translate "Resource" %} {% translate "Value" %}
    {{ key|escape }} {{ value|escape }}

    {% translate "Browser timing" %}

    {% translate "Timing attribute" %} {% translate "Timeline" %} {% translate "Milliseconds since navigation start (+length)" %}
    python-django-debug-toolbar-5.2.0/debug_toolbar/templates/debug_toolbar/panels/versions.html000066400000000000000000000007561500406072000324630ustar00rootroot00000000000000{% load i18n %} {% for package, name, version in versions %} {% endfor %}
    {% translate "Package" %} {% translate "Name" %} {% translate "Version" %}
    {{ package }} {{ name }} {{ version }}
    python-django-debug-toolbar-5.2.0/debug_toolbar/templates/debug_toolbar/redirect.html000066400000000000000000000012741500406072000311260ustar00rootroot00000000000000{% load i18n static %} Django Debug Toolbar Redirects Panel: {{ status_line }}

    {{ status_line }}

    {% translate "Location:" %} {{ redirect_to }}

    {% translate "The Django Debug Toolbar has intercepted a redirect to the above URL for debug viewing purposes. You can click the above link to continue with the redirect as normal." %}

    python-django-debug-toolbar-5.2.0/debug_toolbar/templatetags/000077500000000000000000000000001500406072000243175ustar00rootroot00000000000000python-django-debug-toolbar-5.2.0/debug_toolbar/templatetags/__init__.py000066400000000000000000000000001500406072000264160ustar00rootroot00000000000000python-django-debug-toolbar-5.2.0/debug_toolbar/toolbar.py000066400000000000000000000174271500406072000236540ustar00rootroot00000000000000""" The main DebugToolbar class that loads and renders the Toolbar. """ import re import uuid from collections import OrderedDict from functools import cache from django.apps import apps from django.conf import settings from django.core.exceptions import ImproperlyConfigured from django.core.handlers.asgi import ASGIRequest from django.dispatch import Signal from django.template import TemplateSyntaxError from django.template.loader import render_to_string from django.urls import include, path, re_path, resolve from django.urls.exceptions import Resolver404 from django.utils.module_loading import import_string from django.utils.translation import get_language, override as lang_override from debug_toolbar import APP_NAME, settings as dt_settings from debug_toolbar.panels import Panel class DebugToolbar: # for internal testing use only _created = Signal() def __init__(self, request, get_response): self.request = request self.config = dt_settings.get_config().copy() panels = [] for panel_class in reversed(self.get_panel_classes()): panel = panel_class(self, get_response) panels.append(panel) if panel.enabled: get_response = panel.process_request self.process_request = get_response # Use OrderedDict for the _panels attribute so that items can be efficiently # removed using FIFO order in the DebugToolbar.store() method. The .popitem() # method of Python's built-in dict only supports LIFO removal. self._panels = OrderedDict[str, Panel]() while panels: panel = panels.pop() self._panels[panel.panel_id] = panel self.stats = {} self.server_timing_stats = {} self.store_id = None self._created.send(request, toolbar=self) # Manage panels @property def panels(self): """ Get a list of all available panels. """ return list(self._panels.values()) @property def enabled_panels(self): """ Get a list of panels enabled for the current request. """ return [panel for panel in self._panels.values() if panel.enabled] @property def csp_nonce(self): """ Look up the Content Security Policy nonce if there is one. This is built specifically for django-csp, which may not always have a nonce associated with the request. """ return getattr(self.request, "csp_nonce", None) def get_panel_by_id(self, panel_id): """ Get the panel with the given id, which is the class name by default. """ return self._panels[panel_id] # Handle rendering the toolbar in HTML def render_toolbar(self): """ Renders the overall Toolbar with panels inside. """ if not self.should_render_panels(): self.store() try: context = {"toolbar": self} lang = self.config["TOOLBAR_LANGUAGE"] or get_language() with lang_override(lang): return render_to_string("debug_toolbar/base.html", context) except TemplateSyntaxError: if not apps.is_installed("django.contrib.staticfiles"): raise ImproperlyConfigured( "The debug toolbar requires the staticfiles contrib app. " "Add 'django.contrib.staticfiles' to INSTALLED_APPS and " "define STATIC_URL in your settings." ) from None else: raise def should_render_panels(self): """Determine whether the panels should be rendered during the request If False, the panels will be loaded via Ajax. """ if (render_panels := self.config["RENDER_PANELS"]) is None: # If wsgi.multiprocess is true then it is either being served # from ASGI or multithreaded third-party WSGI server eg gunicorn. # we need to make special check for ASGI for supporting # async context based requests. if isinstance(self.request, ASGIRequest): render_panels = False else: # The wsgi.multiprocess case of being True isn't supported until the # toolbar has resolved the following issue: # This type of set up is most likely # https://github.com/django-commons/django-debug-toolbar/issues/1430 render_panels = self.request.META.get("wsgi.multiprocess", True) return render_panels # Handle storing toolbars in memory and fetching them later on _store = OrderedDict() def store(self): # Store already exists. if self.store_id: return self.store_id = uuid.uuid4().hex self._store[self.store_id] = self for _ in range(self.config["RESULTS_CACHE_SIZE"], len(self._store)): self._store.popitem(last=False) @classmethod def fetch(cls, store_id): return cls._store.get(store_id) # Manually implement class-level caching of panel classes and url patterns # because it's more obvious than going through an abstraction. _panel_classes = None @classmethod def get_panel_classes(cls): if cls._panel_classes is None: # Load panels in a temporary variable for thread safety. panel_classes = [ import_string(panel_path) for panel_path in dt_settings.get_panels() ] cls._panel_classes = panel_classes return cls._panel_classes _urlpatterns = None @classmethod def get_urls(cls): if cls._urlpatterns is None: from . import views # Load URLs in a temporary variable for thread safety. # Global URLs urlpatterns = [ path("render_panel/", views.render_panel, name="render_panel"), ] # Per-panel URLs for panel_class in cls.get_panel_classes(): urlpatterns += panel_class.get_urls() cls._urlpatterns = urlpatterns return cls._urlpatterns @classmethod def is_toolbar_request(cls, request): """ Determine if the request is for a DebugToolbar view. """ # The primary caller of this function is in the middleware which may # not have resolver_match set. try: resolver_match = request.resolver_match or resolve( request.path_info, getattr(request, "urlconf", None) ) except Resolver404: return False return resolver_match.namespaces and resolver_match.namespaces[-1] == APP_NAME @staticmethod @cache def get_observe_request(): # If OBSERVE_REQUEST_CALLBACK is a string, which is the recommended # setup, resolve it to the corresponding callable. func_or_path = dt_settings.get_config()["OBSERVE_REQUEST_CALLBACK"] if isinstance(func_or_path, str): return import_string(func_or_path) else: return func_or_path def observe_request(request): """ Determine whether to update the toolbar from a client side request. """ return True def debug_toolbar_urls(prefix="__debug__"): """ Return a URL pattern for serving toolbar in debug mode. from django.conf import settings from debug_toolbar.toolbar import debug_toolbar_urls urlpatterns = [ # ... the rest of your URLconf goes here ... ] + debug_toolbar_urls() """ if not prefix: raise ImproperlyConfigured("Empty urls prefix not permitted") elif not settings.DEBUG: # No-op if not in debug mode. return [] return [ re_path( r"^{}/".format(re.escape(prefix.lstrip("/"))), include("debug_toolbar.urls"), ), ] python-django-debug-toolbar-5.2.0/debug_toolbar/urls.py000066400000000000000000000002151500406072000231620ustar00rootroot00000000000000from debug_toolbar import APP_NAME from debug_toolbar.toolbar import DebugToolbar app_name = APP_NAME urlpatterns = DebugToolbar.get_urls() python-django-debug-toolbar-5.2.0/debug_toolbar/utils.py000066400000000000000000000327321500406072000233460ustar00rootroot00000000000000from __future__ import annotations import inspect import linecache import os.path import sys import warnings from collections.abc import Sequence from pprint import PrettyPrinter, pformat from typing import Any from asgiref.local import Local from django.http import QueryDict from django.template import Node from django.utils.html import format_html from django.utils.safestring import SafeString, mark_safe from django.views.debug import get_default_exception_reporter_filter from debug_toolbar import _stubs as stubs, settings as dt_settings _local_data = Local() safe_filter = get_default_exception_reporter_filter() def _is_excluded_frame(frame: Any, excluded_modules: Sequence[str] | None) -> bool: if not excluded_modules: return False frame_module = frame.f_globals.get("__name__") if not isinstance(frame_module, str): return False return any( frame_module == excluded_module or frame_module.startswith(excluded_module + ".") for excluded_module in excluded_modules ) def _stack_trace_deprecation_warning() -> None: warnings.warn( "get_stack() and tidy_stacktrace() are deprecated in favor of" " get_stack_trace()", DeprecationWarning, stacklevel=2, ) def tidy_stacktrace(stack: list[stubs.InspectStack]) -> stubs.TidyStackTrace: """ Clean up stacktrace and remove all entries that are excluded by the HIDE_IN_STACKTRACES setting. ``stack`` should be a list of frame tuples from ``inspect.stack()`` or ``debug_toolbar.utils.get_stack()``. """ _stack_trace_deprecation_warning() trace = [] excluded_modules = dt_settings.get_config()["HIDE_IN_STACKTRACES"] for frame, path, line_no, func_name, text in (f[:5] for f in stack): if _is_excluded_frame(frame, excluded_modules): continue text = "".join(text).strip() if text else "" frame_locals = ( pformat(frame.f_locals) if dt_settings.get_config()["ENABLE_STACKTRACES_LOCALS"] else None ) trace.append((path, line_no, func_name, text, frame_locals)) return trace def render_stacktrace(trace: stubs.TidyStackTrace) -> SafeString: show_locals = dt_settings.get_config()["ENABLE_STACKTRACES_LOCALS"] html = "" for abspath, lineno, func, code, locals_ in trace: if os.path.sep in abspath: directory, filename = abspath.rsplit(os.path.sep, 1) # We want the separator to appear in the UI so add it back. directory += os.path.sep else: # abspath could be something like "" directory = "" filename = abspath html += format_html( ( '{}' + '{} in' + ' {}' + '({})\n' + ' {}\n' ), directory, filename, func, lineno, code, ) if show_locals: html += format_html( '
    {}
    \n', locals_, ) html += "\n" return mark_safe(html) def get_template_info() -> dict[str, Any] | None: template_info = None cur_frame = sys._getframe().f_back try: while cur_frame is not None: in_utils_module = cur_frame.f_code.co_filename.endswith( "/debug_toolbar/utils.py" ) is_get_template_context = ( cur_frame.f_code.co_name == get_template_context.__name__ ) if in_utils_module and is_get_template_context: # If the method in the stack trace is this one # then break from the loop as it's being check recursively. break elif cur_frame.f_code.co_name == "render": node = cur_frame.f_locals["self"] context = cur_frame.f_locals["context"] if isinstance(node, Node): template_info = get_template_context(node, context) break cur_frame = cur_frame.f_back except Exception: pass del cur_frame return template_info def get_template_context( node: Node, context: stubs.RequestContext, context_lines: int = 3 ) -> dict[str, Any]: line, source_lines, name = get_template_source_from_exception_info(node, context) debug_context = [] start = max(1, line - context_lines) end = line + 1 + context_lines for line_num, content in source_lines: if start <= line_num <= end: debug_context.append( {"num": line_num, "content": content, "highlight": (line_num == line)} ) return {"name": name, "context": debug_context} def get_template_source_from_exception_info( node: Node, context: stubs.RequestContext ) -> tuple[int, list[tuple[int, str]], str]: if context.template.origin == node.origin: exception_info = context.template.get_exception_info( Exception("DDT"), node.token ) else: exception_info = context.render_context.template.get_exception_info( Exception("DDT"), node.token ) line = exception_info["line"] source_lines = exception_info["source_lines"] name = exception_info["name"] return line, source_lines, name def get_name_from_obj(obj: Any) -> str: """Get the best name as `str` from a view or a object.""" # This is essentially a rewrite of the `django.contrib.admindocs.utils.get_view_name` # https://github.com/django/django/blob/9a22d1769b042a88741f0ff3087f10d94f325d86/django/contrib/admindocs/utils.py#L26-L32 if hasattr(obj, "view_class"): klass = obj.view_class return f"{klass.__module__}.{klass.__qualname__}" mod_name = obj.__module__ view_name = getattr(obj, "__qualname__", obj.__class__.__name__) return mod_name + "." + view_name def getframeinfo(frame: Any, context: int = 1) -> inspect.Traceback: """ Get information about a frame or traceback object. A tuple of five things is returned: the filename, the line number of the current line, the function name, a list of lines of context from the source code, and the index of the current line within that list. The optional second argument specifies the number of lines of context to return, which are centered around the current line. This originally comes from ``inspect`` but is modified to handle issues with ``findsource()``. """ if inspect.istraceback(frame): lineno = frame.tb_lineno frame = frame.tb_frame else: lineno = frame.f_lineno if not inspect.isframe(frame): raise TypeError("arg is not a frame or traceback object") filename = inspect.getsourcefile(frame) or inspect.getfile(frame) if context > 0: start = lineno - 1 - context // 2 try: lines, lnum = inspect.findsource(frame) except Exception: # findsource raises platform-dependant exceptions lines = index = None else: start = max(start, 1) start = max(0, min(start, len(lines) - context)) lines = lines[start : (start + context)] index = lineno - 1 - start else: lines = index = None return inspect.Traceback(filename, lineno, frame.f_code.co_name, lines, index) def sanitize_and_sort_request_vars( variable: dict[str, Any] | QueryDict, ) -> dict[str, list[tuple[str, Any]] | Any]: """ Get a data structure for showing a sorted list of variables from the request data with sensitive values redacted. """ if not isinstance(variable, (dict, QueryDict)): return {"raw": variable} # Get sorted keys if possible, otherwise just list them keys = _get_sorted_keys(variable) # Process the variable based on its type if isinstance(variable, QueryDict): result = _process_query_dict(variable, keys) else: result = _process_dict(variable, keys) return {"list": result} def _get_sorted_keys(variable): """Helper function to get sorted keys if possible.""" try: return sorted(variable) except TypeError: return list(variable) def _process_query_dict(query_dict, keys): """Process a QueryDict into a list of (key, sanitized_value) tuples.""" result = [] for k in keys: values = query_dict.getlist(k) # Return single value if there's only one, otherwise keep as list value = values[0] if len(values) == 1 else values result.append((k, safe_filter.cleanse_setting(k, value))) return result def _process_dict(dictionary, keys): """Process a dictionary into a list of (key, sanitized_value) tuples.""" return [(k, safe_filter.cleanse_setting(k, dictionary.get(k))) for k in keys] def get_stack(context=1) -> list[stubs.InspectStack]: """ Get a list of records for a frame and all higher (calling) frames. Each record contains a frame object, filename, line number, function name, a list of lines of context, and index within the context. Modified version of ``inspect.stack()`` which calls our own ``getframeinfo()`` """ _stack_trace_deprecation_warning() frame = sys._getframe(1) framelist = [] while frame: framelist.append((frame,) + getframeinfo(frame, context)) frame = frame.f_back return framelist def _stack_frames(*, skip=0): skip += 1 # Skip the frame for this generator. frame = inspect.currentframe() while frame is not None: if skip > 0: skip -= 1 else: yield frame frame = frame.f_back class _StackTraceRecorder: pretty_printer = PrettyPrinter() def __init__(self): self.filename_cache = {} def get_source_file(self, frame): frame_filename = frame.f_code.co_filename value = self.filename_cache.get(frame_filename) if value is None: filename = inspect.getsourcefile(frame) if filename is None: is_source = False filename = frame_filename else: is_source = True # Ensure linecache validity the first time this recorder # encounters the filename in this frame. linecache.checkcache(filename) value = (filename, is_source) self.filename_cache[frame_filename] = value return value def get_stack_trace( self, *, excluded_modules: Sequence[str] | None = None, include_locals: bool = False, skip: int = 0, ): trace = [] skip += 1 # Skip the frame for this method. for frame in _stack_frames(skip=skip): if _is_excluded_frame(frame, excluded_modules): continue filename, is_source = self.get_source_file(frame) line_no = frame.f_lineno func_name = frame.f_code.co_name if is_source: module = inspect.getmodule(frame, filename) module_globals = module.__dict__ if module is not None else None source_line = linecache.getline( filename, line_no, module_globals ).strip() else: source_line = "" if include_locals: frame_locals = self.pretty_printer.pformat(frame.f_locals) else: frame_locals = None trace.append((filename, line_no, func_name, source_line, frame_locals)) trace.reverse() return trace def get_stack_trace(*, skip=0): """ Return a processed stack trace for the current call stack. If the ``ENABLE_STACKTRACES`` setting is False, return an empty :class:`list`. Otherwise return a :class:`list` of processed stack frame tuples (file name, line number, function name, source line, frame locals) for the current call stack. The first entry in the list will be for the bottom of the stack and the last entry will be for the top of the stack. ``skip`` is an :class:`int` indicating the number of stack frames above the frame for this function to omit from the stack trace. The default value of ``0`` means that the entry for the caller of this function will be the last entry in the returned stack trace. """ config = dt_settings.get_config() if not config["ENABLE_STACKTRACES"]: return [] skip += 1 # Skip the frame for this function. stack_trace_recorder = getattr(_local_data, "stack_trace_recorder", None) if stack_trace_recorder is None: stack_trace_recorder = _StackTraceRecorder() _local_data.stack_trace_recorder = stack_trace_recorder return stack_trace_recorder.get_stack_trace( excluded_modules=config["HIDE_IN_STACKTRACES"], include_locals=config["ENABLE_STACKTRACES_LOCALS"], skip=skip, ) def clear_stack_trace_caches(): if hasattr(_local_data, "stack_trace_recorder"): del _local_data.stack_trace_recorder _HTML_TYPES = ("text/html", "application/xhtml+xml") def is_processable_html_response(response): content_encoding = response.get("Content-Encoding", "") content_type = response.get("Content-Type", "").split(";")[0] return ( not getattr(response, "streaming", False) and content_encoding == "" and content_type in _HTML_TYPES ) python-django-debug-toolbar-5.2.0/debug_toolbar/views.py000066400000000000000000000016641500406072000233430ustar00rootroot00000000000000from django.http import JsonResponse from django.utils.html import escape from django.utils.translation import gettext as _ from debug_toolbar._compat import login_not_required from debug_toolbar.decorators import render_with_toolbar_language, require_show_toolbar from debug_toolbar.toolbar import DebugToolbar @login_not_required @require_show_toolbar @render_with_toolbar_language def render_panel(request): """Render the contents of a panel""" toolbar = DebugToolbar.fetch(request.GET["store_id"]) if toolbar is None: content = _( "Data for this panel isn't available anymore. " "Please reload the page and retry." ) content = f"

    {escape(content)}

    " scripts = [] else: panel = toolbar.get_panel_by_id(request.GET["panel_id"]) content = panel.content scripts = panel.scripts return JsonResponse({"content": content, "scripts": scripts}) python-django-debug-toolbar-5.2.0/docs/000077500000000000000000000000001500406072000177455ustar00rootroot00000000000000python-django-debug-toolbar-5.2.0/docs/Makefile000066400000000000000000000012001500406072000213760ustar00rootroot00000000000000# Minimal makefile for Sphinx documentation # # You can set these variables from the command line, and also # from the environment for the first two. SPHINXOPTS ?= -n -W SPHINXBUILD ?= sphinx-build SOURCEDIR = . BUILDDIR = _build # Put it first so that "make" without argument is like "make help". help: @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) .PHONY: help Makefile # Catch-all target: route all unknown targets to Sphinx using the new # "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). %: Makefile @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) python-django-debug-toolbar-5.2.0/docs/architecture.rst000066400000000000000000000071411500406072000231640ustar00rootroot00000000000000Architecture ============ The Django Debug Toolbar is designed to be flexible and extensible for developers and third-party panel creators. Core Components --------------- While there are several components, the majority of logic and complexity lives within the following: - ``debug_toolbar.middleware.DebugToolbarMiddleware`` - ``debug_toolbar.toolbar.DebugToolbar`` - ``debug_toolbar.panels`` ^^^^^^^^^^^^^^^^^^^^^^ DebugToolbarMiddleware ^^^^^^^^^^^^^^^^^^^^^^ The middleware is how the toolbar integrates with Django projects. It determines if the toolbar should instrument the request, which panels to use, facilitates the processing of the request and augmenting the response with the toolbar. Most logic for how the toolbar interacts with the user's Django project belongs here. ^^^^^^^^^^^^ DebugToolbar ^^^^^^^^^^^^ The ``DebugToolbar`` class orchestrates the processing of a request for each of the panels. It contains the logic that needs to be aware of all the panels, but doesn't need to interact with the user's Django project. ^^^^^^ Panels ^^^^^^ The majority of the complex logic lives within the panels themselves. This is because the panels are responsible for collecting the various metrics. Some of the metrics are collected via `monkey-patching `_, such as ``TemplatesPanel``. Others, such as ``SettingsPanel`` don't need to collect anything and include the data directly in the response. Some panels such as ``SQLPanel`` have additional functionality. This tends to involve a user clicking on something, and the toolbar presenting a new page with additional data. That additional data is handled in views defined in the panels package (for example, ``debug_toolbar.panels.sql.views``). Logic Flow ---------- When a request comes in, the toolbar first interacts with it in the middleware. If the middleware determines the request should be instrumented, it will instantiate the toolbar and pass the request for processing. The toolbar will use the enabled panels to collect information on the request and/or response. When the toolbar has completed collecting its metrics on both the request and response, the middleware will collect the results from the toolbar. It will inject the HTML and JavaScript to render the toolbar as well as any headers into the response. After the browser renders the panel and the user interacts with it, the toolbar's JavaScript will send requests to the server. If the view handling the request needs to fetch data from the toolbar, the request must supply the store ID. This is so that the toolbar can load the collected metrics for that particular request. The history panel allows a user to view the metrics for any request since the application was started. The toolbar maintains its state entirely in memory for the process running ``runserver``. If the application is restarted the toolbar will lose its state. Problematic Parts ----------------- - ``debug.panels.templates.panel``: This monkey-patches template rendering when the panel module is loaded - ``debug.panels.sql``: This package is particularly complex, but provides the main benefit of the toolbar - Support for async and multi-threading: ``debug_toolbar.middleware.DebugToolbarMiddleware`` is now async compatible and can process async requests. However certain panels such as ``TimerPanel``, ``RequestPanel`` and ``ProfilingPanel`` aren't fully compatible and currently being worked on. For now, these panels are disabled by default when running in async environment. follow the progress of this issue in `Async compatible toolbar project `_. python-django-debug-toolbar-5.2.0/docs/changes.rst000066400000000000000000001006331500406072000221120ustar00rootroot00000000000000Change log ========== Pending ------- 5.2.0 (2025-04-29) ------------------ * Added hook to RedirectsPanel for subclass customization. * Added feature to sanitize sensitive data in the Request Panel. * Fixed dark mode conflict in code block toolbar CSS. * Properly allowed overriding the system theme preference by using the theme selector. Removed the ``DEFAULT_THEME`` setting, we should always default to system-level defaults where possible. * Added support for using django-template-partials with the template panel's source view functionality. The same change possibly adds support for other template loaders. * Introduced `djade `__ to format Django templates. * Swapped display order of panel header and close button to prevent style conflicts * Added CSS for resetting the height of elements too to avoid problems with global CSS of a website where the toolbar is used. 5.1.0 (2025-03-20) ------------------ * Added Django 5.2 to the tox matrix. * Updated package metadata to include well-known labels. * Added resources section to the documentation. * Wrap ``SHOW_TOOLBAR_CALLBACK`` function with ``sync_to_async`` or ``async_to_sync`` to allow sync/async compatibility. * Make ``require_toolbar`` decorator compatible to async views. * Added link to contributing documentation in ``CONTRIBUTING.md``. * Replaced ESLint and prettier with biome in our pre-commit configuration. * Added a Makefile target (``make help``) to get a quick overview of each target. * Avoided reinitializing the staticfiles storage during instrumentation. * Avoided a "forked" Promise chain in the rebound ``window.fetch`` function with missing exception handling. * Fixed the pygments code highlighting when using dark mode. * Fix for exception-unhandled "forked" Promise chain in rebound window.fetch * Create a CSP nonce property on the toolbar ``Toolbar().csp_nonce``. 5.0.1 (2025-01-13) ------------------ * Fixing the build and release process. No functional changes. 5.0.0 (2025-01-11) ------------------ * Added Python 3.13 to the CI matrix. * Removed support for Python 3.8 as it has reached end of life. * Converted to Django Commons PyPI release process. * Fixed a crash which occurred when using non-``str`` static file values. * Documented experimental async support. * Improved troubleshooting doc for incorrect mime types for .js static files Please see everything under 5.0.0-alpha as well. 5.0.0-alpha (2024-09-01) ------------------------ * Support async applications and ASGI from `Google Summer of Code Project 2024 `__. * Added Django 5.1 to the CI matrix. * Added support for the ``LoginRequiredMiddleware`` introduced in Django 5.1. * Support select and explain buttons for ``UNION`` queries on PostgreSQL. * Fixed internal toolbar requests being instrumented if the Django setting ``FORCE_SCRIPT_NAME`` was set. * Increase opacity of show Debug Toolbar handle to improve accessibility. * Changed the ``RedirectsPanel`` to be async compatible. * Increased the contrast of text with dark mode enabled. * Add translations for Bulgarian and Korean. * Update translations for several languages. * Include new translatable strings for translation. * Fixed a crash which happened in the fallback case when session keys cannot be sorted. 4.4.6 (2024-07-10) ------------------ * Changed ordering (and grammatical number) of panels and their titles in documentation to match actual panel ordering and titles. * Skipped processing the alerts panel when response isn't a HTML response. 4.4.5 (2024-07-05) ------------------ * Avoided crashing when the alerts panel was skipped. * Removed the inadvertently added hard dependency on Jinja2. 4.4.4 (2024-07-05) ------------------ * Added check for StreamingHttpResponse in alerts panel. * Instrument the Django Jinja2 template backend. This only instruments the immediate template that's rendered. It will not provide stats on any parent templates. 4.4.3 (2024-07-04) ------------------ * Added alerts panel with warning when form is using file fields without proper encoding type. * Fixed overriding font-family for both light and dark themes. * Restored compatibility with ``iptools.IpRangeList``. * Limit ``E001`` check to likely error cases when the ``SHOW_TOOLBAR_CALLBACK`` has changed, but the toolbar's URL paths aren't installed. * Introduce helper function ``debug_toolbar_urls`` to simplify installation. * Moved "1rem" height/width for SVGs to CSS properties. 4.4.2 (2024-05-27) ------------------ * Removed some CSS which wasn't carefully limited to the toolbar's elements. * Stopped assuming that ``INTERNAL_IPS`` is a list. * Added a section to the installation docs about running tests in projects where the toolbar is being used. 4.4.1 (2024-05-26) ------------------ * Pin metadata version to 2.2 to be compatible with Jazzband release process. 4.4.0 (2024-05-26) ------------------ * Raised the minimum Django version to 4.2. * Automatically support Docker rather than having the developer write a workaround for ``INTERNAL_IPS``. * Display a better error message when the toolbar's requests return invalid json. * Render forms with ``as_div`` to silence Django 5.0 deprecation warnings. * Stayed on top of pre-commit hook updates. * Added :doc:`architecture documentation ` to help on-board new contributors. * Removed the static file path validation check in :class:`StaticFilesPanel ` since that check is made redundant by a similar check in Django 4.0 and later. * Deprecated the ``OBSERVE_REQUEST_CALLBACK`` setting and added check ``debug_toolbar.W008`` to warn when it is present in ``DEBUG_TOOLBAR_SETTINGS``. * Add a note on the profiling panel about using Python 3.12 and later about needing ``--nothreading`` * Added ``IS_RUNNING_TESTS`` setting to allow overriding the ``debug_toolbar.E001`` check to avoid including the toolbar when running tests. * Fixed the bug causing ``'djdt' is not a registered namespace`` and updated docs to help in initial configuration while running tests. * Added a link in the installation docs to a more complete installation example in the example app. * Added check to prevent the toolbar from being installed when tests are running. * Added test to example app and command to run the example app's tests. * Implemented dark mode theme and button to toggle the theme, introduced the ``DEFAULT_THEME`` setting which sets the default theme to use. 4.3.0 (2024-02-01) ------------------ * Dropped support for Django 4.0. * Added Python 3.12 to test matrix. * Removed outdated third-party panels from the list. * Avoided the unnecessary work of recursively quoting SQL parameters. * Postponed context process in templates panel to include lazy evaluated content. * Fixed template panel to avoid evaluating ``LazyObject`` when not already evaluated. * Added support for Django 5.0. * Refactor the ``utils.get_name_from_obj`` to simulate the behavior of ``django.contrib.admindocs.utils.get_view_name``. * Switched from black to the `ruff formatter `__. * Changed the default position of the toolbar from top to the upper top position. * Added the setting, ``UPDATE_ON_FETCH`` to control whether the toolbar automatically updates to the latest AJAX request or not. It defaults to ``False``. 4.2.0 (2023-08-10) ------------------ * Adjusted app directories system check to allow for nested template loaders. * Switched from flake8, isort and pyupgrade to `ruff `__. * Converted cookie keys to lowercase. Fixed the ``samesite`` argument to ``djdt.cookie.set``. * Converted ``StaticFilesPanel`` to no longer use a thread collector. Instead, it collects the used static files in a ``ContextVar``. * Added check ``debug_toolbar.W007`` to warn when JavaScript files are resolving to the wrong content type. * Fixed SQL statement recording under PostgreSQL for queries encoded as byte strings. * Patch the ``CursorWrapper`` class with a mixin class to support multiple base wrapper classes. 4.1.0 (2023-05-15) ------------------ * Improved SQL statement formatting performance. Additionally, fixed the indentation of ``CASE`` statements and stopped simplifying ``.count()`` queries. * Added support for the new STORAGES setting in Django 4.2 for static files. * Added support for theme overrides. * Reworked the cache panel instrumentation code to no longer attempt to undo monkey patching of cache methods, as that turned out to be fragile in the presence of other code which also monkey patches those methods. * Update all timing code that used :py:func:`time.time()` to use :py:func:`time.perf_counter()` instead. * Made the check on ``request.META["wsgi.multiprocess"]`` optional, but defaults to forcing the toolbar to render the panels on each request. This is because it's likely an ASGI application that's serving the responses and that's more likely to be an incompatible setup. If you find that this is incorrect for you in particular, you can use the ``RENDER_PANELS`` setting to forcibly control this logic. 4.0.0 (2023-04-03) ------------------ * Added Django 4.2 to the CI. * Dropped support for Python 3.7. * Fixed PostgreSQL raw query with a tuple parameter during on explain. * Use ``TOOLBAR_LANGUAGE`` setting when rendering individual panels that are loaded via AJAX. * Add decorator for rendering toolbar views with ``TOOLBAR_LANGUAGE``. * Removed the logging panel. The panel's implementation was too complex, caused memory leaks and sometimes very verbose and hard to silence output in some environments (but not others). The maintainers judged that time and effort is better invested elsewhere. * Added support for psycopg3. * When ``ENABLE_STACKTRACE_LOCALS`` is ``True``, the stack frames' locals dicts will be converted to strings when the stack trace is captured rather when it is rendered, so that the correct values will be displayed in the rendered stack trace, as they may have changed between the time the stack trace was captured and when it is rendered. 3.8.1 (2022-12-03) ------------------ * Fixed release process by re-adding twine to release dependencies. No functional change. 3.8.0 (2022-12-03) ------------------ * Added protection against division by 0 in timer.js * Auto-update History panel for JavaScript ``fetch`` requests. * Support `HTMX boosting `__ and `Turbo `__ pages. * Simplify logic for ``Panel.enabled`` property by checking cookies earlier. * Include panel scripts in content when ``RENDER_PANELS`` is set to True. * Create one-time mouseup listener for each mousedown when dragging the handle. * Update package metadata to use Hatchling. * Fix highlighting on history panel so odd rows are highlighted when selected. * Formalize support for Python 3.11. * Added ``TOOLBAR_LANGUAGE`` setting. 3.7.0 (2022-09-25) ------------------ * Added Profiling panel setting ``PROFILER_THRESHOLD_RATIO`` to give users better control over how many function calls are included. A higher value will include more data, but increase render time. * Update Profiling panel to include try to always include user code. This code is more important to developers than dependency code. * Highlight the project function calls in the profiling panel. * Added Profiling panel setting ``PROFILER_CAPTURE_PROJECT_CODE`` to allow users to disable the inclusion of all project code. This will be useful to project setups that have dependencies installed under ``settings.BASE_DIR``. * The toolbar's font stack now prefers system UI fonts. Tweaked paddings, margins and alignments a bit in the CSS code. * Only sort the session dictionary when the keys are all strings. Fixes a bug that causes the toolbar to crash when non-strings are used as keys. 3.6.0 (2022-08-17) ------------------ * Remove decorator ``signed_data_view`` as it was causing issues with `django-urlconfchecks `__. * Added pygments to the test environment and fixed a crash when using the template panel with Django 4.1 and pygments installed. * Stayed on top of pre-commit hook and GitHub actions updates. * Added some workarounds to avoid a Chromium warning which was worrisome to developers. * Avoided using deprecated Selenium methods to find elements. * Raised the minimum Django version from 3.2 to 3.2.4 so that we can take advantage of backported improvements to the cache connection handler. 3.5.0 (2022-06-23) ------------------ * Properly implemented tracking and display of PostgreSQL transactions. * Removed third party panels which have been archived on GitHub. * Added Django 4.1b1 to the CI matrix. * Stopped crashing when ``request.GET`` and ``request.POST`` are neither dictionaries nor ``QueryDict`` instances. Using anything but ``QueryDict`` instances isn't a valid use of Django but, again, django-debug-toolbar shouldn't crash. * Fixed the cache panel to work correctly in the presence of concurrency by avoiding the use of signals. * Reworked the cache panel instrumentation mechanism to monkey patch methods on the cache instances directly instead of replacing cache instances with wrapper classes. * Added a :meth:`debug_toolbar.panels.Panel.ready` class method that panels can override to perform any initialization or instrumentation that needs to be done unconditionally at startup time. * Added pyflame (for flame graphs) to the list of third-party panels. * Fixed the cache panel to correctly count cache misses from the get_many() cache method. * Removed some obsolete compatibility code from the stack trace recording code. * Added a new mechanism for capturing stack traces which includes per-request caching to reduce expensive file system operations. Updated the cache and SQL panels to record stack traces using this new mechanism. * Changed the ``docs`` tox environment to allow passing positional arguments. This allows e.g. building a HTML version of the docs using ``tox -e docs html``. * Stayed on top of pre-commit hook updates. * Replaced ``OrderedDict`` by ``dict`` where possible. Deprecated features ~~~~~~~~~~~~~~~~~~~ * The ``debug_toolbar.utils.get_stack()`` and ``debug_toolbar.utils.tidy_stacktrace()`` functions are deprecated in favor of the new ``debug_toolbar.utils.get_stack_trace()`` function. They will removed in the next major version of the Debug Toolbar. 3.4.0 (2022-05-03) ------------------ * Fixed issue of stacktrace having frames that have no path to the file, but are instead a string of the code such as ``''``. * Renamed internal SQL tracking context var from ``recording`` to ``allow_sql``. 3.3.0 (2022-04-28) ------------------ * Track calls to :py:meth:`django.core.cache.cache.get_or_set`. * Removed support for Django < 3.2. * Updated check ``W006`` to look for ``django.template.loaders.app_directories.Loader``. * Reset settings when overridden in tests. Packages or projects using django-debug-toolbar can now use Django’s test settings tools, like ``@override_settings``, to reconfigure the toolbar during tests. * Optimize rendering of SQL panel, saving about 30% of its run time. * New records in history panel will flash green. * Automatically update History panel on AJAX requests from client. 3.2.4 (2021-12-15) ------------------ * Revert PR 1426 - Fixes issue with SQL parameters having leading and trailing characters stripped away. 3.2.3 (2021-12-12) ------------------ * Changed cache monkey-patching for Django 3.2+ to iterate over existing caches and patch them individually rather than attempting to patch ``django.core.cache`` as a whole. The ``middleware.cache`` is still being patched as a whole in order to attempt to catch any cache usages before ``enable_instrumentation`` is called. * Add check ``W006`` to warn that the toolbar is incompatible with ``TEMPLATES`` settings configurations with ``APP_DIRS`` set to ``False``. * Create ``urls`` module and update documentation to no longer require importing the toolbar package. 3.2.2 (2021-08-14) ------------------ * Ensured that the handle stays within bounds when resizing the window. * Disabled ``HistoryPanel`` when ``RENDER_PANELS`` is ``True`` or if ``RENDER_PANELS`` is ``None`` and the WSGI container is running with multiple processes. * Fixed ``RENDER_PANELS`` functionality so that when ``True`` panels are rendered during the request and not loaded asynchronously. * HistoryPanel now shows status codes of responses. * Support ``request.urlconf`` override when checking for toolbar requests. 3.2.1 (2021-04-14) ------------------ * Fixed SQL Injection vulnerability, CVE-2021-30459. The toolbar now calculates a signature on all fields for the SQL select, explain, and analyze forms. * Changed ``djdt.cookie.set()`` to set ``sameSite=Lax`` by default if callers do not provide a value. * Added ``PRETTIFY_SQL`` configuration option to support controlling SQL token grouping. By default it's set to True. When set to False, a performance improvement can be seen by the SQL panel. * Added a JavaScript event when a panel loads of the format ``djdt.panel.[PanelId]`` where PanelId is the ``panel_id`` property of the panel's Python class. Listening for this event corrects the bug in the Timer Panel in which it didn't insert the browser timings after switching requests in the History Panel. * Fixed issue with the toolbar expecting URL paths to start with ``/__debug__/`` while the documentation indicates it's not required. 3.2 (2020-12-03) ---------------- * Moved CI to GitHub Actions: https://github.com/jazzband/django-debug-toolbar/actions * Stopped crashing when ``request.GET`` and ``request.POST`` are dictionaries instead of ``QueryDict`` instances. This isn't a valid use of Django but django-debug-toolbar shouldn't crash anyway. * Fixed a crash in the history panel when sending a JSON POST request with invalid JSON. * Added missing signals to the signals panel by default. * Documented how to avoid CORS errors now that we're using JavaScript modules. * Verified support for Python 3.9. * Added a ``css`` and a ``js`` template block to ``debug_toolbar/base.html`` to allow overriding CSS and JS. 3.2a1 (2020-10-19) ------------------ * Fixed a regression where the JavaScript code crashed with an invalid CSS selector when searching for an element to replace. * Replaced remaining images with CSS. * Continued refactoring the HTML and CSS code for simplicity, continued improving the use of semantic HTML. * Stopped caring about prehistoric browsers for good. Started splitting up the JavaScript code to take advantage of JavaScript modules. * Continued removing unused CSS. * Started running Selenium tests on Travis CI. * Added a system check which prevents using django-debug-toolbar without any enabled panels. * Added :meth:`Panel.run_checks() ` for panels to verify the configuration before the application starts. * Validate the static file paths specified in ``STATICFILES_DIRS`` exist via :class:`~debug_toolbar.panels.staticfiles.StaticFilesPanel` * Introduced `prettier `__ to format the frontend code. * Started accessing history views using GET requests since they do not change state on the server. * Fixed a bug where unsuccessful requests (e.g. network errors) were silently ignored. * Started spellchecking the documentation. * Removed calls to the deprecated ``request.is_ajax()`` method. These calls were unnecessary now that most endpoints return JSON anyway. * Removed support for Python 3.5. 3.1 (2020-09-21) ---------------- * Fixed a crash in the history panel when sending an empty JSON POST request. * Made ``make example`` also set up the database and a superuser account. * Added a Makefile target for regenerating the django-debug-toolbar screenshot. * Added automatic escaping of panel titles resp. disallowed HTML tags. * Removed some CSS * Restructured the SQL stats template. * Changed command line examples to prefer ``python -m pip`` to ``pip``. 3.0 (2020-09-20) ---------------- * Added an ``.editorconfig`` file specifying indentation rules etc. * Updated the Italian translation. * Added support for Django 3.1a1. ``fetch()`` and ``jQuery.ajax`` requests are now detected by the absence of a ``Accept: text/html`` header instead of the jQuery-specific ``X-Requested-With`` header on Django 3.1 or better. * Pruned unused CSS and removed hacks for ancient browsers. * Added the new :attr:`Panel.scripts ` property. This property should return a list of JavaScript resources to be loaded in the browser when displaying the panel. Right now, this is used by a single panel, the Timer panel. Third party panels can use this property to add scripts rather then embedding them in the content HTML. * Switched from JSHint to ESLint. Added an ESLint job to the Travis CI matrix. * Debug toolbar state which is only needed in the JavaScript code now uses ``localStorage``. * Updated the code to avoid a few deprecation warnings and resource warnings. * Started loading JavaScript as ES6 modules. * Added support for :meth:`cache.touch() ` when using django-debug-toolbar. * Eliminated more inline CSS. * Updated ``tox.ini`` and ``Makefile`` to use isort>=5. * Increased RESULTS_CACHE_SIZE to 25 to better support AJAX requests. * Fixed the close button CSS by explicitly specifying the ``box-sizing`` property. * Simplified the ``isort`` configuration by taking advantage of isort's ``black`` profile. * Added :class:`~debug_toolbar.panels.history.HistoryPanel` including support for AJAX requests. **Backwards incompatible changes** ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * Loading panel content no longer executes the scripts elements embedded in the HTML. Third party panels that require JavaScript resources should now use the :attr:`Panel.scripts ` property. * Removed support for end of life Django 1.11. The minimum supported Django is now 2.2. * The Debug Toolbar now loads a `JavaScript module`_. Typical local development using Django ``runserver`` is not impacted. However, if your application server and static files server are at different origins, you may see CORS errors in your browser's development console. See the "Cross-Origin Request Blocked" section of the :doc:`installation docs ` for details on how to resolve this issue. .. _JavaScript module: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Modules 2.2 (2020-01-31) ---------------- * Removed support for end of life Django 2.0 and 2.1. * Added support for Python 3.8. * Add locals() option for SQL panel. * Added support for Django 3.0. 2.1 (2019-11-12) ---------------- * Changed the Travis CI matrix to run style checks first. * Exposed the ``djdt.init`` function too. * Small improvements to the code to take advantage of newer Django APIs and avoid warnings because of deprecated code. * Verified compatibility with the upcoming Django 3.0 (at the time of writing). 2.0 (2019-06-20) ---------------- * Updated :class:`~debug_toolbar.panels.staticfiles.StaticFilesPanel` to be compatible with Django 3.0. * The :class:`~debug_toolbar.panels.profiling.ProfilingPanel` is now enabled but inactive by default. * Fixed toggling of table rows in the profiling panel UI. * The :class:`~debug_toolbar.panels.profiling.ProfilingPanel` no longer skips remaining panels or middlewares. * Improved the installation documentation. * Fixed a possible crash in the template panel. * Added support for psycopg2 ``Composed`` objects. * Changed the Jinja2 tests to use Django's own Jinja2 template backend. * Added instrumentation to queries using server side cursors. * Too many small improvements and cleanups to list them all. **Backwards incompatible changes** ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * Removed support for Python 2. * Removed support for Django's deprecated ``MIDDLEWARE_CLASSES`` setting. * Restructured :class:`debug_toolbar.panels.Panel` to execute more like the new-style Django MIDDLEWARE. The ``Panel.__init__()`` method is now passed ``get_response`` as the first positional argument. The :meth:`debug_toolbar.panels.Panel.process_request` method must now always return a response. Usually this is the response returned by ``get_response()`` but the panel may also return a different response as is the case in the :class:`~debug_toolbar.panels.redirects.RedirectsPanel`. Third party panels must adjust to this new architecture. ``Panel.process_response()`` and ``Panel.process_view()`` have been removed as a result of this change. The deprecated API, ``debug_toolbar.panels.DebugPanel``, has been removed. Third party panels should use :class:`debug_toolbar.panels.Panel` instead. The following deprecated settings have been removed: * ``HIDDEN_STACKTRACE_MODULES`` * ``HIDE_DJANGO_SQL`` * ``INTERCEPT_REDIRECTS`` * ``RESULTS_STORE_SIZE`` * ``ROOT_TAG_ATTRS`` * ``TAG`` 1.11 (2018-12-03) ----------------- * Use ``defer`` on all ``

    Index of Tests (htmx) - Page {{ page_num|default:"1" }}

    For the debug panel to remain through page navigation, add the setting:

    DEBUG_TOOLBAR_CONFIG = {
      "ROOT_TAG_EXTRA_ATTRS": "hx-preserve"
    }
          

    Home python-django-debug-toolbar-5.2.0/example/templates/index.html000066400000000000000000000035351500406072000244510ustar00rootroot00000000000000{% load cache %} Index of Tests

    Index of Tests

    {% cache 10 index_cache %}

    Django Admin

    {% endcache %}

    Value {{ request.session.value|default:0 }}

    python-django-debug-toolbar-5.2.0/example/templates/jinja2/000077500000000000000000000000001500406072000236235ustar00rootroot00000000000000python-django-debug-toolbar-5.2.0/example/templates/jinja2/index.jinja000066400000000000000000000004701500406072000257500ustar00rootroot00000000000000 jinja Test

    jinja Test

    {{ foo }} {% for i in range(10) %}{{ i }}{% endfor %} {# Jinja2 supports range(), Django templates do not #} python-django-debug-toolbar-5.2.0/example/templates/jquery/000077500000000000000000000000001500406072000237655ustar00rootroot00000000000000python-django-debug-toolbar-5.2.0/example/templates/jquery/index.html000066400000000000000000000010141500406072000257560ustar00rootroot00000000000000 jQuery Test

    jQuery Test

    If you see this, jQuery is working.

    python-django-debug-toolbar-5.2.0/example/templates/mootools/000077500000000000000000000000001500406072000243215ustar00rootroot00000000000000python-django-debug-toolbar-5.2.0/example/templates/mootools/index.html000066400000000000000000000011021500406072000263100ustar00rootroot00000000000000 MooTools Test

    MooTools Test

    If you see this, MooTools is working.

    python-django-debug-toolbar-5.2.0/example/templates/prototype/000077500000000000000000000000001500406072000245135ustar00rootroot00000000000000python-django-debug-toolbar-5.2.0/example/templates/prototype/index.html000066400000000000000000000011201500406072000265020ustar00rootroot00000000000000 Prototype Test

    Prototype Test

    If you see this, Prototype is working.

    python-django-debug-toolbar-5.2.0/example/templates/turbo/000077500000000000000000000000001500406072000236015ustar00rootroot00000000000000python-django-debug-toolbar-5.2.0/example/templates/turbo/index.html000066400000000000000000000036111500406072000255770ustar00rootroot00000000000000{% load cache %} Index of Tests

    Turbo Index - Page {{ page_num|default:"1" }}

    For the debug panel to remain through page navigation, add the setting:

    DEBUG_TOOLBAR_CONFIG = {
      "ROOT_TAG_EXTRA_ATTRS": "data-turbo-permanent"
    }
          

    Value {{ request.session.value|default:0 }}

    Home python-django-debug-toolbar-5.2.0/example/test_views.py000066400000000000000000000006041500406072000232160ustar00rootroot00000000000000# Add tests to example app to check how the toolbar is used # when running tests for a project. # See https://github.com/django-commons/django-debug-toolbar/issues/1405 from django.test import TestCase from django.urls import reverse class ViewTestCase(TestCase): def test_index(self): response = self.client.get(reverse("home")) assert response.status_code == 200 python-django-debug-toolbar-5.2.0/example/urls.py000066400000000000000000000032231500406072000220070ustar00rootroot00000000000000from django.contrib import admin from django.urls import path from django.views.generic import TemplateView from debug_toolbar.toolbar import debug_toolbar_urls from example.views import ( async_db, async_db_concurrent, async_home, increment, jinja2_view, ) urlpatterns = [ path("", TemplateView.as_view(template_name="index.html"), name="home"), path( "bad-form/", TemplateView.as_view(template_name="bad_form.html"), name="bad_form", ), path("jinja/", jinja2_view, name="jinja"), path("async/", async_home, name="async_home"), path("async/db/", async_db, name="async_db"), path("async/db-concurrent/", async_db_concurrent, name="async_db_concurrent"), path("jquery/", TemplateView.as_view(template_name="jquery/index.html")), path("mootools/", TemplateView.as_view(template_name="mootools/index.html")), path("prototype/", TemplateView.as_view(template_name="prototype/index.html")), path( "htmx/boost/", TemplateView.as_view(template_name="htmx/boost.html"), name="htmx", ), path( "htmx/boost/2", TemplateView.as_view( template_name="htmx/boost.html", extra_context={"page_num": "2"} ), name="htmx2", ), path( "turbo/", TemplateView.as_view(template_name="turbo/index.html"), name="turbo" ), path( "turbo/2", TemplateView.as_view( template_name="turbo/index.html", extra_context={"page_num": "2"} ), name="turbo2", ), path("admin/", admin.site.urls), path("ajax/increment", increment, name="ajax_increment"), ] + debug_toolbar_urls() python-django-debug-toolbar-5.2.0/example/views.py000066400000000000000000000020711500406072000221570ustar00rootroot00000000000000import asyncio from asgiref.sync import sync_to_async from django.contrib.auth.models import User from django.http import JsonResponse from django.shortcuts import render def increment(request): try: value = int(request.session.get("value", 0)) + 1 except ValueError: value = 1 request.session["value"] = value return JsonResponse({"value": value}) def jinja2_view(request): return render(request, "index.jinja", {"foo": "bar"}, using="jinja2") async def async_home(request): return await sync_to_async(render)(request, "index.html") async def async_db(request): user_count = await User.objects.acount() return await sync_to_async(render)( request, "async_db.html", {"user_count": user_count} ) async def async_db_concurrent(request): # Do database queries concurrently (user_count, _) = await asyncio.gather( User.objects.acount(), User.objects.filter(username="test").acount() ) return await sync_to_async(render)( request, "async_db.html", {"user_count": user_count} ) python-django-debug-toolbar-5.2.0/example/wsgi.py000066400000000000000000000003201500406072000217660ustar00rootroot00000000000000"""WSGI config for example project.""" import os from django.core.wsgi import get_wsgi_application os.environ.setdefault("DJANGO_SETTINGS_MODULE", "example.settings") application = get_wsgi_application() python-django-debug-toolbar-5.2.0/pyproject.toml000066400000000000000000000060201500406072000217270ustar00rootroot00000000000000[build-system] build-backend = "hatchling.build" requires = [ "hatchling", ] [project] name = "django-debug-toolbar" description = "A configurable set of panels that display various debug information about the current request/response." readme = "README.rst" license = { text = "BSD-3-Clause" } authors = [ { name = "Rob Hudson" }, ] requires-python = ">=3.9" classifiers = [ "Development Status :: 5 - Production/Stable", "Environment :: Web Environment", "Framework :: Django", "Framework :: Django :: 4.2", "Framework :: Django :: 5.0", "Framework :: Django :: 5.1", "Framework :: Django :: 5.2", "Intended Audience :: Developers", "License :: OSI Approved :: BSD License", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 3 :: Only", "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", "Topic :: Software Development :: Libraries :: Python Modules", ] dynamic = [ "version", ] dependencies = [ "django>=4.2.9", "sqlparse>=0.2", ] urls.Changelog = "https://django-debug-toolbar.readthedocs.io/en/latest/changes.html" urls.Documentation = "https://django-debug-toolbar.readthedocs.io/" urls.Download = "https://pypi.org/project/django-debug-toolbar/" urls.Homepage = "https://github.com/django-commons/django-debug-toolbar" urls.Issues = "https://github.com/django-commons/django-debug-toolbar/issues" urls.Source = "https://github.com/django-commons/django-debug-toolbar" [tool.hatch.build.targets.wheel] packages = [ "debug_toolbar", ] [tool.hatch.version] path = "debug_toolbar/__init__.py" [tool.ruff] target-version = "py39" fix = true show-fixes = true lint.extend-select = [ "ASYNC", # flake8-async "B", # flake8-bugbear "C4", # flake8-comprehensions "C90", # McCabe cyclomatic complexity "DJ", # flake8-django "E", # pycodestyle errors "F", # Pyflakes "FBT", # flake8-boolean-trap "I", # isort "INT", # flake8-gettext "PGH", # pygrep-hooks "PIE", # flake8-pie "RUF100", # Unused noqa directive "SLOT", # flake8-slots "UP", # pyupgrade "W", # pycodestyle warnings ] lint.extend-ignore = [ "B905", # Allow zip() without strict= "E501", # Ignore line length violations "UP031", # It's not always wrong to use percent-formatting ] lint.per-file-ignores."*/migrat*/*" = [ "N806", # Allow using PascalCase model names in migrations "N999", # Ignore the fact that migration files are invalid module names ] lint.isort.combine-as-imports = true lint.mccabe.max-complexity = 16 [tool.coverage.html] skip_covered = true skip_empty = true [tool.coverage.run] branch = true parallel = true source = [ "debug_toolbar", ] [tool.coverage.paths] source = [ "src", ".tox/*/site-packages", ] [tool.coverage.report] # Update coverage badge link in README.rst when fail_under changes fail_under = 94 show_missing = true python-django-debug-toolbar-5.2.0/requirements_dev.txt000066400000000000000000000004521500406072000231400ustar00rootroot00000000000000# Runtime dependencies Django sqlparse Jinja2 # Testing coverage[toml] html5lib selenium tox black django-csp<4 # Used in tests/test_csp_rendering # Integration support daphne # async in Example app # Documentation Sphinx sphinxcontrib-spelling sphinx-rtd-theme>1 # Other tools pre-commit python-django-debug-toolbar-5.2.0/setup.py000077500000000000000000000004541500406072000205350ustar00rootroot00000000000000#!/usr/bin/env python3 import sys sys.stderr.write( """\ =============================== Unsupported installation method =============================== This project no longer supports installation with `python setup.py install`. Please use `python -m pip install .` instead. """ ) sys.exit(1) python-django-debug-toolbar-5.2.0/tests/000077500000000000000000000000001500406072000201575ustar00rootroot00000000000000python-django-debug-toolbar-5.2.0/tests/__init__.py000066400000000000000000000000001500406072000222560ustar00rootroot00000000000000python-django-debug-toolbar-5.2.0/tests/additional_static/000077500000000000000000000000001500406072000236365ustar00rootroot00000000000000python-django-debug-toolbar-5.2.0/tests/additional_static/base.css000066400000000000000000000000331500406072000252560ustar00rootroot00000000000000body { color: green; } python-django-debug-toolbar-5.2.0/tests/base.py000066400000000000000000000100071500406072000214410ustar00rootroot00000000000000import contextvars from typing import Optional import html5lib from asgiref.local import Local from django.http import HttpResponse from django.test import ( AsyncClient, AsyncRequestFactory, Client, RequestFactory, TestCase, TransactionTestCase, ) from debug_toolbar.panels import Panel from debug_toolbar.toolbar import DebugToolbar data_contextvar = contextvars.ContextVar("djdt_toolbar_test_client") class ToolbarTestClient(Client): def request(self, **request): # Use a thread/async task context-local variable to guard against a # concurrent _created signal from a different thread/task. data = Local() data.toolbar = None def handle_toolbar_created(sender, toolbar=None, **kwargs): data.toolbar = toolbar DebugToolbar._created.connect(handle_toolbar_created) try: response = super().request(**request) finally: DebugToolbar._created.disconnect(handle_toolbar_created) response.toolbar = data.toolbar return response class AsyncToolbarTestClient(AsyncClient): async def request(self, **request): # Use a thread/async task context-local variable to guard against a # concurrent _created signal from a different thread/task. # In cases testsuite will have both regular and async tests or # multiple async tests running in an eventloop making async_client calls. data_contextvar.set(None) def handle_toolbar_created(sender, toolbar=None, **kwargs): data_contextvar.set(toolbar) DebugToolbar._created.connect(handle_toolbar_created) try: response = await super().request(**request) finally: DebugToolbar._created.disconnect(handle_toolbar_created) response.toolbar = data_contextvar.get() return response rf = RequestFactory() arf = AsyncRequestFactory() class BaseMixin: _is_async = False client_class = ToolbarTestClient async_client_class = AsyncToolbarTestClient panel: Optional[Panel] = None panel_id = None def setUp(self): super().setUp() self._get_response = lambda request: HttpResponse() self.request = rf.get("/") if self._is_async: self.request = arf.get("/") self.toolbar = DebugToolbar(self.request, self.get_response_async) else: self.toolbar = DebugToolbar(self.request, self.get_response) self.toolbar.stats = {} if self.panel_id: self.panel = self.toolbar.get_panel_by_id(self.panel_id) self.panel.enable_instrumentation() else: self.panel = None def tearDown(self): if self.panel: self.panel.disable_instrumentation() super().tearDown() def get_response(self, request): return self._get_response(request) async def get_response_async(self, request): return self._get_response(request) def assertValidHTML(self, content): parser = html5lib.HTMLParser() parser.parseFragment(content) if parser.errors: msg_parts = ["Invalid HTML:"] lines = content.split("\n") for position, errorcode, datavars in parser.errors: msg_parts.append(f" {html5lib.constants.E[errorcode]}" % datavars) msg_parts.append(f" {lines[position[0] - 1]}") raise self.failureException("\n".join(msg_parts)) class BaseTestCase(BaseMixin, TestCase): pass class BaseMultiDBTestCase(BaseMixin, TransactionTestCase): databases = {"default", "replica"} class IntegrationTestCase(TestCase): """Base TestCase for tests involving clients making requests.""" def setUp(self): # The HistoryPanel keeps track of previous stores in memory. # This bleeds into other tests and violates their idempotency. # Clear the store before each test. for key in list(DebugToolbar._store.keys()): del DebugToolbar._store[key] super().setUp() python-django-debug-toolbar-5.2.0/tests/commands/000077500000000000000000000000001500406072000217605ustar00rootroot00000000000000python-django-debug-toolbar-5.2.0/tests/commands/__init__.py000066400000000000000000000000001500406072000240570ustar00rootroot00000000000000python-django-debug-toolbar-5.2.0/tests/commands/test_debugsqlshell.py000066400000000000000000000023341500406072000262310ustar00rootroot00000000000000import io import sys from django.contrib.auth.models import User from django.core import management from django.db import connection from django.test import TestCase from django.test.utils import override_settings if connection.vendor == "postgresql": from django.db.backends.postgresql import base as base_module else: from django.db.backends import utils as base_module @override_settings(DEBUG=True) class DebugSQLShellTestCase(TestCase): def setUp(self): self.original_wrapper = base_module.CursorDebugWrapper # Since debugsqlshell monkey-patches django.db.backends.utils, we can # test it simply by loading it, without executing it. But we have to # undo the monkey-patch on exit. command_name = "debugsqlshell" app_name = management.get_commands()[command_name] management.load_command_class(app_name, command_name) def tearDown(self): base_module.CursorDebugWrapper = self.original_wrapper def test_command(self): original_stdout, sys.stdout = sys.stdout, io.StringIO() try: User.objects.count() self.assertIn("SELECT COUNT", sys.stdout.getvalue()) finally: sys.stdout = original_stdout python-django-debug-toolbar-5.2.0/tests/context_processors.py000066400000000000000000000001001500406072000244660ustar00rootroot00000000000000def broken(request): _read = request.non_existing_attribute python-django-debug-toolbar-5.2.0/tests/forms.py000066400000000000000000000003341500406072000216570ustar00rootroot00000000000000from django import forms from django.contrib.auth.models import User class TemplateReprForm(forms.Form): user = forms.ModelChoiceField(queryset=User.objects.all()) def __repr__(self): return str(self) python-django-debug-toolbar-5.2.0/tests/loaders.py000066400000000000000000000005211500406072000221600ustar00rootroot00000000000000from django.contrib.auth.models import User from django.template.loaders.app_directories import Loader class LoaderWithSQL(Loader): def get_template(self, *args, **kwargs): # Force the template loader to run some SQL. Simulates a CMS. User.objects.all().count() return super().get_template(*args, **kwargs) python-django-debug-toolbar-5.2.0/tests/middleware.py000066400000000000000000000007101500406072000226440ustar00rootroot00000000000000from django.core.cache import cache class UseCacheAfterToolbar: """ This middleware exists to use the cache before and after the toolbar is setup. """ def __init__(self, get_response): self.get_response = get_response def __call__(self, request): cache.set("UseCacheAfterToolbar.before", 1) response = self.get_response(request) cache.set("UseCacheAfterToolbar.after", 1) return response python-django-debug-toolbar-5.2.0/tests/models.py000066400000000000000000000011211500406072000220070ustar00rootroot00000000000000from django.conf import settings from django.db import models from django.db.models import JSONField class NonAsciiRepr: def __repr__(self): return "nôt åscíì" class Binary(models.Model): field = models.BinaryField() def __str__(self): return "" class PostgresJSON(models.Model): field = JSONField() def __str__(self): return "" if settings.USE_GIS: from django.contrib.gis.db import models as gismodels class Location(gismodels.Model): point = gismodels.PointField() def __str__(self): return "" python-django-debug-toolbar-5.2.0/tests/panels/000077500000000000000000000000001500406072000214415ustar00rootroot00000000000000python-django-debug-toolbar-5.2.0/tests/panels/__init__.py000066400000000000000000000000001500406072000235400ustar00rootroot00000000000000python-django-debug-toolbar-5.2.0/tests/panels/test_alerts.py000066400000000000000000000105301500406072000243430ustar00rootroot00000000000000from django.http import HttpResponse, StreamingHttpResponse from django.template import Context, Template from ..base import BaseTestCase class AlertsPanelTestCase(BaseTestCase): panel_id = "AlertsPanel" def test_alert_warning_display(self): """ Test that the panel (does not) display[s] an alert when there are (no) problems. """ self.panel.record_stats({"alerts": []}) self.assertNotIn("alerts", self.panel.nav_subtitle) self.panel.record_stats({"alerts": ["Alert 1", "Alert 2"]}) self.assertIn("2 alerts", self.panel.nav_subtitle) def test_file_form_without_enctype_multipart_form_data(self): """ Test that the panel displays a form invalid message when there is a file input but encoding not set to multipart/form-data. """ test_form = '
    ' result = self.panel.check_invalid_file_form_configuration(test_form) expected_error = ( 'Form with id "test-form" contains file input, ' 'but does not have the attribute enctype="multipart/form-data".' ) self.assertEqual(result[0]["alert"], expected_error) self.assertEqual(len(result), 1) def test_file_form_no_id_without_enctype_multipart_form_data(self): """ Test that the panel displays a form invalid message when there is a file input but encoding not set to multipart/form-data. This should use the message when the form has no id. """ test_form = '
    ' result = self.panel.check_invalid_file_form_configuration(test_form) expected_error = ( "Form contains file input, but does not have " 'the attribute enctype="multipart/form-data".' ) self.assertEqual(result[0]["alert"], expected_error) self.assertEqual(len(result), 1) def test_file_form_with_enctype_multipart_form_data(self): test_form = """
    """ result = self.panel.check_invalid_file_form_configuration(test_form) self.assertEqual(len(result), 0) def test_file_form_with_enctype_multipart_form_data_in_button(self): test_form = """
    """ result = self.panel.check_invalid_file_form_configuration(test_form) self.assertEqual(len(result), 0) def test_referenced_file_input_without_enctype_multipart_form_data(self): test_file_input = """
    """ result = self.panel.check_invalid_file_form_configuration(test_file_input) expected_error = ( 'Input element references form with id "test-form", ' 'but the form does not have the attribute enctype="multipart/form-data".' ) self.assertEqual(result[0]["alert"], expected_error) self.assertEqual(len(result), 1) def test_referenced_file_input_with_enctype_multipart_form_data(self): test_file_input = """
    """ result = self.panel.check_invalid_file_form_configuration(test_file_input) self.assertEqual(len(result), 0) def test_integration_file_form_without_enctype_multipart_form_data(self): t = Template('
    ') c = Context({}) rendered_template = t.render(c) response = HttpResponse(content=rendered_template) self.panel.generate_stats(self.request, response) self.assertIn("1 alert", self.panel.nav_subtitle) self.assertIn( "Form with id "test-form" contains file input, " "but does not have the attribute enctype="multipart/form-data".", self.panel.content, ) def test_streaming_response(self): """Test to check for a streaming response.""" def _render(): yield "ok" response = StreamingHttpResponse(_render()) self.panel.generate_stats(self.request, response) self.assertEqual(self.panel.get_stats(), {}) python-django-debug-toolbar-5.2.0/tests/panels/test_async_panel_compatibility.py000066400000000000000000000023021500406072000302740ustar00rootroot00000000000000from django.http import HttpResponse from django.test import AsyncRequestFactory, RequestFactory, TestCase from debug_toolbar.panels import Panel from debug_toolbar.toolbar import DebugToolbar class MockAsyncPanel(Panel): is_async = True class MockSyncPanel(Panel): is_async = False class PanelAsyncCompatibilityTestCase(TestCase): def setUp(self): self.async_factory = AsyncRequestFactory() self.wsgi_factory = RequestFactory() def test_panels_with_asgi(self): async_request = self.async_factory.get("/") toolbar = DebugToolbar(async_request, lambda request: HttpResponse()) async_panel = MockAsyncPanel(toolbar, async_request) sync_panel = MockSyncPanel(toolbar, async_request) self.assertTrue(async_panel.enabled) self.assertFalse(sync_panel.enabled) def test_panels_with_wsgi(self): wsgi_request = self.wsgi_factory.get("/") toolbar = DebugToolbar(wsgi_request, lambda request: HttpResponse()) async_panel = MockAsyncPanel(toolbar, wsgi_request) sync_panel = MockSyncPanel(toolbar, wsgi_request) self.assertTrue(async_panel.enabled) self.assertTrue(sync_panel.enabled) python-django-debug-toolbar-5.2.0/tests/panels/test_cache.py000066400000000000000000000115041500406072000241160ustar00rootroot00000000000000from django.core import cache from ..base import BaseTestCase class CachePanelTestCase(BaseTestCase): panel_id = "CachePanel" def test_recording(self): self.assertEqual(len(self.panel.calls), 0) cache.cache.set("foo", "bar") cache.cache.get("foo") cache.cache.delete("foo") self.assertFalse(cache.cache.touch("foo")) cache.cache.set("foo", "bar") self.assertTrue(cache.cache.touch("foo")) # Verify that the cache has a valid clear method. cache.cache.clear() self.assertEqual(len(self.panel.calls), 7) def test_recording_caches(self): self.assertEqual(len(self.panel.calls), 0) default_cache = cache.caches[cache.DEFAULT_CACHE_ALIAS] second_cache = cache.caches["second"] default_cache.set("foo", "bar") second_cache.get("foo") self.assertEqual(len(self.panel.calls), 2) def test_hits_and_misses(self): cache.cache.clear() cache.cache.get("foo") self.assertEqual(self.panel.hits, 0) self.assertEqual(self.panel.misses, 1) cache.cache.set("foo", 1) cache.cache.get("foo") self.assertEqual(self.panel.hits, 1) self.assertEqual(self.panel.misses, 1) cache.cache.get_many(["foo", "bar"]) self.assertEqual(self.panel.hits, 2) self.assertEqual(self.panel.misses, 2) cache.cache.set("bar", 2) cache.cache.get_many(keys=["foo", "bar"]) self.assertEqual(self.panel.hits, 4) self.assertEqual(self.panel.misses, 2) def test_get_or_set_value(self): cache.cache.get_or_set("baz", "val") self.assertEqual(cache.cache.get("baz"), "val") calls = [ (call["name"], call["args"], call["kwargs"]) for call in self.panel.calls ] self.assertEqual( calls, [ ("get_or_set", ("baz", "val"), {}), ("get", ("baz",), {}), ], ) self.assertEqual( self.panel.counts, { "add": 0, "get": 1, "set": 0, "get_or_set": 1, "touch": 0, "delete": 0, "clear": 0, "get_many": 0, "set_many": 0, "delete_many": 0, "has_key": 0, "incr": 0, "decr": 0, "incr_version": 0, "decr_version": 0, }, ) def test_get_or_set_does_not_override_existing_value(self): cache.cache.set("foo", "bar") cached_value = cache.cache.get_or_set("foo", "other") self.assertEqual(cached_value, "bar") calls = [ (call["name"], call["args"], call["kwargs"]) for call in self.panel.calls ] self.assertEqual( calls, [ ("set", ("foo", "bar"), {}), ("get_or_set", ("foo", "other"), {}), ], ) self.assertEqual( self.panel.counts, { "add": 0, "get": 0, "set": 1, "get_or_set": 1, "touch": 0, "delete": 0, "clear": 0, "get_many": 0, "set_many": 0, "delete_many": 0, "has_key": 0, "incr": 0, "decr": 0, "incr_version": 0, "decr_version": 0, }, ) def test_insert_content(self): """ Test that the panel only inserts content after generate_stats and not the process_request. """ cache.cache.get("café") response = self.panel.process_request(self.request) # ensure the panel does not have content yet. self.assertNotIn("café", self.panel.content) self.panel.generate_stats(self.request, response) # ensure the panel renders correctly. content = self.panel.content self.assertIn("café", content) self.assertValidHTML(content) def test_generate_server_timing(self): self.assertEqual(len(self.panel.calls), 0) cache.cache.set("foo", "bar") cache.cache.get("foo") cache.cache.delete("foo") self.assertEqual(len(self.panel.calls), 3) response = self.panel.process_request(self.request) self.panel.generate_stats(self.request, response) self.panel.generate_server_timing(self.request, response) stats = self.panel.get_stats() expected_data = { "total_time": { "title": "Cache {} Calls".format(stats["total_calls"]), "value": stats["total_time"], } } self.assertEqual(self.panel.get_server_timing_stats(), expected_data) python-django-debug-toolbar-5.2.0/tests/panels/test_custom.py000066400000000000000000000027751500406072000243770ustar00rootroot00000000000000from django.test import override_settings from debug_toolbar.panels import Panel from ..base import IntegrationTestCase class CustomPanel(Panel): def title(self): return "Title with special chars &\"'<>" @override_settings( DEBUG=True, DEBUG_TOOLBAR_PANELS=["tests.panels.test_custom.CustomPanel"] ) class CustomPanelTestCase(IntegrationTestCase): def test_escapes_panel_title(self): response = self.client.get("/regular/basic/") self.assertContains( response, """
  • Title with special chars &"'<>
  • """, html=True, ) self.assertContains( response, """

    Title with special chars &"'<>

    """, html=True, ) python-django-debug-toolbar-5.2.0/tests/panels/test_history.py000066400000000000000000000163151500406072000245610ustar00rootroot00000000000000import copy import html from django.test import RequestFactory, override_settings from django.urls import resolve, reverse from debug_toolbar.toolbar import DebugToolbar from ..base import BaseTestCase, IntegrationTestCase rf = RequestFactory() class HistoryPanelTestCase(BaseTestCase): panel_id = "HistoryPanel" def test_disabled(self): config = {"DISABLE_PANELS": {"debug_toolbar.panels.history.HistoryPanel"}} self.assertTrue(self.panel.enabled) with self.settings(DEBUG_TOOLBAR_CONFIG=config): self.assertFalse(self.panel.enabled) def test_post(self): self.request = rf.post("/", data={"foo": "bar"}) response = self.panel.process_request(self.request) self.panel.generate_stats(self.request, response) data = self.panel.get_stats()["data"] self.assertEqual(data["foo"], "bar") def test_post_json(self): for data, expected_stats_data in ( ({"foo": "bar"}, {"foo": "bar"}), ("", {}), # Empty JSON ("'", {}), # Invalid JSON ): with self.subTest(data=data): self.request = rf.post( "/", data=data, content_type="application/json", CONTENT_TYPE="application/json", # Force django test client to add the content-type even if no data ) response = self.panel.process_request(self.request) self.panel.generate_stats(self.request, response) data = self.panel.get_stats()["data"] self.assertDictEqual(data, expected_stats_data) def test_urls(self): self.assertEqual( reverse("djdt:history_sidebar"), "/__debug__/history_sidebar/", ) self.assertEqual( resolve("/__debug__/history_sidebar/").url_name, "history_sidebar", ) self.assertEqual( reverse("djdt:history_refresh"), "/__debug__/history_refresh/", ) self.assertEqual( resolve("/__debug__/history_refresh/").url_name, "history_refresh", ) @override_settings(DEBUG=True) class HistoryViewsTestCase(IntegrationTestCase): PANEL_KEYS = { "VersionsPanel", "TimerPanel", "SettingsPanel", "HeadersPanel", "RequestPanel", "SQLPanel", "StaticFilesPanel", "TemplatesPanel", "AlertsPanel", "CachePanel", "SignalsPanel", "ProfilingPanel", } def test_history_panel_integration_content(self): """Verify the history panel's content renders properly..""" self.assertEqual(len(DebugToolbar._store), 0) data = {"foo": "bar"} self.client.get("/json_view/", data, content_type="application/json") # Check the history panel's stats to verify the toolbar rendered properly. self.assertEqual(len(DebugToolbar._store), 1) toolbar = list(DebugToolbar._store.values())[0] content = toolbar.get_panel_by_id("HistoryPanel").content self.assertIn("bar", content) self.assertIn('name="exclude_history" value="True"', content) def test_history_sidebar_invalid(self): response = self.client.get(reverse("djdt:history_sidebar")) self.assertEqual(response.status_code, 400) def test_history_headers(self): """Validate the headers injected from the history panel.""" response = self.client.get("/json_view/") store_id = list(DebugToolbar._store)[0] self.assertEqual(response.headers["djdt-store-id"], store_id) @override_settings( DEBUG_TOOLBAR_CONFIG={"OBSERVE_REQUEST_CALLBACK": lambda request: False} ) def test_history_headers_unobserved(self): """Validate the headers aren't injected from the history panel.""" response = self.client.get("/json_view/") self.assertNotIn("djdt-store-id", response.headers) def test_history_sidebar(self): """Validate the history sidebar view.""" self.client.get("/json_view/") store_id = list(DebugToolbar._store)[0] data = {"store_id": store_id, "exclude_history": True} response = self.client.get(reverse("djdt:history_sidebar"), data=data) self.assertEqual(response.status_code, 200) self.assertEqual( set(response.json()), self.PANEL_KEYS, ) def test_history_sidebar_includes_history(self): """Validate the history sidebar view.""" self.client.get("/json_view/") panel_keys = copy.copy(self.PANEL_KEYS) panel_keys.add("HistoryPanel") panel_keys.add("RedirectsPanel") store_id = list(DebugToolbar._store)[0] data = {"store_id": store_id} response = self.client.get(reverse("djdt:history_sidebar"), data=data) self.assertEqual(response.status_code, 200) self.assertEqual( set(response.json()), panel_keys, ) @override_settings( DEBUG_TOOLBAR_CONFIG={"RESULTS_CACHE_SIZE": 1, "RENDER_PANELS": False} ) def test_history_sidebar_expired_store_id(self): """Validate the history sidebar view.""" self.client.get("/json_view/") store_id = list(DebugToolbar._store)[0] data = {"store_id": store_id, "exclude_history": True} response = self.client.get(reverse("djdt:history_sidebar"), data=data) self.assertEqual(response.status_code, 200) self.assertEqual( set(response.json()), self.PANEL_KEYS, ) self.client.get("/json_view/") # Querying old store_id should return in empty response data = {"store_id": store_id, "exclude_history": True} response = self.client.get(reverse("djdt:history_sidebar"), data=data) self.assertEqual(response.status_code, 200) self.assertEqual(response.json(), {}) # Querying with latest store_id latest_store_id = list(DebugToolbar._store)[0] data = {"store_id": latest_store_id, "exclude_history": True} response = self.client.get(reverse("djdt:history_sidebar"), data=data) self.assertEqual(response.status_code, 200) self.assertEqual( set(response.json()), self.PANEL_KEYS, ) def test_history_refresh(self): """Verify refresh history response has request variables.""" self.client.get("/json_view/", {"foo": "bar"}, content_type="application/json") self.client.get( "/json_view/", {"spam": "eggs"}, content_type="application/json" ) response = self.client.get( reverse("djdt:history_refresh"), data={"store_id": "foo"} ) self.assertEqual(response.status_code, 200) data = response.json() self.assertEqual(len(data["requests"]), 2) store_ids = list(DebugToolbar._store) self.assertIn(html.escape(store_ids[0]), data["requests"][0]["content"]) self.assertIn(html.escape(store_ids[1]), data["requests"][1]["content"]) for val in ["foo", "bar"]: self.assertIn(val, data["requests"][0]["content"]) for val in ["spam", "eggs"]: self.assertIn(val, data["requests"][1]["content"]) python-django-debug-toolbar-5.2.0/tests/panels/test_profiling.py000066400000000000000000000076051500406072000250530ustar00rootroot00000000000000import sys import unittest from django.contrib.auth.models import User from django.db import IntegrityError, transaction from django.http import HttpResponse from django.test.utils import override_settings from ..base import BaseTestCase, IntegrationTestCase from ..views import listcomp_view, regular_view @override_settings( DEBUG_TOOLBAR_PANELS=["debug_toolbar.panels.profiling.ProfilingPanel"] ) class ProfilingPanelTestCase(BaseTestCase): panel_id = "ProfilingPanel" def test_regular_view(self): self._get_response = lambda request: regular_view(request, "profiling") response = self.panel.process_request(self.request) self.panel.generate_stats(self.request, response) self.assertIn("func_list", self.panel.get_stats()) self.assertIn("regular_view", self.panel.content) def test_insert_content(self): """ Test that the panel only inserts content after generate_stats and not the process_request. """ self._get_response = lambda request: regular_view(request, "profiling") response = self.panel.process_request(self.request) # ensure the panel does not have content yet. self.assertNotIn("regular_view", self.panel.content) self.panel.generate_stats(self.request, response) # ensure the panel renders correctly. content = self.panel.content self.assertIn("regular_view", content) self.assertIn("render", content) self.assertValidHTML(content) @override_settings(DEBUG_TOOLBAR_CONFIG={"PROFILER_THRESHOLD_RATIO": 1}) def test_cum_time_threshold(self): """ Test that cumulative time threshold excludes calls """ self._get_response = lambda request: regular_view(request, "profiling") response = self.panel.process_request(self.request) self.panel.generate_stats(self.request, response) # ensure the panel renders but doesn't include our function. content = self.panel.content self.assertIn("regular_view", content) self.assertNotIn("render", content) self.assertValidHTML(content) @unittest.skipUnless( sys.version_info < (3, 12, 0), "Python 3.12 no longer contains a frame for list comprehensions.", ) def test_listcomp_escaped(self): self._get_response = lambda request: listcomp_view(request) response = self.panel.process_request(self.request) self.panel.generate_stats(self.request, response) content = self.panel.content self.assertNotIn('', content) self.assertIn('<listcomp>', content) def test_generate_stats_no_profiler(self): """ Test generating stats with no profiler. """ response = HttpResponse() self.assertIsNone(self.panel.generate_stats(self.request, response)) def test_generate_stats_no_root_func(self): """ Test generating stats using profiler without root function. """ response = self.panel.process_request(self.request) self.panel.profiler.clear() self.panel.profiler.enable() self.panel.profiler.disable() self.panel.generate_stats(self.request, response) self.assertNotIn("func_list", self.panel.get_stats()) @override_settings( DEBUG=True, DEBUG_TOOLBAR_PANELS=["debug_toolbar.panels.profiling.ProfilingPanel"] ) class ProfilingPanelIntegrationTestCase(IntegrationTestCase): def test_view_executed_once(self): self.assertEqual(User.objects.count(), 0) response = self.client.get("/new_user/") self.assertContains(response, "Profiling") self.assertEqual(User.objects.count(), 1) with self.assertRaises(IntegrityError), transaction.atomic(): response = self.client.get("/new_user/") self.assertEqual(User.objects.count(), 1) python-django-debug-toolbar-5.2.0/tests/panels/test_redirects.py000066400000000000000000000077031500406072000250450ustar00rootroot00000000000000import copy from django.conf import settings from django.http import HttpResponse from django.test import AsyncRequestFactory from ..base import BaseTestCase class RedirectsPanelTestCase(BaseTestCase): panel_id = "RedirectsPanel" def test_regular_response(self): not_redirect = HttpResponse() self._get_response = lambda request: not_redirect response = self.panel.process_request(self.request) self.assertTrue(response is not_redirect) def test_not_a_redirect(self): redirect = HttpResponse(status=304) self._get_response = lambda request: redirect response = self.panel.process_request(self.request) self.assertTrue(response is redirect) def test_redirect(self): redirect = HttpResponse(status=302) redirect["Location"] = "http://somewhere/else/" self._get_response = lambda request: redirect response = self.panel.process_request(self.request) self.assertFalse(response is redirect) self.assertContains(response, "302 Found") self.assertContains(response, "http://somewhere/else/") def test_redirect_with_broken_context_processor(self): TEMPLATES = copy.deepcopy(settings.TEMPLATES) TEMPLATES[1]["OPTIONS"]["context_processors"] = [ "tests.context_processors.broken" ] with self.settings(TEMPLATES=TEMPLATES): redirect = HttpResponse(status=302) redirect["Location"] = "http://somewhere/else/" self._get_response = lambda request: redirect response = self.panel.process_request(self.request) self.assertFalse(response is redirect) self.assertContains(response, "302 Found") self.assertContains(response, "http://somewhere/else/") def test_unknown_status_code(self): redirect = HttpResponse(status=369) redirect["Location"] = "http://somewhere/else/" self._get_response = lambda request: redirect response = self.panel.process_request(self.request) self.assertContains(response, "369 Unknown Status Code") def test_unknown_status_code_with_reason(self): redirect = HttpResponse(status=369, reason="Look Ma!") redirect["Location"] = "http://somewhere/else/" self._get_response = lambda request: redirect response = self.panel.process_request(self.request) self.assertContains(response, "369 Look Ma!") def test_insert_content(self): """ Test that the panel only inserts content after generate_stats and not the process_request. """ redirect = HttpResponse(status=304) self._get_response = lambda request: redirect response = self.panel.process_request(self.request) self.assertIsNotNone(response) response = self.panel.generate_stats(self.request, redirect) self.assertIsNone(response) async def test_async_compatibility(self): redirect = HttpResponse(status=302) async def get_response(request): return redirect await_response = await get_response(self.request) self._get_response = get_response self.request = AsyncRequestFactory().get("/") response = await self.panel.process_request(self.request) self.assertIsInstance(response, HttpResponse) self.assertTrue(response is await_response) def test_original_response_preserved(self): redirect = HttpResponse(status=302) redirect["Location"] = "http://somewhere/else/" self._get_response = lambda request: redirect response = self.panel.process_request(self.request) self.assertFalse(response is redirect) self.assertTrue(hasattr(response, "original_response")) self.assertTrue(response.original_response is redirect) self.assertIsNone(response.get("Location")) self.assertEqual( response.original_response.get("Location"), "http://somewhere/else/" ) python-django-debug-toolbar-5.2.0/tests/panels/test_request.py000066400000000000000000000211661500406072000245500ustar00rootroot00000000000000from django.http import QueryDict from django.test import RequestFactory from ..base import BaseTestCase rf = RequestFactory() class RequestPanelTestCase(BaseTestCase): panel_id = "RequestPanel" def test_non_ascii_session(self): self.request.session = {"où": "où"} response = self.panel.process_request(self.request) self.panel.generate_stats(self.request, response) self.assertIn("où", self.panel.content) def test_object_with_non_ascii_repr_in_request_params(self): request = rf.get("/non_ascii_request/") response = self.panel.process_request(request) self.panel.generate_stats(request, response) self.assertIn("nôt åscíì", self.panel.content) def test_insert_content(self): """ Test that the panel only inserts content after generate_stats and not the process_request. """ request = rf.get("/non_ascii_request/") response = self.panel.process_request(request) # ensure the panel does not have content yet. self.assertNotIn("nôt åscíì", self.panel.content) self.panel.generate_stats(request, response) # ensure the panel renders correctly. content = self.panel.content self.assertIn("nôt åscíì", content) self.assertValidHTML(content) def test_query_dict_for_request_in_method_get(self): """ Test verifies the correctness of the statistics generation method in the case when the GET request is class QueryDict """ self.request.GET = QueryDict("foo=bar") response = self.panel.process_request(self.request) self.panel.generate_stats(self.request, response) # ensure the panel GET request data is processed correctly. content = self.panel.content self.assertIn("foo", content) self.assertIn("bar", content) def test_dict_for_request_in_method_get(self): """ Test verifies the correctness of the statistics generation method in the case when the GET request is class Dict """ self.request.GET = {"foo": "bar"} response = self.panel.process_request(self.request) self.panel.generate_stats(self.request, response) # ensure the panel GET request data is processed correctly. content = self.panel.content self.assertIn("foo", content) self.assertIn("bar", content) def test_query_dict_for_request_in_method_post(self): """ Test verifies the correctness of the statistics generation method in the case when the POST request is class QueryDict """ self.request.POST = QueryDict("foo=bar") response = self.panel.process_request(self.request) self.panel.generate_stats(self.request, response) # ensure the panel POST request data is processed correctly. content = self.panel.content self.assertIn("foo", content) self.assertIn("bar", content) def test_dict_for_request_in_method_post(self): """ Test verifies the correctness of the statistics generation method in the case when the POST request is class Dict """ self.request.POST = {"foo": "bar"} response = self.panel.process_request(self.request) self.panel.generate_stats(self.request, response) # ensure the panel POST request data is processed correctly. content = self.panel.content self.assertIn("foo", content) self.assertIn("bar", content) def test_list_for_request_in_method_post(self): """ Verify that the toolbar doesn't crash if request.POST contains unexpected data. See https://github.com/django-commons/django-debug-toolbar/issues/1621 """ self.request.POST = [{"a": 1}, {"b": 2}] response = self.panel.process_request(self.request) self.panel.generate_stats(self.request, response) # ensure the panel POST request data is processed correctly. content = self.panel.content self.assertIn("[{'a': 1}, {'b': 2}]", content) def test_namespaced_url(self): request = rf.get("/admin/login/") response = self.panel.process_request(request) self.panel.generate_stats(request, response) panel_stats = self.panel.get_stats() self.assertEqual(panel_stats["view_urlname"], "admin:login") def test_session_list_sorted_or_not(self): """ Verify the session is sorted when all keys are strings. See https://github.com/django-commons/django-debug-toolbar/issues/1668 """ self.request.session = { 1: "value", "data": ["foo", "bar", 1], (2, 3): "tuple_key", } data = { "list": [(1, "value"), ("data", ["foo", "bar", 1]), ((2, 3), "tuple_key")] } response = self.panel.process_request(self.request) self.panel.generate_stats(self.request, response) panel_stats = self.panel.get_stats() self.assertEqual(panel_stats["session"], data) self.request.session = { "b": "b-value", "a": "a-value", } data = {"list": [("a", "a-value"), ("b", "b-value")]} response = self.panel.process_request(self.request) self.panel.generate_stats(self.request, response) panel_stats = self.panel.get_stats() self.assertEqual(panel_stats["session"], data) def test_sensitive_post_data_sanitized(self): """Test that sensitive POST data is redacted.""" self.request.POST = {"username": "testuser", "password": "secret123"} response = self.panel.process_request(self.request) self.panel.generate_stats(self.request, response) # Check that password is redacted in panel content content = self.panel.content self.assertIn("username", content) self.assertIn("testuser", content) self.assertIn("password", content) self.assertNotIn("secret123", content) self.assertIn("********************", content) def test_sensitive_get_data_sanitized(self): """Test that sensitive GET data is redacted.""" self.request.GET = {"api_key": "abc123", "q": "search term"} response = self.panel.process_request(self.request) self.panel.generate_stats(self.request, response) # Check that api_key is redacted in panel content content = self.panel.content self.assertIn("api_key", content) self.assertNotIn("abc123", content) self.assertIn("********************", content) self.assertIn("q", content) self.assertIn("search term", content) def test_sensitive_cookie_data_sanitized(self): """Test that sensitive cookie data is redacted.""" self.request.COOKIES = {"session_id": "abc123", "auth_token": "xyz789"} response = self.panel.process_request(self.request) self.panel.generate_stats(self.request, response) # Check that auth_token is redacted in panel content content = self.panel.content self.assertIn("session_id", content) self.assertIn("abc123", content) self.assertIn("auth_token", content) self.assertNotIn("xyz789", content) self.assertIn("********************", content) def test_sensitive_session_data_sanitized(self): """Test that sensitive session data is redacted.""" self.request.session = {"user_id": 123, "auth_token": "xyz789"} response = self.panel.process_request(self.request) self.panel.generate_stats(self.request, response) # Check that auth_token is redacted in panel content content = self.panel.content self.assertIn("user_id", content) self.assertIn("123", content) self.assertIn("auth_token", content) self.assertNotIn("xyz789", content) self.assertIn("********************", content) def test_querydict_sanitized(self): """Test that sensitive data in QueryDict objects is properly redacted.""" query_dict = QueryDict("username=testuser&password=secret123&token=abc456") self.request.GET = query_dict response = self.panel.process_request(self.request) self.panel.generate_stats(self.request, response) # Check that sensitive data is redacted in panel content content = self.panel.content self.assertIn("username", content) self.assertIn("testuser", content) self.assertIn("password", content) self.assertNotIn("secret123", content) self.assertIn("token", content) self.assertNotIn("abc456", content) self.assertIn("********************", content) python-django-debug-toolbar-5.2.0/tests/panels/test_settings.py000066400000000000000000000024301500406072000247110ustar00rootroot00000000000000from django.test import override_settings from ..base import IntegrationTestCase @override_settings(DEBUG=True) class SettingsIntegrationTestCase(IntegrationTestCase): def test_panel_title(self): response = self.client.get("/regular/basic/") # The settings module is None due to using Django's UserSettingsHolder # in tests. self.assertContains( response, """
  • Settings
  • """, html=True, ) self.assertContains( response, """

    Settings from None

    """, html=True, ) python-django-debug-toolbar-5.2.0/tests/panels/test_sql.py000066400000000000000000000757421500406072000236700ustar00rootroot00000000000000import asyncio import datetime import os import unittest from unittest.mock import call, patch import django from asgiref.sync import sync_to_async from django.contrib.auth.models import User from django.db import connection, transaction from django.db.backends.utils import CursorDebugWrapper, CursorWrapper from django.db.models import Count from django.db.utils import DatabaseError from django.shortcuts import render from django.test.utils import override_settings import debug_toolbar.panels.sql.tracking as sql_tracking try: import psycopg except ImportError: psycopg = None from ..base import BaseMultiDBTestCase, BaseTestCase from ..models import Binary, PostgresJSON def sql_call(*, use_iterator=False): qs = User.objects.all() if use_iterator: qs = qs.iterator() return list(qs) async def async_sql_call(*, use_iterator=False): qs = User.objects.all() if use_iterator: qs = qs.iterator() return await sync_to_async(list)(qs) async def concurrent_async_sql_call(*, use_iterator=False): qs = User.objects.all() if use_iterator: qs = qs.iterator() return await asyncio.gather(sync_to_async(list)(qs), User.objects.acount()) class SQLPanelTestCase(BaseTestCase): panel_id = "SQLPanel" def test_disabled(self): config = {"DISABLE_PANELS": {"debug_toolbar.panels.sql.SQLPanel"}} self.assertTrue(self.panel.enabled) with self.settings(DEBUG_TOOLBAR_CONFIG=config): self.assertFalse(self.panel.enabled) def test_recording(self): self.assertEqual(len(self.panel._queries), 0) sql_call() # ensure query was logged self.assertEqual(len(self.panel._queries), 1) query = self.panel._queries[0] self.assertEqual(query["alias"], "default") self.assertTrue("sql" in query) self.assertTrue("duration" in query) self.assertTrue("stacktrace" in query) # ensure the stacktrace is populated self.assertTrue(len(query["stacktrace"]) > 0) async def test_recording_async(self): self.assertEqual(len(self.panel._queries), 0) await async_sql_call() # ensure query was logged self.assertEqual(len(self.panel._queries), 1) query = self.panel._queries[0] self.assertEqual(query["alias"], "default") self.assertTrue("sql" in query) self.assertTrue("duration" in query) self.assertTrue("stacktrace" in query) # ensure the stacktrace is populated self.assertTrue(len(query["stacktrace"]) > 0) async def test_recording_concurrent_async(self): self.assertEqual(len(self.panel._queries), 0) await concurrent_async_sql_call() # ensure query was logged self.assertEqual(len(self.panel._queries), 2) query = self.panel._queries[0] self.assertEqual(query["alias"], "default") self.assertTrue("sql" in query) self.assertTrue("duration" in query) self.assertTrue("stacktrace" in query) # ensure the stacktrace is populated self.assertTrue(len(query["stacktrace"]) > 0) @unittest.skipUnless( connection.vendor == "postgresql", "Test valid only on PostgreSQL" ) def test_recording_chunked_cursor(self): self.assertEqual(len(self.panel._queries), 0) sql_call(use_iterator=True) # ensure query was logged self.assertEqual(len(self.panel._queries), 1) @patch( "debug_toolbar.panels.sql.tracking.patch_cursor_wrapper_with_mixin", wraps=sql_tracking.patch_cursor_wrapper_with_mixin, ) def test_cursor_wrapper_singleton(self, mock_patch_cursor_wrapper): sql_call() # ensure that cursor wrapping is applied only once self.assertIn( mock_patch_cursor_wrapper.mock_calls, [ [call(CursorWrapper, sql_tracking.NormalCursorMixin)], # CursorDebugWrapper is used if the test is called with `--debug-sql` [call(CursorDebugWrapper, sql_tracking.NormalCursorMixin)], ], ) @patch( "debug_toolbar.panels.sql.tracking.patch_cursor_wrapper_with_mixin", wraps=sql_tracking.patch_cursor_wrapper_with_mixin, ) def test_chunked_cursor_wrapper_singleton(self, mock_patch_cursor_wrapper): sql_call(use_iterator=True) # ensure that cursor wrapping is applied only once self.assertIn( mock_patch_cursor_wrapper.mock_calls, [ [call(CursorWrapper, sql_tracking.NormalCursorMixin)], # CursorDebugWrapper is used if the test is called with `--debug-sql` [call(CursorDebugWrapper, sql_tracking.NormalCursorMixin)], ], ) @patch( "debug_toolbar.panels.sql.tracking.patch_cursor_wrapper_with_mixin", wraps=sql_tracking.patch_cursor_wrapper_with_mixin, ) async def test_cursor_wrapper_async(self, mock_patch_cursor_wrapper): await sync_to_async(sql_call)() self.assertIn( mock_patch_cursor_wrapper.mock_calls, [ [call(CursorWrapper, sql_tracking.NormalCursorMixin)], # CursorDebugWrapper is used if the test is called with `--debug-sql` [call(CursorDebugWrapper, sql_tracking.NormalCursorMixin)], ], ) @patch( "debug_toolbar.panels.sql.tracking.patch_cursor_wrapper_with_mixin", wraps=sql_tracking.patch_cursor_wrapper_with_mixin, ) async def test_cursor_wrapper_asyncio_ctx(self, mock_patch_cursor_wrapper): self.assertTrue(sql_tracking.allow_sql.get()) await sync_to_async(sql_call)() async def task(): sql_tracking.allow_sql.set(False) # By disabling sql_tracking.allow_sql, we are indicating that any # future SQL queries should be stopped. If SQL query occurs, # it raises an exception. with self.assertRaises(sql_tracking.SQLQueryTriggered): await sync_to_async(sql_call)() # Ensure this is called in another context await asyncio.create_task(task()) # Because it was called in another context, it should not have affected ours self.assertTrue(sql_tracking.allow_sql.get()) self.assertIn( mock_patch_cursor_wrapper.mock_calls, [ [ call(CursorWrapper, sql_tracking.NormalCursorMixin), call(CursorWrapper, sql_tracking.ExceptionCursorMixin), ], # CursorDebugWrapper is used if the test is called with `--debug-sql` [ call(CursorDebugWrapper, sql_tracking.NormalCursorMixin), call(CursorDebugWrapper, sql_tracking.ExceptionCursorMixin), ], ], ) def test_generate_server_timing(self): self.assertEqual(len(self.panel._queries), 0) sql_call() response = self.panel.process_request(self.request) self.panel.generate_stats(self.request, response) self.panel.generate_server_timing(self.request, response) # ensure query was logged self.assertEqual(len(self.panel._queries), 1) query = self.panel._queries[0] expected_data = { "sql_time": {"title": "SQL 1 queries", "value": query["duration"]} } self.assertEqual(self.panel.get_server_timing_stats(), expected_data) def test_non_ascii_query(self): self.assertEqual(len(self.panel._queries), 0) # non-ASCII text query list(User.objects.extra(where=["username = 'apéro'"])) self.assertEqual(len(self.panel._queries), 1) # non-ASCII text parameters list(User.objects.filter(username="thé")) self.assertEqual(len(self.panel._queries), 2) # non-ASCII bytes parameters list(Binary.objects.filter(field__in=["café".encode()])) self.assertEqual(len(self.panel._queries), 3) response = self.panel.process_request(self.request) self.panel.generate_stats(self.request, response) # ensure the panel renders correctly self.assertIn("café", self.panel.content) @unittest.skipUnless( connection.vendor == "postgresql", "Test valid only on PostgreSQL" ) def test_bytes_query(self): self.assertEqual(len(self.panel._queries), 0) with connection.cursor() as cursor: cursor.execute(b"SELECT 1") self.assertEqual(len(self.panel._queries), 1) def test_param_conversion(self): self.assertEqual(len(self.panel._queries), 0) list( User.objects.filter(first_name="Foo") .filter(is_staff=True) .filter(is_superuser=False) ) list( User.objects.annotate(group_count=Count("groups__id")) .filter(group_count__lt=10) .filter(group_count__gt=1) ) list( User.objects.filter( date_joined=datetime.datetime( 2017, 12, 22, 16, 7, 1, tzinfo=datetime.timezone.utc ) ) ) response = self.panel.process_request(self.request) self.panel.generate_stats(self.request, response) # ensure query was logged self.assertEqual(len(self.panel._queries), 3) if connection.vendor == "mysql" and django.VERSION >= (4, 1): # Django 4.1 started passing true/false back for boolean # comparisons in MySQL. expected_bools = '["Foo", true, false]' else: expected_bools = '["Foo"]' if connection.vendor == "postgresql": # PostgreSQL always includes timezone expected_datetime = '["2017-12-22 16:07:01+00:00"]' else: expected_datetime = '["2017-12-22 16:07:01"]' self.assertEqual( tuple(query["params"] for query in self.panel._queries), ( expected_bools, "[10, 1]", expected_datetime, ), ) @unittest.skipUnless( connection.vendor == "postgresql", "Test valid only on PostgreSQL" ) def test_json_param_conversion(self): self.assertEqual(len(self.panel._queries), 0) list(PostgresJSON.objects.filter(field__contains={"foo": "bar"})) response = self.panel.process_request(self.request) self.panel.generate_stats(self.request, response) # ensure query was logged self.assertEqual(len(self.panel._queries), 1) self.assertEqual( self.panel._queries[0]["params"], '["{\\"foo\\": \\"bar\\"}"]', ) @unittest.skipUnless( connection.vendor == "postgresql" and psycopg is None, "Test valid only on PostgreSQL with psycopg2", ) def test_tuple_param_conversion(self): """ Regression test for tuple parameter conversion. """ self.assertEqual(len(self.panel._queries), 0) list( PostgresJSON.objects.raw( "SELECT * FROM tests_postgresjson WHERE field ->> 'key' IN %s", [("a", "b'")], ) ) response = self.panel.process_request(self.request) self.panel.generate_stats(self.request, response) # ensure query was logged self.assertEqual(len(self.panel._queries), 1) self.assertEqual(self.panel._queries[0]["params"], '[["a", "b\'"]]') def test_binary_param_force_text(self): self.assertEqual(len(self.panel._queries), 0) with connection.cursor() as cursor: cursor.execute( "SELECT * FROM tests_binary WHERE field = %s", [connection.Database.Binary(b"\xff")], ) response = self.panel.process_request(self.request) self.panel.generate_stats(self.request, response) self.assertEqual(len(self.panel._queries), 1) self.assertIn( "SELECT * FROM" " tests_binary WHERE field =", self.panel._queries[0]["sql"], ) @unittest.skipUnless(connection.vendor != "sqlite", "Test invalid for SQLite") def test_raw_query_param_conversion(self): self.assertEqual(len(self.panel._queries), 0) list( User.objects.raw( " ".join( [ "SELECT *", "FROM auth_user", "WHERE first_name = %s", "AND is_staff = %s", "AND is_superuser = %s", "AND date_joined = %s", ] ), params=["Foo", True, False, datetime.datetime(2017, 12, 22, 16, 7, 1)], ) ) list( User.objects.raw( " ".join( [ "SELECT *", "FROM auth_user", "WHERE first_name = %(first_name)s", "AND is_staff = %(is_staff)s", "AND is_superuser = %(is_superuser)s", "AND date_joined = %(date_joined)s", ] ), params={ "first_name": "Foo", "is_staff": True, "is_superuser": False, "date_joined": datetime.datetime(2017, 12, 22, 16, 7, 1), }, ) ) response = self.panel.process_request(self.request) self.panel.generate_stats(self.request, response) # ensure query was logged self.assertEqual(len(self.panel._queries), 2) self.assertEqual( tuple(query["params"] for query in self.panel._queries), ( '["Foo", true, false, "2017-12-22 16:07:01"]', " ".join( [ '{"first_name": "Foo",', '"is_staff": true,', '"is_superuser": false,', '"date_joined": "2017-12-22 16:07:01"}', ] ), ), ) def test_insert_content(self): """ Test that the panel only inserts content after generate_stats and not the process_request. """ list(User.objects.filter(username="café")) response = self.panel.process_request(self.request) # ensure the panel does not have content yet. self.assertNotIn("café", self.panel.content) self.panel.generate_stats(self.request, response) # ensure the panel renders correctly. content = self.panel.content self.assertIn("café", content) self.assertValidHTML(content) @override_settings(DEBUG_TOOLBAR_CONFIG={"ENABLE_STACKTRACES_LOCALS": True}) def test_insert_locals(self): """ Test that the panel inserts locals() content. """ local_var = "" # noqa: F841 list(User.objects.filter(username="café")) response = self.panel.process_request(self.request) self.panel.generate_stats(self.request, response) self.assertIn("local_var", self.panel.content) # Verify the escape logic works content = self.panel.content self.assertNotIn(" {% endblock content %} python-django-debug-toolbar-5.2.0/tests/templates/base.html000066400000000000000000000002751500406072000237610ustar00rootroot00000000000000 {{ title }} {% block head %}{% endblock %} {% block content %}{% endblock %} python-django-debug-toolbar-5.2.0/tests/templates/basic.html000066400000000000000000000001211500406072000241160ustar00rootroot00000000000000{% extends "base.html" %} {% block content %}Test for {{ title }}{% endblock %} python-django-debug-toolbar-5.2.0/tests/templates/jinja2/000077500000000000000000000000001500406072000233325ustar00rootroot00000000000000python-django-debug-toolbar-5.2.0/tests/templates/jinja2/base.html000066400000000000000000000002261500406072000251320ustar00rootroot00000000000000 {{ title }} {% block content %}{% endblock %} python-django-debug-toolbar-5.2.0/tests/templates/jinja2/basic.jinja000066400000000000000000000003061500406072000254270ustar00rootroot00000000000000{% extends 'base.html' %} {% block content %} Test for {{ title }} (Jinja) {% for i in range(10) %}{{ i }}{% endfor %} {# Jinja2 supports range(), Django templates do not #} {% endblock content %} python-django-debug-toolbar-5.2.0/tests/templates/registration/000077500000000000000000000000001500406072000246675ustar00rootroot00000000000000python-django-debug-toolbar-5.2.0/tests/templates/registration/login.html000066400000000000000000000000321500406072000266600ustar00rootroot00000000000000{% extends 'base.html' %} python-django-debug-toolbar-5.2.0/tests/templates/sql/000077500000000000000000000000001500406072000227545ustar00rootroot00000000000000python-django-debug-toolbar-5.2.0/tests/templates/sql/flat.html000066400000000000000000000001241500406072000245650ustar00rootroot00000000000000{% extends "base.html" %} {% block content %} {{ users }} {% endblock content %} python-django-debug-toolbar-5.2.0/tests/templates/sql/included.html000066400000000000000000000000141500406072000254240ustar00rootroot00000000000000{{ users }} python-django-debug-toolbar-5.2.0/tests/templates/sql/nested.html000066400000000000000000000001521500406072000251220ustar00rootroot00000000000000{% extends "base.html" %} {% block content %} {% include "sql/included.html" %} {% endblock content %} python-django-debug-toolbar-5.2.0/tests/templates/staticfiles/000077500000000000000000000000001500406072000244675ustar00rootroot00000000000000python-django-debug-toolbar-5.2.0/tests/templates/staticfiles/async_static.html000066400000000000000000000002371500406072000300430ustar00rootroot00000000000000{% extends "base.html" %} {% load static %} {% block head %} {% endblock head %} python-django-debug-toolbar-5.2.0/tests/templates/staticfiles/path.html000066400000000000000000000000431500406072000263060ustar00rootroot00000000000000{% load static %}{% static path %} python-django-debug-toolbar-5.2.0/tests/test_checks.py000066400000000000000000000276421500406072000230430ustar00rootroot00000000000000from unittest.mock import patch from django.core.checks import Warning, run_checks from django.test import SimpleTestCase, override_settings from django.urls import NoReverseMatch from debug_toolbar.apps import debug_toolbar_installed_when_running_tests_check class ChecksTestCase(SimpleTestCase): @override_settings( MIDDLEWARE=[ "django.contrib.messages.middleware.MessageMiddleware", "django.contrib.sessions.middleware.SessionMiddleware", "django.contrib.auth.middleware.AuthenticationMiddleware", "django.middleware.gzip.GZipMiddleware", "debug_toolbar.middleware.DebugToolbarMiddleware", ] ) def test_check_good_configuration(self): messages = run_checks() self.assertEqual(messages, []) @override_settings( MIDDLEWARE=[ "django.contrib.messages.middleware.MessageMiddleware", "django.contrib.sessions.middleware.SessionMiddleware", "django.contrib.auth.middleware.AuthenticationMiddleware", ] ) def test_check_missing_middleware_error(self): messages = run_checks() self.assertEqual( messages, [ Warning( "debug_toolbar.middleware.DebugToolbarMiddleware is " "missing from MIDDLEWARE.", hint="Add debug_toolbar.middleware.DebugToolbarMiddleware " "to MIDDLEWARE.", id="debug_toolbar.W001", ) ], ) @override_settings( MIDDLEWARE=[ "django.contrib.messages.middleware.MessageMiddleware", "django.contrib.sessions.middleware.SessionMiddleware", "django.contrib.auth.middleware.AuthenticationMiddleware", "debug_toolbar.middleware.DebugToolbarMiddleware", "django.middleware.gzip.GZipMiddleware", ] ) def test_check_gzip_middleware_error(self): messages = run_checks() self.assertEqual( messages, [ Warning( "debug_toolbar.middleware.DebugToolbarMiddleware occurs " "before django.middleware.gzip.GZipMiddleware in " "MIDDLEWARE.", hint="Move debug_toolbar.middleware.DebugToolbarMiddleware " "to after django.middleware.gzip.GZipMiddleware in " "MIDDLEWARE.", id="debug_toolbar.W003", ) ], ) @override_settings( MIDDLEWARE_CLASSES=[ "django.contrib.messages.middleware.MessageMiddleware", "django.contrib.sessions.middleware.SessionMiddleware", "django.contrib.auth.middleware.AuthenticationMiddleware", "django.middleware.gzip.GZipMiddleware", "debug_toolbar.middleware.DebugToolbarMiddleware", ] ) def test_check_middleware_classes_error(self): messages = run_checks() self.assertIn( Warning( "debug_toolbar is incompatible with MIDDLEWARE_CLASSES setting.", hint="Use MIDDLEWARE instead of MIDDLEWARE_CLASSES", id="debug_toolbar.W004", ), messages, ) @override_settings(DEBUG_TOOLBAR_PANELS=[]) def test_panels_is_empty(self): errors = run_checks() self.assertEqual( errors, [ Warning( "Setting DEBUG_TOOLBAR_PANELS is empty.", hint="Set DEBUG_TOOLBAR_PANELS to a non-empty list in your " "settings.py.", id="debug_toolbar.W005", ), ], ) @override_settings( TEMPLATES=[ { "BACKEND": "django.template.backends.django.DjangoTemplates", "APP_DIRS": False, "OPTIONS": { "context_processors": [ "django.template.context_processors.debug", "django.template.context_processors.request", "django.contrib.auth.context_processors.auth", "django.contrib.messages.context_processors.messages", ], "loaders": [ "django.template.loaders.filesystem.Loader", ], }, }, ] ) def test_check_w006_invalid(self): errors = run_checks() self.assertEqual( errors, [ Warning( "At least one DjangoTemplates TEMPLATES configuration needs " "to use django.template.loaders.app_directories.Loader or " "have APP_DIRS set to True.", hint=( "Include django.template.loaders.app_directories.Loader " 'in ["OPTIONS"]["loaders"]. Alternatively use ' "APP_DIRS=True for at least one " "django.template.backends.django.DjangoTemplates " "backend configuration." ), id="debug_toolbar.W006", ) ], ) @override_settings( TEMPLATES=[ { "NAME": "use_loaders", "BACKEND": "django.template.backends.django.DjangoTemplates", "APP_DIRS": False, "OPTIONS": { "context_processors": [ "django.template.context_processors.debug", "django.template.context_processors.request", "django.contrib.auth.context_processors.auth", "django.contrib.messages.context_processors.messages", ], "loaders": [ "django.template.loaders.app_directories.Loader", ], }, }, { "NAME": "use_app_dirs", "BACKEND": "django.template.backends.django.DjangoTemplates", "APP_DIRS": True, "OPTIONS": { "context_processors": [ "django.template.context_processors.debug", "django.template.context_processors.request", "django.contrib.auth.context_processors.auth", "django.contrib.messages.context_processors.messages", ], }, }, ] ) def test_check_w006_valid(self): self.assertEqual(run_checks(), []) @override_settings( TEMPLATES=[ { "NAME": "use_loaders", "BACKEND": "django.template.backends.django.DjangoTemplates", "APP_DIRS": False, "OPTIONS": { "context_processors": [ "django.template.context_processors.debug", "django.template.context_processors.request", "django.contrib.auth.context_processors.auth", "django.contrib.messages.context_processors.messages", ], "loaders": [ ( "django.template.loaders.cached.Loader", [ "django.template.loaders.filesystem.Loader", "django.template.loaders.app_directories.Loader", ], ), ], }, }, ] ) def test_check_w006_valid_nested_loaders(self): self.assertEqual(run_checks(), []) @patch("debug_toolbar.apps.mimetypes.guess_type") def test_check_w007_valid(self, mocked_guess_type): mocked_guess_type.return_value = ("text/javascript", None) self.assertEqual(run_checks(), []) mocked_guess_type.return_value = ("application/javascript", None) self.assertEqual(run_checks(), []) @patch("debug_toolbar.apps.mimetypes.guess_type") def test_check_w007_invalid(self, mocked_guess_type): mocked_guess_type.return_value = ("text/plain", None) self.assertEqual( run_checks(), [ Warning( "JavaScript files are resolving to the wrong content type.", hint="The Django Debug Toolbar may not load properly while mimetypes are misconfigured. " "See the Django documentation for an explanation of why this occurs.\n" "https://docs.djangoproject.com/en/stable/ref/contrib/staticfiles/#static-file-development-view\n" "\n" "This typically occurs on Windows machines. The suggested solution is to modify " "HKEY_CLASSES_ROOT in the registry to specify the content type for JavaScript " "files.\n" "\n" "[HKEY_CLASSES_ROOT\\.js]\n" '"Content Type"="application/javascript"', id="debug_toolbar.W007", ) ], ) @patch("debug_toolbar.apps.reverse") def test_debug_toolbar_installed_when_running_tests(self, reverse): params = [ { "debug": True, "running_tests": True, "show_callback_changed": True, "urls_installed": False, "errors": False, }, { "debug": False, "running_tests": False, "show_callback_changed": True, "urls_installed": False, "errors": False, }, { "debug": False, "running_tests": True, "show_callback_changed": False, "urls_installed": False, "errors": False, }, { "debug": False, "running_tests": True, "show_callback_changed": True, "urls_installed": True, "errors": False, }, { "debug": False, "running_tests": True, "show_callback_changed": True, "urls_installed": False, "errors": True, }, ] for config in params: with self.subTest(**config): config_setting = { "RENDER_PANELS": False, "IS_RUNNING_TESTS": config["running_tests"], "SHOW_TOOLBAR_CALLBACK": ( (lambda *args: True) if config["show_callback_changed"] else "debug_toolbar.middleware.show_toolbar" ), } if config["urls_installed"]: reverse.side_effect = lambda *args: None else: reverse.side_effect = NoReverseMatch() with self.settings( DEBUG=config["debug"], DEBUG_TOOLBAR_CONFIG=config_setting ): errors = debug_toolbar_installed_when_running_tests_check(None) if config["errors"]: self.assertEqual(len(errors), 1) self.assertEqual(errors[0].id, "debug_toolbar.E001") else: self.assertEqual(len(errors), 0) @override_settings( DEBUG_TOOLBAR_CONFIG={ "OBSERVE_REQUEST_CALLBACK": lambda request: False, "IS_RUNNING_TESTS": False, } ) def test_observe_request_callback_specified(self): errors = run_checks() self.assertEqual(len(errors), 1) self.assertEqual(errors[0].id, "debug_toolbar.W008") python-django-debug-toolbar-5.2.0/tests/test_csp_rendering.py000066400000000000000000000170471500406072000244230ustar00rootroot00000000000000from __future__ import annotations from typing import cast from xml.etree.ElementTree import Element from django.conf import settings from django.http.response import HttpResponse from django.test.utils import ContextList, override_settings from html5lib.constants import E from html5lib.html5parser import HTMLParser from debug_toolbar.toolbar import DebugToolbar from .base import IntegrationTestCase MIDDLEWARE_CSP_BEFORE = settings.MIDDLEWARE.copy() MIDDLEWARE_CSP_BEFORE.insert( MIDDLEWARE_CSP_BEFORE.index("debug_toolbar.middleware.DebugToolbarMiddleware"), "csp.middleware.CSPMiddleware", ) MIDDLEWARE_CSP_LAST = settings.MIDDLEWARE + ["csp.middleware.CSPMiddleware"] def get_namespaces(element: Element) -> dict[str, str]: """ Return the default `xmlns`. See https://docs.python.org/3/library/xml.etree.elementtree.html#parsing-xml-with-namespaces """ if not element.tag.startswith("{"): return {} return {"": element.tag[1:].split("}", maxsplit=1)[0]} @override_settings(DEBUG=True) class CspRenderingTestCase(IntegrationTestCase): """Testing if `csp-nonce` renders.""" def setUp(self): super().setUp() self.parser = HTMLParser() def _fail_if_missing( self, root: Element, path: str, namespaces: dict[str, str], nonce: str ): """ Search elements, fail if a `nonce` attribute is missing on them. """ elements = root.findall(path=path, namespaces=namespaces) for item in elements: if item.attrib.get("nonce") != nonce: raise self.failureException(f"{item} has no nonce attribute.") def _fail_if_found(self, root: Element, path: str, namespaces: dict[str, str]): """ Search elements, fail if a `nonce` attribute is found on them. """ elements = root.findall(path=path, namespaces=namespaces) for item in elements: if "nonce" in item.attrib: raise self.failureException(f"{item} has a nonce attribute.") def _fail_on_invalid_html(self, content: bytes, parser: HTMLParser): """Fail if the passed HTML is invalid.""" if parser.errors: default_msg = ["Content is invalid HTML:"] lines = content.split(b"\n") for position, error_code, data_vars in parser.errors: default_msg.append(f" {E[error_code]}" % data_vars) default_msg.append(f" {lines[position[0] - 1]!r}") msg = self._formatMessage(None, "\n".join(default_msg)) raise self.failureException(msg) def test_exists(self): """A `nonce` should exist when using the `CSPMiddleware`.""" for middleware in [MIDDLEWARE_CSP_BEFORE, MIDDLEWARE_CSP_LAST]: with self.settings(MIDDLEWARE=middleware): response = cast(HttpResponse, self.client.get(path="/csp_view/")) self.assertEqual(response.status_code, 200) html_root: Element = self.parser.parse(stream=response.content) self._fail_on_invalid_html(content=response.content, parser=self.parser) self.assertContains(response, "djDebug") namespaces = get_namespaces(element=html_root) toolbar = list(DebugToolbar._store.values())[-1] nonce = str(toolbar.csp_nonce) self._fail_if_missing( root=html_root, path=".//link", namespaces=namespaces, nonce=nonce ) self._fail_if_missing( root=html_root, path=".//script", namespaces=namespaces, nonce=nonce ) def test_does_not_exist_nonce_wasnt_used(self): """ A `nonce` should not exist even when using the `CSPMiddleware` if the view didn't access the request.csp_nonce attribute. """ for middleware in [MIDDLEWARE_CSP_BEFORE, MIDDLEWARE_CSP_LAST]: with self.settings(MIDDLEWARE=middleware): response = cast(HttpResponse, self.client.get(path="/regular/basic/")) self.assertEqual(response.status_code, 200) html_root: Element = self.parser.parse(stream=response.content) self._fail_on_invalid_html(content=response.content, parser=self.parser) self.assertContains(response, "djDebug") namespaces = get_namespaces(element=html_root) self._fail_if_found( root=html_root, path=".//link", namespaces=namespaces ) self._fail_if_found( root=html_root, path=".//script", namespaces=namespaces ) @override_settings( DEBUG_TOOLBAR_CONFIG={"DISABLE_PANELS": set()}, ) def test_redirects_exists(self): for middleware in [MIDDLEWARE_CSP_BEFORE, MIDDLEWARE_CSP_LAST]: with self.settings(MIDDLEWARE=middleware): response = cast(HttpResponse, self.client.get(path="/csp_view/")) self.assertEqual(response.status_code, 200) html_root: Element = self.parser.parse(stream=response.content) self._fail_on_invalid_html(content=response.content, parser=self.parser) self.assertContains(response, "djDebug") namespaces = get_namespaces(element=html_root) context: ContextList = response.context # pyright: ignore[reportAttributeAccessIssue] nonce = str(context["toolbar"].csp_nonce) self._fail_if_missing( root=html_root, path=".//link", namespaces=namespaces, nonce=nonce ) self._fail_if_missing( root=html_root, path=".//script", namespaces=namespaces, nonce=nonce ) def test_panel_content_nonce_exists(self): for middleware in [MIDDLEWARE_CSP_BEFORE, MIDDLEWARE_CSP_LAST]: with self.settings(MIDDLEWARE=middleware): response = cast(HttpResponse, self.client.get(path="/csp_view/")) self.assertEqual(response.status_code, 200) toolbar = list(DebugToolbar._store.values())[-1] panels_to_check = ["HistoryPanel", "TimerPanel"] for panel in panels_to_check: content = toolbar.get_panel_by_id(panel).content html_root: Element = self.parser.parse(stream=content) namespaces = get_namespaces(element=html_root) nonce = str(toolbar.csp_nonce) self._fail_if_missing( root=html_root, path=".//link", namespaces=namespaces, nonce=nonce, ) self._fail_if_missing( root=html_root, path=".//script", namespaces=namespaces, nonce=nonce, ) def test_missing(self): """A `nonce` should not exist when not using the `CSPMiddleware`.""" response = cast(HttpResponse, self.client.get(path="/regular/basic/")) self.assertEqual(response.status_code, 200) html_root: Element = self.parser.parse(stream=response.content) self._fail_on_invalid_html(content=response.content, parser=self.parser) self.assertContains(response, "djDebug") namespaces = get_namespaces(element=html_root) self._fail_if_found(root=html_root, path=".//link", namespaces=namespaces) self._fail_if_found(root=html_root, path=".//script", namespaces=namespaces) python-django-debug-toolbar-5.2.0/tests/test_decorators.py000066400000000000000000000044071500406072000237420ustar00rootroot00000000000000from unittest.mock import patch from django.http import Http404, HttpResponse from django.test import AsyncRequestFactory, RequestFactory, TestCase from django.test.utils import override_settings from debug_toolbar.decorators import render_with_toolbar_language, require_show_toolbar @render_with_toolbar_language def stub_view(request): return HttpResponse(200) @require_show_toolbar def stub_require_toolbar_view(request): return HttpResponse(200) @require_show_toolbar async def stub_require_toolbar_async_view(request): return HttpResponse(200) class TestRequireToolbar(TestCase): """ Tests require_toolbar functionality and async compatibility. """ def setUp(self): self.factory = RequestFactory() self.async_factory = AsyncRequestFactory() @override_settings(DEBUG=True) def test_require_toolbar_debug_true(self): response = stub_require_toolbar_view(self.factory.get("/")) self.assertEqual(response.status_code, 200) def test_require_toolbar_debug_false(self): with self.assertRaises(Http404): stub_require_toolbar_view(self.factory.get("/")) # Following tests additionally tests async compatibility # of require_toolbar decorator @override_settings(DEBUG=True) async def test_require_toolbar_async_debug_true(self): response = await stub_require_toolbar_async_view(self.async_factory.get("/")) self.assertEqual(response.status_code, 200) async def test_require_toolbar_async_debug_false(self): with self.assertRaises(Http404): await stub_require_toolbar_async_view(self.async_factory.get("/")) @override_settings(DEBUG=True, LANGUAGE_CODE="fr") class RenderWithToolbarLanguageTestCase(TestCase): @override_settings(DEBUG_TOOLBAR_CONFIG={"TOOLBAR_LANGUAGE": "de"}) @patch("debug_toolbar.decorators.language_override") def test_uses_toolbar_language(self, mock_language_override): stub_view(RequestFactory().get("/")) mock_language_override.assert_called_once_with("de") @patch("debug_toolbar.decorators.language_override") def test_defaults_to_django_language_code(self, mock_language_override): stub_view(RequestFactory().get("/")) mock_language_override.assert_called_once_with("fr") python-django-debug-toolbar-5.2.0/tests/test_forms.py000066400000000000000000000033211500406072000227150ustar00rootroot00000000000000from datetime import datetime, timezone from django import forms from django.test import TestCase from debug_toolbar.forms import SignedDataForm SIGNATURE = "-WiogJKyy4E8Om00CrFSy0T6XHObwBa6Zb46u-vmeYE" DATA = {"date": datetime(2020, 1, 1, tzinfo=timezone.utc), "value": "foo"} SIGNED_DATA = f'{{"date": "2020-01-01 00:00:00+00:00", "value": "foo"}}:{SIGNATURE}' class FooForm(forms.Form): value = forms.CharField() # Include a datetime in the tests because it's not serializable back # to a datetime by SignedDataForm date = forms.DateTimeField() class TestSignedDataForm(TestCase): def test_signed_data(self): data = {"signed": SignedDataForm.sign(DATA)} form = SignedDataForm(data=data) self.assertTrue(form.is_valid()) # Check the signature value self.assertEqual(data["signed"], SIGNED_DATA) def test_verified_data(self): form = SignedDataForm(data={"signed": SignedDataForm.sign(DATA)}) self.assertEqual( form.verified_data(), { "value": "foo", "date": "2020-01-01 00:00:00+00:00", }, ) # Take it back to the foo form to validate the datetime is serialized foo_form = FooForm(data=form.verified_data()) self.assertTrue(foo_form.is_valid()) self.assertDictEqual(foo_form.cleaned_data, DATA) def test_initial_set_signed(self): form = SignedDataForm(initial=DATA) self.assertEqual(form.initial["signed"], SIGNED_DATA) def test_prevents_tampering(self): data = {"signed": SIGNED_DATA.replace('"value": "foo"', '"value": "bar"')} form = SignedDataForm(data=data) self.assertFalse(form.is_valid()) python-django-debug-toolbar-5.2.0/tests/test_integration.py000066400000000000000000001133641500406072000241230ustar00rootroot00000000000000import os import re import time import unittest from unittest.mock import patch import html5lib from django.contrib.staticfiles.testing import StaticLiveServerTestCase from django.core import signing from django.core.cache import cache from django.db import connection from django.http import HttpResponse from django.template.loader import get_template from django.test import AsyncRequestFactory, RequestFactory from django.test.utils import override_settings from debug_toolbar.forms import SignedDataForm from debug_toolbar.middleware import DebugToolbarMiddleware, show_toolbar from debug_toolbar.panels import Panel from debug_toolbar.toolbar import DebugToolbar from .base import BaseTestCase, IntegrationTestCase from .views import regular_view try: from selenium import webdriver from selenium.common.exceptions import NoSuchElementException from selenium.webdriver.common.by import By from selenium.webdriver.firefox.options import Options from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.support.wait import WebDriverWait except ImportError: webdriver = None rf = RequestFactory() def toolbar_store_id(): def get_response(request): return HttpResponse() toolbar = DebugToolbar(rf.get("/"), get_response) toolbar.store() return toolbar.store_id class BuggyPanel(Panel): def title(self): return "BuggyPanel" @property def content(self): raise Exception @override_settings(DEBUG=True) class DebugToolbarTestCase(BaseTestCase): def test_show_toolbar(self): self.assertTrue(show_toolbar(self.request)) def test_show_toolbar_DEBUG(self): with self.settings(DEBUG=False): self.assertFalse(show_toolbar(self.request)) def test_show_toolbar_INTERNAL_IPS(self): with self.settings(INTERNAL_IPS=[]): self.assertFalse(show_toolbar(self.request)) @patch("socket.gethostbyname", return_value="127.0.0.255") def test_show_toolbar_docker(self, mocked_gethostbyname): with self.settings(INTERNAL_IPS=[]): # Is true because REMOTE_ADDR is 127.0.0.1 and the 255 # is shifted to be 1. self.assertTrue(show_toolbar(self.request)) mocked_gethostbyname.assert_called_once_with("host.docker.internal") def test_not_iterating_over_INTERNAL_IPS(self): """Verify that the middleware does not iterate over INTERNAL_IPS in some way. Some people use iptools.IpRangeList for their INTERNAL_IPS. This is a class that can quickly answer the question if the setting contain a certain IP address, but iterating over this object will drain all performance / blow up. """ class FailOnIteration: def __iter__(self): raise RuntimeError( "The testcase failed: the code should not have iterated over INTERNAL_IPS" ) def __contains__(self, x): return True with self.settings(INTERNAL_IPS=FailOnIteration()): response = self.client.get("/regular/basic/") self.assertEqual(response.status_code, 200) self.assertContains(response, "djDebug") # toolbar def test_should_render_panels_RENDER_PANELS(self): """ The toolbar should force rendering panels on each request based on the RENDER_PANELS setting. """ toolbar = DebugToolbar(self.request, self.get_response) self.assertFalse(toolbar.should_render_panels()) toolbar.config["RENDER_PANELS"] = True self.assertTrue(toolbar.should_render_panels()) toolbar.config["RENDER_PANELS"] = None self.assertTrue(toolbar.should_render_panels()) def test_should_render_panels_multiprocess(self): """ The toolbar should render the panels on each request when wsgi.multiprocess is True or missing. """ request = rf.get("/") request.META["wsgi.multiprocess"] = True toolbar = DebugToolbar(request, self.get_response) toolbar.config["RENDER_PANELS"] = None self.assertTrue(toolbar.should_render_panels()) request.META["wsgi.multiprocess"] = False self.assertFalse(toolbar.should_render_panels()) request.META.pop("wsgi.multiprocess") self.assertTrue(toolbar.should_render_panels()) def test_should_render_panels_asgi(self): """ The toolbar not should render the panels on each request when wsgi.multiprocess is True or missing in case of async context rather than multithreaded wsgi. """ async_request = AsyncRequestFactory().get("/") # by default ASGIRequest will have wsgi.multiprocess set to True # but we are still assigning this to true cause this could change # and we specifically need to check that method returns false even with # wsgi.multiprocess set to true async_request.META["wsgi.multiprocess"] = True toolbar = DebugToolbar(async_request, self.get_response) toolbar.config["RENDER_PANELS"] = None self.assertFalse(toolbar.should_render_panels()) def _resolve_stats(self, path): # takes stats from Request panel request = rf.get(path) panel = self.toolbar.get_panel_by_id("RequestPanel") response = panel.process_request(request) panel.generate_stats(request, response) return panel.get_stats() def test_url_resolving_positional(self): stats = self._resolve_stats("/resolving1/a/b/") self.assertEqual(stats["view_urlname"], "positional-resolving") self.assertEqual(stats["view_func"], "tests.views.resolving_view") self.assertEqual(stats["view_args"], ("a", "b")) self.assertEqual(stats["view_kwargs"], {}) def test_url_resolving_named(self): stats = self._resolve_stats("/resolving2/a/b/") self.assertEqual(stats["view_args"], ()) self.assertEqual(stats["view_kwargs"], {"arg1": "a", "arg2": "b"}) def test_url_resolving_mixed(self): stats = self._resolve_stats("/resolving3/a/") self.assertEqual(stats["view_args"], ("a",)) self.assertEqual(stats["view_kwargs"], {"arg2": "default"}) def test_url_resolving_bad(self): stats = self._resolve_stats("/non-existing-url/") self.assertEqual(stats["view_urlname"], "None") self.assertEqual(stats["view_args"], "None") self.assertEqual(stats["view_kwargs"], "None") self.assertEqual(stats["view_func"], "") def test_middleware_response_insertion(self): def get_response(request): return regular_view(request, "İ") response = DebugToolbarMiddleware(get_response)(self.request) # check toolbar insertion before "" self.assertContains(response, "\n") def test_middleware_no_injection_when_encoded(self): def get_response(request): response = HttpResponse("") response["Content-Encoding"] = "something" return response response = DebugToolbarMiddleware(get_response)(self.request) self.assertEqual(response.content, b"") def test_cache_page(self): # Clear the cache before testing the views. Other tests that use cached_view # may run earlier and cause fewer cache calls. cache.clear() response = self.client.get("/cached_view/") self.assertEqual(len(response.toolbar.get_panel_by_id("CachePanel").calls), 3) response = self.client.get("/cached_view/") self.assertEqual(len(response.toolbar.get_panel_by_id("CachePanel").calls), 2) @override_settings(ROOT_URLCONF="tests.urls_use_package_urls") def test_include_package_urls(self): """Test urlsconf that uses the debug_toolbar.urls in the include call""" # Clear the cache before testing the views. Other tests that use cached_view # may run earlier and cause fewer cache calls. cache.clear() response = self.client.get("/cached_view/") self.assertEqual(len(response.toolbar.get_panel_by_id("CachePanel").calls), 3) response = self.client.get("/cached_view/") self.assertEqual(len(response.toolbar.get_panel_by_id("CachePanel").calls), 2) def test_low_level_cache_view(self): """Test cases when low level caching API is used within a request.""" response = self.client.get("/cached_low_level_view/") self.assertEqual(len(response.toolbar.get_panel_by_id("CachePanel").calls), 2) response = self.client.get("/cached_low_level_view/") self.assertEqual(len(response.toolbar.get_panel_by_id("CachePanel").calls), 1) def test_cache_disable_instrumentation(self): """ Verify that middleware cache usages before and after DebugToolbarMiddleware are not counted. """ self.assertIsNone(cache.set("UseCacheAfterToolbar.before", None)) self.assertIsNone(cache.set("UseCacheAfterToolbar.after", None)) response = self.client.get("/execute_sql/") self.assertEqual(cache.get("UseCacheAfterToolbar.before"), 1) self.assertEqual(cache.get("UseCacheAfterToolbar.after"), 1) self.assertEqual(len(response.toolbar.get_panel_by_id("CachePanel").calls), 0) def test_is_toolbar_request(self): request = rf.get("/__debug__/render_panel/") self.assertTrue(self.toolbar.is_toolbar_request(request)) request = rf.get("/invalid/__debug__/render_panel/") self.assertFalse(self.toolbar.is_toolbar_request(request)) request = rf.get("/render_panel/") self.assertFalse(self.toolbar.is_toolbar_request(request)) @override_settings(ROOT_URLCONF="tests.urls_invalid") def test_is_toolbar_request_without_djdt_urls(self): """Test cases when the toolbar urls aren't configured.""" request = rf.get("/__debug__/render_panel/") self.assertFalse(self.toolbar.is_toolbar_request(request)) request = rf.get("/render_panel/") self.assertFalse(self.toolbar.is_toolbar_request(request)) @override_settings(ROOT_URLCONF="tests.urls_invalid") def test_is_toolbar_request_override_request_urlconf(self): """Test cases when the toolbar URL is configured on the request.""" request = rf.get("/__debug__/render_panel/") self.assertFalse(self.toolbar.is_toolbar_request(request)) # Verify overriding the urlconf on the request is valid. request.urlconf = "tests.urls" self.assertTrue(self.toolbar.is_toolbar_request(request)) def test_is_toolbar_request_with_script_prefix(self): """ Test cases when Django is running under a path prefix, such as via the FORCE_SCRIPT_NAME setting. """ request = rf.get("/__debug__/render_panel/", SCRIPT_NAME="/path/") self.assertTrue(self.toolbar.is_toolbar_request(request)) request = rf.get("/invalid/__debug__/render_panel/", SCRIPT_NAME="/path/") self.assertFalse(self.toolbar.is_toolbar_request(request)) request = rf.get("/render_panel/", SCRIPT_NAME="/path/") self.assertFalse(self.toolbar.is_toolbar_request(self.request)) def test_data_gone(self): response = self.client.get( "/__debug__/render_panel/?store_id=GONE&panel_id=RequestPanel" ) self.assertIn("Please reload the page and retry.", response.json()["content"]) def test_sql_page(self): response = self.client.get("/execute_sql/") self.assertEqual( len(response.toolbar.get_panel_by_id("SQLPanel").get_stats()["queries"]), 1 ) def test_async_sql_page(self): response = self.client.get("/async_execute_sql/") self.assertEqual( len(response.toolbar.get_panel_by_id("SQLPanel").get_stats()["queries"]), 2 ) def test_concurrent_async_sql_page(self): response = self.client.get("/async_execute_sql_concurrently/") self.assertEqual( len(response.toolbar.get_panel_by_id("SQLPanel").get_stats()["queries"]), 2 ) @override_settings(DEBUG=True) class DebugToolbarIntegrationTestCase(IntegrationTestCase): def test_middleware(self): response = self.client.get("/execute_sql/") self.assertEqual(response.status_code, 200) self.assertContains(response, "djDebug") @override_settings(DEFAULT_CHARSET="iso-8859-1") def test_non_utf8_charset(self): response = self.client.get("/regular/ASCII/") self.assertContains(response, "ASCII") # template self.assertContains(response, "djDebug") # toolbar response = self.client.get("/regular/LÀTÍN/") self.assertContains(response, "LÀTÍN") # template self.assertContains(response, "djDebug") # toolbar def test_html5_validation(self): response = self.client.get("/regular/HTML5/") parser = html5lib.HTMLParser() content = response.content parser.parse(content) if parser.errors: default_msg = ["Content is invalid HTML:"] lines = content.split(b"\n") for position, errorcode, datavars in parser.errors: default_msg.append(f" {html5lib.constants.E[errorcode]}" % datavars) default_msg.append(f" {lines[position[0] - 1]!r}") msg = self._formatMessage(None, "\n".join(default_msg)) raise self.failureException(msg) def test_render_panel_checks_show_toolbar(self): url = "/__debug__/render_panel/" data = {"store_id": toolbar_store_id(), "panel_id": "VersionsPanel"} response = self.client.get(url, data) self.assertEqual(response.status_code, 200) response = self.client.get( url, data, headers={"x-requested-with": "XMLHttpRequest"} ) self.assertEqual(response.status_code, 200) with self.settings(INTERNAL_IPS=[]): response = self.client.get(url, data) self.assertEqual(response.status_code, 404) response = self.client.get( url, data, headers={"x-requested-with": "XMLHttpRequest"} ) self.assertEqual(response.status_code, 404) def test_middleware_render_toolbar_json(self): """Verify the toolbar is rendered and data is stored for a json request.""" self.assertEqual(len(DebugToolbar._store), 0) data = {"foo": "bar"} response = self.client.get("/json_view/", data, content_type="application/json") self.assertEqual(response.status_code, 200) self.assertEqual(response.content.decode("utf-8"), '{"foo": "bar"}') # Check the history panel's stats to verify the toolbar rendered properly. self.assertEqual(len(DebugToolbar._store), 1) toolbar = list(DebugToolbar._store.values())[0] self.assertEqual( toolbar.get_panel_by_id("HistoryPanel").get_stats()["data"], {"foo": ["bar"]}, ) def test_template_source_checks_show_toolbar(self): template = get_template("basic.html") url = "/__debug__/template_source/" data = { "template": template.template.name, "template_origin": signing.dumps(template.template.origin.name), } response = self.client.get(url, data) self.assertEqual(response.status_code, 200) response = self.client.get( url, data, headers={"x-requested-with": "XMLHttpRequest"} ) self.assertEqual(response.status_code, 200) with self.settings(INTERNAL_IPS=[]): response = self.client.get(url, data) self.assertEqual(response.status_code, 404) response = self.client.get( url, data, headers={"x-requested-with": "XMLHttpRequest"} ) self.assertEqual(response.status_code, 404) def test_template_source_errors(self): url = "/__debug__/template_source/" response = self.client.get(url, {}) self.assertContains( response, '"template_origin" key is required', status_code=400 ) template = get_template("basic.html") response = self.client.get( url, {"template_origin": signing.dumps(template.template.origin.name) + "xyz"}, ) self.assertContains(response, '"template_origin" is invalid', status_code=400) response = self.client.get( url, {"template_origin": signing.dumps("does_not_exist.html")} ) self.assertContains(response, "Template Does Not Exist: does_not_exist.html") def test_sql_select_checks_show_toolbar(self): url = "/__debug__/sql_select/" data = { "signed": SignedDataForm.sign( { "sql": "SELECT * FROM auth_user", "raw_sql": "SELECT * FROM auth_user", "params": "{}", "alias": "default", "duration": "0", } ) } response = self.client.post(url, data) self.assertEqual(response.status_code, 200) response = self.client.post( url, data, headers={"x-requested-with": "XMLHttpRequest"} ) self.assertEqual(response.status_code, 200) with self.settings(INTERNAL_IPS=[]): response = self.client.post(url, data) self.assertEqual(response.status_code, 404) response = self.client.post( url, data, headers={"x-requested-with": "XMLHttpRequest"} ) self.assertEqual(response.status_code, 404) def test_sql_explain_checks_show_toolbar(self): url = "/__debug__/sql_explain/" data = { "signed": SignedDataForm.sign( { "sql": "SELECT * FROM auth_user", "raw_sql": "SELECT * FROM auth_user", "params": "{}", "alias": "default", "duration": "0", } ) } response = self.client.post(url, data) self.assertEqual(response.status_code, 200) response = self.client.post( url, data, headers={"x-requested-with": "XMLHttpRequest"} ) self.assertEqual(response.status_code, 200) with self.settings(INTERNAL_IPS=[]): response = self.client.post(url, data) self.assertEqual(response.status_code, 404) response = self.client.post( url, data, headers={"x-requested-with": "XMLHttpRequest"} ) self.assertEqual(response.status_code, 404) @unittest.skipUnless( connection.vendor == "postgresql", "Test valid only on PostgreSQL" ) def test_sql_explain_postgres_union_query(self): """ Confirm select queries that start with a parenthesis can be explained. """ url = "/__debug__/sql_explain/" data = { "signed": SignedDataForm.sign( { "sql": "(SELECT * FROM auth_user) UNION (SELECT * from auth_user)", "raw_sql": "(SELECT * FROM auth_user) UNION (SELECT * from auth_user)", "params": "{}", "alias": "default", "duration": "0", } ) } response = self.client.post(url, data) self.assertEqual(response.status_code, 200) @unittest.skipUnless( connection.vendor == "postgresql", "Test valid only on PostgreSQL" ) def test_sql_explain_postgres_json_field(self): url = "/__debug__/sql_explain/" base_query = ( 'SELECT * FROM "tests_postgresjson" WHERE "tests_postgresjson"."field" @>' ) query = base_query + """ '{"foo": "bar"}'""" data = { "signed": SignedDataForm.sign( { "sql": query, "raw_sql": base_query + " %s", "params": '["{\\"foo\\": \\"bar\\"}"]', "alias": "default", "duration": "0", } ) } response = self.client.post(url, data) self.assertEqual(response.status_code, 200) response = self.client.post( url, data, headers={"x-requested-with": "XMLHttpRequest"} ) self.assertEqual(response.status_code, 200) with self.settings(INTERNAL_IPS=[]): response = self.client.post(url, data) self.assertEqual(response.status_code, 404) response = self.client.post( url, data, headers={"x-requested-with": "XMLHttpRequest"} ) self.assertEqual(response.status_code, 404) def test_sql_profile_checks_show_toolbar(self): url = "/__debug__/sql_profile/" data = { "signed": SignedDataForm.sign( { "sql": "SELECT * FROM auth_user", "raw_sql": "SELECT * FROM auth_user", "params": "{}", "alias": "default", "duration": "0", } ) } response = self.client.post(url, data) self.assertEqual(response.status_code, 200) response = self.client.post( url, data, headers={"x-requested-with": "XMLHttpRequest"} ) self.assertEqual(response.status_code, 200) with self.settings(INTERNAL_IPS=[]): response = self.client.post(url, data) self.assertEqual(response.status_code, 404) response = self.client.post( url, data, headers={"x-requested-with": "XMLHttpRequest"} ) self.assertEqual(response.status_code, 404) @override_settings(DEBUG_TOOLBAR_CONFIG={"RENDER_PANELS": True}) def test_render_panels_in_request(self): """ Test that panels are are rendered during the request with RENDER_PANELS=TRUE """ url = "/regular/basic/" response = self.client.get(url) self.assertIn(b'id="djDebug"', response.content) # Verify the store id is not included. self.assertNotIn(b"data-store-id", response.content) # Verify the history panel was disabled self.assertIn( b'', response.content, ) # Verify the a panel was rendered self.assertIn(b"Response headers", response.content) @override_settings(DEBUG_TOOLBAR_CONFIG={"RENDER_PANELS": False}) def test_load_panels(self): """ Test that panels are not rendered during the request with RENDER_PANELS=False """ url = "/execute_sql/" response = self.client.get(url) self.assertIn(b'id="djDebug"', response.content) # Verify the store id is included. self.assertIn(b"data-store-id", response.content) # Verify the history panel was not disabled self.assertNotIn( b'', response.content, ) # Verify the a panel was not rendered self.assertNotIn(b"Response headers", response.content) def test_view_returns_template_response(self): response = self.client.get("/template_response/basic/") self.assertEqual(response.status_code, 200) @override_settings(DEBUG_TOOLBAR_CONFIG={"DISABLE_PANELS": set()}) def test_intercept_redirects(self): response = self.client.get("/redirect/") self.assertEqual(response.status_code, 200) # Link to LOCATION header. self.assertIn(b'href="/regular/redirect/"', response.content) def test_server_timing_headers(self): response = self.client.get("/execute_sql/") server_timing = response["Server-Timing"] expected_partials = [ r'TimerPanel_utime;dur=(\d)*(\.(\d)*)?;desc="User CPU time", ', r'TimerPanel_stime;dur=(\d)*(\.(\d)*)?;desc="System CPU time", ', r'TimerPanel_total;dur=(\d)*(\.(\d)*)?;desc="Total CPU time", ', r'TimerPanel_total_time;dur=(\d)*(\.(\d)*)?;desc="Elapsed time", ', r'SQLPanel_sql_time;dur=(\d)*(\.(\d)*)?;desc="SQL 1 queries", ', r'CachePanel_total_time;dur=0;desc="Cache 0 Calls"', ] for expected in expected_partials: self.assertTrue(re.compile(expected).search(server_timing)) @override_settings(DEBUG_TOOLBAR_CONFIG={"RENDER_PANELS": True}) def test_timer_panel(self): response = self.client.get("/regular/basic/") self.assertEqual(response.status_code, 200) self.assertContains( response, '