pax_global_header00006660000000000000000000000064151340105160014506gustar00rootroot0000000000000052 comment=2825810e143a0377e3261fef658e1a59f7e0cf90 django-stubs-5.2.9/000077500000000000000000000000001513401051600141235ustar00rootroot00000000000000django-stubs-5.2.9/.editorconfig000066400000000000000000000004421513401051600166000ustar00rootroot00000000000000# Check http://editorconfig.org for more information # This is the main config file for this project: root = true [*] charset = utf-8 end_of_line = lf insert_final_newline = true indent_style = space trim_trailing_whitespace = true [*.{py, pyi}] indent_size = 4 [*.toml] indent_size = 2 django-stubs-5.2.9/.gitattributes000066400000000000000000000001321513401051600170120ustar00rootroot00000000000000scripts/allowlist_*.txt linguist-language=ini pyrightconfig*.json linguist-language=jsonc django-stubs-5.2.9/.github/000077500000000000000000000000001513401051600154635ustar00rootroot00000000000000django-stubs-5.2.9/.github/ISSUE_TEMPLATE/000077500000000000000000000000001513401051600176465ustar00rootroot00000000000000django-stubs-5.2.9/.github/ISSUE_TEMPLATE/bug.md000066400000000000000000000011241513401051600207430ustar00rootroot00000000000000--- name: Bug about: Create a report of something is not working labels: 'bug' --- # Bug report ## What's wrong ## How is that should be ## System information - OS: - `python` version: - `django` version: - `mypy` version: - `django-stubs` version: - `django-stubs-ext` version: django-stubs-5.2.9/.github/pull_request_template.md000066400000000000000000000010161513401051600224220ustar00rootroot00000000000000# I have made things! ## Related issues django-stubs-5.2.9/.github/renovate.json000066400000000000000000000006721513401051600202060ustar00rootroot00000000000000{ "dependencyDashboard": true, "mode": "full", "lockFileMaintenance": { "enabled": true, "automerge": true, "automergeType": "branch", "schedule": ["* * * * 1"], "automergeSchedule": ["* * * * 2"] }, "packageRules": [ { "matchPackageNames": ["mypy"], "rangeStrategy": "widen" }, { "matchPackageNames": ["python"], "allowedVersions": "3.10" } ] } django-stubs-5.2.9/.github/workflows/000077500000000000000000000000001513401051600175205ustar00rootroot00000000000000django-stubs-5.2.9/.github/workflows/mypy_primer.yml000066400000000000000000000056741513401051600226330ustar00rootroot00000000000000name: Run mypy_primer on: # Only run on PR, since we diff against main pull_request: concurrency: group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} cancel-in-progress: true permissions: contents: read jobs: mypy_primer: name: Run runs-on: ubuntu-latest strategy: matrix: shard-index: [0] # e.g. change this to [0, 1, 2] and --num-shards below to 3 fail-fast: false steps: - uses: actions/checkout@v6 with: path: django-stubs_to_test fetch-depth: 0 - uses: actions/setup-python@v6 with: python-version: "3.14" - name: Install uv uses: astral-sh/setup-uv@v7 - name: Install dependencies run: | uv venv uv pip install git+https://github.com/hauntsaninja/mypy_primer.git - name: Run mypy_primer shell: bash run: | cd django-stubs_to_test MYPY_VERSION=$(uv tree --package=mypy --depth=0 -q | sed -n 's/^mypy v\(.\+\)$/\1/p') echo "new commit" git checkout $GITHUB_SHA git rev-list --format=%s --max-count=1 HEAD MERGE_BASE=$(git merge-base $GITHUB_SHA origin/$GITHUB_BASE_REF) git worktree add ../django-stubs_base $MERGE_BASE cd ../django-stubs_base echo "base commit" git rev-list --format=%s --max-count=1 HEAD echo '' cd .. # fail action if exit code isn't zero or one ( uv run mypy_primer \ --new v${MYPY_VERSION} --old v${MYPY_VERSION} \ --known-dependency-selector django-stubs \ --old-prepend-path django-stubs_base --new-prepend-path django-stubs_to_test \ --num-shards 1 --shard-index ${{ matrix.shard-index }} \ --debug \ --output concise \ | tee diff_${{ matrix.shard-index }}.txt ) || [ $? -eq 1 ] - if: ${{ matrix.shard-index == 0 }} name: Save PR number run: | echo ${{ github.event.pull_request.number }} | tee pr_number.txt - name: Upload mypy_primer diff + PR number uses: actions/upload-artifact@v6 if: ${{ matrix.shard-index == 0 }} with: name: mypy_primer_diffs-${{ matrix.shard-index }} path: | diff_${{ matrix.shard-index }}.txt pr_number.txt - name: Upload mypy_primer diff uses: actions/upload-artifact@v6 if: ${{ matrix.shard-index != 0 }} with: name: mypy_primer_diffs-${{ matrix.shard-index }} path: diff_${{ matrix.shard-index }}.txt join_artifacts: name: Join artifacts runs-on: ubuntu-latest needs: [mypy_primer] permissions: contents: read steps: - name: Merge artifacts uses: actions/upload-artifact/merge@v6 with: name: mypy_primer_diffs pattern: mypy_primer_diffs-* delete-merged: true django-stubs-5.2.9/.github/workflows/mypy_primer_comment.yml000066400000000000000000000074741513401051600243550ustar00rootroot00000000000000name: Comment with mypy_primer diff on: workflow_run: workflows: - Run mypy_primer types: - completed permissions: contents: read pull-requests: write jobs: comment: name: Comment PR from mypy_primer runs-on: ubuntu-latest if: ${{ github.event.workflow_run.conclusion == 'success' }} steps: - name: Download diffs uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0 with: script: | const fs = require('fs'); const artifacts = await github.rest.actions.listWorkflowRunArtifacts({ owner: context.repo.owner, repo: context.repo.repo, run_id: ${{ github.event.workflow_run.id }}, }); const [matchArtifact] = artifacts.data.artifacts.filter((artifact) => artifact.name == "mypy_primer_diffs"); const download = await github.rest.actions.downloadArtifact({ owner: context.repo.owner, repo: context.repo.repo, artifact_id: matchArtifact.id, archive_format: "zip", }); fs.writeFileSync("diff.zip", Buffer.from(download.data)); - run: unzip diff.zip - name: Get PR number id: get-pr-number uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0 with: script: | const fs = require('fs'); return parseInt(fs.readFileSync("pr_number.txt", { encoding: "utf8" })) - name: Hide old comments uses: int128/hide-comment-action@d56df214f3902ffb330ca629acf5051a4e22aee2 # v1.49.0 with: token: ${{ secrets.GITHUB_TOKEN }} issue-number: ${{ steps.get-pr-number.outputs.result }} - run: cat diff_*.txt | tee fulldiff.txt - name: Post comment id: post-comment uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0 with: github-token: ${{ secrets.GITHUB_TOKEN }} script: | const MAX_CHARACTERS = 50000 const MAX_CHARACTERS_PER_PROJECT = MAX_CHARACTERS / 3 const fs = require('fs') let data = fs.readFileSync('fulldiff.txt', { encoding: 'utf8' }) function truncateIfNeeded(original, maxLength) { if (original.length <= maxLength) { return original } let truncated = original.substring(0, maxLength) // further, remove last line that might be truncated truncated = truncated.substring(0, truncated.lastIndexOf('\n')) let lines_truncated = original.split('\n').length - truncated.split('\n').length return `${truncated}\n\n... (truncated ${lines_truncated} lines) ...` } const projects = data.split('\n\n') // don't let one project dominate data = projects.map(project => truncateIfNeeded(project, MAX_CHARACTERS_PER_PROJECT)).join('\n\n') // posting comment fails if too long, so truncate data = truncateIfNeeded(data, MAX_CHARACTERS) console.log("Diff from mypy_primer:") console.log(data) let body if (data.trim()) { body = 'Diff from [mypy_primer](https://github.com/hauntsaninja/mypy_primer), ' body += 'showing the effect of this PR on type check results on a corpus of open source code:\n```diff\n' body += data + '```' const prNumber = parseInt(fs.readFileSync("pr_number.txt", { encoding: "utf8" })) await github.rest.issues.createComment({ issue_number: prNumber, owner: context.repo.owner, repo: context.repo.repo, body }) } django-stubs-5.2.9/.github/workflows/release.yml000066400000000000000000000023161513401051600216650ustar00rootroot00000000000000name: Release on: release: types: [published] concurrency: group: release-${{ github.event.release.tag_name }} jobs: build-and-publish-ext: runs-on: ubuntu-latest environment: name: release-ext url: https://pypi.org/p/django-stubs-ext permissions: id-token: write steps: - name: Install uv & Python uses: astral-sh/setup-uv@v7 with: python-version: "3.13" - uses: actions/checkout@v6 with: fetch-depth: 0 - name: Build ext package run: uv build --package=django-stubs-ext - name: Publish ext to PyPI uses: pypa/gh-action-pypi-publish@v1.13.0 build-and-publish: runs-on: ubuntu-latest needs: [build-and-publish-ext] environment: name: release url: https://pypi.org/p/django-stubs permissions: id-token: write steps: - name: Install uv & Python uses: astral-sh/setup-uv@v7 with: python-version: "3.13" - uses: actions/checkout@v6 with: fetch-depth: 0 - name: Build package run: uv build --package=django-stubs - name: Publish to PyPI uses: pypa/gh-action-pypi-publish@v1.13.0 django-stubs-5.2.9/.github/workflows/test.yml000066400000000000000000000157531513401051600212350ustar00rootroot00000000000000name: test on: push: branches: - master # Renovate "automerge" branches -- there is no PR, so branch tests are used instead - "renovate/lock-file-maintenance" pull_request: workflow_dispatch: env: UV_FROZEN: true # https://docs.astral.sh/uv/configuration/environment/#uv_frozen UV_NO_SYNC: true # prevent `uv run` cmd from bringing very dev dependencies permissions: contents: read concurrency: group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} cancel-in-progress: true jobs: mypy-self-check: timeout-minutes: 10 runs-on: ubuntu-latest strategy: matrix: python-version: ['3.10', '3.11', '3.12', '3.13'] fail-fast: false steps: - uses: actions/checkout@v6 - name: Install uv uses: astral-sh/setup-uv@v7 - name: Set up Python ${{ matrix.python-version }} uses: actions/setup-python@v6 with: python-version: ${{ matrix.python-version }} - name: Install dependencies run: uv sync --no-dev --group tests - name: Run mypy on plugin code run: uv run mypy --strict mypy_django_plugin - name: Run mypy on ext code run: uv run mypy --strict ext - name: Run mypy on scripts and utils run: uv run mypy --strict scripts - name: Run mypy on stubs run: uv run mypy --cache-dir=/dev/null --no-incremental django-stubs - name: Run mypy on the test cases run: uv run mypy --strict tests test: timeout-minutes: 15 runs-on: ubuntu-latest strategy: matrix: python-version: ['3.10', '3.11', '3.12', '3.13'] shard: [0, 1, 2, 3] fail-fast: false steps: - uses: actions/checkout@v6 - name: Setup system dependencies run: | sudo apt-get update sudo apt-get install binutils libproj-dev gdal-bin - name: Install uv uses: astral-sh/setup-uv@v7 - name: Set up Python ${{ matrix.python-version }} uses: actions/setup-python@v6 with: python-version: ${{ matrix.python-version }} - name: Install dependencies run: uv sync --no-dev --group tests # Must match `shard` definition in the test matrix: - name: Run pytest tests run: uv run pytest --num-shards=4 --shard-id=${{ matrix.shard }} -n auto tests test-older-django: timeout-minutes: 15 runs-on: ubuntu-latest strategy: matrix: shard: [0, 1, 2, 3] fail-fast: false steps: - uses: actions/checkout@v6 - name: Setup system dependencies run: | sudo apt-get update sudo apt-get install binutils libproj-dev gdal-bin - name: Install uv uses: astral-sh/setup-uv@v7 - name: Set up Python uses: actions/setup-python@v6 with: # NOTE: Keep renovate.json python "allowedVersions" in sync python-version: '3.10' - name: Install dependencies run: uv sync --no-dev --group tests - name: Downgrade Django run: uv pip install django==5.0.0 # Exit 1 only if ont of the pytest error is a mypy crash - name: Run pytest tests run: "! uv run pytest --num-shards=4 --shard-id=${{ matrix.shard }} -n auto tests | grep 'pytest_mypy_plugins.utils.TypecheckAssertionError: Critical error occurred'" stubtest: timeout-minutes: 10 runs-on: ubuntu-latest strategy: matrix: python-version: ['3.12', '3.13'] fail-fast: false steps: - uses: actions/checkout@v6 - name: Setup system dependencies run: | sudo apt-get update sudo apt-get install binutils libproj-dev gdal-bin - name: Install uv uses: astral-sh/setup-uv@v7 - name: Set up Python ${{ matrix.python-version }} uses: actions/setup-python@v6 with: python-version: ${{ matrix.python-version }} - name: Install dependencies run: uv sync --no-dev --group tests - name: Run stubtest run: uv run ./scripts/stubtest.sh run-pyright: timeout-minutes: 10 runs-on: ubuntu-latest strategy: matrix: python-version: ['3.12'] # TODO: enable on other versions fail-fast: false steps: - uses: actions/checkout@v6 - name: Install uv uses: astral-sh/setup-uv@v7 - name: Set up Python ${{ matrix.python-version }} uses: actions/setup-python@v6 with: python-version: ${{ matrix.python-version }} - name: Install dependencies run: uv sync --no-dev --group pyright # See https://github.com/jakebailey/pyright-action#providing-a-pyright-version-sourced-from-preexisting-dependencies - name: Add venv to path run: echo "$PWD/.venv/bin" >> $GITHUB_PATH - name: Run pyright on the stubs uses: jakebailey/pyright-action@v2 with: version: PATH annotate: false continue-on-error: true # TODO: remove this part - name: Run pyright on the test cases uses: jakebailey/pyright-action@v2 with: version: PATH project: ./pyrightconfig.testcases.json run-pyrefly: timeout-minutes: 10 runs-on: ubuntu-latest strategy: matrix: python-version: ['3.12'] fail-fast: false steps: - uses: actions/checkout@v6 - name: Install uv uses: astral-sh/setup-uv@v7 - name: Set up Python ${{ matrix.python-version }} uses: actions/setup-python@v6 with: python-version: ${{ matrix.python-version }} - name: Install dependencies run: uv sync --no-dev --group pyrefly - name: Add venv to path run: echo "$PWD/.venv/bin" >> $GITHUB_PATH - name: Run pyrefly on the test cases run: pyrefly check tests/assert_type matrix-test: timeout-minutes: 10 runs-on: ubuntu-latest strategy: fail-fast: false matrix: python-version: ['3.10', '3.11', '3.12', '3.13'] django-version: ['5.0', '5.1', '5.2'] steps: - uses: actions/checkout@v6 - name: Setup system dependencies run: | sudo apt-get update sudo apt-get install binutils libproj-dev gdal-bin - name: Install uv uses: astral-sh/setup-uv@v7 - name: Set up Python ${{ matrix.python-version }} uses: actions/setup-python@v6 with: python-version: ${{ matrix.python-version }} - name: Install dependencies run: uv sync --no-dev --group tests - name: Run django-stubs-ext tests run: uv run --with "django==${{ matrix.django-version }}" pytest ext build-and-check: runs-on: ubuntu-latest steps: - uses: actions/checkout@v6 with: fetch-tags: true - name: Install uv & Python uses: astral-sh/setup-uv@v7 with: python-version: "3.13" - name: Ensure uv.lock is up to date run: env --unset=UV_FROZEN uv lock --check - name: Build run: uv build --all-packages django-stubs-5.2.9/.gitignore000066400000000000000000000002521513401051600161120ustar00rootroot00000000000000*.egg-info .DS_Store .idea/ .vscode/ .mypy_cache/ .pytest_cache/ .ruff_cache/ .venv/ __pycache__/ django-source/ out/ pip-wheel-metadata/ stubgen/ build/ dist/ ext/dist/ django-stubs-5.2.9/.pre-commit-config.yaml000066400000000000000000000022261513401051600204060ustar00rootroot00000000000000# See https://pre-commit.com for more information # See https://pre-commit.com/hooks.html for more hooks repos: - repo: https://github.com/pre-commit/pre-commit-hooks rev: v6.0.0 hooks: - id: trailing-whitespace - id: check-executables-have-shebangs - id: debug-statements - id: end-of-file-fixer - id: check-yaml - id: check-toml - id: check-merge-conflict - id: mixed-line-ending args: [--fix=lf] - id: check-case-conflict - repo: https://github.com/astral-sh/ruff-pre-commit rev: v0.14.11 hooks: - id: ruff-check args: ["--fix", "--exit-non-zero-on-fix"] - id: ruff-format - repo: https://github.com/codespell-project/codespell rev: v2.4.1 hooks: - id: codespell additional_dependencies: - tomli - repo: https://github.com/astral-sh/uv-pre-commit rev: 0.9.24 hooks: - id: uv-lock ci: autofix_commit_msg: "[pre-commit.ci] auto fixes from pre-commit.com hooks" autofix_prs: true autoupdate_commit_msg: "[pre-commit.ci] pre-commit autoupdate" autoupdate_schedule: weekly submodules: false skip: - uv-lock django-stubs-5.2.9/CONTRIBUTING.md000066400000000000000000000163531513401051600163640ustar00rootroot00000000000000# Contribution Guide This project is open source and community driven. As such we encourage code contributions of all kinds. Some areas you can contribute in: 1. Improve the stubs 2. Sync stubs with the latest version of Django 3. Improve plugin code and extend its capabilities 4. Write tests 5. Update dependencies 6. Fix and remove things from our `scripts/stubtest/allowlist_todo.txt` ## Tutorials If you want to start working on this project, you will need to get familiar with python typings. The Mypy documentation offers an excellent resource for this, as well as the python official documentation: - [Mypy typing documentation](https://mypy.readthedocs.io/en/stable/#overview-type-system-reference) - [Python official typing documentation](https://docs.python.org/3/library/typing.html) - [Typing in Python](https://inventwithpython.com/blog/2019/11/24/type-hints-for-busy-python-programmers/) article Additionally, the following resources might be useful: - [How to write custom mypy plugins](https://mypy.readthedocs.io/en/stable/extending_mypy.html) - [Typechecking Django and DRF](https://sobolevn.me/2019/08/typechecking-django-and-drf) guide - [Testing mypy stubs, plugins, and types](https://sobolevn.me/2019/08/testing-mypy-types) guide - [Awesome Python Typing](https://github.com/typeddjango/awesome-python-typing) list ## Dev setup ### Repository Setup As a first step you will need to fork this repository and clone your fork locally. In order to be able to continuously sync your fork with the origin repository's master branch, you will need to set up an upstream master. To do so follow this [official github guide](https://docs.github.com/en/free-pro-team@latest/github/collaborating-with-issues-and-pull-requests/syncing-a-fork). ### Dependency Setup We use [uv](https://github.com/astral-sh/uv) to manage our dev dependencies. To install it, see their [installation guide](https://docs.astral.sh/uv/getting-started/installation/) Once it's done, simply run the following command to automatically setup a virtual environment and install dev dependencies: ```bash uv sync source .venv/bin/activate ``` Finally, install the pre-commit hooks: ```bash pre-commit install ``` ### Testing and Linting We use `mypy`, `pytest`, `ruff`, and `black` for quality control. `ruff` and `black` are executed using pre-commit when you make a commit. To ensure there are not formatting or typing issues in the entire repository you can run: ```bash pre-commit run --all-files ``` NOTE: This command will not only lint but also modify files - so make sure to commit whatever changes you've made before hand. You can also run pre-commit per file or for a specific path, simply replace "--all-files" with a target (see [this guide](https://codeburst.io/tool-your-django-project-pre-commit-hooks-e1799d84551f) for more info). To execute the unit tests, simply run: ```bash pytest -n auto ``` If you get some unexpected results or want to be sure that tests run is not affected by previous one, remove `mypy` cache: ```bash rm -r .mypy_cache ``` ### Testing stubs with `stubtest` Run `./scripts/stubtest.sh` to test that stubs and sources are in-line. We have some special files to allow errors: 1. `scripts/stubtest/allowlist.txt` where we store things that we really don't care about: hacks, django internal utility modules, things that are handled by our plugin, things that are not representable by type system, etc 2. `scripts/stubtest/allowlist_todo.txt` where we store all errors there are right now. Basically, this is a TODO list: we need to work through this list and fix things (or move entries to real `allowlist.txt`). In the end, ideally we can remove this file. 3. `scripts/stubtest/allowlist_todo_django52.txt` where we store new errors from the Django 5.0 to 5.2 upgrade. This is an extra TODO list. You might also want to disable `incremental` mode while working on `stubtest` changes. This mode leads to several known problems (stubs do not show up or have strange errors). ## Submission Guidelines The workflow for contributions is fairly simple: 1. Fork and set up the repository as in the previous step. 2. Create a local branch. 3. Make whatever changes you want to contribute. 4. Ensure your contribution passes linting and tests. 5. Make a pull request with an adequate description. ## Generics As Django uses a lot of the more dynamic features of Python (i.e. metaobjects), statically typing it requires heavy use of generics. Unfortunately, the syntax for generics is also valid Python syntax. For instance, the statement `class SomeClass(SuperType[int])` implicitly translates to `class SomeClass(SuperType.__class_getitem__(int))`. If `SuperType` doesn't define the `__class_getitem__` method, this causes a runtime error, even if the code passes type checking. When adding a new generic class, or changing an existing class to use generics, run a quick test to see if it causes a runtime error. If it does, please add the new generic class to the `_need_generic` list in the [`django_stubs_ext.patch` module](https://github.com/typeddjango/django-stubs/blob/master/ext/django_stubs_ext/patch.py). ## Private attributes We only add hints for private attributes when it has some demonstrated real-world use case. That means from a third-party package or some well described snippet for a project. This rule helps us avoid tying in too closely to Django’s undocumented internals. ## Releasing `django-stubs` 1. Open a pull request that updates `pyproject.toml`, `ext/pyproject.toml` and `README.md` (anyone can open this PR, not just maintainers): - Version number `major.minor.patch` is formed as follows: `major.minor` version must match newest supported Django release. `patch` is sequentially increasing for each stubs release. Reset to `0` if `major.minor` was updated. - Update the `version =` value within `[project]` section in **both** `pyproject.toml` files. The versions must be in sync. - Update `django-stubs-ext>=` dependency in root `pyproject.toml` to the same version number. - Run `uv lock` to update lockfile - Add a new row at the top of ['Version compatibility' table in README.md](README.md#version-compatibility). - Use pull request title "Version x.y.z release" by convention. - Add the correct classifiers to `classifiers =` if support is added for a new Python or Django version 2. Ensure the CI succeeds. A maintainer must merge this PR. If it's just a version bump, no need to wait for a second maintainer's approval. 3. A maintainer must [сreate a new GitHub release](https://github.com/typeddjango/django-stubs/releases/new): - Under "Choose a tag" enter the new version number. Do **not** use `v` prefix. - Click "Generate release notes". - Look for merged PRs with the ['release notes reminder' label](https://github.com/typeddjango/django-stubs/issues?q=is%3Aopen+is%3Aissue+label%3A%22release+notes+reminder%22) and move them to a separate section at the top, so that they stand out. Remove the label from PRs. - Delete all release notes lines containing `by @pre-commit-ci` or `by @dependabot`, as these are irrelevant for our users. 4. Once you feel brave enough, click "Publish release". 5. Check that the [release workflow](https://github.com/typeddjango/django-stubs/actions/workflows/release.yml) succeeds. django-stubs-5.2.9/LICENSE.md000066400000000000000000000020631513401051600155300ustar00rootroot00000000000000Copyright (c) Maxim Kurnikov. All rights reserved. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. django-stubs-5.2.9/README.md000066400000000000000000000457561513401051600154230ustar00rootroot00000000000000django-stubs [![test](https://github.com/typeddjango/django-stubs/actions/workflows/test.yml/badge.svg?branch=master&event=push)](https://github.com/typeddjango/django-stubs/actions/workflows/test.yml) [![Checked with mypy](http://www.mypy-lang.org/static/mypy_badge.svg)](http://mypy-lang.org/) [![StackOverflow](https://shields.io/badge/ask-stackoverflow-orange?logo=stackoverflow)](https://stackoverflow.com/questions/tagged/django-stubs?tab=Active) This package contains [type stubs](https://www.python.org/dev/peps/pep-0561/) and a custom mypy plugin to provide more precise static types and type inference for Django framework. Django uses some Python "magic" that makes having precise types for some code patterns problematic. This is why we need this project. The final goal is to be able to get precise types for most common patterns. ## Installation ```bash pip install 'django-stubs[compatible-mypy]' ``` To make mypy aware of the plugin, you need to add ```ini [mypy] plugins = mypy_django_plugin.main [mypy.plugins.django-stubs] django_settings_module = "myproject.settings" ``` in your `mypy.ini` or `setup.cfg` [file](https://mypy.readthedocs.io/en/latest/config_file.html). [pyproject.toml](https://mypy.readthedocs.io/en/stable/config_file.html#using-a-pyproject-toml-file) configurations are also supported: ```toml [tool.mypy] plugins = ["mypy_django_plugin.main"] [tool.django-stubs] django_settings_module = "myproject.settings" ``` Two things happening here: 1. We need to explicitly list our plugin to be loaded by `mypy` 2. You can either specify `django_settings_module` as seen above, or let `django_stubs` use the `DJANGO_SETTINGS_MODULE` variable from your environment. This fully working [typed boilerplate](https://github.com/wemake-services/wemake-django-template) can serve you as an example. ## Version compatibility We rely on different `django` and `mypy` versions: | django-stubs | Mypy version | Django version | Django partial support | Python version | |----------------|--------------|----------------|------------------------|----------------| | 5.2.9 | 1.13 - 1.19 | 5.2 | 5.1, 5.0 | 3.10 - 3.13 | | 5.2.8 | 1.13 - 1.19 | 5.2 | 5.1, 5.0 | 3.10 - 3.13 | | 5.2.7 | 1.13 - 1.18 | 5.2 | 5.1, 5.0 | 3.10 - 3.13 | | 5.2.6 | 1.13 - 1.18 | 5.2 | 5.1, 5.0 | 3.10 - 3.13 | | 5.2.5 | 1.13 - 1.18 | 5.2 | 5.1, 5.0 | 3.10 - 3.13 | | 5.2.4 | 1.13 - 1.18 | 5.2 | 5.1, 5.0 | 3.10 - 3.13 | | 5.2.3 | 1.13 - 1.18 | 5.2 | 5.1, 5.0 | 3.10 - 3.13 | | 5.2.2 | 1.13 - 1.17 | 5.2 | 5.1, 5.0 | 3.10 - 3.13 | | 5.2.1 | 1.13 - 1.16 | 5.2 | 5.1, 5.0 | 3.10 - 3.13 | | 5.2.0 | 1.13+ | 5.2 | 5.1, 5.0 | 3.10 - 3.13 | | 5.1.3 | 1.13+ | 5.1 | 4.2 | 3.9 - 3.13 | | 5.1.2 | 1.13+ | 5.1 | 4.2 | 3.9 - 3.13 | | 5.1.1 | 1.13.x | 5.1 | 4.2 | 3.8 - 3.12 | | 5.1.0 | 1.11.x | 5.1 | 4.2 | 3.8 - 3.12 | | 5.0.4 | 1.11.x | 5.0 | 4.2 | 3.8 - 3.12 | | 5.0.3 | 1.11.x | 5.0 | 4.2 | 3.8 - 3.12 | | 5.0.2 | 1.10.x | 5.0 | 4.2 | 3.8 - 3.12 | | 5.0.1 | 1.10.x | 5.0 | 4.2 | 3.8 - 3.12 | | 5.0.0 | 1.10.x | 5.0 | 4.2, 4.1 | 3.8 - 3.12 | | 4.2.7 | 1.7.x | 4.2 | 4.1, 3.2 | 3.8 - 3.12 | | 4.2.6 | 1.6.x | 4.2 | 4.1, 3.2 | 3.8 - 3.12 | | 4.2.5 | 1.6.x | 4.2 | 4.1, 3.2 | 3.8 - 3.12 | | 4.2.4 | 1.5.x | 4.2 | 4.1, 3.2 | 3.8 - 3.11 | | 4.2.3 | 1.4.x | 4.2 | 4.1, 3.2 | 3.8 - 3.11 | | 4.2.2 | 1.4.x | 4.2 | 4.1, 3.2 | 3.8 - 3.11 | | 4.2.1 | 1.3.x | 4.2 | 4.1, 3.2 | 3.8 - 3.11 | | 4.2.0 | 1.2.x | 4.2 | 4.1, 4.0, 3.2 | 3.7 - 3.11 | | 1.16.0 | 1.1.x | 4.1 | 4.0, 3.2 | 3.7 - 3.11 | | 1.15.0 | 1.0.x | 4.1 | 4.0, 3.2 | 3.7 - 3.11 | | 1.14.0 | 0.990+ | 4.1 | 4.0, 3.2 | 3.7 - 3.11 | What "partial" support means, and why we don't pin to the exact Django/mypy version, is explained in https://github.com/typeddjango/django-stubs/discussions/2101#discussioncomment-9276632. ## Features ### Type checking of Model Meta attributes > [!NOTE] > If you are using the mypy plugin and have `django_stub_ext` installed, your model `Meta` classes > will be automatically type-checked without further changes. By inheriting from the `TypedModelMeta` class, you can ensure you're using correct types for attributes: ```python from django.db import models from django_stubs_ext.db.models import TypedModelMeta class MyModel(models.Model): example = models.CharField(max_length=100) class Meta(TypedModelMeta): ordering = ["example"] constraints = [ models.UniqueConstraint(fields=["example"], name="unique_example"), ] ``` ### Other typed base classes * `django_stubs_ext.db.router.TypedDatabaseRouter` can be used as base when implementing custom database routers. ## Settings django-stubs has a few settings, which you can list in: * `pyproject.toml`, under the table `[tool.django-stubs]` * `mypy.ini` under the table `[mypy.plugins.django-stubs]` The supported settings are: - `django_settings_module`, a string, default to `os.getenv(DJANGO_SETTINGS_MODULE)`. Specify the import path of your settings module, the same as Django’s [`DJANGO_SETTINGS_MODULE` environment variable](https://docs.djangoproject.com/en/stable/topics/settings/#designating-the-settings). - `strict_settings`, a boolean, default `true`. Set to `false` if using dynamic settings, as [described below](https://github.com/typeddjango/django-stubs#how-to-use-a-custom-library-to-handle-django-settings). - `strict_model_abstract_attrs`, a boolean, default `true`. Set to `false` if you want to keep `.objects`, `.DoesNotExist`, and `.MultipleObjectsReturned` attributes on `models.Model` type. [See here why](https://github.com/typeddjango/django-stubs?tab=readme-ov-file#how-to-use-typemodel-annotation-with-objects-attribute) this is dangerous to do by default. ## FAQ ### Is this an official Django project? No, it is not. We are independent from Django at the moment. There's a [proposal](https://github.com/django/deps/pull/65) to merge our project into the Django itself. You can show your support by liking the PR. ### Is it safe to use this in production? Yes, it is! This project does not affect your runtime at all. It only affects `mypy` type checking process. But, it does not make any sense to use this project without `mypy`. ### mypy crashes when I run it with this plugin installed The current implementation uses Django's runtime to extract information about models, so it might crash if your installed apps or `models.py` are broken. In other words, if your `manage.py runserver` crashes, mypy will crash too. You can also run `mypy` with [`--tb`](https://mypy.readthedocs.io/en/stable/command_line.html#cmdoption-mypy-show-traceback) option to get extra information about the error. ### I cannot use QuerySet or Manager with type annotations You can get a `TypeError: 'type' object is not subscriptable` when you will try to use `QuerySet[MyModel]`, `Manager[MyModel]` or some other Django-based Generic types. This happens because these Django classes do not support [`__class_getitem__`](https://www.python.org/dev/peps/pep-0560/#class-getitem) magic method in runtime. 1. You can go with our [`django_stubs_ext`](https://github.com/typeddjango/django-stubs/tree/master/ext) helper, that patches all the types we use as Generic in django. Install it: ```bash pip install django-stubs-ext # as a production dependency ``` And then place in your top-level settings: ```python import django_stubs_ext django_stubs_ext.monkeypatch() ``` You can add extra types to patch with `django_stubs_ext.monkeypatch(extra_classes=[YourDesiredType])` **If you use generic symbols in `django.contrib.auth.forms`**, you will have to do the monkeypatching manually in your first [`AppConfig.ready`](https://docs.djangoproject.com/en/5.2/ref/applications/#django.apps.AppConfig.ready). This is currently required because `django.contrib.auth.forms` cannot be imported until django is initialized. ```python import django_stubs_ext from django.apps import AppConfig class ClientsConfig(AppConfig): name = "clients" def ready(self) -> None: from django.contrib.auth.forms import SetPasswordMixin, SetUnusablePasswordMixin # For Django version prior to 5.1, use `extra_classes=[SetPasswordForm, AdminPasswordChangeForm]` instead. django_stubs_ext.monkeypatch(extra_classes=[SetPasswordMixin, SetUnusablePasswordMixin]) ``` 2. You can use strings instead: `'QuerySet[MyModel]'` and `'Manager[MyModel]'`, this way it will work as a type for `mypy` and as a regular `str` in runtime. ### How can I create a HttpRequest that's guaranteed to have an authenticated user? Django's built in [`HttpRequest`](https://docs.djangoproject.com/en/5.2/ref/request-response/#django.http.HttpRequest) has the attribute `user` that resolves to the type ```python Union[User, AnonymousUser] ``` where `User` is the user model specified by the `AUTH_USER_MODEL` setting. If you want a `HttpRequest` that you can type-annotate with where you know that the user is authenticated you can subclass the normal `HttpRequest` class like so: ```python from django.http import HttpRequest from my_user_app.models import MyUser class AuthenticatedHttpRequest(HttpRequest): user: MyUser ``` And then use `AuthenticatedHttpRequest` instead of the standard `HttpRequest` for when you know that the user is authenticated. For example in views using the `@login_required` decorator. ### Why am I getting incompatible return type errors on my custom managers? If you declare your custom managers without generics and override built-in methods you might see an error message about incompatible error messages, something like this: ```python from django.db import models class MyManager(model.Manager): def create(self, **kwargs) -> "MyModel": pass ``` will cause this error message: > error: Return type "MyModel" of "create" incompatible with return type "_T" in supertype "BaseManager" This is happening because the `Manager` class is generic, but without specifying generics the built-in manager methods are expected to return the generic type of the base manager, which is any model. To fix this issue you should declare your manager with your model as the type variable: ```python class MyManager(models.Manager["MyModel"]): ... ``` ### How do I annotate cases where I called QuerySet.annotate? Django-stubs provides a special type, `django_stubs_ext.WithAnnotations[Model, ]`, which indicates that the `Model` has been annotated, meaning it requires extra attributes on the model instance. You should provide a `TypedDict` of these attributes, e.g. `WithAnnotations[MyModel, MyTypedDict]`, to specify which annotated attributes are present. Currently, the mypy plugin can recognize that specific names were passed to `QuerySet.annotate` and include them in the type, but does not record the types of these attributes. The knowledge of the specific annotated fields is not yet used in creating more specific types for `QuerySet`'s `values`, `values_list`, or `filter` methods, however knowledge that the model was annotated _is_ used to create a broader type result type for `values`/`values_list`, and to allow `filter`ing on any field. ```python from typing import TypedDict from django_stubs_ext import WithAnnotations from django.db import models from django.db.models.expressions import Value class MyModel(models.Model): username = models.CharField(max_length=100) class MyTypedDict(TypedDict): foo: str def func(m: WithAnnotations[MyModel, MyTypedDict]) -> str: print(m.bar) # Error, since field "bar" is not in MyModel or MyTypedDict. return m.foo # OK, since we said field "foo" was allowed func(MyModel.objects.annotate(foo=Value("")).get(id=1)) # OK func(MyModel.objects.annotate(bar=Value("")).get(id=1)) # Error ``` ### Why am I getting incompatible argument type mentioning `_StrPromise`? The lazy translation functions of Django (such as `gettext_lazy`) return a `Promise` instead of `str`. These two types [cannot be used interchangeably](https://github.com/typeddjango/django-stubs/pull/1139#issuecomment-1232167698). The return type of these functions was therefore [changed](https://github.com/typeddjango/django-stubs/pull/689) to reflect that. If you encounter this error in your own code, you can either cast the `Promise` to `str` (causing the translation to be evaluated), or use the `StrPromise` or `StrOrPromise` types from `django-stubs-ext` in type hints. Which solution to choose depends depends on the particular case. See [working with lazy translation objects](https://docs.djangoproject.com/en/5.2/topics/i18n/translation/#working-with-lazy-translation-objects) in the Django documentation for more information. If this is reported on Django code, please report an issue or open a pull request to fix the type hints. ### How to use a custom library to handle Django settings? Using something like [`django-split-settings`](https://github.com/wemake-services/django-split-settings) or [`django-configurations`](https://github.com/jazzband/django-configurations) will make it hard for mypy to infer your settings. This might also be the case when using something like: ```python try: from .local_settings import * except Exception: pass ``` So, mypy would not like this code: ```python from django.conf import settings settings.CUSTOM_VALUE # E: 'Settings' object has no attribute 'CUSTOM_VALUE' ``` To handle this corner case we have a special setting `strict_settings` (`True` by default), you can switch it to `False` to always return `Any` and not raise any errors if runtime settings module has the given value, for example `pyproject.toml`: ```toml [tool.django-stubs] strict_settings = false ``` or `mypy.ini`: ```ini [mypy.plugins.django-stubs] strict_settings = false ``` And then: ```python # Works: reveal_type(settings.EXISTS_AT_RUNTIME) # N: Any # Errors: reveal_type(settings.MISSING) # E: 'Settings' object has no attribute 'MISSING' ``` ### How to use `type[Model]` annotation with `.objects` attribute? Let's say you have a function similar to this one, which accepts a model type and accesses its `.object` attribute: ```python from django.db import models def assert_zero_count(model_type: type[models.Model]) -> None: assert model_type.objects.count() == 0 ``` This code will raise an error from mypy: ``` error: "type[Model]" has no attribute "objects" [attr-defined] ``` It is a common problem: some `type[models.Model]` types won't have `.objects` available. Notable example: [abstract models](https://docs.djangoproject.com/en/5.2/topics/db/models/#abstract-base-classes). See [the reasoning here](https://github.com/typeddjango/django-stubs/issues/1684). So, instead for the general case you should write: ```python def assert_zero_count(model_type: type[models.Model]) -> None: assert model_type._default_manager.count() == 0 ``` Configurable with `strict_model_abstract_attrs = false` to skip removing `.objects`, `.DoesNotExist`, and `.MultipleObjectsReturned` attributes from `model.Model` if you are using our mypy plugin. Use this setting on your own risk, because it can hide valid errors. ### How to type a custom `models.Field`? > [!NOTE] > This require type generic support, see this section to enable it. Django `models.Field` (and subclasses) are generic types with two parameters: - `_ST`: type that can be used when setting a value - `_GT`: type that will be returned when getting a value When you create a subclass, you have two options depending on how strict you want the type to be for consumers of your custom field. 1. Generic subclass: ```python from typing import TypeVar, reveal_type from django.db import models _ST = TypeVar("_ST", contravariant=True) _GT = TypeVar("_GT", covariant=True) class MyIntegerField(models.IntegerField[_ST, _GT]): ... class User(models.Model): my_field = MyIntegerField() reveal_type(User().my_field) # N: Revealed type is "int" User().my_field = "12" # OK (because Django IntegerField allows str and will try to coerce it) ``` 2. Non-generic subclass (more strict): ```python from typing import reveal_type from django.db import models # This is a non-generic subclass being very explicit # that it expects only int when setting values. class MyStrictIntegerField(models.IntegerField[int, int]): ... class User(models.Model): my_field = MyStrictIntegerField() reveal_type(User().my_field) # N: Revealed type is "int" User().my_field = "12" # E: Incompatible types in assignment (expression has type "str", variable has type "int") ``` See mypy section on [generic classes subclasses](https://mypy.readthedocs.io/en/stable/generics.html#defining-subclasses-of-generic-classes). ## Related projects - [`awesome-python-typing`](https://github.com/typeddjango/awesome-python-typing) - Awesome list of all typing-related things in Python. - [`djangorestframework-stubs`](https://github.com/typeddjango/djangorestframework-stubs) - Stubs for Django REST Framework. - [`pytest-mypy-plugins`](https://github.com/typeddjango/pytest-mypy-plugins) - `pytest` plugin that we use for testing `mypy` stubs and plugins. - [`wemake-django-template`](https://github.com/wemake-services/wemake-django-template) - Create new typed Django projects in seconds. ## Contributing This project is open source and community driven. As such we encourage contributions big and small. You can contribute by doing any of the following: 1. Contribute code (e.g. improve stubs, add plugin capabilities, write tests etc) - to do so please follow the [contribution guide](./CONTRIBUTING.md). 2. Assist in code reviews and discussions in issues. 3. Identify bugs and issues and report these 4. Ask and answer questions on [StackOverflow](https://stackoverflow.com/questions/tagged/django-stubs) You can always also reach out in gitter to discuss your contributions! django-stubs-5.2.9/django-stubs/000077500000000000000000000000001513401051600165235ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/__init__.pyi000066400000000000000000000003401513401051600210020ustar00rootroot00000000000000from typing import Literal from .utils.version import get_version as get_version VERSION: tuple[int, int, int, Literal["alpha", "beta", "rc", "final"], int] __version__: str def setup(set_prefix: bool = ...) -> None: ... django-stubs-5.2.9/django-stubs/apps/000077500000000000000000000000001513401051600174665ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/apps/__init__.pyi000066400000000000000000000001571513401051600217530ustar00rootroot00000000000000from .config import AppConfig as AppConfig from .registry import apps as apps __all__ = ["AppConfig", "apps"] django-stubs-5.2.9/django-stubs/apps/config.pyi000066400000000000000000000021701513401051600214560ustar00rootroot00000000000000import types from collections.abc import Iterator from django.apps.registry import Apps from django.db.models.base import Model from django.utils.functional import _Getter, _StrOrPromise APPS_MODULE_NAME: str MODELS_MODULE_NAME: str class AppConfig: name: str module: types.ModuleType | None apps: Apps | None label: str verbose_name: _StrOrPromise path: str models_module: types.ModuleType | None # Default auto_field is a cached_property on the base, but is usually subclassed as a str # If not subclassing with a str, a type ignore[override] is needed models: dict[str, type[Model]] default: bool default_auto_field: str | _Getter[str] def __init__(self, app_name: str, app_module: types.ModuleType | None) -> None: ... @classmethod def create(cls, entry: str) -> AppConfig: ... def get_model(self, model_name: str, require_ready: bool = True) -> type[Model]: ... def get_models( self, include_auto_created: bool = False, include_swapped: bool = False ) -> Iterator[type[Model]]: ... def import_models(self) -> None: ... def ready(self) -> None: ... django-stubs-5.2.9/django-stubs/apps/registry.pyi000066400000000000000000000036701513401051600220670ustar00rootroot00000000000000import threading from collections.abc import Callable, Iterable from typing import Any from django.db.models.base import Model from .config import AppConfig class Apps: all_models: dict[str, dict[str, type[Model]]] app_configs: dict[str, AppConfig] stored_app_configs: list[Any] apps_ready: bool ready_event: threading.Event loading: bool _pending_operations: dict[tuple[str, str], list] models_ready: bool ready: bool def __init__(self, installed_apps: Iterable[AppConfig | str] | None = ()) -> None: ... def populate(self, installed_apps: Iterable[AppConfig | str] | None = None) -> None: ... def check_apps_ready(self) -> None: ... def check_models_ready(self) -> None: ... def get_app_configs(self) -> Iterable[AppConfig]: ... def get_app_config(self, app_label: str) -> AppConfig: ... # it's not possible to support it in plugin properly now def get_models(self, include_auto_created: bool = False, include_swapped: bool = False) -> list[type[Model]]: ... def get_model(self, app_label: str, model_name: str | None = None, require_ready: bool = True) -> type[Any]: ... def register_model(self, app_label: str, model: type[Model]) -> None: ... def is_installed(self, app_name: str) -> bool: ... def get_containing_app_config(self, object_name: str) -> AppConfig | None: ... def get_registered_model(self, app_label: str, model_name: str) -> type[Model]: ... def get_swappable_settings_name(self, to_string: str) -> str | None: ... def set_available_apps(self, available: Iterable[str]) -> None: ... def unset_available_apps(self) -> None: ... def set_installed_apps(self, installed: Iterable[str]) -> None: ... def unset_installed_apps(self) -> None: ... def clear_cache(self) -> None: ... def lazy_model_operation(self, function: Callable, *model_keys: Any) -> None: ... def do_pending_operations(self, model: type[Model]) -> None: ... apps: Apps django-stubs-5.2.9/django-stubs/conf/000077500000000000000000000000001513401051600174505ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/conf/__init__.pyi000066400000000000000000000030111513401051600217250ustar00rootroot00000000000000from typing import Any, Literal, type_check_only from django.utils.functional import LazyObject from typing_extensions import Self # explicit dependency on standard settings to make it loaded from . import global_settings # noqa: F401 ENVIRONMENT_VARIABLE: Literal["DJANGO_SETTINGS_MODULE"] DEFAULT_STORAGE_ALIAS: Literal["default"] STATICFILES_STORAGE_ALIAS: Literal["staticfiles"] # RemovedInDjango60Warning. FORMS_URLFIELD_ASSUME_HTTPS_DEPRECATED_MSG: str # required for plugin to be able to distinguish this specific instance of LazySettings from others @type_check_only class _DjangoConfLazyObject(LazyObject): def __getattr__(self, item: Any) -> Any: ... class LazySettings(_DjangoConfLazyObject): SETTINGS_MODULE: str @property def configured(self) -> bool: ... def configure(self, default_settings: Any = ..., **options: Any) -> None: ... settings: LazySettings class Settings: SETTINGS_MODULE: str def __init__(self, settings_module: str) -> None: ... def is_overridden(self, setting: str) -> bool: ... class UserSettingsHolder: SETTINGS_MODULE: None def __init__(self, default_settings: Any) -> None: ... def __getattr__(self, name: str) -> Any: ... def __setattr__(self, name: str, value: Any) -> None: ... def __delattr__(self, name: str) -> None: ... def is_overridden(self, setting: str) -> bool: ... class SettingsReference(str): def __new__(self, value: Any, setting_name: str) -> Self: ... def __init__(self, value: str, setting_name: str) -> None: ... django-stubs-5.2.9/django-stubs/conf/global_settings.pyi000066400000000000000000000436731513401051600233700ustar00rootroot00000000000000from collections.abc import Sequence from re import Pattern # This is defined here as a do-nothing function because we can't import # django.utils.translation -- that module depends on the settings. from typing import Any, Literal, Protocol, TypeAlias, TypedDict, type_check_only from django.utils.functional import _StrOrPromise from typing_extensions import NotRequired from django_stubs_ext.settings import TemplatesSetting _Admins: TypeAlias = list[tuple[str, str]] #################### # CORE # #################### DEBUG: bool # Whether the framework should propagate raw exceptions rather than catching # them. This is useful under some testing situations and should never be used # on a live site. DEBUG_PROPAGATE_EXCEPTIONS: bool # People who get code error notifications. # In the format [('Full Name', 'email@example.com'), ('Full Name', 'anotheremail@example.com')] ADMINS: _Admins # List of IP addresses, as strings, that: # * See debug comments, when DEBUG is true # * Receive x-headers INTERNAL_IPS: list[str] # Hosts/domain names that are valid for this site. # "*" matches anything, ".example.com" matches example.com and all subdomains ALLOWED_HOSTS: list[str] # Local time zone for this installation. All choices can be found here: # https://en.wikipedia.org/wiki/List_of_tz_zones_by_name (although not all # systems may support all possibilities). When USE_TZ is True, this is # interpreted as the default user time zone. TIME_ZONE: str # If you set this to True, Django will use timezone-aware datetimes. USE_TZ: bool # Language code for this installation. All choices can be found here: # http://www.i18nguy.com/unicode/language-identifiers.html LANGUAGE_CODE: str # Languages we provide translations for, out of the box. LANGUAGES: list[tuple[str, str]] # Languages using BiDi (right-to-left) layout LANGUAGES_BIDI: list[str] # If you set this to False, Django will make some optimizations so as not # to load the internationalization machinery. USE_I18N: bool LOCALE_PATHS: list[str] # Settings for language cookie LANGUAGE_COOKIE_NAME: str LANGUAGE_COOKIE_AGE: int | None LANGUAGE_COOKIE_DOMAIN: str | None LANGUAGE_COOKIE_PATH: str LANGUAGE_COOKIE_HTTPONLY: bool LANGUAGE_COOKIE_SAMESITE: Literal["Lax", "Strict", "None", False] | None LANGUAGE_COOKIE_SECURE: bool # Not-necessarily-technical managers of the site. They get broken link # notifications and other various emails. MANAGERS: _Admins # Default charset to use for all HttpResponse objects, if a # MIME type isn't manually specified. These are used to construct the # Content-Type header. DEFAULT_CHARSET: str # `SERIALIZATION_MODULES` is a dictionary (`dict[str, str]`) of modules containing serializer definitions. # Because Django doesn't define it, we can't provide its type here. Use `getattr` for type-safe access # e.g. `getattr(settings, "SERIALIZATION_MODULES")` # Email address that error messages come from. SERVER_EMAIL: str # Database connection info. If left empty, will default to the dummy backend. DATABASES: dict[str, dict[str, Any]] # Classes used to implement DB routing behavior. @type_check_only class Router(Protocol): def allow_migrate(self, db: str, app_label: str, **hints: Any) -> bool | None: ... DATABASE_ROUTERS: list[str | Router] # The email backend to use. For possible shortcuts see django.core.mail. # The default is to use the SMTP backend. # Third-party backends can be specified by providing a Python path # to a module that defines an EmailBackend class. EMAIL_BACKEND: str # `EMAIL_FILE_PATH` is a `str` indicating the directory used by the file email backend to store output files. # Because Django doesn't define it, we can't provide its type here. Use `getattr` for type-safe access # e.g. `getattr(settings, "EMAIL_FILE_PATH")` # Host for sending email. EMAIL_HOST: str # Port for sending email. EMAIL_PORT: int # Whether to send SMTP 'Date' header in the local time zone or in UTC. EMAIL_USE_LOCALTIME: bool # Optional SMTP authentication information for EMAIL_HOST. EMAIL_HOST_USER: str EMAIL_HOST_PASSWORD: str EMAIL_USE_TLS: bool EMAIL_USE_SSL: bool EMAIL_SSL_CERTFILE: str | None EMAIL_SSL_KEYFILE: str | None EMAIL_TIMEOUT: int | None # List of strings representing installed apps. INSTALLED_APPS: list[str] TEMPLATES: list[TemplatesSetting] # Default form rendering class. FORM_RENDERER: str # RemovedInDjango60Warning: It's a transitional setting helpful in early # adoption of "https" as the new default value of forms.URLField.assume_scheme. # Set to True to assume "https" during the Django 5.x release cycle. FORMS_URLFIELD_ASSUME_HTTPS: bool # Default email address to use for various automated correspondence from # the site managers. DEFAULT_FROM_EMAIL: str # Subject-line prefix for email messages send with django.core.mail.mail_admins # or ...mail_managers. Make sure to include the trailing space. EMAIL_SUBJECT_PREFIX: str # Whether to append trailing slashes to URLs. APPEND_SLASH: bool # Whether to prepend the "www." subdomain to URLs that don't have it. PREPEND_WWW: bool # Override the server-derived value of SCRIPT_NAME FORCE_SCRIPT_NAME: str | None # List of compiled regular expression objects representing User-Agent strings # that are not allowed to visit any page, systemwide. Use this for bad # robots/crawlers. Here are a few examples: # import re # DISALLOWED_USER_AGENTS = [ # re.compile(r'^NaverBot.*'), # re.compile(r'^EmailSiphon.*'), # re.compile(r'^SiteSucker.*'), # re.compile(r'^sohu-search'), # ] DISALLOWED_USER_AGENTS: list[Pattern[str]] ABSOLUTE_URL_OVERRIDES: dict[str, Any] # List of compiled regular expression objects representing URLs that need not # be reported by BrokenLinkEmailsMiddleware. Here are a few examples: # import re # IGNORABLE_404_URLS = [ # re.compile(r'^/apple-touch-icon.*\.png$'), # re.compile(r'^/favicon.ico$'), # re.compile(r'^/robots.txt$'), # re.compile(r'^/phpmyadmin/'), # re.compile(r'\.(cgi|php|pl)$'), # ] IGNORABLE_404_URLS: list[Pattern[str]] # `ROOT_URLCONF` is a string representing the full Python import path to the root `URLconf`. # Because Django doesn't define it, we can't provide its type here. Use `getattr` for type-safe access # e.g. `getattr(settings, "ROOT_URLCONF")` # A secret key for this particular Django installation. Used in secret-key # hashing algorithms. Set this in your settings, or Django will complain # loudly. SECRET_KEY: str | bytes # A list of fallback secret keys for a particular Django installation. These # are used to allow rotation of the SECRET_KEY. SECRET_KEY_FALLBACKS: list[str | bytes] STORAGES: dict[str, dict[str, Any]] # Absolute filesystem path to the directory that will hold user-uploaded files. # Example: "/var/www/example.com/media/" MEDIA_ROOT: str # URL that handles the media served from MEDIA_ROOT. # Examples: "http://example.com/media/", "http://media.example.com/" MEDIA_URL: str # `SITE_ID` is the ID, as an integer, of the current site in the `django_site` database table. # Because Django doesn't define it, we can't provide its type here. Use `getattr` for type-safe access # e.g. `getattr(settings, "SITE_ID")` # Absolute path to the directory static files should be collected to. # Example: "/var/www/example.com/static/" STATIC_ROOT: str | None # URL that handles the static files served from STATIC_ROOT. # Example: "http://example.com/static/", "http://static.example.com/" STATIC_URL: str | None # List of upload handler classes to be applied in order. FILE_UPLOAD_HANDLERS: list[str] # Maximum size, in bytes, of a request before it will be streamed to the # file system instead of into memory. FILE_UPLOAD_MAX_MEMORY_SIZE: int # i.e. 2.5 MB # Maximum size in bytes of request data (excluding file uploads) that will be # read before a SuspiciousOperation (RequestDataTooBig) is raised. DATA_UPLOAD_MAX_MEMORY_SIZE: int # i.e. 2.5 MB # Maximum number of GET/POST parameters that will be read before a # SuspiciousOperation (TooManyFieldsSent) is raised. DATA_UPLOAD_MAX_NUMBER_FIELDS: int # Maximum number of files encoded in a multipart upload that will be read # before a SuspiciousOperation (TooManyFilesSent) is raised. DATA_UPLOAD_MAX_NUMBER_FILES: int # Directory in which upload streamed files will be temporarily saved. A value of # `None` will make Django use the operating system's default temporary directory # (i.e. "/tmp" on *nix systems). FILE_UPLOAD_TEMP_DIR: str | None # The numeric mode to set newly-uploaded files to. The value should be a mode # you'd pass directly to os.chmod; see https://docs.python.org/library/os.html#files-and-directories. FILE_UPLOAD_PERMISSIONS: int # The numeric mode to assign to newly-created directories, when uploading files. # The value should be a mode as you'd pass to os.chmod; # see https://docs.python.org/library/os.html#files-and-directories. FILE_UPLOAD_DIRECTORY_PERMISSIONS: int | None # Python module path where user will place custom format definition. # The directory where this setting is pointing should contain subdirectories # named as the locales, containing a formats.py file # (i.e. "myproject.locale" for myproject/locale/en/formats.py etc. use) FORMAT_MODULE_PATH: str | None # Default formatting for date objects. See all available format strings here: # https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date DATE_FORMAT: str # Default formatting for datetime objects. See all available format strings here: # https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date DATETIME_FORMAT: str # Default formatting for time objects. See all available format strings here: # https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date TIME_FORMAT: str # Default formatting for date objects when only the year and month are relevant. # See all available format strings here: # https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date YEAR_MONTH_FORMAT: str # Default formatting for date objects when only the month and day are relevant. # See all available format strings here: # https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date MONTH_DAY_FORMAT: str # Default short formatting for date objects. See all available format strings here: # https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date SHORT_DATE_FORMAT: str # Default short formatting for datetime objects. # See all available format strings here: # https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date SHORT_DATETIME_FORMAT: str # Default formats to be used when parsing dates from input boxes, in order # See all available format string here: # https://docs.python.org/library/datetime.html#strftime-behavior # * Note that these format strings are different from the ones to display dates DATE_INPUT_FORMATS: list[str] # Default formats to be used when parsing times from input boxes, in order # See all available format string here: # https://docs.python.org/library/datetime.html#strftime-behavior # * Note that these format strings are different from the ones to display dates TIME_INPUT_FORMATS: list[str] # '14:30:59' # '14:30:59.000200' # '14:30' # Default formats to be used when parsing dates and times from input boxes, # in order # See all available format string here: # https://docs.python.org/library/datetime.html#strftime-behavior # * Note that these format strings are different from the ones to display dates DATETIME_INPUT_FORMATS: list[str] # First day of week, to be used on calendars # 0 means Sunday, 1 means Monday... FIRST_DAY_OF_WEEK: int # Decimal separator symbol DECIMAL_SEPARATOR: str # Boolean that sets whether to add thousand separator when formatting numbers USE_THOUSAND_SEPARATOR: bool # Number of digits that will be together, when splitting them by # THOUSAND_SEPARATOR. 0 means no grouping, 3 means splitting by thousands... NUMBER_GROUPING: int # Thousand separator symbol THOUSAND_SEPARATOR: str # The tablespaces to use for each model when not specified otherwise. DEFAULT_TABLESPACE: str DEFAULT_INDEX_TABLESPACE: str # Default primary key field type. DEFAULT_AUTO_FIELD: str # Default X-Frame-Options header value X_FRAME_OPTIONS: str USE_X_FORWARDED_HOST: bool USE_X_FORWARDED_PORT: bool # The Python dotted path to the WSGI application that Django's internal server # (runserver) will use. If `None`, the return value of # 'django.core.wsgi.get_wsgi_application' is used, thus preserving the same # behavior as previous versions of Django. Otherwise this should point to an # actual WSGI application object. WSGI_APPLICATION: str | None # If your Django app is behind a proxy that sets a header to specify secure # connections, AND that proxy ensures that user-submitted headers with the # same name are ignored (so that people can't spoof it), set this value to # a tuple of (header_name, header_value). For any requests that come in with # that header/value, request.is_secure() will return True. # WARNING! Only set this if you fully understand what you're doing. Otherwise, # you may be opening yourself up to a security risk. SECURE_PROXY_SSL_HEADER: tuple[str, str] | None ############## # MIDDLEWARE # ############## # List of middleware to use. Order is important; in the request phase, these # middleware will be applied in the order given, and in the response # phase the middleware will be applied in reverse order. MIDDLEWARE: list[str] ############ # SESSIONS # ############ # Cache to store session data if using the cache session backend. SESSION_CACHE_ALIAS: str # Cookie name. This can be whatever you want. SESSION_COOKIE_NAME: str # Age of cookie, in seconds (default: 2 weeks). SESSION_COOKIE_AGE: int # A string like "example.com", or None for standard domain cookie. SESSION_COOKIE_DOMAIN: str | None # Whether the session cookie should be secure (https:// only). SESSION_COOKIE_SECURE: bool # The path of the session cookie. SESSION_COOKIE_PATH: str # Whether to use the non-RFC standard httpOnly flag (IE, FF3+, others) SESSION_COOKIE_HTTPONLY: bool # Whether to set the flag restricting cookie leaks on cross-site requests. # This can be 'Lax', 'Strict', 'None', or False to disable the flag. SESSION_COOKIE_SAMESITE: Literal["Lax", "Strict", "None", False] # Whether to save the session data on every request. SESSION_SAVE_EVERY_REQUEST: bool # Whether a user's session cookie expires when the Web browser is closed. SESSION_EXPIRE_AT_BROWSER_CLOSE: bool # The module to store session data SESSION_ENGINE: str # Directory to store session files if using the file session module. If None, # the backend will use a sensible default. SESSION_FILE_PATH: str | None # class to serialize session data SESSION_SERIALIZER: str ######### # CACHE # ######### # The cache backends to use. CACHES: dict[str, dict[str, Any]] CACHE_MIDDLEWARE_KEY_PREFIX: str CACHE_MIDDLEWARE_SECONDS: int CACHE_MIDDLEWARE_ALIAS: str ################## # AUTHENTICATION # ################## AUTH_USER_MODEL: str AUTHENTICATION_BACKENDS: Sequence[str] LOGIN_URL: _StrOrPromise LOGIN_REDIRECT_URL: _StrOrPromise LOGOUT_REDIRECT_URL: _StrOrPromise | None # The number of seconds a password reset link is valid for PASSWORD_RESET_TIMEOUT: int # the first hasher in this list is the preferred algorithm. any # password using different algorithms will be converted automatically # upon login PASSWORD_HASHERS: list[str] @type_check_only class _AuthPasswordValidatorsDict(TypedDict): NAME: str OPTIONS: NotRequired[dict[str, Any]] AUTH_PASSWORD_VALIDATORS: list[_AuthPasswordValidatorsDict] ########### # SIGNING # ########### SIGNING_BACKEND: str ######## # CSRF # ######## # Dotted path to callable to be used as view when a request is # rejected by the CSRF middleware. CSRF_FAILURE_VIEW: str # Settings for CSRF cookie. CSRF_COOKIE_NAME: str CSRF_COOKIE_AGE: int CSRF_COOKIE_DOMAIN: str | None CSRF_COOKIE_PATH: str CSRF_COOKIE_SECURE: bool CSRF_COOKIE_HTTPONLY: bool CSRF_COOKIE_SAMESITE: Literal["Lax", "Strict", "None", False] CSRF_HEADER_NAME: str CSRF_TRUSTED_ORIGINS: list[str] CSRF_USE_SESSIONS: bool ############ # MESSAGES # ############ # Class to use as messages backend MESSAGE_STORAGE: str # Default values of MESSAGE_LEVEL and MESSAGE_TAGS are defined within # django.contrib.messages to avoid imports in this settings file. ########### # LOGGING # ########### # The callable to use to configure logging LOGGING_CONFIG: str # Custom logging configuration. LOGGING: dict[str, Any] # Default exception reporter class used in case none has been # specifically assigned to the HttpRequest instance. DEFAULT_EXCEPTION_REPORTER: str # Default exception reporter filter class used in case none has been # specifically assigned to the HttpRequest instance. DEFAULT_EXCEPTION_REPORTER_FILTER: str ########### # TESTING # ########### # The name of the class to use to run the test suite TEST_RUNNER: str # Apps that don't need to be serialized at test database creation time # (only apps with migrations are to start with) TEST_NON_SERIALIZED_APPS: list[str] ############ # FIXTURES # ############ # The list of directories to search for fixtures FIXTURE_DIRS: list[str] ############### # STATICFILES # ############### # A list of locations of additional static files STATICFILES_DIRS: list[str] # List of finder classes that know how to find static files in # various locations. STATICFILES_FINDERS: list[str] ############## # MIGRATIONS # ############## # Migration module overrides for apps, by app label. MIGRATION_MODULES: dict[str, str | None] ################# # SYSTEM CHECKS # ################# # List of all issues generated by system checks that should be silenced. Light # issues like warnings, infos or debugs will not generate a message. Silencing # serious issues like errors and criticals does not result in hiding the # message, but Django will not stop you from e.g. running server. SILENCED_SYSTEM_CHECKS: list[str] ####################### # SECURITY MIDDLEWARE # ####################### SECURE_CONTENT_TYPE_NOSNIFF: bool SECURE_CROSS_ORIGIN_OPENER_POLICY: str SECURE_HSTS_INCLUDE_SUBDOMAINS: bool SECURE_HSTS_PRELOAD: bool SECURE_HSTS_SECONDS: int SECURE_REDIRECT_EXEMPT: list[str] SECURE_REFERRER_POLICY: str SECURE_SSL_HOST: str | None SECURE_SSL_REDIRECT: bool django-stubs-5.2.9/django-stubs/conf/locale/000077500000000000000000000000001513401051600207075ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/conf/locale/__init__.pyi000066400000000000000000000000621513401051600231670ustar00rootroot00000000000000from typing import Any LANG_INFO: dict[str, Any] django-stubs-5.2.9/django-stubs/conf/urls/000077500000000000000000000000001513401051600204355ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/conf/urls/__init__.pyi000066400000000000000000000004571513401051600227250ustar00rootroot00000000000000from django.urls import include as include from django.views import defaults __all__ = ["handler400", "handler403", "handler404", "handler500", "include"] handler400 = defaults.bad_request handler403 = defaults.permission_denied handler404 = defaults.page_not_found handler500 = defaults.server_error django-stubs-5.2.9/django-stubs/conf/urls/i18n.pyi000066400000000000000000000003471513401051600217430ustar00rootroot00000000000000from django.urls import _AnyURL def i18n_patterns(*urls: _AnyURL, prefix_default_language: bool = ...) -> list[_AnyURL]: ... def is_language_prefix_patterns_used(urlconf: str) -> tuple[bool, bool]: ... urlpatterns: list[_AnyURL] django-stubs-5.2.9/django-stubs/conf/urls/static.pyi000066400000000000000000000003011513401051600224410ustar00rootroot00000000000000from collections.abc import Callable from typing import Any from django.urls.resolvers import URLPattern def static(prefix: str, view: Callable = ..., **kwargs: Any) -> list[URLPattern]: ... django-stubs-5.2.9/django-stubs/contrib/000077500000000000000000000000001513401051600201635ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/contrib/__init__.pyi000066400000000000000000000000001513401051600224330ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/contrib/admin/000077500000000000000000000000001513401051600212535ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/contrib/admin/__init__.pyi000066400000000000000000000032441513401051600235400ustar00rootroot00000000000000from . import checks as checks from .decorators import action as action from .decorators import display as display from .decorators import register as register from .filters import AllValuesFieldListFilter as AllValuesFieldListFilter from .filters import BooleanFieldListFilter as BooleanFieldListFilter from .filters import ChoicesFieldListFilter as ChoicesFieldListFilter from .filters import DateFieldListFilter as DateFieldListFilter from .filters import EmptyFieldListFilter as EmptyFieldListFilter from .filters import FieldListFilter as FieldListFilter from .filters import ListFilter as ListFilter from .filters import RelatedFieldListFilter as RelatedFieldListFilter from .filters import RelatedOnlyFieldListFilter as RelatedOnlyFieldListFilter from .filters import SimpleListFilter as SimpleListFilter from .options import HORIZONTAL as HORIZONTAL from .options import VERTICAL as VERTICAL from .options import ModelAdmin as ModelAdmin from .options import ShowFacets as ShowFacets from .options import StackedInline as StackedInline from .options import TabularInline as TabularInline from .sites import AdminSite as AdminSite from .sites import site as site def autodiscover() -> None: ... __all__ = [ "HORIZONTAL", "VERTICAL", "AdminSite", "AllValuesFieldListFilter", "BooleanFieldListFilter", "ChoicesFieldListFilter", "DateFieldListFilter", "EmptyFieldListFilter", "FieldListFilter", "ListFilter", "ModelAdmin", "RelatedFieldListFilter", "RelatedOnlyFieldListFilter", "ShowFacets", "SimpleListFilter", "StackedInline", "TabularInline", "action", "autodiscover", "display", "register", "site", ] django-stubs-5.2.9/django-stubs/contrib/admin/actions.pyi000066400000000000000000000004711513401051600234400ustar00rootroot00000000000000from django.contrib.admin.options import ModelAdmin from django.db.models.query import QuerySet from django.http.request import HttpRequest from django.template.response import TemplateResponse def delete_selected(modeladmin: ModelAdmin, request: HttpRequest, queryset: QuerySet) -> TemplateResponse | None: ... django-stubs-5.2.9/django-stubs/contrib/admin/apps.pyi000066400000000000000000000002101513401051600227320ustar00rootroot00000000000000from django.apps import AppConfig class SimpleAdminConfig(AppConfig): default_site: str class AdminConfig(SimpleAdminConfig): ... django-stubs-5.2.9/django-stubs/contrib/admin/checks.pyi000066400000000000000000000020661513401051600232420ustar00rootroot00000000000000from collections.abc import Sequence from typing import Any from django.apps.config import AppConfig from django.contrib.admin.options import BaseModelAdmin from django.core.checks.messages import CheckMessage def check_admin_app(app_configs: Sequence[AppConfig] | None, **kwargs: Any) -> list[CheckMessage]: ... def check_dependencies(**kwargs: Any) -> list[CheckMessage]: ... class BaseModelAdminChecks: def check(self, admin_obj: BaseModelAdmin, **kwargs: Any) -> list[CheckMessage]: ... class ModelAdminChecks(BaseModelAdminChecks): def check(self, admin_obj: BaseModelAdmin, **kwargs: Any) -> list[CheckMessage]: ... class InlineModelAdminChecks(BaseModelAdminChecks): def check(self, inline_obj: BaseModelAdmin, **kwargs: Any) -> list[CheckMessage]: ... # type: ignore[override] def must_be(type: Any, option: Any, obj: Any, id: Any) -> list[CheckMessage]: ... def must_inherit_from(parent: Any, option: Any, obj: Any, id: Any) -> list[CheckMessage]: ... def refer_to_missing_field(field: Any, option: Any, obj: Any, id: Any) -> list[CheckMessage]: ... django-stubs-5.2.9/django-stubs/contrib/admin/decorators.pyi000066400000000000000000000025641513401051600241520ustar00rootroot00000000000000from collections.abc import Callable, Sequence from typing import Any, TypeVar, overload from django.contrib.admin import ModelAdmin from django.contrib.admin.sites import AdminSite from django.db.models.base import Model from django.db.models.expressions import BaseExpression, Combinable from django.utils.functional import _StrOrPromise _ModelAdmin = TypeVar("_ModelAdmin", bound=ModelAdmin[Any]) _F = TypeVar("_F", bound=Callable[..., Any]) @overload def action( function: _F, *, permissions: Sequence[str] | None = ..., description: _StrOrPromise | None = ..., ) -> _F: ... @overload def action( function: None = None, *, permissions: Sequence[str] | None = ..., description: _StrOrPromise | None = ..., ) -> Callable[[_F], _F]: ... @overload def display( function: _F, *, boolean: bool | None = ..., ordering: str | Combinable | BaseExpression | None = ..., description: _StrOrPromise | None = ..., empty_value: str | None = ..., ) -> _F: ... @overload def display( function: None = None, *, boolean: bool | None = ..., ordering: str | Combinable | BaseExpression | None = ..., description: _StrOrPromise | None = ..., empty_value: str | None = ..., ) -> Callable[[_F], _F]: ... def register( *models: type[Model], site: AdminSite | None = ... ) -> Callable[[type[_ModelAdmin]], type[_ModelAdmin]]: ... django-stubs-5.2.9/django-stubs/contrib/admin/exceptions.pyi000066400000000000000000000003731513401051600241620ustar00rootroot00000000000000from django.core.exceptions import SuspiciousOperation class DisallowedModelAdminLookup(SuspiciousOperation): ... class DisallowedModelAdminToField(SuspiciousOperation): ... class AlreadyRegistered(Exception): ... class NotRegistered(Exception): ... django-stubs-5.2.9/django-stubs/contrib/admin/filters.pyi000066400000000000000000000103311513401051600234440ustar00rootroot00000000000000from collections.abc import Callable, Iterable, Iterator from datetime import date, datetime from typing import Any, ClassVar from django.contrib.admin.options import ModelAdmin from django.contrib.admin.views.main import ChangeList from django.db.models.aggregates import Count from django.db.models.base import Model from django.db.models.fields import Field from django.db.models.fields.related import RelatedField from django.db.models.query import QuerySet from django.db.models.query_utils import Q from django.http.request import HttpRequest from django.utils.datastructures import _ListOrTuple from django.utils.functional import _StrOrPromise from django.utils.safestring import SafeString from typing_extensions import TypedDict class _ListFilterChoices(TypedDict): selected: bool query_string: str display: _StrOrPromise class ListFilter: title: _StrOrPromise | None template: str request: HttpRequest used_parameters: dict[str, bool | datetime | str] def __init__( self, request: HttpRequest, params: dict[str, str], model: type[Model], model_admin: ModelAdmin ) -> None: ... def has_output(self) -> bool: ... def choices(self, changelist: ChangeList) -> Iterator[_ListFilterChoices]: ... def queryset(self, request: HttpRequest, queryset: QuerySet) -> QuerySet | None: ... def expected_parameters(self) -> list[str | None]: ... class FacetsMixin: def get_facet_counts(self, pk_attname: str, filtered_qs: QuerySet[Model]) -> dict[str, Count]: ... def get_facet_queryset(self, changelist: ChangeList) -> dict[str, int]: ... class SimpleListFilter(FacetsMixin, ListFilter): parameter_name: str | None lookup_choices: list[tuple[str, _StrOrPromise]] def value(self) -> str | None: ... def lookups(self, request: HttpRequest, model_admin: ModelAdmin) -> Iterable[tuple[str, _StrOrPromise]] | None: ... class FieldListFilter(FacetsMixin, ListFilter): list_separator: ClassVar[str] field: Field field_path: str title: _StrOrPromise def __init__( self, field: Field, request: HttpRequest, params: dict[str, str], model: type[Model], model_admin: ModelAdmin, field_path: str, ) -> None: ... @classmethod def register( cls, test: Callable[[Field], Any], list_filter_class: type[FieldListFilter], take_priority: bool = ... ) -> None: ... @classmethod def create( cls, field: Field, request: HttpRequest, params: dict[str, str], model: type[Model], model_admin: ModelAdmin, field_path: str, ) -> FieldListFilter: ... class RelatedFieldListFilter(FieldListFilter): lookup_kwarg: str lookup_kwarg_isnull: str lookup_val: str | None lookup_val_isnull: str | None lookup_choices: list[tuple[str, _StrOrPromise]] lookup_title: _StrOrPromise empty_value_display: SafeString @property def include_empty_choice(self) -> bool: ... def field_admin_ordering( self, field: RelatedField, request: HttpRequest, model_admin: ModelAdmin ) -> _ListOrTuple[str]: ... def field_choices( self, field: RelatedField, request: HttpRequest, model_admin: ModelAdmin ) -> list[tuple[str, _StrOrPromise]]: ... class BooleanFieldListFilter(FieldListFilter): lookup_kwarg: str lookup_kwarg2: str lookup_val: str | None lookup_val2: str | None class ChoicesFieldListFilter(FieldListFilter): lookup_kwarg: str lookup_kwarg_isnull: str lookup_val: str | None lookup_val_isnull: str | None class DateFieldListFilter(FieldListFilter): field_generic: str date_params: dict[str, str] lookup_kwarg_since: str lookup_kwarg_until: str links: tuple[tuple[_StrOrPromise, dict[str, bool | date | datetime]], ...] lookup_kwarg_isnull: str class AllValuesFieldListFilter(FieldListFilter): lookup_kwarg: str lookup_kwarg_isnull: str lookup_val: str | None lookup_val_isnull: str | None empty_value_display: SafeString lookup_choices: QuerySet class RelatedOnlyFieldListFilter(RelatedFieldListFilter): ... class EmptyFieldListFilter(FieldListFilter): lookup_kwarg: str lookup_val: str | None def get_lookup_condition(self) -> Q: ... django-stubs-5.2.9/django-stubs/contrib/admin/forms.pyi000066400000000000000000000003551513401051600231270ustar00rootroot00000000000000from django.contrib.auth.forms import AuthenticationForm, PasswordChangeForm class AdminAuthenticationForm(AuthenticationForm): required_css_class: str class AdminPasswordChangeForm(PasswordChangeForm): required_css_class: str django-stubs-5.2.9/django-stubs/contrib/admin/helpers.pyi000066400000000000000000000131641513401051600234450ustar00rootroot00000000000000from collections.abc import Callable, Iterable, Iterator, Mapping, Sequence from typing import Any, type_check_only from django import forms from django.contrib.admin.options import ModelAdmin from django.db.models import Model from django.db.models.fields import AutoField from django.forms import BaseForm from django.forms.boundfield import BoundField from django.forms.models import ModelForm from django.forms.utils import ErrorDict, ErrorList from django.forms.widgets import Media, Widget from django.utils.functional import cached_property from django.utils.safestring import SafeString from typing_extensions import TypedDict ACTION_CHECKBOX_NAME: str class ActionForm(forms.Form): action: Any select_across: Any @type_check_only class _PrepopulatedDict(TypedDict): field: BoundField dependencies: list[BoundField] class AdminForm: prepopulated_fields: list[_PrepopulatedDict] model_admin: ModelAdmin | None readonly_fields: Sequence[str] form: ModelForm fieldsets: list[tuple[Any, dict[str, list[str]]]] def __init__( self, form: ModelForm, fieldsets: list[tuple[Any, dict[str, list[str]]]], prepopulated_fields: Mapping[str, Iterable[str]], readonly_fields: Sequence[str] | None = ..., model_admin: ModelAdmin | None = ..., ) -> None: ... def __iter__(self) -> Iterator[Fieldset]: ... @property def errors(self) -> ErrorDict: ... @property def non_field_errors(self) -> Callable[[], ErrorList]: ... @property def media(self) -> Media: ... class Fieldset: form: ModelForm classes: str description: str | None model_admin: ModelAdmin | None readonly_fields: Sequence[str] def __init__( self, form: ModelForm, name: Any | None = ..., readonly_fields: Sequence[str] = ..., fields: Sequence[str] = ..., classes: Iterable[str] = ..., description: str | None = ..., model_admin: ModelAdmin | None = ..., ) -> None: ... @cached_property def is_collapsible(self) -> bool: ... @property def media(self) -> Media: ... def __iter__(self) -> Iterator[Fieldline]: ... class Fieldline: form: ModelForm fields: Sequence[str] has_visible_field: bool model_admin: ModelAdmin | None readonly_fields: Sequence[str] def __init__( self, form: ModelForm, field: str | Sequence[str], readonly_fields: Sequence[str] | None = ..., model_admin: ModelAdmin | None = ..., ) -> None: ... def __iter__(self) -> Iterator[AdminField | AdminReadonlyField]: ... def errors(self) -> SafeString: ... class AdminField: field: BoundField is_first: bool is_checkbox: bool is_readonly: bool def __init__(self, form: ModelForm, field: str, is_first: bool) -> None: ... def label_tag(self) -> SafeString: ... def errors(self) -> SafeString: ... @type_check_only class _FieldDictT(TypedDict): name: str label: str help_text: str field: Callable[[Model], Any] | str class AdminReadonlyField: field: _FieldDictT form: ModelForm model_admin: ModelAdmin | None is_first: bool is_checkbox: bool is_readonly: bool empty_value_display: Any def __init__( self, form: ModelForm, field: Callable[[Model], Any] | str, is_first: bool, model_admin: ModelAdmin | None = ..., ) -> None: ... def label_tag(self) -> SafeString: ... def contents(self) -> SafeString: ... class InlineAdminFormSet: opts: Any formset: Any fieldsets: Any model_admin: ModelAdmin | None readonly_fields: Sequence[str] prepopulated_fields: dict[str, Any] classes: str has_add_permission: bool has_change_permission: bool has_delete_permission: bool has_view_permission: bool def __init__( self, inline: Any, formset: Any, fieldsets: Any, prepopulated_fields: dict[str, Any] | None = ..., readonly_fields: Sequence[str] | None = ..., model_admin: ModelAdmin | None = ..., has_add_permission: bool = ..., has_change_permission: bool = ..., has_delete_permission: bool = ..., has_view_permission: bool = ..., ) -> None: ... def __iter__(self) -> Iterator[InlineAdminForm]: ... def fields(self) -> Iterator[dict[str, dict[str, bool] | bool | Widget | str]]: ... def inline_formset_data(self) -> str: ... @property def forms(self) -> list[BaseForm]: ... @cached_property def is_collapsible(self) -> bool: ... def non_form_errors(self) -> ErrorList: ... @property def media(self) -> Media: ... class InlineAdminForm(AdminForm): formset: Any original: bool | None show_url: bool absolute_url: str | None def __init__( self, formset: Any, form: ModelForm, fieldsets: Any, prepopulated_fields: Any, original: bool | None, readonly_fields: Sequence[str] | None = ..., model_admin: ModelAdmin | None = ..., view_on_site_url: str | None = ..., ) -> None: ... def __iter__(self) -> Iterator[InlineFieldset]: ... def needs_explicit_pk_field(self) -> bool | AutoField: ... def pk_field(self) -> AdminField: ... def fk_field(self) -> AdminField: ... def deletion_field(self) -> AdminField: ... class InlineFieldset(Fieldset): formset: Any def __init__(self, formset: Any, *args: Any, **kwargs: Any) -> None: ... def __iter__(self) -> Iterator[Fieldline]: ... class AdminErrorList(forms.utils.ErrorList): def __init__(self, form: ModelForm, inline_formsets: Any) -> None: ... django-stubs-5.2.9/django-stubs/contrib/admin/migrations/000077500000000000000000000000001513401051600234275ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/contrib/admin/migrations/__init__.pyi000066400000000000000000000000001513401051600256770ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/contrib/admin/models.pyi000066400000000000000000000034271513401051600232670ustar00rootroot00000000000000from collections.abc import Iterable from typing import Any, ClassVar, Literal, overload from uuid import UUID from django.db import models from django.db.models.base import Model from typing_extensions import deprecated ADDITION: int CHANGE: int DELETION: int ACTION_FLAG_CHOICES: Any class LogEntryManager(models.Manager[LogEntry]): @deprecated("log_action() is deprecated and will be removed in Django 6.0. Use log_actions() instead.") def log_action( self, user_id: int | str | UUID, content_type_id: int, object_id: int | str | UUID, object_repr: str, action_flag: int, change_message: Any = ..., ) -> LogEntry: ... @overload def log_actions( self, user_id: int | str | UUID, queryset: Iterable[Model], action_flag: int, change_message: str | list[Any] = "", *, single_object: Literal[True] = ..., ) -> LogEntry: ... @overload def log_actions( self, user_id: int | str | UUID, queryset: Iterable[Model], action_flag: int, change_message: str | list[Any] = "", *, single_object: Literal[False] = ..., ) -> list[LogEntry]: ... class LogEntry(models.Model): action_time: models.DateTimeField user: models.ForeignKey content_type: models.ForeignKey object_id: models.TextField object_repr: models.CharField action_flag: models.PositiveSmallIntegerField change_message: models.TextField objects: ClassVar[LogEntryManager] def is_addition(self) -> bool: ... def is_change(self) -> bool: ... def is_deletion(self) -> bool: ... def get_change_message(self) -> str: ... def get_edited_object(self) -> Model: ... def get_admin_url(self) -> str | None: ... django-stubs-5.2.9/django-stubs/contrib/admin/options.pyi000066400000000000000000000424061513401051600234770ustar00rootroot00000000000000import enum from collections.abc import Callable, Iterable, Iterator, Mapping, Sequence from typing import Any, ClassVar, Generic, Literal, TypeAlias, TypeVar, cast, overload, type_check_only from django import forms from django.contrib.admin.filters import FieldListFilter, ListFilter from django.contrib.admin.models import LogEntry from django.contrib.admin.sites import AdminSite from django.contrib.admin.views.main import ChangeList from django.contrib.contenttypes.models import ContentType from django.core.checks.messages import CheckMessage from django.core.paginator import Paginator from django.db.models.base import Model from django.db.models.fields import Field from django.db.models.fields.related import ForeignKey, ManyToManyField, RelatedField from django.db.models.options import Options from django.db.models.query import QuerySet from django.forms.fields import Field as FormField from django.forms.fields import TypedChoiceField from django.forms.formsets import BaseFormSet from django.forms.models import ( BaseInlineFormSet, BaseModelFormSet, ModelChoiceField, ModelForm, ModelMultipleChoiceField, ) from django.forms.widgets import Media, MediaDefiningClass from django.http.request import HttpRequest from django.http.response import HttpResponse, HttpResponseBase, HttpResponseRedirect from django.template.response import _TemplateForResponseT from django.urls.resolvers import URLPattern from django.utils.datastructures import _ListOrTuple from django.utils.functional import _StrOrPromise from django.utils.safestring import SafeString from typing_extensions import Self, TypedDict, deprecated IS_POPUP_VAR: str TO_FIELD_VAR: str IS_FACETS_VAR: str HORIZONTAL: Literal[1] VERTICAL: Literal[2] _Direction: TypeAlias = Literal[1, 2] class ShowFacets(enum.Enum): NEVER = cast(str, ...) ALLOW = cast(str, ...) ALWAYS = cast(str, ...) def get_content_type_for_model(obj: type[Model] | Model) -> ContentType: ... def get_ul_class(radio_style: int) -> str: ... class IncorrectLookupParameters(Exception): ... FORMFIELD_FOR_DBFIELD_DEFAULTS: Any csrf_protect_m: Any _FieldGroups: TypeAlias = _ListOrTuple[str | _ListOrTuple[str]] @type_check_only class _OptionalFieldOpts(TypedDict, total=False): classes: Sequence[str] description: _StrOrPromise @type_check_only class _FieldOpts(_OptionalFieldOpts, total=True): fields: _FieldGroups _FieldsetSpec: TypeAlias = _ListOrTuple[tuple[_StrOrPromise | None, _FieldOpts]] _ListFilterT: TypeAlias = ( type[ListFilter] | Field[Any, Any] | str | tuple[Field[Any, Any] | str, type[FieldListFilter]] | list[Field[Any, Any] | str | type[FieldListFilter]] ) # Generic type specifically for models, for use in BaseModelAdmin and subclasses # https://github.com/typeddjango/django-stubs/issues/482 _ModelT = TypeVar("_ModelT", bound=Model) _DisplayT: TypeAlias = str | Callable[[_ModelT], str | bool] _ListDisplayT: TypeAlias = _ListOrTuple[_DisplayT[_ModelT]] # Options `form`, `list_display`, `list_display_links` and `actions` are not marked as `ClassVar` due to the # limitations of the current type system: `ClassVar` cannot contain type variables. class BaseModelAdmin(Generic[_ModelT], metaclass=MediaDefiningClass): autocomplete_fields: ClassVar[_ListOrTuple[str]] raw_id_fields: ClassVar[_ListOrTuple[str]] fields: ClassVar[_FieldGroups | None] exclude: ClassVar[_ListOrTuple[str] | None] fieldsets: ClassVar[_FieldsetSpec | None] form: type[forms.ModelForm[_ModelT]] filter_vertical: ClassVar[_ListOrTuple[str]] filter_horizontal: ClassVar[_ListOrTuple[str]] radio_fields: ClassVar[Mapping[str, _Direction]] prepopulated_fields: ClassVar[dict[str, Sequence[str]]] formfield_overrides: ClassVar[Mapping[type[Field], Mapping[str, Any]]] readonly_fields: ClassVar[_ListOrTuple[str]] ordering: ClassVar[_ListOrTuple[str] | None] sortable_by: ClassVar[_ListOrTuple[str] | None] show_full_result_count: ClassVar[bool] checks_class: ClassVar[Any] model: type[_ModelT] opts: Options[_ModelT] admin_site: AdminSite def __init__(self) -> None: ... def check(self, **kwargs: Any) -> list[CheckMessage]: ... def formfield_for_dbfield(self, db_field: Field, request: HttpRequest, **kwargs: Any) -> FormField | None: ... def formfield_for_choice_field( self, db_field: Field, request: HttpRequest, **kwargs: Any ) -> TypedChoiceField | None: ... def get_field_queryset(self, db: str | None, db_field: RelatedField, request: HttpRequest) -> QuerySet | None: ... def formfield_for_foreignkey( self, db_field: ForeignKey, request: HttpRequest, **kwargs: Any ) -> ModelChoiceField | None: ... def formfield_for_manytomany( self, db_field: ManyToManyField, request: HttpRequest, **kwargs: Any ) -> ModelMultipleChoiceField | None: ... def get_autocomplete_fields(self, request: HttpRequest) -> _ListOrTuple[str]: ... def get_view_on_site_url(self, obj: _ModelT | None = ...) -> str | None: ... def get_empty_value_display(self) -> SafeString: ... def get_exclude(self, request: HttpRequest, obj: _ModelT | None = ...) -> _ListOrTuple[str] | None: ... def get_fields(self, request: HttpRequest, obj: _ModelT | None = ...) -> _FieldGroups: ... def get_fieldsets(self, request: HttpRequest, obj: _ModelT | None = ...) -> _FieldsetSpec: ... def get_inlines(self, request: HttpRequest, obj: _ModelT | None) -> _ListOrTuple[type[InlineModelAdmin]]: ... def get_ordering(self, request: HttpRequest) -> _ListOrTuple[str]: ... def get_readonly_fields(self, request: HttpRequest, obj: _ModelT | None = ...) -> _ListOrTuple[str]: ... def get_prepopulated_fields(self, request: HttpRequest, obj: _ModelT | None = ...) -> dict[str, Sequence[str]]: ... def get_queryset(self, request: HttpRequest) -> QuerySet[_ModelT]: ... def get_sortable_by(self, request: HttpRequest) -> _ListDisplayT[_ModelT]: ... @overload @deprecated("None value for the request parameter will be removed in Django 6.0.") def lookup_allowed(self, lookup: str, value: str, request: None = None) -> bool: ... @overload def lookup_allowed(self, lookup: str, value: str, request: HttpRequest) -> bool: ... def to_field_allowed(self, request: HttpRequest, to_field: str) -> bool: ... def has_add_permission(self, request: HttpRequest) -> bool: ... def has_change_permission(self, request: HttpRequest, obj: _ModelT | None = ...) -> bool: ... def has_delete_permission(self, request: HttpRequest, obj: _ModelT | None = ...) -> bool: ... def has_view_permission(self, request: HttpRequest, obj: _ModelT | None = ...) -> bool: ... def has_view_or_change_permission(self, request: HttpRequest, obj: _ModelT | None = ...) -> bool: ... def has_module_permission(self, request: HttpRequest) -> bool: ... @property def view_on_site(self) -> Callable[[_ModelT], str | None] | bool: ... _ModelAdmin = TypeVar("_ModelAdmin", bound=ModelAdmin[Any]) _ActionCallable: TypeAlias = Callable[[_ModelAdmin, HttpRequest, QuerySet[_ModelT]], HttpResponseBase | None] class ModelAdmin(BaseModelAdmin[_ModelT]): list_display: _ListDisplayT[_ModelT] list_display_links: _ListDisplayT[_ModelT] | None list_filter: ClassVar[_ListOrTuple[_ListFilterT]] list_select_related: ClassVar[bool | _ListOrTuple[str]] list_per_page: ClassVar[int] list_max_show_all: ClassVar[int] list_editable: ClassVar[_ListOrTuple[str]] search_fields: ClassVar[_ListOrTuple[str]] search_help_text: ClassVar[_StrOrPromise | None] date_hierarchy: ClassVar[str | None] save_as: ClassVar[bool] save_as_continue: ClassVar[bool] save_on_top: ClassVar[bool] paginator: ClassVar[type] preserve_filters: ClassVar[bool] show_facets: ClassVar[ShowFacets] inlines: ClassVar[_ListOrTuple[type[InlineModelAdmin]]] add_form_template: ClassVar[_TemplateForResponseT | None] change_form_template: ClassVar[_TemplateForResponseT | None] change_list_template: ClassVar[_TemplateForResponseT | None] delete_confirmation_template: ClassVar[_TemplateForResponseT | None] delete_selected_confirmation_template: ClassVar[_TemplateForResponseT | None] object_history_template: ClassVar[_TemplateForResponseT | None] popup_response_template: ClassVar[_TemplateForResponseT | None] actions: Sequence[_ActionCallable[Self, _ModelT] | str] | None action_form: ClassVar[Any] actions_on_top: ClassVar[bool] actions_on_bottom: ClassVar[bool] actions_selection_counter: ClassVar[bool] model: type[_ModelT] opts: Options[_ModelT] admin_site: AdminSite def __init__(self, model: type[_ModelT], admin_site: AdminSite) -> None: ... def get_inline_instances(self, request: HttpRequest, obj: _ModelT | None = ...) -> list[InlineModelAdmin]: ... def get_urls(self) -> list[URLPattern]: ... @property def urls(self) -> list[URLPattern]: ... @property def media(self) -> Media: ... def get_model_perms(self, request: HttpRequest) -> dict[str, bool]: ... def get_form( self, request: HttpRequest, obj: _ModelT | None = ..., change: bool = ..., **kwargs: Any ) -> type[forms.ModelForm[_ModelT]]: ... def get_changelist(self, request: HttpRequest, **kwargs: Any) -> type[ChangeList]: ... def get_changelist_instance(self, request: HttpRequest) -> ChangeList: ... def get_object(self, request: HttpRequest, object_id: str, from_field: str | None = ...) -> _ModelT | None: ... def get_changelist_form(self, request: HttpRequest, **kwargs: Any) -> type[ModelForm[_ModelT]]: ... def get_changelist_formset( self, request: HttpRequest, **kwargs: Any ) -> type[BaseModelFormSet[_ModelT, ModelForm[_ModelT]]]: ... def get_formsets_with_inlines(self, request: HttpRequest, obj: _ModelT | None = ...) -> Iterator[Any]: ... def get_paginator( self, request: HttpRequest, queryset: QuerySet, per_page: int, orphans: int = ..., allow_empty_first_page: bool = ..., ) -> Paginator: ... def log_addition(self, request: HttpRequest, obj: _ModelT, message: Any) -> LogEntry: ... def log_change(self, request: HttpRequest, obj: _ModelT, message: Any) -> LogEntry: ... @deprecated("log_deletion() is deprecated and will be removed in Django 6.0. Use log_deletions() instead.") def log_deletion(self, request: HttpRequest, obj: _ModelT, object_repr: str) -> LogEntry: ... def log_deletions(self, request: HttpRequest, queryset: QuerySet[_ModelT]) -> list[LogEntry] | LogEntry: ... def action_checkbox(self, obj: _ModelT) -> SafeString: ... def get_actions(self, request: HttpRequest) -> dict[str, tuple[Callable[..., str], str, str] | None]: ... def get_action_choices( self, request: HttpRequest, default_choices: list[tuple[str, str]] = ... ) -> list[tuple[str, str]]: ... def get_action(self, action: Callable | str) -> tuple[Callable[..., str], str, str] | None: ... def get_list_display(self, request: HttpRequest) -> _ListDisplayT[_ModelT]: ... def get_list_display_links( self, request: HttpRequest, list_display: _ListDisplayT[_ModelT] ) -> _ListDisplayT[_ModelT]: ... def get_list_filter(self, request: HttpRequest) -> _ListOrTuple[_ListFilterT]: ... def get_list_select_related(self, request: HttpRequest) -> bool | _ListOrTuple[str]: ... def get_search_fields(self, request: HttpRequest) -> _ListOrTuple[str]: ... def get_search_results( self, request: HttpRequest, queryset: QuerySet, search_term: str ) -> tuple[QuerySet[_ModelT], bool]: ... def get_preserved_filters(self, request: HttpRequest) -> str: ... def _get_edited_object_pks(self, request: HttpRequest, prefix: str) -> list[str]: ... def _get_list_editable_queryset(self, request: HttpRequest, prefix: str) -> QuerySet[_ModelT]: ... def construct_change_message( self, request: HttpRequest, form: forms.Form, formsets: Iterable[BaseFormSet], add: bool = ... ) -> list[dict[str, dict[str, list[str]]]]: ... def message_user( self, request: HttpRequest, message: _StrOrPromise, level: int | str = ..., extra_tags: str = ..., fail_silently: bool = ..., ) -> None: ... def save_form(self, request: HttpRequest, form: Any, change: Any) -> Any: ... def save_model(self, request: HttpRequest, obj: _ModelT, form: Any, change: Any) -> None: ... def delete_model(self, request: HttpRequest, obj: _ModelT) -> None: ... def delete_queryset(self, request: HttpRequest, queryset: QuerySet) -> None: ... def save_formset(self, request: HttpRequest, form: Any, formset: Any, change: Any) -> None: ... def save_related(self, request: HttpRequest, form: Any, formsets: Any, change: Any) -> None: ... def render_change_form( self, request: HttpRequest, context: dict[str, Any], add: bool = ..., change: bool = ..., form_url: str = ..., obj: _ModelT | None = ..., ) -> HttpResponse: ... def response_add(self, request: HttpRequest, obj: _ModelT, post_url_continue: str | None = ...) -> HttpResponse: ... def response_change(self, request: HttpRequest, obj: _ModelT) -> HttpResponse: ... def response_post_save_add(self, request: HttpRequest, obj: _ModelT) -> HttpResponseRedirect: ... def response_post_save_change(self, request: HttpRequest, obj: _ModelT) -> HttpResponseRedirect: ... # Probably FileResponse cannot come from ModelAdmin views def response_action(self, request: HttpRequest, queryset: QuerySet) -> HttpResponse | None: ... def response_delete(self, request: HttpRequest, obj_display: str, obj_id: int) -> HttpResponse: ... def render_delete_form(self, request: HttpRequest, context: dict[str, Any]) -> HttpResponse: ... def get_inline_formsets( self, request: HttpRequest, formsets: list[Any], inline_instances: list[Any], obj: _ModelT | None = ... ) -> list[Any]: ... def get_changeform_initial_data(self, request: HttpRequest) -> dict[str, str | list[str]]: ... def changeform_view( self, request: HttpRequest, object_id: str | None = ..., form_url: str = ..., extra_context: dict[str, Any] | None = ..., ) -> HttpResponse: ... def add_view( self, request: HttpRequest, form_url: str = ..., extra_context: dict[str, Any] | None = ... ) -> HttpResponse: ... def change_view( self, request: HttpRequest, object_id: str, form_url: str = ..., extra_context: dict[str, Any] | None = ... ) -> HttpResponse: ... def changelist_view(self, request: HttpRequest, extra_context: dict[str, Any] | None = ...) -> HttpResponse: ... def get_deleted_objects( self, objs: Sequence[_ModelT] | QuerySet[_ModelT], request: HttpRequest ) -> tuple[list[str], dict[str, int], set[str], list[str]]: ... def delete_view( self, request: HttpRequest, object_id: str, extra_context: dict[str, Any] | None = ... ) -> HttpResponse: ... def history_view( self, request: HttpRequest, object_id: str, extra_context: dict[str, Any] | None = ... ) -> HttpResponse: ... def get_formset_kwargs( self, request: HttpRequest, obj: _ModelT, inline: InlineModelAdmin[Any, _ModelT], prefix: str ) -> dict[str, Any]: ... _ChildModelT = TypeVar("_ChildModelT", bound=Model) _ParentModelT = TypeVar("_ParentModelT", bound=Model) class InlineModelAdmin(BaseModelAdmin[_ChildModelT], Generic[_ChildModelT, _ParentModelT]): model: type[_ChildModelT] fk_name: str | None formset: type[BaseInlineFormSet[_ChildModelT, _ParentModelT, forms.ModelForm[_ChildModelT]]] extra: int min_num: int | None max_num: int | None template: str verbose_name: _StrOrPromise | None verbose_name_plural: _StrOrPromise | None can_delete: bool show_change_link: bool classes: Sequence[str] | None admin_site: AdminSite parent_model: type[_ParentModelT] opts: Options[_ChildModelT] has_registered_model: bool def __init__(self, parent_model: type[_ParentModelT], admin_site: AdminSite) -> None: ... @property def media(self) -> Media: ... def get_extra(self, request: HttpRequest, obj: _ParentModelT | None = ..., **kwargs: Any) -> int: ... def get_min_num(self, request: HttpRequest, obj: _ParentModelT | None = ..., **kwargs: Any) -> int | None: ... def get_max_num(self, request: HttpRequest, obj: _ParentModelT | None = ..., **kwargs: Any) -> int | None: ... def get_formset( self, request: HttpRequest, obj: _ParentModelT | None = ..., **kwargs: Any ) -> type[BaseInlineFormSet[_ChildModelT, _ParentModelT, forms.ModelForm[_ChildModelT]]]: ... def get_queryset(self, request: HttpRequest) -> QuerySet[_ChildModelT]: ... def has_add_permission(self, request: HttpRequest, obj: _ParentModelT | None) -> bool: ... # type: ignore[override] def has_change_permission(self, request: HttpRequest, obj: _ParentModelT | None = ...) -> bool: ... # type: ignore[override] def has_delete_permission(self, request: HttpRequest, obj: _ParentModelT | None = ...) -> bool: ... # type: ignore[override] def has_view_permission(self, request: HttpRequest, obj: _ParentModelT | None = ...) -> bool: ... # type: ignore[override] class StackedInline(InlineModelAdmin[_ChildModelT, _ParentModelT]): template: str class TabularInline(InlineModelAdmin[_ChildModelT, _ParentModelT]): template: str django-stubs-5.2.9/django-stubs/contrib/admin/sites.pyi000066400000000000000000000101641513401051600231270ustar00rootroot00000000000000from collections.abc import Callable, Iterable, Sequence from typing import Any, TypeAlias, TypeVar from weakref import WeakSet from django.apps.config import AppConfig from django.contrib.admin.models import LogEntry from django.contrib.admin.options import ModelAdmin from django.contrib.auth.forms import AuthenticationForm from django.core.checks import CheckMessage from django.db.models.base import Model from django.db.models.query import QuerySet from django.http.request import HttpRequest from django.http.response import HttpResponse, HttpResponseBase from django.template.response import TemplateResponse from django.urls import URLPattern, URLResolver from django.utils.functional import LazyObject, _StrOrPromise all_sites: WeakSet[AdminSite] _ViewType = TypeVar("_ViewType", bound=Callable[..., HttpResponseBase]) _ModelT = TypeVar("_ModelT", bound=Model) _ActionCallback: TypeAlias = Callable[[ModelAdmin, HttpRequest, QuerySet], TemplateResponse | None] class AdminSite: site_title: _StrOrPromise site_header: _StrOrPromise index_title: _StrOrPromise site_url: str | None login_form: type[AuthenticationForm] | None index_template: str | None app_index_template: str | None login_template: str | None logout_template: str | None password_change_template: str | None password_change_done_template: str | None name: str enable_nav_sidebar: bool empty_value_display: str final_catch_all_view: bool _empty_value_display: str _registry: dict[type[Model], ModelAdmin] _global_actions: dict[str, _ActionCallback] _actions: dict[str, _ActionCallback] def __init__(self, name: str = ...) -> None: ... def check(self, app_configs: Sequence[AppConfig] | None) -> list[CheckMessage]: ... def register( self, model_or_iterable: type[Model] | Iterable[type[Model]], admin_class: type[ModelAdmin] | None = ..., **options: Any, ) -> None: ... def unregister(self, model_or_iterable: type[Model] | Iterable[type[Model]]) -> None: ... def is_registered(self, model: type[Model]) -> bool: ... def get_model_admin(self, model: type[_ModelT]) -> ModelAdmin[_ModelT]: ... def add_action(self, action: _ActionCallback, name: str | None = ...) -> None: ... def disable_action(self, name: str) -> None: ... def get_action(self, name: str) -> _ActionCallback: ... @property def actions(self) -> Iterable[tuple[str, _ActionCallback]]: ... def has_permission(self, request: HttpRequest) -> bool: ... def admin_view(self, view: _ViewType, cacheable: bool = ...) -> _ViewType: ... def get_urls(self) -> list[URLResolver | URLPattern]: ... @property def urls(self) -> tuple[list[URLResolver | URLPattern], str, str]: ... def each_context(self, request: HttpRequest) -> dict[str, Any]: ... def password_change(self, request: HttpRequest, extra_context: dict[str, Any] | None = ...) -> TemplateResponse: ... def password_change_done( self, request: HttpRequest, extra_context: dict[str, Any] | None = ... ) -> TemplateResponse: ... def i18n_javascript(self, request: HttpRequest, extra_context: dict[str, Any] | None = ...) -> HttpResponse: ... def logout(self, request: HttpRequest, extra_context: dict[str, Any] | None = ...) -> TemplateResponse: ... def login(self, request: HttpRequest, extra_context: dict[str, Any] | None = ...) -> HttpResponse: ... def _build_app_dict(self, request: HttpRequest, label: _StrOrPromise | None = ...) -> dict[str, Any]: ... def get_app_list(self, request: HttpRequest, app_label: str | None = ...) -> list[Any]: ... def index(self, request: HttpRequest, extra_context: dict[str, Any] | None = ...) -> TemplateResponse: ... def app_index( self, request: HttpRequest, app_label: str, extra_context: dict[str, Any] | None = ... ) -> TemplateResponse: ... def autocomplete_view(self, request: HttpRequest) -> HttpResponse: ... def catch_all_view(self, request: HttpRequest, url: str) -> HttpResponse: ... def get_log_entries(self, request: HttpRequest) -> QuerySet[LogEntry]: ... class DefaultAdminSite(LazyObject): ... site: AdminSite django-stubs-5.2.9/django-stubs/contrib/admin/templatetags/000077500000000000000000000000001513401051600237455ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/contrib/admin/templatetags/__init__.pyi000066400000000000000000000000001513401051600262150ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/contrib/admin/templatetags/admin_list.pyi000066400000000000000000000036641513401051600266240ustar00rootroot00000000000000from collections.abc import Iterator from typing import Any from django.contrib.admin.filters import FieldListFilter from django.contrib.admin.views.main import ChangeList from django.db.models.base import Model from django.forms.boundfield import BoundField from django.forms.models import ModelForm from django.template.base import Parser, Token from django.template.context import RequestContext from django.utils.safestring import SafeString from .base import InclusionAdminNode register: Any def paginator_number(cl: ChangeList, i: int) -> SafeString: ... def pagination(cl: ChangeList) -> dict[str, Any]: ... def pagination_tag(parser: Parser, token: Token) -> InclusionAdminNode: ... def result_headers(cl: ChangeList) -> Iterator[dict[str, int | str | None]]: ... def items_for_result(cl: ChangeList, result: Model, form: ModelForm | None) -> Iterator[SafeString]: ... class ResultList(list): form: ModelForm | None def __init__(self, form: ModelForm | None, *items: Any) -> None: ... def results(cl: ChangeList) -> Iterator[ResultList]: ... def result_hidden_fields(cl: ChangeList) -> Iterator[BoundField]: ... def result_list( cl: ChangeList, ) -> dict[str, list[dict[str, int | str | None]] | list[ResultList] | list[BoundField] | ChangeList | int]: ... def result_list_tag(parser: Parser, token: Token) -> InclusionAdminNode: ... def date_hierarchy(cl: ChangeList) -> dict[str, Any] | None: ... def date_hierarchy_tag(parser: Parser, token: Token) -> InclusionAdminNode: ... def search_form(cl: ChangeList) -> dict[str, bool | ChangeList | str]: ... def search_form_tag(parser: Parser, token: Token) -> InclusionAdminNode: ... def admin_list_filter(cl: ChangeList, spec: FieldListFilter) -> SafeString: ... def admin_actions(context: RequestContext) -> RequestContext: ... def admin_actions_tag(parser: Parser, token: Token) -> InclusionAdminNode: ... def change_list_object_tools_tag(parser: Parser, token: Token) -> InclusionAdminNode: ... django-stubs-5.2.9/django-stubs/contrib/admin/templatetags/admin_modify.pyi000066400000000000000000000012621513401051600271300ustar00rootroot00000000000000from typing import Any from django.contrib.admin.helpers import InlineAdminForm from django.template.base import Parser, Token from django.template.context import Context, RequestContext from .base import InclusionAdminNode register: Any def prepopulated_fields_js(context: RequestContext) -> RequestContext: ... def prepopulated_fields_js_tag(parser: Parser, token: Token) -> InclusionAdminNode: ... def submit_row(context: RequestContext) -> Context: ... def submit_row_tag(parser: Parser, token: Token) -> InclusionAdminNode: ... def change_form_object_tools_tag(parser: Parser, token: Token) -> InclusionAdminNode: ... def cell_count(inline_admin_form: InlineAdminForm) -> int: ... django-stubs-5.2.9/django-stubs/contrib/admin/templatetags/admin_urls.pyi000066400000000000000000000007671513401051600266370ustar00rootroot00000000000000from typing import Any from uuid import UUID from django.db.models.options import Options from django.template.context import RequestContext from django.utils.safestring import SafeString register: Any def admin_urlname(value: Options, arg: SafeString) -> str: ... def admin_urlquote(value: int | str | UUID) -> int | str | UUID: ... def add_preserved_filters( context: dict[str, Options | str] | RequestContext, url: str, popup: bool = ..., to_field: str | None = ..., ) -> str: ... django-stubs-5.2.9/django-stubs/contrib/admin/templatetags/base.pyi000066400000000000000000000011351513401051600254020ustar00rootroot00000000000000from collections.abc import Callable from typing import Any from django.template.base import Parser, Token from django.template.context import Context from django.template.library import InclusionNode from django.utils.safestring import SafeString class InclusionAdminNode(InclusionNode): args: list[Any] func: Callable kwargs: dict[str, Any] takes_context: bool template_name: str def __init__( self, parser: Parser, token: Token, func: Callable, template_name: str, takes_context: bool = ... ) -> None: ... def render(self, context: Context) -> SafeString: ... django-stubs-5.2.9/django-stubs/contrib/admin/templatetags/log.pyi000066400000000000000000000006711513401051600252550ustar00rootroot00000000000000from typing import Any from django import template from django.template.base import Parser, Token from django.template.context import Context register: Any class AdminLogNode(template.Node): limit: str user: str varname: str def __init__(self, limit: str, varname: str, user: str | None) -> None: ... def render(self, context: Context) -> str: ... def get_admin_log(parser: Parser, token: Token) -> AdminLogNode: ... django-stubs-5.2.9/django-stubs/contrib/admin/tests.pyi000066400000000000000000000031651513401051600231450ustar00rootroot00000000000000from collections.abc import Callable from contextlib import AbstractContextManager from typing import Any from django.contrib.staticfiles.testing import StaticLiveServerTestCase from django.test.selenium import SeleniumTestCase from django.utils.deprecation import MiddlewareMixin from django.utils.functional import _StrOrPromise class CSPMiddleware(MiddlewareMixin): ... class AdminSeleniumTestCase(SeleniumTestCase, StaticLiveServerTestCase): def wait_until(self, callback: Callable, timeout: int = ...) -> None: ... def wait_for_and_switch_to_popup(self, num_windows: int = ..., timeout: int = ...) -> None: ... def wait_for(self, css_selector: str, timeout: int = ...) -> None: ... def wait_for_text(self, css_selector: str, text: str, timeout: int = ...) -> None: ... def wait_for_value(self, css_selector: str, text: str, timeout: int = ...) -> None: ... def wait_until_visible(self, css_selector: str, timeout: int = ...) -> None: ... def wait_until_invisible(self, css_selector: str, timeout: int = ...) -> None: ... def wait_page_ready(self, timeout: int = ...) -> None: ... def wait_page_loaded(self, timeout: int = ...) -> AbstractContextManager[None]: ... def admin_login(self, username: str, password: str, login_url: _StrOrPromise = ...) -> None: ... def select_option(self, selector: str, value: Any) -> None: ... def deselect_option(self, selector: str, value: Any) -> None: ... def assertSelectOptions(self, selector: str, values: Any) -> None: ... def assertSelectedOptions(self, selector: str, values: Any) -> None: ... def is_disabled(self, selector: str) -> bool: ... django-stubs-5.2.9/django-stubs/contrib/admin/utils.pyi000066400000000000000000000107261513401051600231440ustar00rootroot00000000000000import datetime from collections import defaultdict from collections.abc import Callable, Iterable, Sequence from typing import Any, Literal, TypeVar, overload, type_check_only from uuid import UUID from _typeshed import Unused from django.contrib.admin.options import BaseModelAdmin, _DisplayT, _FieldGroups, _FieldsetSpec, _ListDisplayT, _ModelT from django.contrib.admin.sites import AdminSite from django.db.models.base import Model from django.db.models.deletion import Collector from django.db.models.fields import Field, reverse_related from django.db.models.options import Options from django.db.models.query import QuerySet from django.db.models.query_utils import Q from django.forms.forms import BaseForm, Form from django.forms.formsets import BaseFormSet from django.http.request import HttpRequest from django.utils.datastructures import _IndexableCollection from typing_extensions import TypedDict _T = TypeVar("_T") class FieldIsAForeignKeyColumnName(Exception): ... def lookup_spawns_duplicates(opts: Options, lookup_path: str) -> bool: ... def get_last_value_from_parameters(parameters: dict[str, list[str] | str], key: str) -> str | None: ... def prepare_lookup_value( key: str, value: list[bool | datetime.datetime | str] | datetime.datetime | str, separator: str ) -> list[bool | datetime.datetime | str] | bool | datetime.datetime | str: ... def build_q_object_from_lookup_parameters(parameters: dict[str, list[str]]) -> Q: ... def quote(s: int | str | UUID) -> str: ... def unquote(s: str) -> str: ... @overload def flatten(fields: _FieldGroups) -> list[str]: ... @overload def flatten(fields: _ListDisplayT[_ModelT]) -> list[_DisplayT[_ModelT]]: ... def flatten_fieldsets(fieldsets: _FieldsetSpec) -> list[str]: ... def get_deleted_objects( objs: Sequence[Model | None] | QuerySet[Model], request: HttpRequest, admin_site: AdminSite ) -> tuple[list[str], dict[str, int], set[str], list[str]]: ... class NestedObjects(Collector): edges: dict[Model, list[Model]] protected: set[Model] model_objs: defaultdict[str, set[Model]] def add_edge(self, source: Model | None, target: Model) -> None: ... def collect( # type: ignore[override] self, objs: _IndexableCollection[Model | None], source: type[Model] | None = ..., source_attr: str | None = ..., *, nullable: bool = ..., collect_related: bool = ..., reverse_dependency: bool = ..., keep_parents: bool = ..., fail_on_restricted: bool = ..., ) -> None: ... def related_objects( self, related_model: type[Model], related_fields: Iterable[Field], objs: _IndexableCollection[Model] ) -> QuerySet[Model]: ... @overload def nested(self, format_callback: None = None) -> list[Model]: ... @overload def nested(self, format_callback: Callable[[Model], _T]) -> list[_T]: ... def can_fast_delete(self, *args: Unused, **kwargs: Unused) -> Literal[False]: ... @type_check_only class _ModelFormatDict(TypedDict): verbose_name: str verbose_name_plural: str def model_format_dict(obj: Model | type[Model] | QuerySet | Options[Model]) -> _ModelFormatDict: ... def model_ngettext(obj: Options | QuerySet, n: int | None = ...) -> str: ... def lookup_field( name: Callable | str, obj: Model, model_admin: BaseModelAdmin | None = ... ) -> tuple[Field | None, str | None, Any]: ... @overload def label_for_field( name: Callable | str, model: type[Model], model_admin: BaseModelAdmin | None = ..., return_attr: Literal[True] = True, form: BaseForm | None = ..., ) -> tuple[str, Callable | str | None]: ... @overload def label_for_field( name: Callable | str, model: type[Model], model_admin: BaseModelAdmin | None = ..., return_attr: Literal[False] = False, form: BaseForm | None = ..., ) -> str: ... def help_text_for_field(name: str, model: type[Model]) -> str: ... def display_for_field(value: Any, field: Field, empty_value_display: str, avoid_link: bool = False) -> str: ... def display_for_value(value: Any, empty_value_display: str, boolean: bool = ...) -> str: ... class NotRelationField(Exception): ... def get_model_from_relation(field: Field | reverse_related.ForeignObjectRel) -> type[Model]: ... def reverse_field_path(model: type[Model], path: str) -> tuple[type[Model], str]: ... def get_fields_from_path(model: type[Model], path: str) -> list[Field]: ... def construct_change_message( form: Form, formsets: Iterable[BaseFormSet], add: bool ) -> list[dict[str, dict[str, list[str]]]]: ... django-stubs-5.2.9/django-stubs/contrib/admin/views/000077500000000000000000000000001513401051600224105ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/contrib/admin/views/__init__.pyi000066400000000000000000000000001513401051600246600ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/contrib/admin/views/autocomplete.pyi000066400000000000000000000005661513401051600256430ustar00rootroot00000000000000from typing import Any from django.contrib.admin.options import ModelAdmin from django.db.models import Model from django.http.request import HttpRequest from django.views.generic.list import BaseListView class AutocompleteJsonView(BaseListView): model_admin: ModelAdmin term: Any def has_perm(self, request: HttpRequest, obj: Model | None = ...) -> bool: ... django-stubs-5.2.9/django-stubs/contrib/admin/views/decorators.pyi000066400000000000000000000007151513401051600253030ustar00rootroot00000000000000from collections.abc import Callable from typing import TypeVar, overload from django.utils.functional import _StrOrPromise _C = TypeVar("_C", bound=Callable) @overload def staff_member_required( view_func: _C = ..., redirect_field_name: str | None = ..., login_url: _StrOrPromise = ... ) -> _C: ... @overload def staff_member_required( view_func: None = None, redirect_field_name: str | None = ..., login_url: _StrOrPromise = ... ) -> Callable: ... django-stubs-5.2.9/django-stubs/contrib/admin/views/main.pyi000066400000000000000000000065701513401051600240670ustar00rootroot00000000000000from collections.abc import Callable, Iterable, Sequence from typing import Any, Literal from django import forms from django.contrib.admin.filters import ListFilter from django.contrib.admin.options import ModelAdmin, _ListDisplayT, _ListFilterT from django.db.models.base import Model from django.db.models.expressions import Expression from django.db.models.options import Options from django.db.models.query import QuerySet from django.forms.formsets import BaseFormSet from django.http.request import HttpRequest ALL_VAR: str ORDER_VAR: str PAGE_VAR: str SEARCH_VAR: str ERROR_FLAG: str IGNORED_PARAMS: tuple[str, ...] class ChangeListSearchForm(forms.Form): ... class ChangeList: search_form_class: type[forms.Form] model: type[Model] opts: Options lookup_opts: Options root_queryset: QuerySet list_display: _ListDisplayT list_display_links: _ListDisplayT list_filter: Sequence[_ListFilterT] date_hierarchy: Any search_fields: Sequence[str] search_help_text: str | None list_select_related: bool | Sequence[str] list_per_page: int list_max_show_all: int model_admin: ModelAdmin preserved_filters: str sortable_by: Sequence[str] | None page_num: int show_all: bool is_popup: bool add_facets: bool is_facets_optional: bool to_field: Any params: dict[str, Any] filter_params: dict[str, list[str]] remove_facet_link: str add_facet_link: str list_editable: Sequence[str] query: str queryset: Any title: str pk_attname: str formset: BaseFormSet | None def __init__( self, request: HttpRequest, model: type[Model], list_display: _ListDisplayT, list_display_links: _ListDisplayT, list_filter: Sequence[_ListFilterT], date_hierarchy: str | None, search_fields: Sequence[str], list_select_related: bool | Sequence[str], list_per_page: int, list_max_show_all: int, list_editable: Sequence[str], model_admin: ModelAdmin, sortable_by: Sequence[str] | None, search_help_text: str | None, ) -> None: ... def get_filters_params(self, params: dict[str, Any] | None = ...) -> dict[str, Any]: ... def get_filters(self, request: HttpRequest) -> tuple[list[ListFilter], bool, dict[str, bool | str], bool, bool]: ... def get_query_string(self, new_params: dict[str, Any] | None = ..., remove: Iterable[str] | None = ...) -> str: ... result_count: int show_full_result_count: bool show_admin_actions: bool full_result_count: int | None result_list: Any can_show_all: bool multi_page: bool paginator: Any def get_results(self, request: HttpRequest) -> None: ... def get_ordering_field(self, field_name: Callable | str) -> Expression | str | None: ... def get_ordering(self, request: HttpRequest, queryset: QuerySet) -> list[Expression | str]: ... def get_ordering_field_columns(self) -> dict[int, Literal["desc", "asc"]]: ... def get_queryset(self, request: HttpRequest, exclude_parameters: list[str | None] | None = ...) -> QuerySet: ... filter_specs: list[ListFilter] has_filters: bool has_active_filters: bool clear_all_filters_qs: str def apply_select_related(self, qs: QuerySet) -> QuerySet: ... def has_related_field_in_list_display(self) -> bool: ... def url_for_result(self, result: Model) -> str: ... django-stubs-5.2.9/django-stubs/contrib/admin/widgets.pyi000066400000000000000000000135061513401051600234510ustar00rootroot00000000000000from collections.abc import Iterable, Mapping, Sequence from typing import Any from django import forms from django.contrib.admin.sites import AdminSite from django.core.files.base import File from django.db.models.fields.reverse_related import ManyToManyRel, ManyToOneRel from django.forms.models import ModelChoiceIterator from django.forms.widgets import ChoiceWidget, _OptAttrs from django.utils.choices import _Choices from django.utils.functional import _StrOrPromise class FilteredSelectMultiple(forms.SelectMultiple): verbose_name: _StrOrPromise is_stacked: bool def __init__( self, verbose_name: _StrOrPromise, is_stacked: bool, attrs: _OptAttrs | None = ..., choices: _Choices = ..., ) -> None: ... class BaseAdminDateWidget(forms.DateInput): def __init__(self, attrs: _OptAttrs | None = ..., format: str | None = ...) -> None: ... class AdminDateWidget(BaseAdminDateWidget): template_name: str class BaseAdminTimeWidget(forms.TimeInput): def __init__(self, attrs: _OptAttrs | None = ..., format: str | None = ...) -> None: ... class AdminTimeWidget(BaseAdminTimeWidget): template_name: str class AdminSplitDateTime(forms.SplitDateTimeWidget): template_name: str def __init__(self, attrs: _OptAttrs | None = ...) -> None: ... def get_context(self, name: str, value: Any, attrs: _OptAttrs | None) -> dict[str, Any]: ... class AdminRadioSelect(forms.RadioSelect): ... class AdminFileWidget(forms.ClearableFileInput): ... def url_params_from_lookup_dict(lookups: Any) -> dict[str, str]: ... class ForeignKeyRawIdWidget(forms.TextInput): rel: ManyToOneRel admin_site: AdminSite db: str | None def __init__( self, rel: ManyToOneRel, admin_site: AdminSite, attrs: _OptAttrs | None = ..., using: str | None = ..., ) -> None: ... def base_url_parameters(self) -> dict[str, str]: ... def get_context(self, name: str, value: Any, attrs: _OptAttrs | None) -> dict[str, Any]: ... def url_parameters(self) -> dict[str, str]: ... def label_and_url_for_value(self, value: Any) -> tuple[str, str]: ... class ManyToManyRawIdWidget(ForeignKeyRawIdWidget): rel: ManyToManyRel # type: ignore[assignment] def __init__( self, rel: ManyToManyRel, admin_site: AdminSite, attrs: _OptAttrs | None = ..., using: str | None = ..., ) -> None: ... def get_context(self, name: str, value: Any, attrs: _OptAttrs | None) -> dict[str, Any]: ... def url_parameters(self) -> dict[str, str]: ... def label_and_url_for_value(self, value: Any) -> tuple[str, str]: ... def format_value(self, value: Any) -> str | None: ... def value_from_datadict(self, data: Mapping[str, Any], files: Mapping[str, Iterable[File]], name: str) -> Any: ... class RelatedFieldWidgetWrapper(forms.Widget): template_name: str widget: ChoiceWidget rel: ManyToOneRel can_add_related: bool can_change_related: bool can_delete_related: bool can_view_related: bool admin_site: AdminSite def __init__( self, widget: ChoiceWidget, rel: ManyToOneRel, admin_site: AdminSite, can_add_related: bool | None = ..., can_change_related: bool = ..., can_delete_related: bool = ..., can_view_related: bool = ..., ) -> None: ... @property def is_hidden(self) -> bool: ... @property def choices(self) -> ModelChoiceIterator: ... @choices.setter def choices(self, value: ModelChoiceIterator) -> None: ... def get_related_url(self, info: tuple[str, str], action: str, *args: Any) -> str: ... def get_context(self, name: str, value: Any, attrs: _OptAttrs | None) -> dict[str, Any]: ... def value_from_datadict(self, data: Mapping[str, Any], files: Mapping[str, Iterable[File]], name: str) -> Any: ... def value_omitted_from_data( self, data: Mapping[str, Any], files: Mapping[str, Iterable[File]], name: str ) -> bool: ... def id_for_label(self, id_: str) -> str: ... class AdminTextareaWidget(forms.Textarea): def __init__(self, attrs: _OptAttrs | None = ...) -> None: ... class AdminTextInputWidget(forms.TextInput): def __init__(self, attrs: _OptAttrs | None = ...) -> None: ... class AdminEmailInputWidget(forms.EmailInput): def __init__(self, attrs: _OptAttrs | None = ...) -> None: ... class AdminURLFieldWidget(forms.URLInput): template_name: str def __init__(self, attrs: _OptAttrs | None = ..., validator_class: Any = ...) -> None: ... def get_context(self, name: str, value: Any, attrs: _OptAttrs | None) -> dict[str, Any]: ... class AdminIntegerFieldWidget(forms.NumberInput): def __init__(self, attrs: _OptAttrs | None = ...) -> None: ... class_name: str class AdminBigIntegerFieldWidget(AdminIntegerFieldWidget): class_name: str class AdminUUIDInputWidget(forms.TextInput): def __init__(self, attrs: _OptAttrs | None = ...) -> None: ... SELECT2_TRANSLATIONS: dict[str, str] def get_select2_language() -> str | None: ... class AutocompleteMixin: url_name: str field: Any admin_site: AdminSite db: str | None choices: Any attrs: _OptAttrs def __init__( self, field: Any, admin_site: AdminSite, attrs: _OptAttrs | None = ..., choices: Any = ..., using: str | None = ..., ) -> None: ... def get_url(self) -> str: ... def build_attrs(self, base_attrs: _OptAttrs, extra_attrs: _OptAttrs | None = ...) -> dict[str, Any]: ... # typo in source: `attr` instead of `attrs` def optgroups( self, name: str, value: Sequence[str], attr: _OptAttrs | None = ... ) -> list[tuple[str | None, list[dict[str, Any]], int | None]]: ... class AutocompleteSelect(AutocompleteMixin, forms.Select): ... class AutocompleteSelectMultiple(AutocompleteMixin, forms.SelectMultiple): ... django-stubs-5.2.9/django-stubs/contrib/admindocs/000077500000000000000000000000001513401051600221245ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/contrib/admindocs/__init__.pyi000066400000000000000000000000001513401051600243740ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/contrib/admindocs/apps.pyi000066400000000000000000000002011513401051600236030ustar00rootroot00000000000000from typing import Any from django.apps import AppConfig class AdminDocsConfig(AppConfig): name: str verbose_name: Any django-stubs-5.2.9/django-stubs/contrib/admindocs/middleware.pyi000066400000000000000000000007501513401051600247660ustar00rootroot00000000000000from collections.abc import Callable from typing import Any from django.http.request import HttpRequest from django.http.response import HttpResponse, HttpResponseBase from django.utils.deprecation import MiddlewareMixin class XViewMiddleware(MiddlewareMixin): def process_view( self, request: HttpRequest, view_func: Callable[..., HttpResponseBase], view_args: tuple[Any, ...], view_kwargs: dict[str, Any], ) -> HttpResponse | None: ... django-stubs-5.2.9/django-stubs/contrib/admindocs/urls.pyi000066400000000000000000000000741513401051600236350ustar00rootroot00000000000000from django.urls import _AnyURL urlpatterns: list[_AnyURL] django-stubs-5.2.9/django-stubs/contrib/admindocs/utils.pyi000066400000000000000000000017611513401051600240140ustar00rootroot00000000000000from collections.abc import Callable from re import Pattern from typing import Any from django.utils.safestring import SafeString docutils_is_available: bool def get_view_name(view_func: Callable) -> str: ... def parse_docstring(docstring: str) -> tuple[str, str, dict[str, str]]: ... def parse_rst(text: str, default_reference_context: Any, thing_being_parsed: Any | None = ...) -> SafeString: ... ROLES: dict[str, str] explicit_title_re: Pattern[str] def split_explicit_title(text: str) -> tuple[bool, str, str]: ... def create_reference_role(rolename: str, urlbase: str) -> None: ... def default_reference_role( name: str, rawtext: str, text: str, lineno: Any, inliner: Any, options: Any | None = ..., content: Any | None = ..., ) -> tuple[list[Any], list[Any]]: ... named_group_matcher: Any unnamed_group_matcher: Any def replace_named_groups(pattern: str) -> str: ... def replace_unnamed_groups(pattern: str) -> str: ... def strip_p_tags(value: str) -> SafeString: ... django-stubs-5.2.9/django-stubs/contrib/admindocs/views.pyi000066400000000000000000000023271513401051600240100ustar00rootroot00000000000000from collections.abc import Callable, Iterable from re import Pattern from typing import Any from django.contrib.auth.models import AbstractBaseUser, AnonymousUser from django.db.models.fields import Field from django.db.models.options import Options from django.urls import _AnyURL from django.views.generic import TemplateView MODEL_METHODS_EXCLUDE: Any class BaseAdminDocsView(TemplateView): ... class BookmarkletsView(BaseAdminDocsView): ... class TemplateTagIndexView(BaseAdminDocsView): ... class TemplateFilterIndexView(BaseAdminDocsView): ... class ViewIndexView(BaseAdminDocsView): ... class ViewDetailView(BaseAdminDocsView): ... def user_has_model_view_permission(user: AbstractBaseUser | AnonymousUser, opts: Options) -> bool: ... class ModelIndexView(BaseAdminDocsView): ... class ModelDetailView(BaseAdminDocsView): ... class TemplateDetailView(BaseAdminDocsView): ... def get_return_data_type(func_name: Any) -> str: ... def get_readable_field_data_type(field: Field | str) -> str: ... def extract_views_from_urlpatterns( urlpatterns: Iterable[_AnyURL], base: str = ..., namespace: str | None = ... ) -> list[tuple[Callable, Pattern[str], str | None, str | None]]: ... def simplify_regex(pattern: str) -> str: ... django-stubs-5.2.9/django-stubs/contrib/auth/000077500000000000000000000000001513401051600211245ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/contrib/auth/__init__.pyi000066400000000000000000000030131513401051600234030ustar00rootroot00000000000000from typing import Any from django.contrib.auth.backends import BaseBackend from django.contrib.auth.models import _AnyUser, _User, _UserModel from django.db.models.options import Options from django.http.request import HttpRequest from django.test.client import Client from .signals import user_logged_in as user_logged_in from .signals import user_logged_out as user_logged_out from .signals import user_login_failed as user_login_failed SESSION_KEY: str BACKEND_SESSION_KEY: str HASH_SESSION_KEY: str REDIRECT_FIELD_NAME: str def load_backend(path: str) -> BaseBackend: ... def get_backends() -> list[BaseBackend]: ... def authenticate(request: HttpRequest | None = ..., **credentials: Any) -> _User | None: ... async def aauthenticate(request: HttpRequest | None = ..., **credentials: Any) -> _User | None: ... def login(request: HttpRequest, user: _User | None, backend: type[BaseBackend] | str | None = ...) -> None: ... async def alogin(request: HttpRequest, user: _User | None, backend: type[BaseBackend] | str | None = ...) -> None: ... def logout(request: HttpRequest) -> None: ... async def alogout(request: HttpRequest) -> None: ... def get_user_model() -> _UserModel: ... def get_user(request: HttpRequest | Client) -> _AnyUser: ... async def aget_user(request: HttpRequest | Client) -> _AnyUser: ... def get_permission_codename(action: str, opts: Options) -> str: ... def update_session_auth_hash(request: HttpRequest, user: _User) -> None: ... async def aupdate_session_auth_hash(request: HttpRequest, user: _User) -> None: ... django-stubs-5.2.9/django-stubs/contrib/auth/admin.pyi000066400000000000000000000012131513401051600227340ustar00rootroot00000000000000from typing import Any, TypeVar from django.contrib import admin from django.contrib.auth.models import AbstractUser, Group from django.http.request import HttpRequest from django.http.response import HttpResponse _AbstractUserT = TypeVar("_AbstractUserT", bound=AbstractUser) csrf_protect_m: Any sensitive_post_parameters_m: Any class GroupAdmin(admin.ModelAdmin[Group]): ... class UserAdmin(admin.ModelAdmin[_AbstractUserT]): change_user_password_template: Any add_fieldsets: Any add_form: Any change_password_form: Any def user_change_password(self, request: HttpRequest, id: str, form_url: str = ...) -> HttpResponse: ... django-stubs-5.2.9/django-stubs/contrib/auth/apps.pyi000066400000000000000000000001041513401051600226050ustar00rootroot00000000000000from django.apps import AppConfig class AuthConfig(AppConfig): ... django-stubs-5.2.9/django-stubs/contrib/auth/backends.pyi000066400000000000000000000055251513401051600234300ustar00rootroot00000000000000from typing import Any from django.contrib.auth.models import Permission, _AnyUser, _User, _UserModel, _UserType from django.db.models import QuerySet from django.db.models.base import Model from django.http.request import HttpRequest UserModel = _UserModel class BaseBackend: def authenticate(self, request: HttpRequest | None, **kwargs: Any) -> _User | None: ... async def aauthenticate(self, request: HttpRequest | None, **kwargs: Any) -> _User | None: ... def get_user(self, user_id: Any) -> _User | None: ... async def aget_user(self, user_id: Any) -> _User | None: ... def get_user_permissions(self, user_obj: _AnyUser, obj: Model | None = ...) -> set[str]: ... async def aget_user_permissions(self, user_obj: _AnyUser, obj: Model | None = ...) -> set[str]: ... def get_group_permissions(self, user_obj: _AnyUser, obj: Model | None = ...) -> set[str]: ... async def aget_group_permissions(self, user_obj: _AnyUser, obj: Model | None = ...) -> set[str]: ... def get_all_permissions(self, user_obj: _AnyUser, obj: Model | None = ...) -> set[str]: ... async def aget_all_permissions(self, user_obj: _AnyUser, obj: Model | None = ...) -> set[str]: ... def has_perm(self, user_obj: _AnyUser, perm: str, obj: Model | None = ...) -> bool: ... async def ahas_perm(self, user_obj: _AnyUser, perm: str, obj: Model | None = ...) -> bool: ... class ModelBackend(BaseBackend): def authenticate( self, request: HttpRequest | None, username: str | None = ..., password: str | None = ..., **kwargs: Any ) -> _User | None: ... async def aauthenticate( self, request: HttpRequest | None, username: str | None = ..., password: str | None = ..., **kwargs: Any ) -> _User | None: ... def has_module_perms(self, user_obj: _AnyUser, app_label: str) -> bool: ... async def ahas_module_perms(self, user_obj: _AnyUser, app_label: str) -> bool: ... def user_can_authenticate(self, user: _AnyUser | None) -> bool: ... def with_perm( self, perm: str | Permission, is_active: bool = ..., include_superusers: bool = ..., obj: Model | None = ..., ) -> QuerySet[_User]: ... class AllowAllUsersModelBackend(ModelBackend): ... class RemoteUserBackend(ModelBackend): create_unknown_user: bool def authenticate(self, request: HttpRequest | None, remote_user: str) -> _User | None: ... # type: ignore[override] async def aauthenticate(self, request: HttpRequest | None, remote_user: str) -> _User | None: ... # type: ignore[override] def clean_username(self, username: str) -> str: ... def configure_user(self, request: HttpRequest, user: _UserType, created: bool = ...) -> _UserType: ... async def aconfigure_user(self, request: HttpRequest, user: _UserType, created: bool = ...) -> _UserType: ... class AllowAllUsersRemoteUserBackend(RemoteUserBackend): ... django-stubs-5.2.9/django-stubs/contrib/auth/base_user.pyi000066400000000000000000000032151513401051600236200ustar00rootroot00000000000000from collections.abc import Iterable from typing import Any, ClassVar, Literal, TypeVar, overload from django.db import models from django.db.models.base import Model from django.db.models.expressions import Combinable from django.db.models.fields import BooleanField _T = TypeVar("_T", bound=Model) class BaseUserManager(models.Manager[_T]): @classmethod def normalize_email(cls, email: str | None) -> str: ... def get_by_natural_key(self, username: str | None) -> _T: ... async def aget_by_natural_key(self, username: str | None) -> _T: ... class AbstractBaseUser(models.Model): REQUIRED_FIELDS: ClassVar[list[str]] password = models.CharField(max_length=128) last_login = models.DateTimeField(blank=True, null=True) is_active: bool | BooleanField[bool | Combinable, bool] def get_username(self) -> str: ... def natural_key(self) -> tuple[str]: ... @property def is_anonymous(self) -> Literal[False]: ... @property def is_authenticated(self) -> Literal[True]: ... def set_password(self, raw_password: str | None) -> None: ... def check_password(self, raw_password: str) -> bool: ... async def acheck_password(self, raw_password: str) -> bool: ... def set_unusable_password(self) -> None: ... def has_usable_password(self) -> bool: ... def get_session_auth_hash(self) -> str: ... def get_session_auth_fallback_hash(self) -> Iterable[str]: ... @classmethod def get_email_field_name(cls) -> str: ... @classmethod @overload def normalize_username(cls, username: str) -> str: ... @classmethod @overload def normalize_username(cls, username: Any) -> Any: ... django-stubs-5.2.9/django-stubs/contrib/auth/checks.pyi000066400000000000000000000007501513401051600231110ustar00rootroot00000000000000from collections.abc import Sequence from typing import Any from django.apps.config import AppConfig from django.core.checks.messages import CheckMessage def check_user_model(app_configs: Sequence[AppConfig] | None = ..., **kwargs: Any) -> list[CheckMessage]: ... def check_models_permissions(app_configs: Sequence[AppConfig] | None = ..., **kwargs: Any) -> list[CheckMessage]: ... def check_middleware(app_configs: Sequence[AppConfig] | None, **kwargs: Any) -> list[CheckMessage]: ... django-stubs-5.2.9/django-stubs/contrib/auth/context_processors.pyi000066400000000000000000000012261513401051600256160ustar00rootroot00000000000000from collections.abc import Iterator from typing import Any from django.http.request import HttpRequest class PermLookupDict: app_label: str user: Any def __init__(self, user: Any, app_label: str) -> None: ... def __getitem__(self, perm_name: str) -> bool: ... def __iter__(self) -> Iterator[Any]: ... def __bool__(self) -> bool: ... class PermWrapper: user: Any def __init__(self, user: Any) -> None: ... def __getitem__(self, app_label: str) -> PermLookupDict: ... def __iter__(self) -> Iterator[Any]: ... def __contains__(self, perm_name: Any) -> bool: ... def auth(request: HttpRequest) -> dict[str, Any]: ... django-stubs-5.2.9/django-stubs/contrib/auth/decorators.pyi000066400000000000000000000021221513401051600240110ustar00rootroot00000000000000from collections.abc import Awaitable, Callable, Iterable from typing import TypeVar, overload from django.contrib.auth.models import _AnyUser from django.http.response import HttpResponseBase from django.utils.functional import _StrOrPromise _VIEW = TypeVar("_VIEW", bound=Callable[..., HttpResponseBase | Awaitable[HttpResponseBase]]) def user_passes_test( test_func: Callable[[_AnyUser], bool], login_url: _StrOrPromise | None = ..., redirect_field_name: str | None = ..., ) -> Callable[[_VIEW], _VIEW]: ... # There are two ways of calling @login_required: @with(arguments) and @bare @overload def login_required( redirect_field_name: str | None = ..., login_url: _StrOrPromise | None = ... ) -> Callable[[_VIEW], _VIEW]: ... @overload def login_required( function: _VIEW, redirect_field_name: str | None = ..., login_url: _StrOrPromise | None = ... ) -> _VIEW: ... def login_not_required(view_func: _VIEW) -> _VIEW: ... def permission_required( perm: Iterable[str] | str, login_url: _StrOrPromise | None = ..., raise_exception: bool = ... ) -> Callable[[_VIEW], _VIEW]: ... django-stubs-5.2.9/django-stubs/contrib/auth/forms.pyi000066400000000000000000000121421513401051600227750ustar00rootroot00000000000000from collections.abc import Iterable from logging import Logger from typing import Any, Generic from django import forms from django.contrib.auth.models import _User, _UserModel, _UserType from django.contrib.auth.tokens import PasswordResetTokenGenerator from django.core.exceptions import ValidationError from django.db import models from django.db.models.fields import _ErrorMessagesDict from django.forms.fields import _ClassLevelWidgetT from django.forms.widgets import Widget from django.http.request import HttpRequest from django.utils.functional import _StrOrPromise logger: Logger UserModel = _UserModel class ReadOnlyPasswordHashWidget(forms.Widget): template_name: str read_only: bool def get_context(self, name: str, value: Any, attrs: dict[str, Any] | None) -> dict[str, Any]: ... class ReadOnlyPasswordHashField(forms.Field): widget: _ClassLevelWidgetT def __init__(self, *args: Any, **kwargs: Any) -> None: ... class UsernameField(forms.CharField): def to_python(self, value: Any | None) -> Any | None: ... def widget_attrs(self, widget: Widget) -> dict[str, Any]: ... class SetPasswordMixin(Generic[_UserType]): error_messages: _ErrorMessagesDict @staticmethod def create_password_fields( label1: _StrOrPromise = ..., label2: _StrOrPromise = ... ) -> tuple[forms.CharField, forms.CharField]: ... def validate_passwords( self, password1_field_name: str = ..., password2_field_name: str = ..., ) -> None: ... def validate_password_for_user(self, user: _UserType, password_field_name: str = "password2") -> None: ... def set_password_and_save( self, user: _UserType, password_field_name: str = "password1", commit: bool = True ) -> _UserType: ... class SetUnusablePasswordMixin(Generic[_UserType]): usable_password_help_text: _StrOrPromise @staticmethod def create_usable_password_field(help_text: _StrOrPromise = ...) -> forms.ChoiceField: ... def validate_passwords( self, password1_field_name: str = ..., password2_field_name: str = ..., usable_password_field_name: str = ..., ) -> None: ... def validate_password_for_user(self, user: _UserType, **kwargs: Any) -> None: ... def set_password_and_save(self, user: _User, commit: bool = True, **kwargs: Any) -> _User: ... class BaseUserCreationForm(forms.ModelForm[_UserType], Generic[_UserType]): error_messages: _ErrorMessagesDict password1: forms.Field password2: forms.Field def __init__(self, *args: Any, **kwargs: Any) -> None: ... def save(self, commit: bool = ...) -> _UserType: ... class UserCreationForm(BaseUserCreationForm[_UserType]): def clean_username(self) -> str: ... class UserChangeForm(forms.ModelForm[_UserType]): password: forms.Field def __init__(self, *args: Any, **kwargs: Any) -> None: ... class AuthenticationForm(forms.Form): username: forms.Field password: forms.Field error_messages: _ErrorMessagesDict request: HttpRequest | None user_cache: _User | None username_field: models.Field def __init__(self, request: HttpRequest | None = ..., *args: Any, **kwargs: Any) -> None: ... def confirm_login_allowed(self, user: _User) -> None: ... def get_user(self) -> _User: ... def get_invalid_login_error(self) -> ValidationError: ... def clean(self) -> dict[str, Any]: ... class PasswordResetForm(forms.Form): email: forms.Field def send_mail( self, subject_template_name: str, email_template_name: str, context: dict[str, Any], from_email: str | None, to_email: str, html_email_template_name: str | None = ..., ) -> None: ... def get_users(self, email: str) -> Iterable[_User]: ... def save( self, domain_override: str | None = ..., subject_template_name: str = ..., email_template_name: str = ..., use_https: bool = ..., token_generator: PasswordResetTokenGenerator = ..., from_email: str | None = ..., request: HttpRequest | None = ..., html_email_template_name: str | None = ..., extra_email_context: dict[str, str] | None = ..., ) -> None: ... class SetPasswordForm(SetPasswordMixin, forms.Form, Generic[_UserType]): new_password1: forms.Field new_password2: forms.Field user: _UserType def __init__(self, user: _UserType, *args: Any, **kwargs: Any) -> None: ... def save(self, commit: bool = ...) -> _UserType: ... class PasswordChangeForm(SetPasswordForm): old_password: forms.Field def clean_old_password(self) -> str: ... class AdminPasswordChangeForm(forms.Form, Generic[_UserType]): error_messages: _ErrorMessagesDict required_css_class: str usable_password_help_text: str password1: forms.Field password2: forms.Field user: _UserType def __init__(self, user: _UserType, *args: Any, **kwargs: Any) -> None: ... def save(self, commit: bool = ...) -> _UserType: ... @property def changed_data(self) -> list[str]: ... class AdminUserCreationForm(SetUnusablePasswordMixin, UserCreationForm): usable_password: forms.ChoiceField = ... django-stubs-5.2.9/django-stubs/contrib/auth/handlers/000077500000000000000000000000001513401051600227245ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/contrib/auth/handlers/__init__.pyi000066400000000000000000000000001513401051600251740ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/contrib/auth/handlers/modwsgi.pyi000066400000000000000000000003061513401051600251170ustar00rootroot00000000000000from typing import Any UserModel: Any def check_password(environ: dict[Any, Any], username: str, password: str) -> Any: ... def groups_for_user(environ: dict[Any, Any], username: str) -> Any: ... django-stubs-5.2.9/django-stubs/contrib/auth/hashers.pyi000066400000000000000000000044331513401051600233100ustar00rootroot00000000000000from collections.abc import Callable from typing import Any from django.utils.functional import _StrOrPromise UNUSABLE_PASSWORD_PREFIX: str UNUSABLE_PASSWORD_SUFFIX_LENGTH: int def is_password_usable(encoded: str | None) -> bool: ... def verify_password(password: str | None, encoded: str, preferred: str = ...) -> tuple[bool, bool]: ... def check_password(password: str | None, encoded: str, setter: Callable | None = ..., preferred: str = ...) -> bool: ... async def acheck_password( password: str | None, encoded: str, setter: Callable | None = ..., preferred: str = ... ) -> bool: ... def make_password(password: str | None, salt: str | None = ..., hasher: str | BasePasswordHasher = ...) -> str: ... def get_hashers() -> list[BasePasswordHasher]: ... def get_hashers_by_algorithm() -> dict[str, BasePasswordHasher]: ... def reset_hashers(**kwargs: Any) -> None: ... def get_hasher(algorithm: str | BasePasswordHasher = ...) -> BasePasswordHasher: ... def identify_hasher(encoded: str) -> BasePasswordHasher: ... def mask_hash(hash: str, show: int = ..., char: str = ...) -> str: ... class BasePasswordHasher: algorithm: str | None library: str | tuple[str, str] | None rounds: int time_cost: int memory_cost: int parallelism: int digest: Any iterations: int salt_entropy: int def salt(self) -> str: ... def verify(self, password: str, encoded: str) -> bool: ... def encode(self, password: str, salt: str) -> str: ... def decode(self, encoded: str) -> dict[str, Any]: ... def safe_summary(self, encoded: str) -> dict[_StrOrPromise, Any]: ... def must_update(self, encoded: str) -> bool: ... def harden_runtime(self, password: str, encoded: str) -> None: ... class PBKDF2PasswordHasher(BasePasswordHasher): def encode(self, password: str, salt: str, iterations: int | None = ...) -> str: ... def decode(self, encoded: str) -> dict[str, str | int]: ... class PBKDF2SHA1PasswordHasher(PBKDF2PasswordHasher): ... class Argon2PasswordHasher(BasePasswordHasher): ... class BCryptSHA256PasswordHasher(BasePasswordHasher): def decode(self, encoded: str) -> dict[str, str | int]: ... class BCryptPasswordHasher(BCryptSHA256PasswordHasher): ... class MD5PasswordHasher(BasePasswordHasher): def decode(self, encoded: str) -> dict[str, str]: ... django-stubs-5.2.9/django-stubs/contrib/auth/management/000077500000000000000000000000001513401051600232405ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/contrib/auth/management/__init__.pyi000066400000000000000000000006261513401051600255260ustar00rootroot00000000000000from typing import Any from django.apps.config import AppConfig from django.apps.registry import Apps def create_permissions( app_config: AppConfig, verbosity: int = ..., interactive: bool = ..., using: str = ..., apps: Apps = ..., **kwargs: Any, ) -> None: ... def get_system_username() -> str: ... def get_default_username(check_db: bool = ..., database: str = ...) -> str: ... django-stubs-5.2.9/django-stubs/contrib/auth/management/commands/000077500000000000000000000000001513401051600250415ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/contrib/auth/management/commands/__init__.pyi000066400000000000000000000000001513401051600273110ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/contrib/auth/management/commands/changepassword.pyi000066400000000000000000000001751513401051600305770ustar00rootroot00000000000000from typing import Any from django.core.management.base import BaseCommand UserModel: Any class Command(BaseCommand): ... django-stubs-5.2.9/django-stubs/contrib/auth/management/commands/createsuperuser.pyi000066400000000000000000000011231513401051600310020ustar00rootroot00000000000000import getpass as getpass from typing import Any from django.contrib.auth.base_user import AbstractBaseUser from django.core.management.base import BaseCommand from django.db.models import Field from django.utils.functional import cached_property class NotRunningInTTYException(Exception): ... PASSWORD_FIELD: str class Command(BaseCommand): UserModel: type[AbstractBaseUser] username_field: Field stdin: Any def get_input_data(self, field: Field, message: str, default: str | None = ...) -> str | None: ... @cached_property def username_is_unique(self) -> bool: ... django-stubs-5.2.9/django-stubs/contrib/auth/middleware.pyi000066400000000000000000000040031513401051600237610ustar00rootroot00000000000000from collections.abc import Awaitable, Callable from typing import Any, ClassVar, Literal from django.contrib.auth.models import _AnyUser from django.http import HttpRequest, HttpResponseBase, HttpResponseRedirect from django.utils.deprecation import MiddlewareMixin, _AsyncGetResponseCallable, _GetResponseCallable def get_user(request: HttpRequest) -> _AnyUser: ... async def auser(request: HttpRequest) -> _AnyUser: ... class AuthenticationMiddleware(MiddlewareMixin): def process_request(self, request: HttpRequest) -> None: ... class LoginRequiredMiddleware(MiddlewareMixin): redirect_field_name: ClassVar[str] def process_view( self, request: HttpRequest, view_func: Callable[..., HttpResponseBase], view_args: tuple[Any, ...], view_kwargs: dict[Any, Any], ) -> HttpResponseBase | None: ... def get_login_url(self, view_func: Callable[..., HttpResponseBase]) -> str: ... def get_redirect_field_name(self, view_func: Callable[..., HttpResponseBase]) -> str: ... def handle_no_permission( self, request: HttpRequest, view_func: Callable[..., HttpResponseBase] ) -> HttpResponseRedirect: ... class RemoteUserMiddleware: header: ClassVar[str] force_logout_if_no_header: ClassVar[bool] sync_capable: ClassVar[Literal[True]] async_capable: ClassVar[Literal[True]] get_response: _GetResponseCallable | _AsyncGetResponseCallable is_async: bool def __init__(self, get_response: _GetResponseCallable | _AsyncGetResponseCallable) -> None: ... def __call__(self, request: HttpRequest) -> HttpResponseBase | Awaitable[HttpResponseBase]: ... async def __acall__(self, request: HttpRequest) -> HttpResponseBase: ... def clean_username(self, username: str, request: HttpRequest) -> str: ... def process_request(self, request: HttpRequest) -> None: ... async def aprocess_request(self, request: HttpRequest) -> None: ... class PersistentRemoteUserMiddleware(RemoteUserMiddleware): force_logout_if_no_header: ClassVar[bool] django-stubs-5.2.9/django-stubs/contrib/auth/migrations/000077500000000000000000000000001513401051600233005ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/contrib/auth/migrations/__init__.pyi000066400000000000000000000000001513401051600255500ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/contrib/auth/mixins.pyi000066400000000000000000000023351513401051600231610ustar00rootroot00000000000000from collections.abc import Callable, Sequence from typing import Any from django import http from django.http.response import HttpResponseBase, HttpResponseRedirect from django.utils.functional import _StrOrPromise class AccessMixin: login_url: _StrOrPromise | None permission_denied_message: _StrOrPromise raise_exception: bool redirect_field_name: Any def get_login_url(self) -> str: ... def get_permission_denied_message(self) -> _StrOrPromise: ... def get_redirect_field_name(self) -> str: ... def handle_no_permission(self) -> HttpResponseRedirect: ... class LoginRequiredMixin(AccessMixin): def dispatch(self, request: http.HttpRequest, *args: Any, **kwargs: Any) -> HttpResponseBase: ... class PermissionRequiredMixin(AccessMixin): permission_required: Any def get_permission_required(self) -> Sequence[str]: ... def has_permission(self) -> bool: ... def dispatch(self, request: http.HttpRequest, *args: Any, **kwargs: Any) -> HttpResponseBase: ... class UserPassesTestMixin(AccessMixin): def test_func(self) -> bool | None: ... def get_test_func(self) -> Callable: ... def dispatch(self, request: http.HttpRequest, *args: Any, **kwargs: Any) -> HttpResponseBase: ... django-stubs-5.2.9/django-stubs/contrib/auth/models.pyi000066400000000000000000000146371513401051600231450ustar00rootroot00000000000000from collections.abc import Iterable from typing import Any, ClassVar, Literal, TypeAlias, TypeVar from django.contrib.auth.base_user import AbstractBaseUser as AbstractBaseUser from django.contrib.auth.base_user import BaseUserManager as BaseUserManager from django.contrib.auth.validators import UnicodeUsernameValidator from django.contrib.contenttypes.models import ContentType from django.db import models from django.db.models import QuerySet from django.db.models.base import Model from django.db.models.manager import EmptyManager from django.utils.functional import _StrOrPromise from typing_extensions import Self # This is our "placeholder" type the mypy plugin refines to configured 'AUTH_USER_MODEL' # wherever it is used as a type. The most recognised example of this is (probably) # `HttpRequest.user` _User: TypeAlias = AbstractBaseUser _UserModel: TypeAlias = type[_User] _AnyUser: TypeAlias = _User | AnonymousUser # These are only needed for generic classes in order to bind to a specific implementation _AnyUserType = TypeVar("_AnyUserType", bound=_AnyUser) # noqa: PYI018 # do not use the alias `_User` so the bound remains at `AbstractBaseUser` _UserType = TypeVar("_UserType", bound=AbstractBaseUser) def update_last_login(sender: _UserModel, user: _User, **kwargs: Any) -> None: ... class PermissionManager(models.Manager[Permission]): def get_by_natural_key(self, codename: str, app_label: str, model: str) -> Permission: ... class Permission(models.Model): content_type_id: int objects: ClassVar[PermissionManager] name = models.CharField(max_length=255) content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE) codename = models.CharField(max_length=100) def natural_key(self) -> tuple[str, str, str]: ... class GroupManager(models.Manager[Group]): def get_by_natural_key(self, name: str) -> Group: ... async def aget_by_natural_key(self, name: str) -> Group: ... class Group(models.Model): objects: ClassVar[GroupManager] name = models.CharField(max_length=150) permissions = models.ManyToManyField(Permission) def natural_key(self) -> tuple[str]: ... class UserManager(BaseUserManager[_UserType]): def create_user( self, username: str, email: str | None = ..., password: str | None = ..., **extra_fields: Any ) -> _UserType: ... async def acreate_user( self, username: str, email: str | None = ..., password: str | None = ..., **extra_fields: Any ) -> _UserType: ... def create_superuser( self, username: str, email: str | None = ..., password: str | None = ..., **extra_fields: Any ) -> _UserType: ... async def acreate_superuser( self, username: str, email: str | None = ..., password: str | None = ..., **extra_fields: Any ) -> _UserType: ... def with_perm( self, perm: str | Permission, is_active: bool = ..., include_superusers: bool = ..., backend: str | None = ..., obj: Model | None = ..., ) -> QuerySet[_UserType]: ... class PermissionsMixin(models.Model): is_superuser = models.BooleanField() groups = models.ManyToManyField(Group) user_permissions = models.ManyToManyField(Permission) def get_user_permissions(self, obj: Model | None = ...) -> set[str]: ... async def aget_user_permissions(self, obj: Model | None = ...) -> set[str]: ... def get_group_permissions(self, obj: Model | None = ...) -> set[str]: ... async def aget_group_permissions(self, obj: Model | None = ...) -> set[str]: ... def get_all_permissions(self, obj: Model | None = ...) -> set[str]: ... async def aget_all_permissions(self, obj: Model | None = ...) -> set[str]: ... def has_perm(self, perm: str, obj: Model | None = ...) -> bool: ... async def ahas_perm(self, perm: str, obj: Model | None = ...) -> bool: ... def has_perms(self, perm_list: Iterable[str], obj: Model | None = ...) -> bool: ... async def ahas_perms(self, perm_list: Iterable[str], obj: Model | None = ...) -> bool: ... def has_module_perms(self, app_label: str) -> bool: ... async def ahas_module_perms(self, app_label: str) -> bool: ... class AbstractUser(AbstractBaseUser, PermissionsMixin): username_validator: UnicodeUsernameValidator username = models.CharField(max_length=150) first_name = models.CharField(max_length=30, blank=True) last_name = models.CharField(max_length=150, blank=True) email = models.EmailField(blank=True) is_staff = models.BooleanField() is_active = models.BooleanField() date_joined = models.DateTimeField() objects: ClassVar[UserManager[Self]] EMAIL_FIELD: str USERNAME_FIELD: str def get_full_name(self) -> str: ... def get_short_name(self) -> str: ... def email_user( self, subject: _StrOrPromise, message: _StrOrPromise, from_email: str = ..., **kwargs: Any ) -> None: ... class User(AbstractUser): ... class AnonymousUser: id: None pk: None username: Literal[""] is_staff: Literal[False] is_active: Literal[False] is_superuser: Literal[False] def save(self) -> None: ... def delete(self) -> None: ... def set_password(self, raw_password: str) -> None: ... def check_password(self, raw_password: str) -> Any: ... @property def groups(self) -> EmptyManager[Group]: ... @property def user_permissions(self) -> EmptyManager[Permission]: ... def get_user_permissions(self, obj: Model | None = ...) -> set[str]: ... async def aget_user_permissions(self, obj: Model | None = ...) -> set[str]: ... def get_group_permissions(self, obj: Model | None = ...) -> set[Any]: ... async def aget_group_permissions(self, obj: Model | None = ...) -> set[Any]: ... def get_all_permissions(self, obj: Model | None = ...) -> set[str]: ... async def aget_all_permissions(self, obj: Model | None = ...) -> set[str]: ... def has_perm(self, perm: str, obj: Model | None = ...) -> bool: ... async def ahas_perm(self, perm: str, obj: Model | None = ...) -> bool: ... def has_perms(self, perm_list: Iterable[str], obj: Model | None = ...) -> bool: ... async def ahas_perms(self, perm_list: Iterable[str], obj: Model | None = ...) -> bool: ... def has_module_perms(self, module: str) -> bool: ... async def ahas_module_perms(self, module: str) -> bool: ... @property def is_anonymous(self) -> Literal[True]: ... @property def is_authenticated(self) -> Literal[False]: ... def get_username(self) -> str: ... django-stubs-5.2.9/django-stubs/contrib/auth/password_validation.pyi000066400000000000000000000042151513401051600257250ustar00rootroot00000000000000from collections.abc import Mapping, Sequence from pathlib import Path, PosixPath from typing import Any, Protocol, type_check_only from django.contrib.auth.models import _User @type_check_only class PasswordValidator(Protocol): def validate(self, password: str, user: _User | None = ..., /) -> None: ... def get_help_text(self) -> str: ... def get_default_password_validators() -> list[PasswordValidator]: ... def get_password_validators(validator_config: Sequence[Mapping[str, Any]]) -> list[PasswordValidator]: ... def validate_password( password: str, user: _User | None = ..., password_validators: Sequence[PasswordValidator] | None = ... ) -> None: ... def password_changed( password: str, user: _User | None = ..., password_validators: Sequence[PasswordValidator] | None = ... ) -> None: ... def password_validators_help_texts(password_validators: Sequence[PasswordValidator] | None = ...) -> list[str]: ... password_validators_help_text_html: Any class MinimumLengthValidator: min_length: int def __init__(self, min_length: int = ...) -> None: ... def validate(self, password: str, user: _User | None = ...) -> None: ... def get_help_text(self) -> str: ... def get_error_message(self) -> str: ... class UserAttributeSimilarityValidator: DEFAULT_USER_ATTRIBUTES: Sequence[str] user_attributes: Sequence[str] max_similarity: float def __init__(self, user_attributes: Sequence[str] = ..., max_similarity: float = ...) -> None: ... def validate(self, password: str, user: _User | None = ...) -> None: ... def get_help_text(self) -> str: ... def get_error_message(self) -> str: ... class CommonPasswordValidator: DEFAULT_PASSWORD_LIST_PATH: Path passwords: set[str] def __init__(self, password_list_path: Path | PosixPath | str = ...) -> None: ... def validate(self, password: str, user: _User | None = ...) -> None: ... def get_help_text(self) -> str: ... def get_error_message(self) -> str: ... class NumericPasswordValidator: def validate(self, password: str, user: _User | None = ...) -> None: ... def get_help_text(self) -> str: ... def get_error_message(self) -> str: ... django-stubs-5.2.9/django-stubs/contrib/auth/signals.pyi000066400000000000000000000001701513401051600233050ustar00rootroot00000000000000from django.dispatch.dispatcher import Signal user_logged_in: Signal user_login_failed: Signal user_logged_out: Signal django-stubs-5.2.9/django-stubs/contrib/auth/tokens.pyi000066400000000000000000000012451513401051600231540ustar00rootroot00000000000000from datetime import date, datetime from typing import Any from django.contrib.auth.models import _User class PasswordResetTokenGenerator: key_salt: str secret: str | bytes secret_fallbacks: list[str | bytes] algorithm: str def make_token(self, user: _User) -> str: ... def check_token(self, user: _User | None, token: str | None) -> bool: ... def _make_token_with_timestamp(self, user: _User, timestamp: int, secret: str | bytes = ...) -> str: ... def _make_hash_value(self, user: _User, timestamp: int) -> str: ... def _num_seconds(self, dt: datetime | date) -> int: ... def _now(self) -> datetime: ... default_token_generator: Any django-stubs-5.2.9/django-stubs/contrib/auth/urls.pyi000066400000000000000000000000741513401051600226350ustar00rootroot00000000000000from django.urls import _AnyURL urlpatterns: list[_AnyURL] django-stubs-5.2.9/django-stubs/contrib/auth/validators.pyi000066400000000000000000000002311513401051600240130ustar00rootroot00000000000000from django.core.validators import RegexValidator class ASCIIUsernameValidator(RegexValidator): ... class UnicodeUsernameValidator(RegexValidator): ... django-stubs-5.2.9/django-stubs/contrib/auth/views.pyi000066400000000000000000000047731513401051600230170ustar00rootroot00000000000000from typing import Any, TypeVar from django.contrib.auth.forms import AuthenticationForm from django.contrib.auth.models import _User, _UserModel from django.http.request import HttpRequest from django.http.response import HttpResponse, HttpResponseRedirect from django.views.generic.base import TemplateView from django.views.generic.edit import FormView UserModel = _UserModel _AuthForm = TypeVar("_AuthForm", bound=AuthenticationForm, default=AuthenticationForm) class RedirectURLMixin: next_page: str | None redirect_field_name: str success_url_allowed_hosts: set[str] def get_success_url(self) -> str: ... def get_redirect_url(self) -> str: ... def get_success_url_allowed_hosts(self) -> set[str]: ... def get_default_redirect_url(self) -> str: ... class LoginView(RedirectURLMixin, FormView[_AuthForm]): authentication_form: Any redirect_field_name: Any redirect_authenticated_user: bool extra_context: Any def get_redirect_url(self) -> str: ... class LogoutView(RedirectURLMixin, TemplateView): next_page: str | None redirect_field_name: str extra_context: Any def dispatch(self, request: HttpRequest, *args: Any, **kwargs: Any) -> HttpResponse: ... def post(self, request: HttpRequest, *args: Any, **kwargs: Any) -> HttpResponse: ... def logout_then_login(request: HttpRequest, login_url: str | None = ...) -> HttpResponseRedirect: ... def redirect_to_login( next: str, login_url: str | None = ..., redirect_field_name: str | None = ... ) -> HttpResponseRedirect: ... class PasswordContextMixin: extra_context: Any def get_context_data(self, **kwargs: Any) -> dict[str, Any]: ... class PasswordResetView(PasswordContextMixin, FormView): email_template_name: str extra_email_context: Any from_email: Any html_email_template_name: Any subject_template_name: str title: Any token_generator: Any INTERNAL_RESET_SESSION_TOKEN: str class PasswordResetDoneView(PasswordContextMixin, TemplateView): title: Any class PasswordResetConfirmView(PasswordContextMixin, FormView): post_reset_login: bool post_reset_login_backend: Any reset_url_token: str title: Any token_generator: Any validlink: bool user: Any def get_user(self, uidb64: str) -> _User | None: ... class PasswordResetCompleteView(PasswordContextMixin, TemplateView): title: Any class PasswordChangeView(PasswordContextMixin, FormView): title: Any class PasswordChangeDoneView(PasswordContextMixin, TemplateView): title: Any django-stubs-5.2.9/django-stubs/contrib/contenttypes/000077500000000000000000000000001513401051600227225ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/contrib/contenttypes/__init__.pyi000066400000000000000000000000001513401051600251720ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/contrib/contenttypes/admin.pyi000066400000000000000000000014361513401051600245410ustar00rootroot00000000000000from typing import Any from django.contrib.admin.checks import InlineModelAdminChecks from django.contrib.admin.options import InlineModelAdmin from django.contrib.contenttypes.forms import BaseGenericInlineFormSet from django.db.models.base import Model class GenericInlineModelAdminChecks(InlineModelAdminChecks): def _check_exclude_of_parent_model(self, obj: GenericInlineModelAdmin, parent_model: type[Model]) -> list[Any]: ... def _check_relation(self, obj: GenericInlineModelAdmin, parent_model: type[Model]) -> list[Any]: ... class GenericInlineModelAdmin(InlineModelAdmin): template: str formset: type[BaseGenericInlineFormSet] # type: ignore[assignment] class GenericStackedInline(GenericInlineModelAdmin): ... class GenericTabularInline(GenericInlineModelAdmin): ... django-stubs-5.2.9/django-stubs/contrib/contenttypes/apps.pyi000066400000000000000000000001141513401051600244040ustar00rootroot00000000000000from django.apps import AppConfig class ContentTypesConfig(AppConfig): ... django-stubs-5.2.9/django-stubs/contrib/contenttypes/checks.pyi000066400000000000000000000006141513401051600247060ustar00rootroot00000000000000from collections.abc import Sequence from typing import Any from django.apps.config import AppConfig from django.core.checks.messages import CheckMessage def check_generic_foreign_keys(app_configs: Sequence[AppConfig] | None = None, **kwargs: Any) -> list[CheckMessage]: ... def check_model_name_lengths(app_configs: Sequence[AppConfig] | None = None, **kwargs: Any) -> list[CheckMessage]: ... django-stubs-5.2.9/django-stubs/contrib/contenttypes/fields.pyi000066400000000000000000000104631513401051600247170ustar00rootroot00000000000000from collections.abc import Callable from typing import Any from django.contrib.contenttypes.models import ContentType from django.core.checks.messages import CheckMessage from django.db.models.base import Model from django.db.models.expressions import Combinable from django.db.models.fields import Field from django.db.models.fields.mixins import FieldCacheMixin from django.db.models.fields.related import ForeignObject from django.db.models.fields.related_descriptors import ReverseManyToOneDescriptor from django.db.models.fields.reverse_related import ForeignObjectRel from django.db.models.query import QuerySet from django.db.models.query_utils import FilteredRelation, PathInfo from django.db.models.sql.where import WhereNode from typing_extensions import deprecated class GenericForeignKey(FieldCacheMixin): # django-stubs implementation only fields _pyi_private_set_type: Any | Combinable _pyi_private_get_type: Any # attributes auto_created: bool concrete: bool editable: bool hidden: bool is_relation: bool many_to_many: bool many_to_one: bool one_to_many: bool one_to_one: bool related_model: Any remote_field: Any ct_field: str fk_field: str for_concrete_model: bool rel: None column: None def __init__(self, ct_field: str = ..., fk_field: str = ..., for_concrete_model: bool = ...) -> None: ... name: Any model: Any def contribute_to_class(self, cls: type[Model], name: str, **kwargs: Any) -> None: ... def get_attname_column(self) -> tuple[str, None]: ... def get_filter_kwargs_for_object(self, obj: Model) -> dict[str, ContentType | None]: ... def get_forward_related_filter(self, obj: Model) -> dict[str, int]: ... def check(self, **kwargs: Any) -> list[CheckMessage]: ... def get_content_type( self, obj: Model | None = ..., id: int | None = ..., using: str | None = ..., model: type[Model] | None = ... ) -> ContentType: ... @deprecated( "get_prefetch_queryset() is deprecated and will be removed in Django 6.0. Use get_prefetch_querysets() instead." ) def get_prefetch_queryset( self, instances: list[Model] | QuerySet, queryset: QuerySet | None = ... ) -> tuple[list[Model], Callable, Callable, bool, str, bool]: ... def get_prefetch_querysets( self, instances: list[Model] | QuerySet, querysets: list[QuerySet] | None = ... ) -> tuple[list[Model], Callable, Callable, bool, str, bool]: ... def __get__(self, instance: Model | None, cls: type[Model] | None = ...) -> Any | None: ... def __set__(self, instance: Model, value: Any | None) -> None: ... class GenericRel(ForeignObjectRel): field: GenericRelation def __init__( self, field: GenericRelation, to: type[Model] | str, related_name: str | None = ..., related_query_name: str | None = ..., limit_choices_to: dict[str, Any] | Callable[[], Any] | None = ..., ) -> None: ... class GenericRelation(ForeignObject[Any, Any]): rel_class: Any mti_inherited: bool object_id_field_name: str content_type_field_name: str for_concrete_model: bool to_fields: Any def __init__( self, to: type[Model] | str, object_id_field: str = ..., content_type_field: str = ..., for_concrete_model: bool = ..., related_query_name: str | None = ..., limit_choices_to: dict[str, Any] | Callable[[], Any] | None = ..., **kwargs: Any, ) -> None: ... def resolve_related_fields(self) -> list[tuple[Field, Field]]: ... def get_path_info(self, filtered_relation: FilteredRelation | None = ...) -> list[PathInfo]: ... def get_reverse_path_info(self, filtered_relation: FilteredRelation | None = ...) -> list[PathInfo]: ... def contribute_to_class(self, cls: type[Model], name: str, **kwargs: Any) -> None: ... # type: ignore[override] def get_content_type(self) -> ContentType: ... def get_extra_restriction( self, where_class: type[WhereNode], alias: str | None, remote_alias: str ) -> WhereNode: ... def bulk_related_objects(self, objs: list[Model], using: str = ...) -> QuerySet: ... class ReverseGenericManyToOneDescriptor(ReverseManyToOneDescriptor): ... def create_generic_related_manager(superclass: Any, rel: Any) -> type[Any]: ... # GenericRelatedObjectManager django-stubs-5.2.9/django-stubs/contrib/contenttypes/forms.pyi000066400000000000000000000026151513401051600245770ustar00rootroot00000000000000from typing import Any, TypeVar from django.db.models import Model from django.forms.models import BaseModelFormSet, ModelForm _M = TypeVar("_M", bound=Model) _ModelFormT = TypeVar("_ModelFormT", bound=ModelForm) class BaseGenericInlineFormSet(BaseModelFormSet[_M, _ModelFormT]): instance: Any rel_name: Any save_as_new: Any def __init__( self, data: Any | None = ..., files: Any | None = ..., instance: Any | None = ..., save_as_new: bool = ..., prefix: Any | None = ..., queryset: Any | None = ..., **kwargs: Any, ) -> None: ... def initial_form_count(self) -> int: ... @classmethod def get_default_prefix(cls) -> str: ... def save_new(self, form: Any, commit: bool = ...) -> _M: ... def generic_inlineformset_factory( model: type[_M], form: type[_ModelFormT] = ..., formset: Any = ..., ct_field: str = ..., fk_field: str = ..., fields: Any | None = ..., exclude: Any | None = ..., extra: int = ..., can_order: bool = ..., can_delete: bool = ..., max_num: Any | None = ..., formfield_callback: Any | None = ..., validate_max: bool = ..., for_concrete_model: bool = ..., min_num: Any | None = ..., validate_min: bool = ..., absolute_max: int | None = ..., can_delete_extra: bool = ..., ) -> type[BaseGenericInlineFormSet[_M, _ModelFormT]]: ... django-stubs-5.2.9/django-stubs/contrib/contenttypes/management/000077500000000000000000000000001513401051600250365ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/contrib/contenttypes/management/__init__.pyi000066400000000000000000000024451513401051600273250ustar00rootroot00000000000000from typing import Any from django.apps.config import AppConfig from django.apps.registry import Apps from django.contrib.contenttypes.models import ContentType from django.db import migrations from django.db.backends.sqlite3.schema import DatabaseSchemaEditor from django.db.migrations.migration import Migration from django.db.migrations.state import StateApps from django.db.models.base import Model class RenameContentType(migrations.RunPython): app_label: str old_model: str new_model: str def __init__(self, app_label: str, old_model: str, new_model: str) -> None: ... def rename_forward(self, apps: StateApps, schema_editor: DatabaseSchemaEditor) -> None: ... def rename_backward(self, apps: StateApps, schema_editor: DatabaseSchemaEditor) -> None: ... def inject_rename_contenttypes_operations( plan: list[tuple[Migration, bool]] | None = None, apps: StateApps = ..., using: str = "default", **kwargs: Any ) -> None: ... def get_contenttypes_and_models( app_config: AppConfig, using: str, ContentType: type[ContentType] ) -> tuple[dict[str, ContentType], dict[str, type[Model]]]: ... def create_contenttypes( app_config: AppConfig, verbosity: int = 2, interactive: bool = True, using: str = "default", apps: Apps = ..., **kwargs: Any, ) -> None: ... django-stubs-5.2.9/django-stubs/contrib/contenttypes/management/commands/000077500000000000000000000000001513401051600266375ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/contrib/contenttypes/management/commands/__init__.pyi000066400000000000000000000000001513401051600311070ustar00rootroot00000000000000remove_stale_contenttypes.pyi000066400000000000000000000005531513401051600346120ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/contrib/contenttypes/management/commandsfrom typing import Any, Literal from _typeshed import Unused from django.core.management import BaseCommand from django.db.models.deletion import Collector class Command(BaseCommand): def handle(self, **options: Any) -> None: ... class NoFastDeleteCollector(Collector): def can_fast_delete(self, *args: Unused, **kwargs: Unused) -> Literal[False]: ... django-stubs-5.2.9/django-stubs/contrib/contenttypes/migrations/000077500000000000000000000000001513401051600250765ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/contrib/contenttypes/migrations/__init__.pyi000066400000000000000000000000001513401051600273460ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/contrib/contenttypes/models.pyi000066400000000000000000000021141513401051600247260ustar00rootroot00000000000000from typing import Any, ClassVar from django.db import models from django.db.models.base import Model from django.db.models.query import QuerySet class ContentTypeManager(models.Manager[ContentType]): def get_by_natural_key(self, app_label: str, model: str) -> ContentType: ... def get_for_model(self, model: type[Model] | Model, for_concrete_model: bool = ...) -> ContentType: ... def get_for_models(self, *models: Any, for_concrete_models: bool = ...) -> dict[type[Model], ContentType]: ... def get_for_id(self, id: int) -> ContentType: ... def clear_cache(self) -> None: ... class ContentType(models.Model): id: int app_label = models.CharField(max_length=100) model = models.CharField(max_length=100) objects: ClassVar[ContentTypeManager] @property def name(self) -> str: ... def model_class(self) -> type[Model] | None: ... def get_object_for_this_type(self, using: str | None = None, **kwargs: Any) -> Model: ... def get_all_objects_for_this_type(self, **kwargs: Any) -> QuerySet: ... def natural_key(self) -> tuple[str, str]: ... django-stubs-5.2.9/django-stubs/contrib/contenttypes/prefetch.pyi000066400000000000000000000021421513401051600252440ustar00rootroot00000000000000from typing import Any, Generic, TypeVar from django.db.models import Model, Prefetch from django.db.models.query import QuerySet # The type of the lookup passed to Prefetch(...) # This will be specialized to a `LiteralString` in the plugin for further processing and validation _LookupT = TypeVar("_LookupT", bound=str, covariant=True) # The type of the querysets passed to GenericPrefetch(...) _PrefetchedQuerySetsT = TypeVar( "_PrefetchedQuerySetsT", bound=list[QuerySet[Model]], covariant=True, default=list[QuerySet[Model]] ) # The attribute name to store the prefetched list[_PrefetchedQuerySetT] # This will be specialized to a `LiteralString` in the plugin for further processing and validation _ToAttrT = TypeVar("_ToAttrT", bound=str, covariant=True, default=str) class GenericPrefetch(Prefetch, Generic[_LookupT, _PrefetchedQuerySetsT, _ToAttrT]): def __init__(self, lookup: _LookupT, querysets: _PrefetchedQuerySetsT, to_attr: _ToAttrT | None = None) -> None: ... def __getstate__(self) -> dict[str, Any]: ... def get_current_querysets(self, level: int) -> _PrefetchedQuerySetsT | None: ... django-stubs-5.2.9/django-stubs/contrib/contenttypes/views.pyi000066400000000000000000000003251513401051600246020ustar00rootroot00000000000000from django.http.request import HttpRequest from django.http.response import HttpResponseRedirect def shortcut(request: HttpRequest, content_type_id: int | str, object_id: int | str) -> HttpResponseRedirect: ... django-stubs-5.2.9/django-stubs/contrib/flatpages/000077500000000000000000000000001513401051600221315ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/contrib/flatpages/__init__.pyi000066400000000000000000000000001513401051600244010ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/contrib/flatpages/admin.pyi000066400000000000000000000004531513401051600237460ustar00rootroot00000000000000from typing import Any, ClassVar from django.contrib import admin from django.contrib.flatpages.models import FlatPage class FlatPageAdmin(admin.ModelAdmin[FlatPage]): form: Any fieldsets: ClassVar[Any] list_display: Any list_filter: ClassVar[Any] search_fields: ClassVar[Any] django-stubs-5.2.9/django-stubs/contrib/flatpages/apps.pyi000066400000000000000000000002011513401051600236100ustar00rootroot00000000000000from typing import Any from django.apps import AppConfig class FlatPagesConfig(AppConfig): name: str verbose_name: Any django-stubs-5.2.9/django-stubs/contrib/flatpages/forms.pyi000066400000000000000000000002101513401051600237730ustar00rootroot00000000000000from typing import Any from django import forms class FlatpageForm(forms.ModelForm): url: Any def clean_url(self) -> str: ... django-stubs-5.2.9/django-stubs/contrib/flatpages/middleware.pyi000066400000000000000000000004451513401051600247740ustar00rootroot00000000000000from django.http.request import HttpRequest from django.http.response import HttpResponse from django.utils.deprecation import MiddlewareMixin class FlatpageFallbackMiddleware(MiddlewareMixin): def process_response(self, request: HttpRequest, response: HttpResponse) -> HttpResponse: ... django-stubs-5.2.9/django-stubs/contrib/flatpages/migrations/000077500000000000000000000000001513401051600243055ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/contrib/flatpages/migrations/__init__.pyi000066400000000000000000000000001513401051600265550ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/contrib/flatpages/models.pyi000066400000000000000000000006221513401051600241370ustar00rootroot00000000000000from django.contrib.sites.models import Site from django.db import models class FlatPage(models.Model): url: models.CharField title: models.CharField content: models.TextField enable_comments: models.BooleanField template_name: models.CharField registration_required: models.BooleanField sites: models.ManyToManyField[Site, Site] def get_absolute_url(self) -> str: ... django-stubs-5.2.9/django-stubs/contrib/flatpages/sitemaps.pyi000066400000000000000000000001211513401051600244730ustar00rootroot00000000000000from django.contrib.sitemaps import Sitemap class FlatPageSitemap(Sitemap): ... django-stubs-5.2.9/django-stubs/contrib/flatpages/templatetags/000077500000000000000000000000001513401051600246235ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/contrib/flatpages/templatetags/__init__.pyi000066400000000000000000000000001513401051600270730ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/contrib/flatpages/templatetags/flatpages.pyi000066400000000000000000000007441513401051600273210ustar00rootroot00000000000000from typing import Any from django import template from django.template.base import Parser, Token from django.template.context import Context register: Any class FlatpageNode(template.Node): context_name: str starts_with: None user: None def __init__(self, context_name: str, starts_with: str | None = ..., user: str | None = ...) -> None: ... def render(self, context: Context) -> str: ... def get_flatpages(parser: Parser, token: Token) -> FlatpageNode: ... django-stubs-5.2.9/django-stubs/contrib/flatpages/urls.pyi000066400000000000000000000000741513401051600236420ustar00rootroot00000000000000from django.urls import _AnyURL urlpatterns: list[_AnyURL] django-stubs-5.2.9/django-stubs/contrib/flatpages/views.pyi000066400000000000000000000004651513401051600240160ustar00rootroot00000000000000from django.contrib.flatpages.models import FlatPage from django.http.request import HttpRequest from django.http.response import HttpResponse DEFAULT_TEMPLATE: str def flatpage(request: HttpRequest, url: str) -> HttpResponse: ... def render_flatpage(request: HttpRequest, f: FlatPage) -> HttpResponse: ... django-stubs-5.2.9/django-stubs/contrib/gis/000077500000000000000000000000001513401051600207455ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/contrib/gis/__init__.pyi000066400000000000000000000000001513401051600232150ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/contrib/gis/admin/000077500000000000000000000000001513401051600220355ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/contrib/gis/admin/__init__.pyi000066400000000000000000000016261513401051600243240ustar00rootroot00000000000000from django.contrib.admin import HORIZONTAL as HORIZONTAL from django.contrib.admin import VERTICAL as VERTICAL from django.contrib.admin import AdminSite as AdminSite from django.contrib.admin import ModelAdmin as ModelAdmin from django.contrib.admin import StackedInline as StackedInline from django.contrib.admin import TabularInline as TabularInline from django.contrib.admin import action as action from django.contrib.admin import autodiscover as autodiscover from django.contrib.admin import display as display from django.contrib.admin import register as register from django.contrib.admin import site as site from django.contrib.gis.admin.options import GISModelAdmin as GISModelAdmin __all__ = [ "HORIZONTAL", "VERTICAL", "AdminSite", "GISModelAdmin", "ModelAdmin", "StackedInline", "TabularInline", "action", "autodiscover", "display", "register", "site", ] django-stubs-5.2.9/django-stubs/contrib/gis/admin/options.pyi000066400000000000000000000003471513401051600242570ustar00rootroot00000000000000from typing import Any from django.contrib.admin import ModelAdmin from django.contrib.gis.forms import BaseGeometryWidget class GISModelAdmin(ModelAdmin): gis_widget: BaseGeometryWidget gis_widget_kwargs: dict[str, Any] django-stubs-5.2.9/django-stubs/contrib/gis/apps.pyi000066400000000000000000000001031513401051600224250ustar00rootroot00000000000000from django.apps import AppConfig class GISConfig(AppConfig): ... django-stubs-5.2.9/django-stubs/contrib/gis/db/000077500000000000000000000000001513401051600213325ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/contrib/gis/db/__init__.pyi000066400000000000000000000000001513401051600236020ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/contrib/gis/db/backends/000077500000000000000000000000001513401051600231045ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/contrib/gis/db/backends/__init__.pyi000066400000000000000000000000001513401051600253540ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/contrib/gis/db/backends/base/000077500000000000000000000000001513401051600240165ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/contrib/gis/db/backends/base/__init__.pyi000066400000000000000000000000001513401051600262660ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/contrib/gis/db/backends/base/adapter.pyi000066400000000000000000000003101513401051600261530ustar00rootroot00000000000000from typing import Any class WKTAdapter: wkt: Any srid: Any def __init__(self, geom: Any) -> None: ... def __eq__(self, other: object) -> bool: ... def __hash__(self) -> int: ... django-stubs-5.2.9/django-stubs/contrib/gis/db/backends/base/features.pyi000066400000000000000000000031361513401051600263620ustar00rootroot00000000000000from typing import Any class BaseSpatialFeatures: gis_enabled: bool has_spatialrefsys_table: bool supports_add_srs_entry: bool supports_geometry_field_introspection: bool supports_geography: bool supports_3d_storage: bool supports_3d_functions: bool supports_transform: bool supports_null_geometries: bool supports_empty_geometries: bool supports_distance_geodetic: bool supports_length_geodetic: bool supports_perimeter_geodetic: bool supports_area_geodetic: bool supports_num_points_poly: bool supports_left_right_lookups: bool supports_dwithin_distance_expr: bool supports_raster: bool supports_geometry_field_unique_index: bool can_alter_geometry_field: bool supports_tolerance_parameter: bool unsupported_geojson_options: set[str] empty_intersection_returns_none: bool @property def supports_bbcontains_lookup(self) -> bool: ... @property def supports_contained_lookup(self) -> bool: ... @property def supports_crosses_lookup(self) -> bool: ... @property def supports_distances_lookups(self) -> bool: ... @property def supports_dwithin_lookup(self) -> bool: ... @property def supports_relate_lookup(self) -> bool: ... @property def supports_isvalid_lookup(self) -> bool: ... @property def supports_collect_aggr(self) -> bool: ... @property def supports_extent_aggr(self) -> bool: ... @property def supports_make_line_aggr(self) -> bool: ... @property def supports_union_aggr(self) -> bool: ... def __getattr__(self, name: Any) -> bool: ... django-stubs-5.2.9/django-stubs/contrib/gis/db/backends/base/models.pyi000066400000000000000000000015041513401051600260240ustar00rootroot00000000000000from typing import Any class SpatialRefSysMixin: @property def srs(self) -> Any: ... @property def ellipsoid(self) -> Any: ... @property def name(self) -> Any: ... @property def spheroid(self) -> Any: ... @property def datum(self) -> Any: ... @property def projected(self) -> Any: ... @property def local(self) -> Any: ... @property def geographic(self) -> Any: ... @property def linear_name(self) -> Any: ... @property def linear_units(self) -> Any: ... @property def angular_name(self) -> Any: ... @property def angular_units(self) -> Any: ... @property def units(self) -> Any: ... @classmethod def get_units(cls, wkt: Any) -> Any: ... @classmethod def get_spheroid(cls, wkt: Any, string: bool = ...) -> Any: ... django-stubs-5.2.9/django-stubs/contrib/gis/db/backends/base/operations.pyi000066400000000000000000000026221513401051600267260ustar00rootroot00000000000000from typing import Any from django.utils.functional import cached_property class BaseSpatialOperations: postgis: bool spatialite: bool mariadb: bool mysql: bool oracle: bool spatial_version: Any select: str @cached_property def select_extent(self) -> str: ... geography: bool geometry: bool disallowed_aggregates: Any geom_func_prefix: str function_names: Any unsupported_functions: set[str] from_text: bool def convert_extent(self, box: Any, srid: Any) -> Any: ... def convert_extent3d(self, box: Any, srid: Any) -> Any: ... def geo_quote_name(self, name: Any) -> Any: ... def geo_db_type(self, f: Any) -> Any: ... def get_distance(self, f: Any, value: Any, lookup_type: Any) -> Any: ... def get_geom_placeholder(self, f: Any, value: Any, compiler: Any) -> Any: ... def check_expression_support(self, expression: Any) -> None: ... def spatial_aggregate_name(self, agg_name: Any) -> Any: ... def spatial_function_name(self, func_name: Any) -> Any: ... def geometry_columns(self) -> Any: ... def spatial_ref_sys(self) -> Any: ... distance_expr_for_lookup: Any def get_db_converters(self, expression: Any) -> Any: ... def get_geometry_converter(self, expression: Any) -> Any: ... def get_area_att_for_field(self, field: Any) -> Any: ... def get_distance_att_for_field(self, field: Any) -> Any: ... django-stubs-5.2.9/django-stubs/contrib/gis/db/backends/mysql/000077500000000000000000000000001513401051600242515ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/contrib/gis/db/backends/mysql/__init__.pyi000066400000000000000000000000001513401051600265210ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/contrib/gis/db/backends/mysql/base.pyi000066400000000000000000000003731513401051600257110ustar00rootroot00000000000000from typing import Any from django.db.backends.mysql.base import DatabaseWrapper as MySQLDatabaseWrapper class DatabaseWrapper(MySQLDatabaseWrapper): SchemaEditorClass: Any features_class: Any introspection_class: Any ops_class: Any django-stubs-5.2.9/django-stubs/contrib/gis/db/backends/mysql/features.pyi000066400000000000000000000012341513401051600266120ustar00rootroot00000000000000from django.contrib.gis.db.backends.base.features import BaseSpatialFeatures from django.db.backends.mysql.features import DatabaseFeatures as MySQLDatabaseFeatures from django.utils.functional import cached_property class DatabaseFeatures(BaseSpatialFeatures, MySQLDatabaseFeatures): has_spatialrefsys_table: bool supports_add_srs_entry: bool supports_distance_geodetic: bool supports_length_geodetic: bool supports_area_geodetic: bool supports_transform: bool supports_null_geometries: bool supports_num_points_poly: bool @cached_property def supports_geometry_field_unique_index(self) -> bool: ... # type: ignore[override] django-stubs-5.2.9/django-stubs/contrib/gis/db/backends/mysql/introspection.pyi000066400000000000000000000005151513401051600276750ustar00rootroot00000000000000from typing import Any from django.db.backends.mysql.introspection import DatabaseIntrospection class MySQLIntrospection(DatabaseIntrospection): data_types_reverse: Any def get_geometry_type(self, table_name: Any, description: Any) -> Any: ... def supports_spatial_index(self, cursor: Any, table_name: Any) -> Any: ... django-stubs-5.2.9/django-stubs/contrib/gis/db/backends/mysql/operations.pyi000066400000000000000000000025051513401051600271610ustar00rootroot00000000000000from collections.abc import Callable from typing import Any from django.contrib.gis.db.backends.base.operations import BaseSpatialOperations from django.contrib.gis.db.backends.utils import SpatialOperator from django.contrib.gis.geos.geometry import GEOSGeometryBase from django.db.backends.mysql.operations import DatabaseOperations from django.utils.functional import cached_property class MySQLOperations(BaseSpatialOperations, DatabaseOperations): name: str geom_func_prefix: str Adapter: Any @cached_property def mariadb(self) -> bool: ... # type: ignore[override] @cached_property def mysql(self) -> bool: ... # type: ignore[override] @cached_property def select(self) -> str: ... # type: ignore[override] @cached_property def from_text(self) -> str: ... # type: ignore[override] @cached_property def collect(self) -> str: ... @cached_property def gis_operators(self) -> dict[str, SpatialOperator]: ... disallowed_aggregates: Any @cached_property def unsupported_functions(self) -> set[str]: ... # type: ignore[override] def geo_db_type(self, f: Any) -> Any: ... def get_distance(self, f: Any, value: Any, lookup_type: Any) -> list[Any]: ... def get_geometry_converter(self, expression: Any) -> Callable[[Any, Any, Any], GEOSGeometryBase | None]: ... django-stubs-5.2.9/django-stubs/contrib/gis/db/backends/mysql/schema.pyi000066400000000000000000000014701513401051600262360ustar00rootroot00000000000000from logging import Logger from typing import Any from django.db.backends.mysql.schema import DatabaseSchemaEditor from django.db.models.base import Model from django.db.models.fields import Field logger: Logger class MySQLGISSchemaEditor(DatabaseSchemaEditor): sql_add_spatial_index: str sql_drop_spatial_index: str geometry_sql: Any def __init__(self, *args: Any, **kwargs: Any) -> None: ... def skip_default(self, field: Field) -> bool: ... def column_sql( self, model: type[Model], field: Field, include_default: bool = ... ) -> tuple[None, None] | tuple[str, list[Any]]: ... def create_model(self, model: type[Model]) -> None: ... def add_field(self, model: type[Model], field: Field) -> None: ... def remove_field(self, model: type[Model], field: Field) -> None: ... django-stubs-5.2.9/django-stubs/contrib/gis/db/backends/oracle/000077500000000000000000000000001513401051600243515ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/contrib/gis/db/backends/oracle/__init__.pyi000066400000000000000000000000001513401051600266210ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/contrib/gis/db/backends/oracle/adapter.pyi000066400000000000000000000003421513401051600265130ustar00rootroot00000000000000from typing import Any from django.contrib.gis.db.backends.base.adapter import WKTAdapter class OracleSpatialAdapter(WKTAdapter): input_size: Any wkt: Any srid: Any def __init__(self, geom: Any) -> None: ... django-stubs-5.2.9/django-stubs/contrib/gis/db/backends/oracle/base.pyi000066400000000000000000000003761513401051600260140ustar00rootroot00000000000000from typing import Any from django.db.backends.oracle.base import DatabaseWrapper as OracleDatabaseWrapper class DatabaseWrapper(OracleDatabaseWrapper): SchemaEditorClass: Any features_class: Any introspection_class: Any ops_class: Any django-stubs-5.2.9/django-stubs/contrib/gis/db/backends/oracle/features.pyi000066400000000000000000000006741513401051600267210ustar00rootroot00000000000000from django.contrib.gis.db.backends.base.features import BaseSpatialFeatures from django.db.backends.oracle.features import DatabaseFeatures as OracleDatabaseFeatures class DatabaseFeatures(BaseSpatialFeatures, OracleDatabaseFeatures): supports_add_srs_entry: bool supports_geometry_field_introspection: bool supports_geometry_field_unique_index: bool supports_perimeter_geodetic: bool supports_dwithin_distance_expr: bool django-stubs-5.2.9/django-stubs/contrib/gis/db/backends/oracle/introspection.pyi000066400000000000000000000004371513401051600300000ustar00rootroot00000000000000from typing import Any from django.db.backends.oracle.introspection import DatabaseIntrospection class OracleIntrospection(DatabaseIntrospection): @property def data_types_reverse(self) -> Any: ... def get_geometry_type(self, table_name: Any, description: Any) -> Any: ... django-stubs-5.2.9/django-stubs/contrib/gis/db/backends/oracle/models.pyi000066400000000000000000000013271513401051600263620ustar00rootroot00000000000000from typing import Any, ClassVar from django.contrib.gis.db import models from django.contrib.gis.db.backends.base.models import SpatialRefSysMixin from django.db.models.manager import Manager from typing_extensions import Self class OracleGeometryColumns(models.Model): table_name: Any column_name: Any srid: Any objects: ClassVar[Manager[Self]] @classmethod def table_name_col(cls) -> Any: ... @classmethod def geom_col_name(cls) -> Any: ... class OracleSpatialRefSys(models.Model, SpatialRefSysMixin): cs_name: Any srid: Any auth_srid: Any auth_name: Any wktext: Any cs_bounds: Any objects: ClassVar[Manager[Self]] @property def wkt(self) -> Any: ... django-stubs-5.2.9/django-stubs/contrib/gis/db/backends/oracle/operations.pyi000066400000000000000000000026401513401051600272610ustar00rootroot00000000000000from typing import Any from django.contrib.gis.db.backends.base.operations import BaseSpatialOperations from django.contrib.gis.db.backends.utils import SpatialOperator from django.db.backends.oracle.operations import DatabaseOperations DEFAULT_TOLERANCE: str class SDOOperator(SpatialOperator): sql_template: str class SDODWithin(SpatialOperator): sql_template: str class SDODisjoint(SpatialOperator): sql_template: Any class SDORelate(SpatialOperator): sql_template: str def check_relate_argument(self, arg: Any) -> None: ... class OracleOperations(BaseSpatialOperations, DatabaseOperations): name: str oracle: bool disallowed_aggregates: Any Adapter: Any extent: str unionagg: str function_names: Any select: str gis_operators: Any unsupported_functions: Any def geo_quote_name(self, name: Any) -> Any: ... def geo_db_type(self, f: Any) -> Any: ... def get_distance(self, f: Any, value: Any, lookup_type: Any) -> Any: ... def get_geom_placeholder(self, f: Any, value: Any, compiler: Any) -> Any: ... def spatial_aggregate_name(self, agg_name: Any) -> Any: ... def geometry_columns(self) -> Any: ... def spatial_ref_sys(self) -> Any: ... def modify_insert_params(self, placeholder: Any, params: Any) -> Any: ... def get_geometry_converter(self, expression: Any) -> Any: ... def get_area_att_for_field(self, field: Any) -> Any: ... django-stubs-5.2.9/django-stubs/contrib/gis/db/backends/oracle/schema.pyi000066400000000000000000000017561513401051600263450ustar00rootroot00000000000000from typing import Any from django.db.backends.oracle.schema import DatabaseSchemaEditor from django.db.models.base import Model from django.db.models.fields import Field class OracleGISSchemaEditor(DatabaseSchemaEditor): sql_add_geometry_metadata: str sql_add_spatial_index: str sql_drop_spatial_index: str sql_clear_geometry_table_metadata: str sql_clear_geometry_field_metadata: str geometry_sql: Any def __init__(self, *args: Any, **kwargs: Any) -> None: ... def geo_quote_name(self, name: Any) -> Any: ... def column_sql( self, model: type[Model], field: Field, include_default: bool = ... ) -> tuple[None, None] | tuple[str, list[Any]]: ... def create_model(self, model: type[Model]) -> None: ... def delete_model(self, model: type[Model]) -> None: ... def add_field(self, model: type[Model], field: Field) -> None: ... def remove_field(self, model: type[Model], field: Field) -> None: ... def run_geometry_sql(self) -> None: ... django-stubs-5.2.9/django-stubs/contrib/gis/db/backends/postgis/000077500000000000000000000000001513401051600245745ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/contrib/gis/db/backends/postgis/__init__.pyi000066400000000000000000000000001513401051600270440ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/contrib/gis/db/backends/postgis/adapter.pyi000066400000000000000000000005411513401051600267370ustar00rootroot00000000000000from typing import Any class PostGISAdapter: is_geometry: Any ewkb: Any srid: Any geography: Any def __init__(self, obj: Any, geography: bool = ...) -> None: ... def __conform__(self, proto: Any) -> Any: ... def __eq__(self, other: object) -> bool: ... def __hash__(self) -> int: ... def getquoted(self) -> Any: ... django-stubs-5.2.9/django-stubs/contrib/gis/db/backends/postgis/base.pyi000066400000000000000000000005371513401051600262360ustar00rootroot00000000000000from typing import Any from django.db.backends.postgresql.base import DatabaseWrapper as Psycopg2DatabaseWrapper class DatabaseWrapper(Psycopg2DatabaseWrapper): SchemaEditorClass: Any features: Any ops: Any introspection: Any def __init__(self, *args: Any, **kwargs: Any) -> None: ... def prepare_database(self) -> None: ... django-stubs-5.2.9/django-stubs/contrib/gis/db/backends/postgis/const.pyi000066400000000000000000000002751513401051600264510ustar00rootroot00000000000000from typing import Any GDAL_TO_POSTGIS: Any POSTGIS_TO_GDAL: Any POSTGIS_HEADER_STRUCTURE: str GDAL_TO_STRUCT: Any STRUCT_SIZE: Any BANDTYPE_PIXTYPE_MASK: int BANDTYPE_FLAG_HASNODATA: Any django-stubs-5.2.9/django-stubs/contrib/gis/db/backends/postgis/features.pyi000066400000000000000000000006271513401051600271420ustar00rootroot00000000000000from django.contrib.gis.db.backends.base.features import BaseSpatialFeatures from django.db.backends.postgresql.features import DatabaseFeatures as Psycopg2DatabaseFeatures class DatabaseFeatures(BaseSpatialFeatures, Psycopg2DatabaseFeatures): supports_3d_storage: bool supports_3d_functions: bool supports_left_right_lookups: bool supports_raster: bool supports_empty_geometries: bool django-stubs-5.2.9/django-stubs/contrib/gis/db/backends/postgis/introspection.pyi000066400000000000000000000005501513401051600302170ustar00rootroot00000000000000from typing import Any from django.db.backends.postgresql.introspection import DatabaseIntrospection class PostGISIntrospection(DatabaseIntrospection): postgis_oid_lookup: Any ignored_tables: Any def get_field_type(self, data_type: Any, description: Any) -> Any: ... def get_geometry_type(self, table_name: Any, description: Any) -> Any: ... django-stubs-5.2.9/django-stubs/contrib/gis/db/backends/postgis/models.pyi000066400000000000000000000013751513401051600266100ustar00rootroot00000000000000from typing import Any, ClassVar from django.contrib.gis.db.backends.base.models import SpatialRefSysMixin from django.db import models from typing_extensions import Self class PostGISGeometryColumns(models.Model): f_table_catalog: Any f_table_schema: Any f_table_name: Any f_geometry_column: Any coord_dimension: Any srid: Any type: Any objects: ClassVar[models.Manager[Self]] @classmethod def table_name_col(cls) -> Any: ... @classmethod def geom_col_name(cls) -> Any: ... class PostGISSpatialRefSys(models.Model, SpatialRefSysMixin): srid: Any auth_name: Any auth_srid: Any srtext: Any proj4text: Any objects: ClassVar[models.Manager[Self]] @property def wkt(self) -> Any: ... django-stubs-5.2.9/django-stubs/contrib/gis/db/backends/postgis/operations.pyi000066400000000000000000000050221513401051600275010ustar00rootroot00000000000000from collections.abc import MutableMapping from typing import Any, Literal from django.contrib.gis.db.backends.base.operations import BaseSpatialOperations from django.contrib.gis.db.backends.utils import SpatialOperator from django.contrib.gis.db.models.fields import GeometryField from django.contrib.gis.db.models.lookups import GISLookup from django.db.backends.postgresql.operations import DatabaseOperations from django.db.models import Func from django.utils.functional import cached_property BILATERAL: Literal["bilateral"] class PostGISOperator(SpatialOperator): geography: Any raster: bool | Literal["bilateral"] def __init__(self, geography: bool = ..., raster: bool | Literal["bilateral"] = ..., **kwargs: Any) -> None: ... def check_raster(self, lookup: Any, template_params: Any) -> Any: ... def check_geography( self, lookup: GISLookup, template_params: MutableMapping[str, Any], ) -> MutableMapping[str, Any]: ... class ST_Polygon(Func): function: str def __init__(self, expr: Any) -> None: ... @cached_property def output_field(self) -> GeometryField: ... class PostGISOperations(BaseSpatialOperations, DatabaseOperations): name: str postgis: bool geography: bool geom_func_prefix: str Adapter: Any collect: Any extent: Any extent3d: Any length3d: Any makeline: Any perimeter3d: Any unionagg: Any gis_operators: Any unsupported_functions: Any select: str select_extent: Any @property def function_names(self) -> Any: ... @property def spatial_version(self) -> Any: ... def geo_db_type(self, f: Any) -> Any: ... def get_distance(self, f: Any, dist_val: Any, lookup_type: Any) -> Any: ... def get_geom_placeholder(self, f: Any, value: Any, compiler: Any) -> Any: ... def postgis_geos_version(self) -> Any: ... def postgis_lib_version(self) -> Any: ... def postgis_proj_version(self) -> Any: ... def postgis_version(self) -> Any: ... def postgis_full_version(self) -> Any: ... def postgis_version_tuple(self) -> Any: ... def proj_version_tuple(self) -> Any: ... def spatial_aggregate_name(self, agg_name: Any) -> Any: ... def geometry_columns(self) -> Any: ... def spatial_ref_sys(self) -> Any: ... def parse_raster(self, value: Any) -> Any: ... def distance_expr_for_lookup(self, lhs: Any, rhs: Any, **kwargs: Any) -> Any: ... def get_geometry_converter(self, expression: Any) -> Any: ... def get_area_att_for_field(self, field: Any) -> Any: ... django-stubs-5.2.9/django-stubs/contrib/gis/db/backends/postgis/pgraster.pyi000066400000000000000000000003671513401051600271540ustar00rootroot00000000000000from typing import Any def pack(structure: Any, data: Any) -> Any: ... def unpack(structure: Any, data: Any) -> Any: ... def chunk(data: Any, index: Any) -> Any: ... def from_pgraster(data: Any) -> Any: ... def to_pgraster(rast: Any) -> Any: ... django-stubs-5.2.9/django-stubs/contrib/gis/db/backends/postgis/schema.pyi000066400000000000000000000005241513401051600265600ustar00rootroot00000000000000from typing import Any from django.db.backends.postgresql.schema import DatabaseSchemaEditor class PostGISSchemaEditor(DatabaseSchemaEditor): geom_index_type: str geom_index_ops_nd: str rast_index_wrapper: str sql_alter_column_to_3d: str sql_alter_column_to_2d: str def geo_quote_name(self, name: Any) -> Any: ... django-stubs-5.2.9/django-stubs/contrib/gis/db/backends/spatialite/000077500000000000000000000000001513401051600252435ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/contrib/gis/db/backends/spatialite/__init__.pyi000066400000000000000000000000001513401051600275130ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/contrib/gis/db/backends/spatialite/adapter.pyi000066400000000000000000000002661513401051600274120ustar00rootroot00000000000000from typing import Any from django.contrib.gis.db.backends.base.adapter import WKTAdapter class SpatiaLiteAdapter(WKTAdapter): def __conform__(self, protocol: Any) -> Any: ... django-stubs-5.2.9/django-stubs/contrib/gis/db/backends/spatialite/base.pyi000066400000000000000000000015031513401051600266770ustar00rootroot00000000000000from typing import Any from django.db.backends.sqlite3.base import DatabaseWrapper as SQLiteDatabaseWrapper from .client import SpatiaLiteClient from .features import DatabaseFeatures from .introspection import SpatiaLiteIntrospection from .operations import SpatiaLiteOperations from .schema import SpatialiteSchemaEditor class DatabaseWrapper(SQLiteDatabaseWrapper): SchemaEditorClass: type[SpatialiteSchemaEditor] client_class: type[SpatiaLiteClient] features_class: type[DatabaseFeatures] introspection_class: type[SpatiaLiteIntrospection] ops_class: type[SpatiaLiteOperations] lib_spatialite_paths: str ops: SpatiaLiteOperations def __init__(self, *args: Any, **kwargs: Any) -> None: ... def get_new_connection(self, conn_params: Any) -> Any: ... def prepare_database(self) -> None: ... django-stubs-5.2.9/django-stubs/contrib/gis/db/backends/spatialite/client.pyi000066400000000000000000000001771513401051600272510ustar00rootroot00000000000000from django.db.backends.sqlite3.client import DatabaseClient class SpatiaLiteClient(DatabaseClient): executable_name: str django-stubs-5.2.9/django-stubs/contrib/gis/db/backends/spatialite/features.pyi000066400000000000000000000006411513401051600276050ustar00rootroot00000000000000from django.contrib.gis.db.backends.base.features import BaseSpatialFeatures from django.db.backends.sqlite3.features import DatabaseFeatures as SQLiteDatabaseFeatures from django.utils.functional import cached_property class DatabaseFeatures(BaseSpatialFeatures, SQLiteDatabaseFeatures): supports_3d_storage: bool @cached_property def supports_area_geodetic(self) -> bool: ... # type: ignore[override] django-stubs-5.2.9/django-stubs/contrib/gis/db/backends/spatialite/introspection.pyi000066400000000000000000000007031513401051600306660ustar00rootroot00000000000000from typing import Any from django.db.backends.sqlite3.introspection import DatabaseIntrospection, FlexibleFieldLookupDict class GeoFlexibleFieldLookupDict(FlexibleFieldLookupDict): base_data_types_reverse: Any class SpatiaLiteIntrospection(DatabaseIntrospection): data_types_reverse: Any def get_geometry_type(self, table_name: Any, description: Any) -> Any: ... def get_constraints(self, cursor: Any, table_name: Any) -> Any: ... django-stubs-5.2.9/django-stubs/contrib/gis/db/backends/spatialite/models.pyi000066400000000000000000000014071513401051600272530ustar00rootroot00000000000000from typing import Any, ClassVar from django.contrib.gis.db.backends.base.models import SpatialRefSysMixin from django.db import models from typing_extensions import Self class SpatialiteGeometryColumns(models.Model): f_table_name: Any f_geometry_column: Any coord_dimension: Any srid: Any spatial_index_enabled: Any type: Any objects: ClassVar[models.Manager[Self]] @classmethod def table_name_col(cls) -> Any: ... @classmethod def geom_col_name(cls) -> Any: ... class SpatialiteSpatialRefSys(models.Model, SpatialRefSysMixin): srid: Any auth_name: Any auth_srid: Any ref_sys_name: Any proj4text: Any srtext: Any objects: ClassVar[models.Manager[Self]] @property def wkt(self) -> Any: ... django-stubs-5.2.9/django-stubs/contrib/gis/db/backends/spatialite/operations.pyi000066400000000000000000000025011513401051600301470ustar00rootroot00000000000000from typing import Any from django.contrib.gis.db.backends.base.operations import BaseSpatialOperations from django.contrib.gis.db.backends.utils import SpatialOperator from django.db.backends.sqlite3.operations import DatabaseOperations from django.utils.functional import cached_property class SpatialiteNullCheckOperator(SpatialOperator): ... class SpatiaLiteOperations(BaseSpatialOperations, DatabaseOperations): name: str spatialite: bool Adapter: Any collect: str extent: str makeline: str unionagg: str gis_operators: Any disallowed_aggregates: Any select: str function_names: Any @cached_property def unsupported_functions(self) -> set[str]: ... # type: ignore[override] @property def spatial_version(self) -> Any: ... def geo_db_type(self, f: Any) -> None: ... def get_distance(self, f: Any, value: Any, lookup_type: Any) -> Any: ... def geos_version(self) -> Any: ... def proj_version(self) -> Any: ... def lwgeom_version(self) -> Any: ... def spatialite_version(self) -> Any: ... def spatialite_version_tuple(self) -> Any: ... def spatial_aggregate_name(self, agg_name: Any) -> Any: ... def geometry_columns(self) -> Any: ... def spatial_ref_sys(self) -> Any: ... def get_geometry_converter(self, expression: Any) -> Any: ... django-stubs-5.2.9/django-stubs/contrib/gis/db/backends/spatialite/schema.pyi000066400000000000000000000024171513401051600272320ustar00rootroot00000000000000from typing import Any from django.db.backends.sqlite3.schema import DatabaseSchemaEditor from django.db.models.base import Model from django.db.models.fields import Field class SpatialiteSchemaEditor(DatabaseSchemaEditor): sql_add_geometry_column: str sql_add_spatial_index: str sql_drop_spatial_index: str sql_recover_geometry_metadata: str sql_remove_geometry_metadata: str sql_discard_geometry_columns: str sql_update_geometry_columns: str geometry_tables: Any geometry_sql: Any def __init__(self, *args: Any, **kwargs: Any) -> None: ... def geo_quote_name(self, name: Any) -> Any: ... def column_sql( self, model: type[Model], field: Field, include_default: bool = False ) -> tuple[None, None] | tuple[str, list[Any]]: ... def remove_geometry_metadata(self, model: type[Model], field: Field) -> None: ... def create_model(self, model: type[Model]) -> None: ... def delete_model(self, model: type[Model], **kwargs: Any) -> None: ... def add_field(self, model: type[Model], field: Field) -> None: ... def remove_field(self, model: type[Model], field: Field) -> None: ... def alter_db_table( self, model: type[Model], old_db_table: str, new_db_table: str, ) -> None: ... django-stubs-5.2.9/django-stubs/contrib/gis/db/backends/utils.pyi000066400000000000000000000012401513401051600247640ustar00rootroot00000000000000from collections.abc import MutableMapping, Sequence from typing import Any from django.contrib.gis.db.models.lookups import GISLookup from django.db.backends.base.base import BaseDatabaseWrapper from django.db.models.sql.compiler import _AsSqlType class SpatialOperator: sql_template: Any op: Any func: Any def __init__(self, op: Any | None = None, func: Any | None = None) -> None: ... @property def default_template(self) -> Any: ... def as_sql( self, connection: BaseDatabaseWrapper, lookup: GISLookup, template_params: MutableMapping[str, Any], sql_params: Sequence[Any], ) -> _AsSqlType: ... django-stubs-5.2.9/django-stubs/contrib/gis/db/models/000077500000000000000000000000001513401051600226155ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/contrib/gis/db/models/__init__.pyi000066400000000000000000000064011513401051600251000ustar00rootroot00000000000000from django.contrib.gis.db.models.aggregates import Collect as Collect from django.contrib.gis.db.models.aggregates import Extent as Extent from django.contrib.gis.db.models.aggregates import Extent3D as Extent3D from django.contrib.gis.db.models.aggregates import MakeLine as MakeLine from django.contrib.gis.db.models.aggregates import Union as Union from django.contrib.gis.db.models.fields import GeometryCollectionField as GeometryCollectionField from django.contrib.gis.db.models.fields import GeometryField as GeometryField from django.contrib.gis.db.models.fields import LineStringField as LineStringField from django.contrib.gis.db.models.fields import MultiLineStringField as MultiLineStringField from django.contrib.gis.db.models.fields import MultiPointField as MultiPointField from django.contrib.gis.db.models.fields import MultiPolygonField as MultiPolygonField from django.contrib.gis.db.models.fields import PointField as PointField from django.contrib.gis.db.models.fields import PolygonField as PolygonField from django.contrib.gis.db.models.fields import RasterField as RasterField from django.db.models import * __all__ = [ "BLANK_CHOICE_DASH", "CASCADE", "DEFERRED", "DO_NOTHING", "NOT_PROVIDED", "PROTECT", "RESTRICT", "SET", "SET_DEFAULT", "SET_NULL", "Aggregate", "AutoField", "Avg", "BaseConstraint", "BigAutoField", "BigIntegerField", "BinaryField", "BooleanField", "Case", "CharField", "CheckConstraint", "Choices", "Collect", "CommaSeparatedIntegerField", "CompositePrimaryKey", "Count", "DateField", "DateTimeField", "DecimalField", "Deferrable", "DurationField", "EmailField", "Empty", "Exists", "Expression", "ExpressionList", "ExpressionWrapper", "Extent", "Extent3D", "F", "Field", "FileField", "FilePathField", "FilteredRelation", "FloatField", "ForeignKey", "ForeignObject", "ForeignObjectRel", "Func", "GeneratedField", "GenericIPAddressField", "GeometryCollectionField", "GeometryField", "IPAddressField", "ImageField", "Index", "IntegerChoices", "IntegerField", "JSONField", "LineStringField", "Lookup", "MakeLine", "Manager", "ManyToManyField", "ManyToManyRel", "ManyToOneRel", "Max", "Min", "Model", "MultiLineStringField", "MultiPointField", "MultiPolygonField", "NullBooleanField", "ObjectDoesNotExist", "OneToOneField", "OneToOneRel", "OrderBy", "OrderWrt", "OuterRef", "PointField", "PolygonField", "PositiveBigIntegerField", "PositiveIntegerField", "PositiveSmallIntegerField", "Prefetch", "ProtectedError", "Q", "QuerySet", "RasterField", "RestrictedError", "RowRange", "SlugField", "SmallAutoField", "SmallIntegerField", "StdDev", "Subquery", "Sum", "TextChoices", "TextField", "TimeField", "Transform", "URLField", "UUIDField", "Union", "UniqueConstraint", "Value", "ValueRange", "Variance", "When", "Window", "WindowFrame", "WindowFrameExclusion", "aprefetch_related_objects", "prefetch_related_objects", "signals", ] django-stubs-5.2.9/django-stubs/contrib/gis/db/models/aggregates.pyi000066400000000000000000000015421513401051600254530ustar00rootroot00000000000000from typing import Any from django.db.backends.base.base import BaseDatabaseWrapper from django.db.models import Aggregate from django.db.models.sql.compiler import SQLCompiler, _AsSqlType __all__ = ["Collect", "Extent", "Extent3D", "MakeLine", "Union"] class GeoAggregate(Aggregate): is_extent: bool def as_oracle(self, compiler: SQLCompiler, connection: BaseDatabaseWrapper, **extra_context: Any) -> _AsSqlType: ... class Collect(GeoAggregate): name: str output_field_class: Any class Extent(GeoAggregate): name: str def __init__(self, expression: Any, **extra: Any) -> None: ... class Extent3D(GeoAggregate): name: str def __init__(self, expression: Any, **extra: Any) -> None: ... class MakeLine(GeoAggregate): name: str output_field_class: Any class Union(GeoAggregate): name: str output_field_class: Any django-stubs-5.2.9/django-stubs/contrib/gis/db/models/fields.pyi000066400000000000000000000146221513401051600246130ustar00rootroot00000000000000from collections.abc import Iterable from typing import Any, NamedTuple, TypeVar from django.contrib.gis import forms from django.contrib.gis.geos import ( GeometryCollection, GEOSGeometry, LineString, MultiLineString, MultiPoint, MultiPolygon, Point, Polygon, ) from django.core.validators import _ValidatorCallable from django.db.models import Model from django.db.models.expressions import Combinable, Expression from django.db.models.fields import NOT_PROVIDED, Field, _ErrorMessagesMapping from django.utils.choices import _Choices from django.utils.functional import _StrOrPromise # __set__ value type _ST = TypeVar("_ST") # __get__ return type _GT = TypeVar("_GT") class SRIDCacheEntry(NamedTuple): units: Any units_name: str spheroid: str geodetic: bool def get_srid_info(srid: int, connection: Any) -> SRIDCacheEntry: ... class BaseSpatialField(Field[_ST, _GT]): form_class: type[forms.GeometryField] geom_type: str geom_class: type[GEOSGeometry] | None geography: bool spatial_index: bool srid: int def __init__( self, verbose_name: _StrOrPromise | None = ..., srid: int = ..., spatial_index: bool = ..., *, name: str | None = ..., primary_key: bool = ..., max_length: int | None = ..., unique: bool = ..., blank: bool = ..., null: bool = ..., db_index: bool = ..., default: Any = ..., db_default: type[NOT_PROVIDED] | Expression | _ST = ..., editable: bool = ..., auto_created: bool = ..., serialize: bool = ..., unique_for_date: str | None = ..., unique_for_month: str | None = ..., unique_for_year: str | None = ..., choices: _Choices | None = ..., help_text: _StrOrPromise = ..., db_column: str | None = ..., db_comment: str | None = ..., db_tablespace: str | None = ..., validators: Iterable[_ValidatorCallable] = ..., error_messages: _ErrorMessagesMapping | None = ..., ) -> None: ... def db_type(self, connection: Any) -> Any: ... def spheroid(self, connection: Any) -> Any: ... def units(self, connection: Any) -> Any: ... def units_name(self, connection: Any) -> Any: ... def geodetic(self, connection: Any) -> Any: ... def get_placeholder(self, value: Any, compiler: Any, connection: Any) -> Any: ... def get_srid(self, obj: Any) -> Any: ... def get_db_prep_value(self, value: Any, connection: Any, *args: Any, **kwargs: Any) -> Any: ... def get_raster_prep_value(self, value: Any, is_candidate: Any) -> Any: ... def get_prep_value(self, value: Any) -> Any: ... class GeometryField(BaseSpatialField[_ST, _GT]): dim: int def __init__( self, verbose_name: _StrOrPromise | None = ..., dim: int = ..., geography: bool = ..., *, extent: tuple[float, float, float, float] = ..., tolerance: float = ..., srid: int = ..., spatial_index: bool = ..., name: str | None = ..., primary_key: bool = ..., max_length: int | None = ..., unique: bool = ..., blank: bool = ..., null: bool = ..., db_index: bool = ..., default: Any = ..., db_default: type[NOT_PROVIDED] | Expression | _ST = ..., editable: bool = ..., auto_created: bool = ..., serialize: bool = ..., unique_for_date: str | None = ..., unique_for_month: str | None = ..., unique_for_year: str | None = ..., choices: _Choices | None = ..., help_text: _StrOrPromise = ..., db_column: str | None = ..., db_comment: str | None = ..., db_tablespace: str | None = ..., validators: Iterable[_ValidatorCallable] = ..., error_messages: _ErrorMessagesMapping | None = ..., ) -> None: ... def formfield( # type: ignore[override] self, *, form_class: type[forms.GeometryField] | None = ..., geom_type: str = ..., srid: Any = ..., **kwargs: Any, ) -> forms.GeometryField: ... def contribute_to_class(self, cls: type[Model], name: str, **kwargs: Any) -> None: ... # type: ignore[override] class PointField(GeometryField[_ST, _GT]): _pyi_private_set_type: Point | Combinable _pyi_private_get_type: Point _pyi_lookup_exact_type: Point geom_class: type[Point] form_class: type[forms.PointField] class LineStringField(GeometryField[_ST, _GT]): _pyi_private_set_type: LineString | Combinable _pyi_private_get_type: LineString _pyi_lookup_exact_type: LineString geom_class: type[LineString] form_class: type[forms.LineStringField] class PolygonField(GeometryField[_ST, _GT]): _pyi_private_set_type: Polygon | Combinable _pyi_private_get_type: Polygon _pyi_lookup_exact_type: Polygon geom_class: type[Polygon] form_class: type[forms.PolygonField] class MultiPointField(GeometryField[_ST, _GT]): _pyi_private_set_type: MultiPoint | Combinable _pyi_private_get_type: MultiPoint _pyi_lookup_exact_type: MultiPoint geom_class: type[MultiPoint] form_class: type[forms.MultiPointField] class MultiLineStringField(GeometryField[_ST, _GT]): _pyi_private_set_type: MultiLineString | Combinable _pyi_private_get_type: MultiLineString _pyi_lookup_exact_type: MultiLineString geom_class: type[MultiLineString] form_class: type[forms.MultiLineStringField] class MultiPolygonField(GeometryField[_ST, _GT]): _pyi_private_set_type: MultiPolygon | Combinable _pyi_private_get_type: MultiPolygon _pyi_lookup_exact_type: MultiPolygon geom_class: type[MultiPolygon] form_class: type[forms.MultiPolygonField] class GeometryCollectionField(GeometryField[_ST, _GT]): _pyi_private_set_type: GeometryCollection | Combinable _pyi_private_get_type: GeometryCollection _pyi_lookup_exact_type: GeometryCollection geom_class: type[GeometryCollection] form_class: type[forms.GeometryCollectionField] class ExtentField(Field): def get_internal_type(self) -> Any: ... class RasterField(BaseSpatialField): def db_type(self, connection: Any) -> Any: ... def from_db_value(self, value: Any, expression: Any, connection: Any) -> Any: ... def contribute_to_class(self, cls: type[Model], name: str, **kwargs: Any) -> None: ... # type: ignore[override] def get_transform(self, name: Any) -> Any: ... django-stubs-5.2.9/django-stubs/contrib/gis/db/models/functions.pyi000066400000000000000000000157521513401051600253620ustar00rootroot00000000000000from typing import Any, ClassVar from django.contrib.gis.db.models.fields import GeometryField from django.contrib.gis.db.models.sql.conversion import AreaField, DistanceField from django.db.backends.base.base import BaseDatabaseWrapper from django.db.models import BinaryField, BooleanField, FloatField, Func, IntegerField, TextField from django.db.models import Transform as StandardTransform from django.db.models.expressions import BaseExpression from django.db.models.sql.compiler import SQLCompiler, _AsSqlType from django.utils.functional import cached_property NUMERIC_TYPES: Any class GeoFuncMixin: function: str | None = None geom_param_pos: Any @property def geo_field(self) -> Any: ... class GeoFunc(GeoFuncMixin, Func): ... class GeomOutputGeoFunc(GeoFunc): @cached_property def output_field(self) -> GeometryField: ... class SQLiteDecimalToFloatMixin: def as_sqlite(self, compiler: SQLCompiler, connection: BaseDatabaseWrapper, **extra_context: Any) -> _AsSqlType: ... class OracleToleranceMixin: tolerance: float def as_oracle(self, compiler: SQLCompiler, connection: BaseDatabaseWrapper, **extra_context: Any) -> _AsSqlType: ... class Area(OracleToleranceMixin, GeoFunc): arity: int @cached_property def output_field(self) -> AreaField: ... def as_sqlite(self, compiler: SQLCompiler, connection: BaseDatabaseWrapper, **extra_context: Any) -> _AsSqlType: ... class Azimuth(GeoFunc): output_field: ClassVar[FloatField] arity: int geom_param_pos: Any class AsGeoJSON(GeoFunc): output_field: ClassVar[TextField] def __init__( self, expression: Any, bbox: bool = ..., crs: bool = ..., precision: int = ..., **extra: Any ) -> None: ... def as_oracle(self, compiler: SQLCompiler, connection: BaseDatabaseWrapper, **extra_context: Any) -> _AsSqlType: ... class AsGML(GeoFunc): geom_param_pos: Any output_field: ClassVar[TextField] def __init__(self, expression: Any, version: int = ..., precision: int = ..., **extra: Any) -> None: ... def as_oracle(self, compiler: SQLCompiler, connection: BaseDatabaseWrapper, **extra_context: Any) -> _AsSqlType: ... class AsKML(GeoFunc): output_field: ClassVar[TextField] def __init__(self, expression: Any, precision: int = ..., **extra: Any) -> None: ... class AsSVG(GeoFunc): output_field: ClassVar[TextField] def __init__(self, expression: Any, relative: bool = ..., precision: int = ..., **extra: Any) -> None: ... class AsWKB(GeoFunc): output_field: ClassVar[BinaryField] arity: int class AsWKT(GeoFunc): output_field: ClassVar[TextField] arity: int class BoundingCircle(OracleToleranceMixin, GeomOutputGeoFunc): def __init__(self, expression: Any, num_seg: int = ..., **extra: Any) -> None: ... def as_oracle(self, compiler: SQLCompiler, connection: BaseDatabaseWrapper, **extra_context: Any) -> _AsSqlType: ... class Centroid(OracleToleranceMixin, GeomOutputGeoFunc): arity: int class ClosestPoint(GeomOutputGeoFunc): arity: int geom_param_pos: tuple[int, int] class Difference(OracleToleranceMixin, GeomOutputGeoFunc): arity: int geom_param_pos: Any class DistanceResultMixin: @cached_property def output_field(self) -> DistanceField: ... def source_is_geography(self) -> Any: ... class Distance(DistanceResultMixin, OracleToleranceMixin, GeoFunc): geom_param_pos: Any spheroid: Any def __init__(self, expr1: Any, expr2: Any, spheroid: Any | None = ..., **extra: Any) -> None: ... def as_postgresql( self, compiler: SQLCompiler, connection: BaseDatabaseWrapper, **extra_context: Any ) -> _AsSqlType: ... def as_sqlite(self, compiler: SQLCompiler, connection: BaseDatabaseWrapper, **extra_context: Any) -> _AsSqlType: ... class Envelope(GeomOutputGeoFunc): arity: int class ForcePolygonCW(GeomOutputGeoFunc): arity: int class FromWKB(GeoFunc): arity: int def __init__(self, expression: BaseExpression, srid: int = 0, **extra: Any) -> None: ... def as_oracle(self, compiler: SQLCompiler, connection: BaseDatabaseWrapper, **extra_context: Any) -> _AsSqlType: ... class FromWKT(FromWKB): ... class GeoHash(GeoFunc): output_field: ClassVar[TextField] def __init__(self, expression: Any, precision: Any | None = ..., **extra: Any) -> None: ... def as_mysql(self, compiler: SQLCompiler, connection: BaseDatabaseWrapper, **extra_context: Any) -> _AsSqlType: ... class GeometryDistance(GeoFunc): output_field: ClassVar[FloatField] arity: int function: str arg_joiner: str geom_param_pos: Any class Intersection(OracleToleranceMixin, GeomOutputGeoFunc): arity: int geom_param_pos: Any class IsEmpty(GeoFuncMixin, StandardTransform): lookup_name: str output_field: ClassVar[BooleanField] class IsValid(OracleToleranceMixin, GeoFuncMixin, StandardTransform): lookup_name: str output_field: ClassVar[BooleanField] def as_oracle(self, compiler: SQLCompiler, connection: BaseDatabaseWrapper, **extra_context: Any) -> _AsSqlType: ... class Length(DistanceResultMixin, OracleToleranceMixin, GeoFunc): spheroid: Any def __init__(self, expr1: Any, spheroid: bool = ..., **extra: Any) -> None: ... def as_postgresql( self, compiler: SQLCompiler, connection: BaseDatabaseWrapper, **extra_context: Any ) -> _AsSqlType: ... def as_sqlite(self, compiler: SQLCompiler, connection: BaseDatabaseWrapper, **extra_context: Any) -> _AsSqlType: ... class LineLocatePoint(GeoFunc): output_field: ClassVar[FloatField] arity: int geom_param_pos: Any class MakeValid(GeomOutputGeoFunc): ... class MemSize(GeoFunc): output_field: ClassVar[IntegerField] arity: int class NumGeometries(GeoFunc): output_field: ClassVar[IntegerField] arity: int class NumPoints(GeoFunc): output_field: ClassVar[IntegerField] arity: int class Perimeter(DistanceResultMixin, OracleToleranceMixin, GeoFunc): arity: int def as_postgresql( self, compiler: SQLCompiler, connection: BaseDatabaseWrapper, **extra_context: Any ) -> _AsSqlType: ... def as_sqlite(self, compiler: SQLCompiler, connection: BaseDatabaseWrapper, **extra_context: Any) -> _AsSqlType: ... class PointOnSurface(OracleToleranceMixin, GeomOutputGeoFunc): arity: int class Reverse(GeoFunc): arity: int class Scale(SQLiteDecimalToFloatMixin, GeomOutputGeoFunc): def __init__(self, expression: Any, x: Any, y: Any, z: float = ..., **extra: Any) -> None: ... class SnapToGrid(SQLiteDecimalToFloatMixin, GeomOutputGeoFunc): def __init__(self, expression: Any, *args: Any, **extra: Any) -> None: ... class SymDifference(OracleToleranceMixin, GeomOutputGeoFunc): arity: int geom_param_pos: Any class Transform(GeomOutputGeoFunc): def __init__(self, expression: Any, srid: Any, **extra: Any) -> None: ... class Translate(Scale): def as_sqlite(self, compiler: SQLCompiler, connection: BaseDatabaseWrapper, **extra_context: Any) -> _AsSqlType: ... class Union(OracleToleranceMixin, GeomOutputGeoFunc): arity: int geom_param_pos: Any django-stubs-5.2.9/django-stubs/contrib/gis/db/models/lookups.pyi000066400000000000000000000056131513401051600250410ustar00rootroot00000000000000from typing import Any from django.db.models import Lookup, Transform class RasterBandTransform(Transform): ... class GISLookup(Lookup): sql_template: Any transform_func: Any distance: bool band_rhs: Any band_lhs: Any template_params: Any def __init__(self, lhs: Any, rhs: Any) -> None: ... def process_rhs_params(self) -> None: ... def process_band_indices(self, only_lhs: bool = ...) -> None: ... def get_db_prep_lookup(self, value: Any, connection: Any) -> Any: ... rhs: Any def process_rhs(self, compiler: Any, connection: Any) -> Any: ... def get_rhs_op(self, connection: Any, rhs: Any) -> Any: ... class OverlapsLeftLookup(GISLookup): lookup_name: str class OverlapsRightLookup(GISLookup): lookup_name: str class OverlapsBelowLookup(GISLookup): lookup_name: str class OverlapsAboveLookup(GISLookup): lookup_name: str class LeftLookup(GISLookup): lookup_name: str class RightLookup(GISLookup): lookup_name: str class StrictlyBelowLookup(GISLookup): lookup_name: str class StrictlyAboveLookup(GISLookup): lookup_name: str class SameAsLookup(GISLookup): lookup_name: str class BBContainsLookup(GISLookup): lookup_name: str class BBOverlapsLookup(GISLookup): lookup_name: str class ContainedLookup(GISLookup): lookup_name: str class ContainsLookup(GISLookup): lookup_name: str class ContainsProperlyLookup(GISLookup): lookup_name: str class CoveredByLookup(GISLookup): lookup_name: str class CoversLookup(GISLookup): lookup_name: str class CrossesLookup(GISLookup): lookup_name: str class DisjointLookup(GISLookup): lookup_name: str class EqualsLookup(GISLookup): lookup_name: str class IntersectsLookup(GISLookup): lookup_name: str class OverlapsLookup(GISLookup): lookup_name: str class RelateLookup(GISLookup): lookup_name: str sql_template: str pattern_regex: Any def process_rhs(self, compiler: Any, connection: Any) -> Any: ... class TouchesLookup(GISLookup): lookup_name: str class WithinLookup(GISLookup): lookup_name: str class DistanceLookupBase(GISLookup): distance: bool sql_template: str def process_rhs_params(self) -> None: ... def process_distance(self, compiler: Any, connection: Any) -> Any: ... class DWithinLookup(DistanceLookupBase): lookup_name: str sql_template: str def process_distance(self, compiler: Any, connection: Any) -> Any: ... def process_rhs(self, compiler: Any, connection: Any) -> Any: ... class DistanceLookupFromFunction(DistanceLookupBase): ... class DistanceGTLookup(DistanceLookupFromFunction): lookup_name: str op: str class DistanceGTELookup(DistanceLookupFromFunction): lookup_name: str op: str class DistanceLTLookup(DistanceLookupFromFunction): lookup_name: str op: str class DistanceLTELookup(DistanceLookupFromFunction): lookup_name: str op: str django-stubs-5.2.9/django-stubs/contrib/gis/db/models/proxy.pyi000066400000000000000000000005311513401051600245200ustar00rootroot00000000000000from typing import Any from django.db.models.query_utils import DeferredAttribute class SpatialProxy(DeferredAttribute): def __init__(self, klass: Any, field: Any, load_func: Any | None = ...) -> None: ... def __get__(self, instance: Any, cls: Any | None = ...) -> Any: ... def __set__(self, instance: Any, value: Any) -> Any: ... django-stubs-5.2.9/django-stubs/contrib/gis/db/models/sql/000077500000000000000000000000001513401051600234145ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/contrib/gis/db/models/sql/__init__.pyi000066400000000000000000000003201513401051600256710ustar00rootroot00000000000000from django.contrib.gis.db.models.sql.conversion import AreaField as AreaField from django.contrib.gis.db.models.sql.conversion import DistanceField as DistanceField __all__ = ["AreaField", "DistanceField"] django-stubs-5.2.9/django-stubs/contrib/gis/db/models/sql/conversion.pyi000066400000000000000000000014751513401051600263330ustar00rootroot00000000000000from typing import Any from django.db import models class AreaField(models.FloatField): geo_field: Any def __init__(self, geo_field: Any) -> None: ... def get_prep_value(self, value: Any) -> Any: ... def get_db_prep_value(self, value: Any, connection: Any, prepared: bool = ...) -> Any: ... def from_db_value(self, value: Any, expression: Any, connection: Any) -> Any: ... def get_internal_type(self) -> Any: ... class DistanceField(models.FloatField): geo_field: Any def __init__(self, geo_field: Any) -> None: ... def get_prep_value(self, value: Any) -> Any: ... def get_db_prep_value(self, value: Any, connection: Any, prepared: bool = ...) -> Any: ... def from_db_value(self, value: Any, expression: Any, connection: Any) -> Any: ... def get_internal_type(self) -> Any: ... django-stubs-5.2.9/django-stubs/contrib/gis/feeds.pyi000066400000000000000000000015421513401051600225600ustar00rootroot00000000000000from collections.abc import Iterable, Sequence from typing import Any from django.contrib.syndication.views import Feed as BaseFeed from django.utils.feedgenerator import Atom1Feed, Rss201rev2Feed from django.utils.xmlutils import SimplerXMLGenerator class GeoFeedMixin: def georss_coords(self, coords: Iterable[Sequence[float]]) -> str: ... def add_georss_point(self, handler: SimplerXMLGenerator, coords: Sequence[float], w3c_geo: bool = ...) -> None: ... def add_georss_element(self, handler: SimplerXMLGenerator, item: dict[str, Any], w3c_geo: bool = ...) -> None: ... class GeoRSSFeed(Rss201rev2Feed, GeoFeedMixin): def rss_attributes(self) -> dict[str, str]: ... class GeoAtom1Feed(Atom1Feed, GeoFeedMixin): ... class W3CGeoFeed(Rss201rev2Feed, GeoFeedMixin): def rss_attributes(self) -> dict[str, str]: ... class Feed(BaseFeed): ... django-stubs-5.2.9/django-stubs/contrib/gis/forms/000077500000000000000000000000001513401051600220735ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/contrib/gis/forms/__init__.pyi000066400000000000000000000012021513401051600243500ustar00rootroot00000000000000from django.forms import * from .fields import GeometryCollectionField as GeometryCollectionField from .fields import GeometryField as GeometryField from .fields import LineStringField as LineStringField from .fields import MultiLineStringField as MultiLineStringField from .fields import MultiPointField as MultiPointField from .fields import MultiPolygonField as MultiPolygonField from .fields import PointField as PointField from .fields import PolygonField as PolygonField from .widgets import BaseGeometryWidget as BaseGeometryWidget from .widgets import OpenLayersWidget as OpenLayersWidget from .widgets import OSMWidget as OSMWidget django-stubs-5.2.9/django-stubs/contrib/gis/forms/fields.pyi000066400000000000000000000014501513401051600240640ustar00rootroot00000000000000from typing import Any from django import forms class GeometryField(forms.Field): widget: Any geom_type: str srid: Any def __init__(self, *, srid: Any | None = ..., geom_type: Any | None = ..., **kwargs: Any) -> None: ... def to_python(self, value: Any) -> Any: ... def clean(self, value: Any) -> Any: ... def has_changed(self, initial: Any, data: Any) -> Any: ... class GeometryCollectionField(GeometryField): geom_type: str class PointField(GeometryField): geom_type: str class MultiPointField(GeometryField): geom_type: str class LineStringField(GeometryField): geom_type: str class MultiLineStringField(GeometryField): geom_type: str class PolygonField(GeometryField): geom_type: str class MultiPolygonField(GeometryField): geom_type: str django-stubs-5.2.9/django-stubs/contrib/gis/forms/widgets.pyi000066400000000000000000000016701513401051600242700ustar00rootroot00000000000000from logging import Logger from typing import Any from django.forms.widgets import Widget logger: Logger class BaseGeometryWidget(Widget): geom_type: str map_srid: int map_width: int map_height: int display_raw: bool supports_3d: bool template_name: str attrs: Any def __init__(self, attrs: Any | None = ...) -> None: ... def serialize(self, value: Any) -> Any: ... def deserialize(self, value: Any) -> Any: ... def get_context(self, name: Any, value: Any, attrs: Any) -> Any: ... class OpenLayersWidget(BaseGeometryWidget): template_name: str map_srid: int class Media: css: Any js: Any def serialize(self, value: Any) -> Any: ... def deserialize(self, value: Any) -> Any: ... class OSMWidget(OpenLayersWidget): template_name: str default_lon: int default_lat: int default_zoom: int def __init__(self, attrs: Any | None = ...) -> None: ... django-stubs-5.2.9/django-stubs/contrib/gis/gdal/000077500000000000000000000000001513401051600216545ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/contrib/gis/gdal/__init__.pyi000066400000000000000000000025371513401051600241450ustar00rootroot00000000000000from django.contrib.gis.gdal.datasource import DataSource as DataSource from django.contrib.gis.gdal.driver import Driver as Driver from django.contrib.gis.gdal.envelope import Envelope as Envelope from django.contrib.gis.gdal.error import GDALException as GDALException from django.contrib.gis.gdal.error import SRSException as SRSException from django.contrib.gis.gdal.error import check_err as check_err from django.contrib.gis.gdal.geometries import OGRGeometry as OGRGeometry from django.contrib.gis.gdal.geomtype import OGRGeomType as OGRGeomType from django.contrib.gis.gdal.libgdal import GDAL_VERSION as GDAL_VERSION from django.contrib.gis.gdal.libgdal import gdal_full_version as gdal_full_version from django.contrib.gis.gdal.libgdal import gdal_version as gdal_version from django.contrib.gis.gdal.raster.source import GDALRaster as GDALRaster from django.contrib.gis.gdal.srs import AxisOrder as AxisOrder from django.contrib.gis.gdal.srs import CoordTransform as CoordTransform from django.contrib.gis.gdal.srs import SpatialReference as SpatialReference __all__ = ( "GDAL_VERSION", "AxisOrder", "CoordTransform", "DataSource", "Driver", "Envelope", "GDALException", "GDALRaster", "OGRGeomType", "OGRGeometry", "SRSException", "SpatialReference", "check_err", "gdal_full_version", "gdal_version", ) django-stubs-5.2.9/django-stubs/contrib/gis/gdal/base.pyi000066400000000000000000000002111513401051600233030ustar00rootroot00000000000000from typing import Any from django.contrib.gis.ptr import CPointerBase class GDALBase(CPointerBase): null_ptr_exception_class: Any django-stubs-5.2.9/django-stubs/contrib/gis/gdal/datasource.pyi000066400000000000000000000010761513401051600245350ustar00rootroot00000000000000from typing import Any from django.contrib.gis.gdal.base import GDALBase from django.contrib.gis.gdal.driver import Driver from django.contrib.gis.gdal.layer import Layer class DataSource(GDALBase): destructor: Any encoding: str ptr: Any driver: Driver def __init__(self, ds_input: Any, ds_driver: bool = ..., write: bool = ..., encoding: str = ...) -> None: ... def __getitem__(self, index: str | int) -> Layer: ... def __len__(self) -> int: ... @property def layer_count(self) -> int: ... @property def name(self) -> str: ... django-stubs-5.2.9/django-stubs/contrib/gis/gdal/driver.pyi000066400000000000000000000005041513401051600236710ustar00rootroot00000000000000from typing import Any from django.contrib.gis.gdal.base import GDALBase class Driver(GDALBase): ptr: Any def __init__(self, dr_input: Any) -> None: ... @classmethod def ensure_registered(cls) -> None: ... @classmethod def driver_count(cls) -> int: ... @property def name(self) -> str: ... django-stubs-5.2.9/django-stubs/contrib/gis/gdal/envelope.pyi000066400000000000000000000012601513401051600242130ustar00rootroot00000000000000from ctypes import Structure from typing import Any class OGREnvelope(Structure): ... class Envelope: def __init__(self, *args: Any) -> None: ... def __eq__(self, other: object) -> bool: ... def expand_to_include(self, *args: Any) -> None: ... @property def min_x(self) -> float: ... @property def min_y(self) -> float: ... @property def max_x(self) -> float: ... @property def max_y(self) -> float: ... @property def ur(self) -> tuple[float, float]: ... @property def ll(self) -> tuple[float, float]: ... @property def tuple(self) -> tuple[float, float, float, float]: ... @property def wkt(self) -> str: ... django-stubs-5.2.9/django-stubs/contrib/gis/gdal/error.pyi000066400000000000000000000003101513401051600235220ustar00rootroot00000000000000from typing import Any class GDALException(Exception): ... class SRSException(Exception): ... OGRERR_DICT: Any CPLERR_DICT: Any ERR_NONE: int def check_err(code: Any, cpl: bool = ...) -> None: ... django-stubs-5.2.9/django-stubs/contrib/gis/gdal/feature.pyi000066400000000000000000000016631513401051600240400ustar00rootroot00000000000000from typing import Any from django.contrib.gis.gdal.base import GDALBase from django.contrib.gis.gdal.field import Field from django.contrib.gis.gdal.geometries import OGRGeometry from django.contrib.gis.gdal.geomtype import OGRGeomType class Feature(GDALBase): destructor: Any ptr: Any def __init__(self, feat: Any, layer: Any) -> None: ... def __getitem__(self, index: str | int) -> Field: ... def __len__(self) -> int: ... def __eq__(self, other: object) -> bool: ... @property def encoding(self) -> str: ... @property def fid(self) -> int: ... @property def layer_name(self) -> str: ... @property def num_fields(self) -> int: ... @property def fields(self) -> list[str]: ... @property def geom(self) -> OGRGeometry: ... @property def geom_type(self) -> OGRGeomType: ... def get(self, field: str) -> Any: ... def index(self, field_name: str) -> Any: ... django-stubs-5.2.9/django-stubs/contrib/gis/gdal/field.pyi000066400000000000000000000026641513401051600234720ustar00rootroot00000000000000from typing import Any from django.contrib.gis.gdal.base import GDALBase class Field(GDALBase): ptr: Any def __init__(self, feat: Any, index: Any) -> None: ... def as_double(self) -> float | None: ... def as_int(self, is_64: bool = ...) -> int | None: ... def as_string(self) -> str | None: ... def as_datetime(self) -> tuple[int, int, int, int, int, int, int] | None: ... @property def is_set(self) -> bool: ... @property def name(self) -> str: ... @property def precision(self) -> int: ... @property def type(self) -> int: ... @property def type_name(self) -> bytes: ... @property def value(self) -> Any: ... @property def width(self) -> int: ... class OFTInteger(Field): @property def value(self) -> Any: ... @property def type(self) -> Any: ... class OFTReal(Field): @property def value(self) -> Any: ... class OFTString(Field): ... class OFTWideString(Field): ... class OFTBinary(Field): ... class OFTDate(Field): @property def value(self) -> Any: ... class OFTDateTime(Field): @property def value(self) -> Any: ... class OFTTime(Field): @property def value(self) -> Any: ... class OFTInteger64(OFTInteger): ... class OFTIntegerList(Field): ... class OFTRealList(Field): ... class OFTStringList(Field): ... class OFTWideStringList(Field): ... class OFTInteger64List(Field): ... OGRFieldTypes: Any ROGRFieldTypes: Any django-stubs-5.2.9/django-stubs/contrib/gis/gdal/geometries.pyi000066400000000000000000000121231513401051600245410ustar00rootroot00000000000000from typing import Any, AnyStr from django.contrib.gis.gdal import CoordTransform, SpatialReference from django.contrib.gis.gdal.base import GDALBase from django.contrib.gis.gdal.envelope import Envelope from django.contrib.gis.gdal.geomtype import OGRGeomType from django.contrib.gis.geos import GEOSGeometry class OGRGeometry(GDALBase): destructor: Any ptr: Any srs: SpatialReference | None def __init__(self, geom_input: Any, srs: SpatialReference | None = ...) -> None: ... @classmethod def from_bbox(cls, bbox: tuple[float, float, float, float]) -> OGRGeometry: ... @staticmethod def from_json(geom_input: AnyStr) -> OGRGeometry: ... @classmethod def from_gml(cls, gml_string: AnyStr) -> OGRGeometry: ... def __or__(self, other: OGRGeometry) -> OGRGeometry: ... def __and__(self, other: OGRGeometry) -> OGRGeometry: ... def __sub__(self, other: OGRGeometry) -> OGRGeometry: ... def __xor__(self, other: OGRGeometry) -> OGRGeometry: ... def __eq__(self, other: object) -> bool: ... @property def dimension(self) -> int: ... coord_dim: int @property def geom_count(self) -> int: ... @property def point_count(self) -> int: ... @property def num_points(self) -> int: ... @property def num_coords(self) -> int: ... @property def geom_type(self) -> OGRGeomType: ... @property def geom_name(self) -> str: ... @property def area(self) -> float: ... @property def envelope(self) -> Envelope: ... @property def empty(self) -> bool: ... @property def extent(self) -> tuple[float, float, float, float]: ... @property def is_3d(self) -> bool: ... def set_3d(self, value: bool) -> None: ... @property def is_measured(self) -> bool: ... def set_measured(self, value: bool) -> None: ... srid: int | None @property def geos(self) -> GEOSGeometry: ... @property def gml(self) -> str: ... @property def hex(self) -> bytes: ... @property def json(self) -> str: ... geojson: str @property def kml(self) -> str: ... @property def wkb_size(self) -> int: ... @property def wkb(self) -> memoryview: ... @property def wkt(self) -> str: ... @property def ewkt(self) -> str: ... def clone(self) -> Any: ... def close_rings(self) -> None: ... def transform(self, coord_trans: CoordTransform | SpatialReference | str | int, clone: bool = ...) -> Any: ... def intersects(self, other: OGRGeometry) -> bool: ... def equals(self, other: OGRGeometry) -> bool: ... def disjoint(self, other: OGRGeometry) -> bool: ... def touches(self, other: OGRGeometry) -> bool: ... def crosses(self, other: OGRGeometry) -> bool: ... def within(self, other: OGRGeometry) -> bool: ... def contains(self, other: OGRGeometry) -> bool: ... def overlaps(self, other: OGRGeometry) -> bool: ... @property def boundary(self) -> OGRGeometry: ... @property def convex_hull(self) -> OGRGeometry: ... def difference(self, other: OGRGeometry) -> OGRGeometry: ... def intersection(self, other: OGRGeometry) -> OGRGeometry: ... def sym_difference(self, other: OGRGeometry) -> OGRGeometry: ... def union(self, other: OGRGeometry) -> OGRGeometry: ... @property def centroid(self) -> Point: ... class Point(OGRGeometry): @property def x(self) -> float: ... @property def y(self) -> float: ... @property def z(self) -> float | None: ... @property def m(self) -> float | None: ... @property def coords(self) -> tuple[float, float] | tuple[float, float, float]: ... @property def tuple(self) -> tuple[float, float] | tuple[float, float, float]: ... class LineString(OGRGeometry): def __getitem__(self, index: int) -> tuple[float, ...]: ... def __len__(self) -> int: ... @property def tuple(self) -> tuple[tuple[float, ...]]: ... coords: Any @property def x(self) -> list[float]: ... @property def y(self) -> list[float]: ... @property def z(self) -> list[float] | None: ... @property def m(self) -> list[float] | None: ... class LinearRing(LineString): ... class Polygon(OGRGeometry): def __len__(self) -> int: ... def __getitem__(self, index: int) -> OGRGeometry: ... @property def shell(self) -> OGRGeometry: ... exterior_ring: OGRGeometry @property def coords(self) -> tuple[tuple[tuple[float, ...]]]: ... @property def tuple(self) -> tuple[tuple[tuple[float, ...]]]: ... @property def point_count(self) -> int: ... @property def centroid(self) -> Point: ... class GeometryCollection(OGRGeometry): def __getitem__(self, index: int) -> OGRGeometry: ... def __len__(self) -> int: ... def add(self, geom: OGRGeometry | str) -> None: ... @property def point_count(self) -> int: ... @property def coords(self) -> tuple[Any, ...]: ... @property def tuple(self) -> tuple[Any, ...]: ... class MultiPoint(GeometryCollection): ... class MultiLineString(GeometryCollection): ... class MultiPolygon(GeometryCollection): ... GEO_CLASSES: Any django-stubs-5.2.9/django-stubs/contrib/gis/gdal/geomtype.pyi000066400000000000000000000004601513401051600242300ustar00rootroot00000000000000from typing import Any class OGRGeomType: wkb25bit: int num: int def __init__(self, type_input: Any) -> None: ... def __eq__(self, other: object) -> bool: ... @property def name(self) -> str: ... @property def django(self) -> str: ... def to_multi(self) -> None: ... django-stubs-5.2.9/django-stubs/contrib/gis/gdal/layer.pyi000066400000000000000000000033171513401051600235170ustar00rootroot00000000000000from collections.abc import Iterator from typing import Any, AnyStr, Literal, overload from django.contrib.gis.gdal.base import GDALBase from django.contrib.gis.gdal.envelope import Envelope from django.contrib.gis.gdal.feature import Feature from django.contrib.gis.gdal.field import Field from django.contrib.gis.gdal.geometries import OGRGeometry from django.contrib.gis.gdal.geomtype import OGRGeomType from django.contrib.gis.gdal.srs import SpatialReference from django.contrib.gis.geos.geometry import GEOSGeometry class Layer(GDALBase): ptr: Any def __init__(self, layer_ptr: Any, ds: Any) -> None: ... @overload def __getitem__(self, index: int) -> Feature: ... @overload def __getitem__(self, index: slice) -> list[Feature]: ... def __iter__(self) -> Iterator[Feature]: ... def __len__(self) -> int: ... @property def extent(self) -> Envelope: ... @property def name(self) -> str: ... @property def num_feat(self) -> int: ... @property def num_fields(self) -> int: ... @property def geom_type(self) -> OGRGeomType: ... @property def srs(self) -> SpatialReference: ... @property def fields(self) -> list[str]: ... @property def field_types(self) -> list[type[Field]]: ... @property def field_widths(self) -> list[int]: ... @property def field_precisions(self) -> list[int]: ... spatial_filter: OGRGeometry | None def get_fields(self, field_name: str) -> list[Any]: ... @overload def get_geoms(self, geos: Literal[False] = False) -> list[OGRGeometry]: ... @overload def get_geoms(self, geos: Literal[True]) -> list[GEOSGeometry]: ... def test_capability(self, capability: AnyStr) -> bool: ... django-stubs-5.2.9/django-stubs/contrib/gis/gdal/libgdal.pyi000066400000000000000000000015311513401051600237750ustar00rootroot00000000000000import sys from _ctypes import _CData from collections.abc import Callable, Sequence from ctypes import CDLL, _FuncPointer, _NamedFuncPointer from logging import Logger from typing import Any logger: Logger lib_path: str | None lib_names: list[str] | None lib_name: str lgdal: CDLL if sys.platform == "win32": from ctypes import WinDLL lwingdal: WinDLL def std_call(func: str) -> _NamedFuncPointer: ... def gdal_version() -> bytes: ... def gdal_full_version() -> bytes: ... def gdal_version_info() -> tuple[int, int, int]: ... GDAL_VERSION: tuple[int, int, int] CPLErrorHandler: type[_FuncPointer] def function( name: str, # Taken from _ctypes.CFuncPtr args: Sequence[type[_CData]], restype: type[_CData] | Callable[[int], Any] | None, ) -> _NamedFuncPointer: ... err_handler: _FuncPointer set_error_handler: _NamedFuncPointer django-stubs-5.2.9/django-stubs/contrib/gis/gdal/prototypes/000077500000000000000000000000001513401051600241045ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/contrib/gis/gdal/prototypes/__init__.pyi000066400000000000000000000000001513401051600263540ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/contrib/gis/gdal/prototypes/ds.pyi000066400000000000000000000022621513401051600252370ustar00rootroot00000000000000from typing import Any, Final c_int_p: Any GDAL_OF_READONLY: Final = 0x00 GDAL_OF_UPDATE: Final = 0x01 GDAL_OF_ALL: Final = 0x00 GDAL_OF_RASTER: Final = 0x02 GDAL_OF_VECTOR: Final = 0x04 register_all: Any cleanup_all: Any get_driver: Any get_driver_by_name: Any get_driver_count: Any get_driver_description: Any open_ds: Any destroy_ds: Any get_ds_name: Any get_dataset_driver: Any get_layer: Any get_layer_by_name: Any get_layer_count: Any get_extent: Any get_feature: Any get_feature_count: Any get_layer_defn: Any get_layer_srs: Any get_next_feature: Any reset_reading: Any test_capability: Any get_spatial_filter: Any set_spatial_filter: Any set_spatial_filter_rect: Any get_fd_geom_type: Any get_fd_name: Any get_feat_name: Any get_field_count: Any get_field_defn: Any clone_feature: Any destroy_feature: Any feature_equal: Any get_feat_geom_ref: Any get_feat_field_count: Any get_feat_field_defn: Any get_fid: Any get_field_as_datetime: Any get_field_as_double: Any get_field_as_integer: Any get_field_as_integer64: Any is_field_set: Any get_field_as_string: Any get_field_index: Any get_field_name: Any get_field_precision: Any get_field_type: Any get_field_type_name: Any get_field_width: Any django-stubs-5.2.9/django-stubs/contrib/gis/gdal/prototypes/errcheck.pyi000066400000000000000000000017011513401051600264140ustar00rootroot00000000000000from typing import Any def arg_byref(args: Any, offset: int = ...) -> Any: ... def ptr_byref(args: Any, offset: int = ...) -> Any: ... def check_const_string(result: Any, func: Any, cargs: Any, offset: Any | None = ..., cpl: bool = ...) -> Any: ... def check_string(result: Any, func: Any, cargs: Any, offset: int = ..., str_result: bool = ...) -> Any: ... def check_envelope(result: Any, func: Any, cargs: Any, offset: int = ...) -> Any: ... def check_geom(result: Any, func: Any, cargs: Any) -> Any: ... def check_geom_offset(result: Any, func: Any, cargs: Any, offset: int = ...) -> Any: ... def check_srs(result: Any, func: Any, cargs: Any) -> Any: ... def check_arg_errcode(result: Any, func: Any, cargs: Any, cpl: bool = ...) -> Any: ... def check_errcode(result: Any, func: Any, cargs: Any, cpl: bool = ...) -> None: ... def check_pointer(result: Any, func: Any, cargs: Any) -> Any: ... def check_str_arg(result: Any, func: Any, cargs: Any) -> Any: ... django-stubs-5.2.9/django-stubs/contrib/gis/gdal/prototypes/generation.pyi000066400000000000000000000020651513401051600267650ustar00rootroot00000000000000from ctypes import c_char_p from typing import Any class gdal_char_p(c_char_p): ... def bool_output(func: Any, argtypes: Any, errcheck: Any | None = ...) -> Any: ... def double_output(func: Any, argtypes: Any, errcheck: bool = ..., strarg: bool = ..., cpl: bool = ...) -> Any: ... def geom_output(func: Any, argtypes: Any, offset: Any | None = ...) -> Any: ... def int_output(func: Any, argtypes: Any, errcheck: Any | None = ...) -> Any: ... def int64_output(func: Any, argtypes: Any) -> Any: ... def srs_output(func: Any, argtypes: Any) -> Any: ... def const_string_output( func: Any, argtypes: Any, offset: Any | None = ..., decoding: Any | None = ..., cpl: bool = ... ) -> Any: ... def string_output( func: Any, argtypes: Any, offset: int = ..., str_result: bool = ..., decoding: Any | None = ... ) -> Any: ... def void_output(func: Any, argtypes: Any, errcheck: bool = ..., cpl: bool = ...) -> Any: ... def voidptr_output(func: Any, argtypes: Any, errcheck: bool = ...) -> Any: ... def chararray_output(func: Any, argtypes: Any, errcheck: bool = ...) -> Any: ... django-stubs-5.2.9/django-stubs/contrib/gis/gdal/prototypes/geom.pyi000066400000000000000000000020561513401051600255610ustar00rootroot00000000000000from typing import Any def env_func(f: Any, argtypes: Any) -> Any: ... def pnt_func(f: Any) -> Any: ... def topology_func(f: Any) -> Any: ... from_json: Any to_json: Any to_kml: Any getx: Any gety: Any getz: Any getm: Any from_wkb: Any from_wkt: Any from_gml: Any create_geom: Any clone_geom: Any get_geom_ref: Any get_boundary: Any geom_convex_hull: Any geom_diff: Any geom_intersection: Any geom_sym_diff: Any geom_union: Any is_3d: Any set_3d: Any is_measured: Any set_measured: Any add_geom: Any import_wkt: Any destroy_geom: Any to_wkb: Any to_iso_wkb: Any to_wkt: Any to_iso_wkt: Any to_gml: Any get_wkbsize: Any assign_srs: Any get_geom_srs: Any get_area: Any get_centroid: Any get_dims: Any get_coord_dim: Any set_coord_dim: Any is_empty: Any get_geom_count: Any get_geom_name: Any get_geom_type: Any get_point_count: Any get_point: Any geom_close_rings: Any ogr_contains: Any ogr_crosses: Any ogr_disjoint: Any ogr_equals: Any ogr_intersects: Any ogr_overlaps: Any ogr_touches: Any ogr_within: Any geom_transform: Any geom_transform_to: Any get_envelope: Any django-stubs-5.2.9/django-stubs/contrib/gis/gdal/prototypes/raster.pyi000066400000000000000000000016611513401051600261330ustar00rootroot00000000000000from typing import Any create_ds: Any open_ds: Any close_ds: Any flush_ds: Any copy_ds: Any add_band_ds: Any get_ds_description: Any get_ds_driver: Any get_ds_xsize: Any get_ds_ysize: Any get_ds_raster_count: Any get_ds_raster_band: Any get_ds_projection_ref: Any set_ds_projection_ref: Any get_ds_geotransform: Any set_ds_geotransform: Any get_ds_metadata: Any set_ds_metadata: Any get_ds_metadata_domain_list: Any get_ds_metadata_item: Any set_ds_metadata_item: Any free_dsl: Any get_ds_info: Any band_io: Any get_band_xsize: Any get_band_ysize: Any get_band_index: Any get_band_description: Any get_band_ds: Any get_band_datatype: Any get_band_color_interp: Any get_band_nodata_value: Any set_band_nodata_value: Any delete_band_nodata_value: Any get_band_statistics: Any compute_band_statistics: Any reproject_image: Any auto_create_warped_vrt: Any create_vsi_file_from_mem_buffer: Any get_mem_buffer_from_vsi_file: Any unlink_vsi_file: Any django-stubs-5.2.9/django-stubs/contrib/gis/gdal/prototypes/srs.pyi000066400000000000000000000011461513401051600254400ustar00rootroot00000000000000from typing import Any def srs_double(f: Any) -> Any: ... def units_func(f: Any) -> Any: ... clone_srs: Any new_srs: Any release_srs: Any destroy_srs: Any srs_validate: Any set_axis_strategy: Any semi_major: Any semi_minor: Any invflattening: Any from_wkt: Any from_proj: Any from_epsg: Any from_xml: Any from_user_input: Any morph_to_esri: Any morph_from_esri: Any identify_epsg: Any linear_units: Any angular_units: Any to_wkt: Any to_proj: Any to_pretty_wkt: Any to_xml: Any get_attr_value: Any get_auth_name: Any get_auth_code: Any isgeographic: Any islocal: Any isprojected: Any new_ct: Any destroy_ct: Any django-stubs-5.2.9/django-stubs/contrib/gis/gdal/raster/000077500000000000000000000000001513401051600231545ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/contrib/gis/gdal/raster/__init__.pyi000066400000000000000000000000001513401051600254240ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/contrib/gis/gdal/raster/band.pyi000066400000000000000000000030411513401051600246010ustar00rootroot00000000000000from typing import Any, Literal, overload from django.contrib.gis.gdal.raster.base import GDALRasterBase class GDALBand(GDALRasterBase): source: Any def __init__(self, source: Any, index: Any) -> None: ... @property def description(self) -> str: ... @property def width(self) -> int: ... @property def height(self) -> int: ... @property def pixel_count(self) -> int: ... def statistics( self, refresh: bool = ..., approximate: bool = ... ) -> tuple[float, float, float, float] | tuple[None, None, None, None]: ... @property def min(self) -> float | None: ... @property def max(self) -> float | None: ... @property def mean(self) -> float | None: ... @property def std(self) -> float | None: ... @property def nodata_value(self) -> float | None: ... @nodata_value.setter def nodata_value(self, value: float | None) -> None: ... @overload def datatype(self, as_string: Literal[False] = False) -> int: ... @overload def datatype(self, as_string: Literal[True]) -> str: ... @overload def color_interp(self, as_string: Literal[False] = False) -> int: ... @overload def color_interp(self, as_string: Literal[True]) -> str: ... def data( self, data: Any | None = ..., offset: Any | None = ..., size: Any | None = ..., shape: Any | None = ..., as_memoryview: bool = ..., ) -> Any: ... class BandList(list[GDALBand]): source: Any def __init__(self, source: Any) -> None: ... django-stubs-5.2.9/django-stubs/contrib/gis/gdal/raster/base.pyi000066400000000000000000000003411513401051600246070ustar00rootroot00000000000000from typing import Any from django.contrib.gis.gdal.base import GDALBase class GDALRasterBase(GDALBase): @property def metadata(self) -> Any: ... @metadata.setter def metadata(self, value: Any) -> None: ... django-stubs-5.2.9/django-stubs/contrib/gis/gdal/raster/const.pyi000066400000000000000000000004501513401051600250240ustar00rootroot00000000000000GDAL_PIXEL_TYPES: dict[int, str] GDAL_INTEGER_TYPES: list[int] GDAL_TO_CTYPES: list[type | None] GDAL_RESAMPLE_ALGORITHMS: dict[str, int] GDAL_COLOR_TYPES: dict[int, str] VSI_FILESYSTEM_PREFIX: str VSI_MEM_FILESYSTEM_BASE_PATH: str VSI_TAKE_BUFFER_OWNERSHIP: bool VSI_DELETE_BUFFER_ON_READ: bool django-stubs-5.2.9/django-stubs/contrib/gis/gdal/raster/source.pyi000066400000000000000000000045331513401051600252040ustar00rootroot00000000000000from collections.abc import Sequence from ctypes import c_void_p from pathlib import Path from typing import Any from django.contrib.gis.gdal.driver import Driver from django.contrib.gis.gdal.raster.band import BandList from django.contrib.gis.gdal.raster.base import GDALRasterBase from django.contrib.gis.gdal.srs import SpatialReference from django.utils.functional import cached_property class TransformPoint(list[Sequence[float]]): indices: dict[str, tuple[int, int]] def __init__(self, raster: GDALRaster, prop: str) -> None: ... @property def x(self) -> float: ... @x.setter def x(self, value: float) -> None: ... @property def y(self) -> float: ... @y.setter def y(self, value: float) -> None: ... class GDALRaster(GDALRasterBase): destructor: Any def __init__(self, ds_input: str | Path | bytes | dict | c_void_p, write: bool = ...) -> None: ... def __del__(self) -> None: ... @property def vsi_buffer(self) -> bytes | None: ... @cached_property def is_vsi_based(self) -> bool: ... @property def name(self) -> str: ... @cached_property def driver(self) -> Driver: ... @property def width(self) -> int: ... @property def height(self) -> int: ... @property def srs(self) -> SpatialReference | None: ... @srs.setter def srs(self, value: SpatialReference | int | str) -> None: ... @property def srid(self) -> int: ... @srid.setter def srid(self, value: int) -> None: ... @property def geotransform(self) -> list[float]: ... @geotransform.setter def geotransform(self, values: list[float]) -> None: ... @property def origin(self) -> TransformPoint: ... @property def scale(self) -> TransformPoint: ... @property def skew(self) -> TransformPoint: ... @property def extent(self) -> tuple[float, float, float, float]: ... @property def bands(self) -> BandList: ... def warp(self, ds_input: Any, resampling: str = ..., max_error: float = ...) -> GDALRaster: ... def clone(self, name: str | None = ...) -> GDALRaster: ... def transform( self, srs: SpatialReference | int | str, driver: Any | None = ..., name: str | None = ..., resampling: str = ..., max_error: float = ..., ) -> GDALRaster: ... @property def info(self) -> str: ... django-stubs-5.2.9/django-stubs/contrib/gis/gdal/srs.pyi000066400000000000000000000042571513401051600232160ustar00rootroot00000000000000from enum import IntEnum from typing import Any, AnyStr, cast from django.contrib.gis.gdal.base import GDALBase from typing_extensions import Self class AxisOrder(IntEnum): TRADITIONAL = cast(int, ...) AUTHORITY = cast(int, ...) class SpatialReference(GDALBase): destructor: Any axis_order: AxisOrder ptr: Any def __init__(self, srs_input: str | int = ..., srs_type: str = ..., axis_order: AxisOrder | None = ...) -> None: ... def __getitem__(self, target: str | tuple[str, int]) -> str: ... def attr_value(self, target: AnyStr, index: int = ...) -> str: ... def auth_name(self, target: AnyStr) -> str: ... def auth_code(self, target: AnyStr) -> str: ... def clone(self) -> Self: ... def from_esri(self) -> None: ... def identify_epsg(self) -> None: ... def to_esri(self) -> None: ... def validate(self) -> None: ... @property def name(self) -> str | None: ... @property def srid(self) -> int | None: ... @property def linear_name(self) -> str: ... @property def linear_units(self) -> float: ... @property def angular_name(self) -> str: ... @property def angular_units(self) -> float: ... @property def units(self) -> tuple[float | None, str | None]: ... @property def ellipsoid(self) -> tuple[float, float, float]: ... @property def semi_major(self) -> float: ... @property def semi_minor(self) -> float: ... @property def inverse_flattening(self) -> float: ... @property def geographic(self) -> bool: ... @property def local(self) -> bool: ... @property def projected(self) -> bool: ... def import_epsg(self, epsg: int) -> None: ... def import_proj(self, proj: AnyStr) -> None: ... def import_user_input(self, user_input: AnyStr) -> None: ... def import_wkt(self, wkt: AnyStr) -> None: ... def import_xml(self, xml: AnyStr) -> None: ... @property def wkt(self) -> str: ... @property def proj(self) -> str: ... @property def proj4(self) -> str: ... class CoordTransform(GDALBase): destructor: Any ptr: Any def __init__(self, source: SpatialReference, target: SpatialReference) -> None: ... django-stubs-5.2.9/django-stubs/contrib/gis/geoip2.pyi000066400000000000000000000046531513401051600226650ustar00rootroot00000000000000from collections.abc import Sequence from ipaddress import IPv4Address, IPv6Address from typing import Final, TypeAlias, TypedDict from _typeshed import StrPath from django.contrib.gis.geos import Point from django.utils.functional import cached_property from typing_extensions import Self, deprecated HAS_GEOIP2: bool SUPPORTED_DATABASE_TYPES: set[str] _CoordType: TypeAlias = tuple[float, float] | tuple[None, None] _QueryType: TypeAlias = str | IPv4Address | IPv6Address class _CityResponse(TypedDict): accuracy_radius: int | None city: str continent_code: str continent_name: str country_code: str country_name: str is_in_european_union: bool latitude: float longitude: float metro_code: int | None postal_code: str | None region_code: str | None region_name: str | None time_zone: str | None # Kept for backward compatibility. dma_code: int | None region: str | None class _CountryResponse(TypedDict): continent_code: str continent_name: str country_code: str country_name: str is_in_european_union: bool class GeoIP2Exception(Exception): ... class GeoIP2: MODE_AUTO: Final = 0 MODE_MMAP_EXT: Final = 1 MODE_MMAP: Final = 2 MODE_FILE: Final = 4 MODE_MEMORY: Final = 8 cache_options: Final[frozenset[int]] def __init__( self, path: StrPath | None = None, cache: int = 0, country: str | None = None, city: str | None = None, ) -> None: ... def __del__(self) -> None: ... @cached_property def is_city(self) -> bool: ... @cached_property def is_country(self) -> bool: ... def city(self, query: _QueryType) -> _CityResponse: ... def country_code(self, query: _QueryType) -> str: ... def country_name(self, query: _QueryType) -> str: ... def country(self, query: _QueryType) -> _CountryResponse: ... @deprecated("coords() is deprecated and will be removed in Django 6.0. Use lon_lat() instead.") def coords(self, query: _QueryType, ordering: Sequence[str] = ...) -> _CoordType: ... def lon_lat(self, query: _QueryType) -> _CoordType: ... def lat_lon(self, query: _QueryType) -> _CoordType: ... def geos(self, query: _QueryType) -> Point: ... @classmethod @deprecated("open() is deprecated and will be removed in Django 6.0. Use GeoIP2() instead.") def open(cls, full_path: StrPath | None, cache: int) -> Self: ... __all__ = ["HAS_GEOIP2"] django-stubs-5.2.9/django-stubs/contrib/gis/geometry.pyi000066400000000000000000000001411513401051600233170ustar00rootroot00000000000000from re import Pattern hex_regex: Pattern[str] wkt_regex: Pattern[str] json_regex: Pattern[str] django-stubs-5.2.9/django-stubs/contrib/gis/geos/000077500000000000000000000000001513401051600217025ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/contrib/gis/geos/__init__.pyi000066400000000000000000000015631513401051600241710ustar00rootroot00000000000000from ..geometry import hex_regex as hex_regex from ..geometry import wkt_regex as wkt_regex from .collections import GeometryCollection as GeometryCollection from .collections import MultiLineString as MultiLineString from .collections import MultiPoint as MultiPoint from .collections import MultiPolygon as MultiPolygon from .error import GEOSException as GEOSException from .factory import fromfile as fromfile from .factory import fromstr as fromstr from .geometry import GEOSGeometry as GEOSGeometry from .io import WKBReader as WKBReader from .io import WKBWriter as WKBWriter from .io import WKTReader as WKTReader from .io import WKTWriter as WKTWriter from .libgeos import geos_version as geos_version from .linestring import LinearRing as LinearRing from .linestring import LineString as LineString from .point import Point as Point from .polygon import Polygon as Polygon django-stubs-5.2.9/django-stubs/contrib/gis/geos/base.pyi000066400000000000000000000002711513401051600233370ustar00rootroot00000000000000from django.contrib.gis.geos.error import GEOSException from django.contrib.gis.ptr import CPointerBase class GEOSBase(CPointerBase): null_ptr_exception_class: type[GEOSException] django-stubs-5.2.9/django-stubs/contrib/gis/geos/collections.pyi000066400000000000000000000011341513401051600247420ustar00rootroot00000000000000from collections.abc import Iterator from typing import Any from django.contrib.gis.geos.geometry import GEOSGeometry, LinearGeometryMixin class GeometryCollection(GEOSGeometry): def __init__(self, *args: Any, **kwargs: Any) -> None: ... def __iter__(self) -> Iterator[GEOSGeometry]: ... def __len__(self) -> int: ... @property def coords(self) -> tuple[Any, ...]: ... @property def tuple(self) -> tuple[Any, ...]: ... class MultiPoint(GeometryCollection): ... class MultiLineString(LinearGeometryMixin, GeometryCollection): ... class MultiPolygon(GeometryCollection): ... django-stubs-5.2.9/django-stubs/contrib/gis/geos/coordseq.pyi000066400000000000000000000023441513401051600242470ustar00rootroot00000000000000from collections.abc import Iterator from typing import Any from django.contrib.gis.geos.base import GEOSBase from typing_extensions import Self class GEOSCoordSeq(GEOSBase): ptr_type: Any def __init__(self, ptr: Any, z: bool = ...) -> None: ... def __iter__(self) -> Iterator[tuple[float, ...]]: ... def __len__(self) -> int: ... def __getitem__(self, index: int) -> Any: ... def __setitem__(self, index: int, value: Any) -> None: ... def getOrdinate(self, dimension: int, index: int) -> float: ... def setOrdinate(self, dimension: int, index: int, value: float) -> None: ... def getX(self, index: int) -> float: ... def setX(self, index: int, value: float) -> None: ... def getY(self, index: int) -> float: ... def setY(self, index: int, value: float) -> None: ... def getZ(self, index: int) -> float: ... def setZ(self, index: int, value: float) -> None: ... @property def size(self) -> int: ... @property def dims(self) -> int: ... @property def hasz(self) -> bool: ... def clone(self) -> Self: ... @property def kml(self) -> str: ... @property def tuple(self) -> tuple[Any, ...]: ... @property def is_counterclockwise(self) -> bool: ... django-stubs-5.2.9/django-stubs/contrib/gis/geos/error.pyi000066400000000000000000000000441513401051600235540ustar00rootroot00000000000000class GEOSException(Exception): ... django-stubs-5.2.9/django-stubs/contrib/gis/geos/factory.pyi000066400000000000000000000004661513401051600241020ustar00rootroot00000000000000from typing import Any, Protocol, type_check_only from django.contrib.gis.geos.geometry import GEOSGeometry @type_check_only class _Reader(Protocol): def read(self) -> str | bytes: ... def fromfile(file_h: str | _Reader) -> GEOSGeometry: ... def fromstr(string: str, **kwargs: Any) -> GEOSGeometry: ... django-stubs-5.2.9/django-stubs/contrib/gis/geos/geometry.pyi000066400000000000000000000124111513401051600242570ustar00rootroot00000000000000from typing import Any from django.contrib.gis.gdal import CoordTransform, SpatialReference from django.contrib.gis.gdal.geometries import OGRGeometry from django.contrib.gis.geos.base import GEOSBase from django.contrib.gis.geos.coordseq import GEOSCoordSeq from django.contrib.gis.geos.mutable_list import ListMixin from django.contrib.gis.geos.point import Point from django.contrib.gis.geos.prepared import PreparedGeometry from django.utils.deconstruct import _Deconstructible from typing_extensions import Self class GEOSGeometryBase(GEOSBase): ptr_type: Any destructor: Any has_cs: bool def __init__(self, ptr: Any, cls: Any) -> None: ... def __copy__(self) -> Self: ... def __deepcopy__(self, memodict: Any) -> Self: ... @staticmethod def from_ewkt(ewkt: str) -> GEOSGeometry: ... @classmethod def from_gml(cls, gml_string: str) -> GEOSGeometry: ... def __eq__(self, other: object) -> bool: ... def __hash__(self) -> int: ... def __or__(self, other: GEOSGeometry) -> GEOSGeometry: ... def __and__(self, other: GEOSGeometry) -> GEOSGeometry: ... def __sub__(self, other: GEOSGeometry) -> GEOSGeometry: ... def __xor__(self, other: GEOSGeometry) -> GEOSGeometry: ... @property def coord_seq(self) -> GEOSCoordSeq | None: ... @property def geom_type(self) -> str: ... @property def geom_typeid(self) -> int: ... @property def num_geom(self) -> int: ... @property def num_coords(self) -> int: ... @property def num_points(self) -> int: ... @property def dims(self) -> int: ... def normalize(self) -> None: ... @property def empty(self) -> bool: ... @property def hasz(self) -> bool: ... @property def ring(self) -> bool: ... @property def simple(self) -> bool: ... @property def valid(self) -> bool: ... @property def valid_reason(self) -> str: ... def contains(self, other: GEOSGeometry) -> bool: ... def covers(self, other: GEOSGeometry) -> bool: ... def crosses(self, other: GEOSGeometry) -> bool: ... def disjoint(self, other: GEOSGeometry) -> bool: ... def equals(self, other: GEOSGeometry) -> bool: ... def equals_exact(self, other: GEOSGeometry, tolerance: float = ...) -> bool: ... def equals_identical(self, other: GEOSGeometry) -> bool: ... def intersects(self, other: GEOSGeometry) -> bool: ... def overlaps(self, other: GEOSGeometry) -> bool: ... def relate_pattern(self, other: GEOSGeometry, pattern: str) -> bool: ... def touches(self, other: GEOSGeometry) -> bool: ... def within(self, other: GEOSGeometry) -> bool: ... @property def srid(self) -> int | None: ... @srid.setter def srid(self, srid: int | None) -> None: ... @property def ewkt(self) -> str: ... @property def wkt(self) -> str: ... @property def hex(self) -> bytes: ... @property def hexewkb(self) -> bytes: ... @property def json(self) -> str: ... geojson: str @property def wkb(self) -> memoryview: ... @property def ewkb(self) -> memoryview: ... @property def kml(self) -> str: ... @property def prepared(self) -> PreparedGeometry: ... @property def ogr(self) -> OGRGeometry: ... @property def srs(self) -> SpatialReference | None: ... @property def crs(self) -> SpatialReference | None: ... ptr: Any def transform(self, ct: CoordTransform | SpatialReference | str | int, clone: bool = ...) -> GEOSGeometry: ... @property def boundary(self) -> GEOSGeometry: ... def buffer(self, width: float, quadsegs: int = ...) -> GEOSGeometry: ... def buffer_with_style( self, width: float, quadsegs: int = ..., end_cap_style: int = ..., join_style: int = ..., mitre_limit: float = ..., ) -> GEOSGeometry: ... @property def centroid(self) -> Point: ... @property def convex_hull(self) -> GEOSGeometry: ... def difference(self, other: GEOSGeometry) -> GEOSGeometry: ... @property def envelope(self) -> GEOSGeometry: ... def intersection(self, other: GEOSGeometry) -> GEOSGeometry: ... @property def point_on_surface(self) -> Point: ... def relate(self, other: GEOSGeometry) -> str: ... def simplify(self, tolerance: float = ..., preserve_topology: bool = ...) -> GEOSGeometry: ... def sym_difference(self, other: GEOSGeometry) -> GEOSGeometry: ... @property def unary_union(self) -> GEOSGeometry: ... def union(self, other: GEOSGeometry) -> GEOSGeometry: ... @property def area(self) -> float: ... def distance(self, other: GEOSGeometry) -> float: ... @property def extent(self) -> tuple[float, float, float, float]: ... @property def length(self) -> float: ... def clone(self) -> Self: ... class LinearGeometryMixin: def interpolate(self, distance: float) -> Point: ... def interpolate_normalized(self, distance: float) -> Point: ... def project(self, point: Point) -> float: ... def project_normalized(self, point: Point) -> float: ... @property def merged(self) -> GEOSGeometry: ... @property def closed(self) -> bool: ... class GEOSGeometry(_Deconstructible, GEOSGeometryBase, ListMixin): def __init__(self, geo_input: Any, srid: int | None = ...) -> None: ... django-stubs-5.2.9/django-stubs/contrib/gis/geos/io.pyi000066400000000000000000000010051513401051600230300ustar00rootroot00000000000000from django.contrib.gis.geos.geometry import GEOSGeometry from django.contrib.gis.geos.prototypes.io import WKBWriter as WKBWriter from django.contrib.gis.geos.prototypes.io import WKTWriter as WKTWriter from django.contrib.gis.geos.prototypes.io import _WKBReader, _WKTReader class WKBReader(_WKBReader): def read(self, wkb: bytes | str) -> GEOSGeometry: ... class WKTReader(_WKTReader): def read(self, wkt: bytes | str) -> GEOSGeometry: ... __all__ = ["WKBReader", "WKBWriter", "WKTReader", "WKTWriter"] django-stubs-5.2.9/django-stubs/contrib/gis/geos/libgeos.pyi000066400000000000000000000016001513401051600240460ustar00rootroot00000000000000from ctypes import Structure from logging import Logger from typing import Any logger: Logger def load_geos() -> Any: ... NOTICEFUNC: Any def notice_h(fmt: Any, lst: Any) -> None: ... ERRORFUNC: Any def error_h(fmt: Any, lst: Any) -> None: ... class GEOSGeom_t(Structure): ... class GEOSPrepGeom_t(Structure): ... class GEOSCoordSeq_t(Structure): ... class GEOSContextHandle_t(Structure): ... GEOM_PTR: Any PREPGEOM_PTR: Any CS_PTR: Any CONTEXT_PTR: Any lgeos: Any class GEOSFuncFactory: argtypes: Any restype: Any errcheck: Any func_name: Any def __init__( self, func_name: Any, *, restype: Any | None = ..., errcheck: Any | None = ..., argtypes: Any | None = ... ) -> None: ... def __call__(self, *args: Any) -> Any: ... @property def func(self) -> Any: ... def geos_version() -> bytes: ... def geos_version_tuple() -> tuple[int, ...]: ... django-stubs-5.2.9/django-stubs/contrib/gis/geos/linestring.pyi000066400000000000000000000013761513401051600246120ustar00rootroot00000000000000from collections.abc import Iterator from typing import Any from django.contrib.gis.geos.geometry import GEOSGeometry, LinearGeometryMixin class LineString(LinearGeometryMixin, GEOSGeometry): has_cs: bool def __init__(self, *args: Any, **kwargs: Any) -> None: ... def __iter__(self) -> Iterator[tuple[float, ...]]: ... def __len__(self) -> int: ... @property def coords(self) -> tuple[tuple[float, ...]]: ... @property def tuple(self) -> tuple[tuple[float, ...]]: ... @property def array(self) -> Any: ... @property def x(self) -> Any: ... @property def y(self) -> Any: ... @property def z(self) -> Any: ... class LinearRing(LineString): @property def is_counterclockwise(self) -> bool: ... django-stubs-5.2.9/django-stubs/contrib/gis/geos/mutable_list.pyi000066400000000000000000000021461513401051600251140ustar00rootroot00000000000000from typing import Any from typing_extensions import Self class ListMixin: def __init__(self, *args: Any, **kwargs: Any) -> None: ... def __getitem__(self, index: int | slice) -> Any: ... def __delitem__(self, index: int | slice) -> None: ... def __setitem__(self, index: int | slice, val: Any) -> None: ... def __add__(self, other: Any) -> Self: ... def __radd__(self, other: Any) -> Any: ... def __iadd__(self, other: Any) -> Self: ... def __mul__(self, n: int) -> Self: ... def __rmul__(self, n: int) -> Self: ... def __imul__(self, n: int) -> Self: ... def __eq__(self, other: object) -> bool: ... def __lt__(self, other: Any) -> bool: ... def count(self, val: Any) -> int: ... def index(self, val: Any) -> int: ... def append(self, val: Any) -> None: ... def extend(self, vals: Any) -> None: ... def insert(self, index: int, val: Any) -> None: ... def pop(self, index: int = ...) -> Any: ... def remove(self, val: Any) -> None: ... def reverse(self) -> None: ... def sort(self, key: Any | None = ..., reverse: bool = ...) -> None: ... django-stubs-5.2.9/django-stubs/contrib/gis/geos/point.pyi000066400000000000000000000014601513401051600235570ustar00rootroot00000000000000from collections.abc import Iterator from typing import Any from django.contrib.gis.geos.geometry import GEOSGeometry class Point(GEOSGeometry): has_cs: bool def __init__( self, x: Any | None = ..., y: Any | None = ..., z: Any | None = ..., srid: Any | None = ... ) -> None: ... def __iter__(self) -> Iterator[float]: ... def __len__(self) -> int: ... @property def x(self) -> float: ... @x.setter def x(self, value: float) -> None: ... @property def y(self) -> float: ... @y.setter def y(self, value: float) -> None: ... @property def z(self) -> float | None: ... @z.setter def z(self, value: float) -> None: ... @property def coords(self) -> tuple[float, ...]: ... @coords.setter def coords(self, tup: Any) -> None: ... django-stubs-5.2.9/django-stubs/contrib/gis/geos/polygon.pyi000066400000000000000000000013111513401051600241100ustar00rootroot00000000000000from collections.abc import Iterator from typing import Any from django.contrib.gis.geos.geometry import GEOSGeometry from django.contrib.gis.geos.linestring import LinearRing class Polygon(GEOSGeometry): def __init__(self, *args: Any, **kwargs: Any) -> None: ... def __iter__(self) -> Iterator[LinearRing]: ... def __len__(self) -> int: ... @classmethod def from_bbox(cls, bbox: tuple[float, float, float, float]) -> Polygon: ... @property def num_interior_rings(self) -> int: ... exterior_ring: LinearRing shell: LinearRing @property def coords(self) -> tuple[tuple[tuple[float, ...]]]: ... @property def tuple(self) -> tuple[tuple[tuple[float, ...]]]: ... django-stubs-5.2.9/django-stubs/contrib/gis/geos/prepared.pyi000066400000000000000000000013411513401051600242260ustar00rootroot00000000000000from typing import Any from .base import GEOSBase from .geometry import GEOSGeometry class PreparedGeometry(GEOSBase): ptr_type: Any destructor: Any ptr: Any def __init__(self, geom: Any) -> None: ... def contains(self, other: GEOSGeometry) -> bool: ... def contains_properly(self, other: GEOSGeometry) -> bool: ... def covers(self, other: GEOSGeometry) -> bool: ... def intersects(self, other: GEOSGeometry) -> bool: ... def crosses(self, other: GEOSGeometry) -> bool: ... def disjoint(self, other: GEOSGeometry) -> bool: ... def overlaps(self, other: GEOSGeometry) -> bool: ... def touches(self, other: GEOSGeometry) -> bool: ... def within(self, other: GEOSGeometry) -> bool: ... django-stubs-5.2.9/django-stubs/contrib/gis/geos/prototypes/000077500000000000000000000000001513401051600241325ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/contrib/gis/geos/prototypes/__init__.pyi000066400000000000000000000102311513401051600264110ustar00rootroot00000000000000from django.contrib.gis.geos.prototypes.coordseq import create_cs as create_cs from django.contrib.gis.geos.prototypes.coordseq import cs_clone as cs_clone from django.contrib.gis.geos.prototypes.coordseq import cs_getdims as cs_getdims from django.contrib.gis.geos.prototypes.coordseq import cs_getordinate as cs_getordinate from django.contrib.gis.geos.prototypes.coordseq import cs_getsize as cs_getsize from django.contrib.gis.geos.prototypes.coordseq import cs_getx as cs_getx from django.contrib.gis.geos.prototypes.coordseq import cs_gety as cs_gety from django.contrib.gis.geos.prototypes.coordseq import cs_getz as cs_getz from django.contrib.gis.geos.prototypes.coordseq import cs_is_ccw as cs_is_ccw from django.contrib.gis.geos.prototypes.coordseq import cs_setordinate as cs_setordinate from django.contrib.gis.geos.prototypes.coordseq import cs_setx as cs_setx from django.contrib.gis.geos.prototypes.coordseq import cs_sety as cs_sety from django.contrib.gis.geos.prototypes.coordseq import cs_setz as cs_setz from django.contrib.gis.geos.prototypes.coordseq import get_cs as get_cs from django.contrib.gis.geos.prototypes.geom import create_collection as create_collection from django.contrib.gis.geos.prototypes.geom import create_empty_polygon as create_empty_polygon from django.contrib.gis.geos.prototypes.geom import create_linearring as create_linearring from django.contrib.gis.geos.prototypes.geom import create_linestring as create_linestring from django.contrib.gis.geos.prototypes.geom import create_point as create_point from django.contrib.gis.geos.prototypes.geom import create_polygon as create_polygon from django.contrib.gis.geos.prototypes.geom import destroy_geom as destroy_geom from django.contrib.gis.geos.prototypes.geom import geom_clone as geom_clone from django.contrib.gis.geos.prototypes.geom import geos_get_srid as geos_get_srid from django.contrib.gis.geos.prototypes.geom import geos_normalize as geos_normalize from django.contrib.gis.geos.prototypes.geom import geos_set_srid as geos_set_srid from django.contrib.gis.geos.prototypes.geom import geos_type as geos_type from django.contrib.gis.geos.prototypes.geom import geos_typeid as geos_typeid from django.contrib.gis.geos.prototypes.geom import get_dims as get_dims from django.contrib.gis.geos.prototypes.geom import get_extring as get_extring from django.contrib.gis.geos.prototypes.geom import get_geomn as get_geomn from django.contrib.gis.geos.prototypes.geom import get_intring as get_intring from django.contrib.gis.geos.prototypes.geom import get_nrings as get_nrings from django.contrib.gis.geos.prototypes.geom import get_num_coords as get_num_coords from django.contrib.gis.geos.prototypes.geom import get_num_geoms as get_num_geoms from django.contrib.gis.geos.prototypes.predicates import geos_contains as geos_contains from django.contrib.gis.geos.prototypes.predicates import geos_covers as geos_covers from django.contrib.gis.geos.prototypes.predicates import geos_crosses as geos_crosses from django.contrib.gis.geos.prototypes.predicates import geos_disjoint as geos_disjoint from django.contrib.gis.geos.prototypes.predicates import geos_equals as geos_equals from django.contrib.gis.geos.prototypes.predicates import geos_equalsexact as geos_equalsexact from django.contrib.gis.geos.prototypes.predicates import geos_hasz as geos_hasz from django.contrib.gis.geos.prototypes.predicates import geos_intersects as geos_intersects from django.contrib.gis.geos.prototypes.predicates import geos_isclosed as geos_isclosed from django.contrib.gis.geos.prototypes.predicates import geos_isempty as geos_isempty from django.contrib.gis.geos.prototypes.predicates import geos_isring as geos_isring from django.contrib.gis.geos.prototypes.predicates import geos_issimple as geos_issimple from django.contrib.gis.geos.prototypes.predicates import geos_isvalid as geos_isvalid from django.contrib.gis.geos.prototypes.predicates import geos_overlaps as geos_overlaps from django.contrib.gis.geos.prototypes.predicates import geos_relatepattern as geos_relatepattern from django.contrib.gis.geos.prototypes.predicates import geos_touches as geos_touches from django.contrib.gis.geos.prototypes.predicates import geos_within as geos_within django-stubs-5.2.9/django-stubs/contrib/gis/geos/prototypes/coordseq.pyi000066400000000000000000000014331513401051600264750ustar00rootroot00000000000000from typing import Any from django.contrib.gis.geos.libgeos import GEOSFuncFactory def check_cs_op(result: Any, func: Any, cargs: Any) -> Any: ... def check_cs_get(result: Any, func: Any, cargs: Any) -> Any: ... class CsInt(GEOSFuncFactory): argtypes: Any restype: Any errcheck: Any class CsOperation(GEOSFuncFactory): restype: Any def __init__(self, *args: Any, ordinate: bool = ..., get: bool = ..., **kwargs: Any) -> None: ... class CsOutput(GEOSFuncFactory): restype: Any @staticmethod def errcheck(result: Any, func: Any, cargs: Any) -> Any: ... cs_clone: Any create_cs: Any get_cs: Any cs_getordinate: Any cs_setordinate: Any cs_getx: Any cs_gety: Any cs_getz: Any cs_setx: Any cs_sety: Any cs_setz: Any cs_getsize: Any cs_getdims: Any cs_is_ccw: Any django-stubs-5.2.9/django-stubs/contrib/gis/geos/prototypes/errcheck.pyi000066400000000000000000000007321513401051600264450ustar00rootroot00000000000000from typing import Any free: Any def last_arg_byref(args: Any) -> Any: ... def check_dbl(result: Any, func: Any, cargs: Any) -> Any: ... def check_geom(result: Any, func: Any, cargs: Any) -> Any: ... def check_minus_one(result: Any, func: Any, cargs: Any) -> Any: ... def check_predicate(result: Any, func: Any, cargs: Any) -> Any: ... def check_sized_string(result: Any, func: Any, cargs: Any) -> Any: ... def check_string(result: Any, func: Any, cargs: Any) -> Any: ... django-stubs-5.2.9/django-stubs/contrib/gis/geos/prototypes/geom.pyi000066400000000000000000000014301513401051600256020ustar00rootroot00000000000000from ctypes import c_char_p from typing import Any from django.contrib.gis.geos.libgeos import GEOSFuncFactory c_uchar_p: Any class geos_char_p(c_char_p): ... class GeomOutput(GEOSFuncFactory): restype: Any errcheck: Any class IntFromGeom(GEOSFuncFactory): argtypes: Any restype: Any errcheck: Any class StringFromGeom(GEOSFuncFactory): argtypes: Any restype: Any errcheck: Any geos_normalize: Any geos_type: Any geos_typeid: Any get_dims: Any get_num_coords: Any get_num_geoms: Any create_point: Any create_linestring: Any create_linearring: Any create_polygon: Any create_empty_polygon: Any create_collection: Any get_extring: Any get_intring: Any get_nrings: Any get_geomn: Any geom_clone: Any destroy_geom: Any geos_get_srid: Any geos_set_srid: Any django-stubs-5.2.9/django-stubs/contrib/gis/geos/prototypes/io.pyi000066400000000000000000000057061513401051600252740ustar00rootroot00000000000000import threading from ctypes import Structure from typing import Any from django.contrib.gis.geos.base import GEOSBase from django.contrib.gis.geos.libgeos import GEOSFuncFactory class WKTReader_st(Structure): ... class WKTWriter_st(Structure): ... class WKBReader_st(Structure): ... class WKBWriter_st(Structure): ... WKT_READ_PTR: Any WKT_WRITE_PTR: Any WKB_READ_PTR: Any WKB_WRITE_PTR: Any wkt_reader_create: Any wkt_reader_destroy: Any wkt_reader_read: Any wkt_writer_create: Any wkt_writer_destroy: Any wkt_writer_write: Any wkt_writer_get_outdim: Any wkt_writer_set_outdim: Any wkt_writer_set_trim: Any wkt_writer_set_precision: Any wkb_reader_create: Any wkb_reader_destroy: Any class WKBReadFunc(GEOSFuncFactory): argtypes: Any restype: Any errcheck: Any wkb_reader_read: Any wkb_reader_read_hex: Any wkb_writer_create: Any wkb_writer_destroy: Any class WKBWriteFunc(GEOSFuncFactory): argtypes: Any restype: Any errcheck: Any wkb_writer_write: Any wkb_writer_write_hex: Any class WKBWriterGet(GEOSFuncFactory): argtypes: Any restype: Any class WKBWriterSet(GEOSFuncFactory): argtypes: Any wkb_writer_get_byteorder: Any wkb_writer_set_byteorder: Any wkb_writer_get_outdim: Any wkb_writer_set_outdim: Any wkb_writer_get_include_srid: Any wkb_writer_set_include_srid: Any class IOBase(GEOSBase): ptr: Any def __init__(self) -> None: ... class _WKTReader(IOBase): ptr_type: Any destructor: Any def read(self, wkt: Any) -> Any: ... class _WKBReader(IOBase): ptr_type: Any destructor: Any def read(self, wkb: Any) -> Any: ... def default_trim_value() -> bool: ... class WKTWriter(IOBase): ptr_type: Any destructor: Any def __init__(self, dim: int = ..., trim: bool = ..., precision: Any | None = ...) -> None: ... def write(self, geom: Any) -> Any: ... @property def outdim(self) -> Any: ... @outdim.setter def outdim(self, new_dim: Any) -> None: ... @property def trim(self) -> Any: ... @trim.setter def trim(self, flag: Any) -> None: ... @property def precision(self) -> Any: ... @precision.setter def precision(self, precision: Any) -> None: ... class WKBWriter(IOBase): ptr_type: Any destructor: Any geos_version: Any def __init__(self, dim: int = ...) -> None: ... def write(self, geom: Any) -> Any: ... def write_hex(self, geom: Any) -> Any: ... byteorder: Any @property def outdim(self) -> Any: ... @outdim.setter def outdim(self, new_dim: Any) -> None: ... @property def srid(self) -> Any: ... @srid.setter def srid(self, include: Any) -> None: ... class ThreadLocalIO(threading.local): wkt_r: Any wkt_w: Any wkb_r: Any wkb_w: Any ewkb_w: Any thread_context: Any def wkt_r() -> Any: ... def wkt_w(dim: int = ..., trim: bool = ..., precision: Any | None = ...) -> Any: ... def wkb_r() -> Any: ... def wkb_w(dim: int = ...) -> Any: ... def ewkb_w(dim: int = ...) -> Any: ... django-stubs-5.2.9/django-stubs/contrib/gis/geos/prototypes/misc.pyi000066400000000000000000000004671513401051600256170ustar00rootroot00000000000000from typing import Any from django.contrib.gis.geos.libgeos import GEOSFuncFactory class DblFromGeom(GEOSFuncFactory): restype: Any errcheck: Any geos_area: Any geos_distance: Any geos_length: Any geos_isvalidreason: Any __all__ = ["geos_area", "geos_distance", "geos_isvalidreason", "geos_length"] django-stubs-5.2.9/django-stubs/contrib/gis/geos/prototypes/predicates.pyi000066400000000000000000000014251513401051600270020ustar00rootroot00000000000000from typing import Any from django.contrib.gis.geos.libgeos import GEOSFuncFactory class UnaryPredicate(GEOSFuncFactory): argtypes: Any restype: Any errcheck: Any class BinaryPredicate(UnaryPredicate): argtypes: Any geos_hasz: UnaryPredicate geos_isclosed: UnaryPredicate geos_isempty: UnaryPredicate geos_isring: UnaryPredicate geos_issimple: UnaryPredicate geos_isvalid: UnaryPredicate geos_contains: BinaryPredicate geos_covers: BinaryPredicate geos_crosses: BinaryPredicate geos_disjoint: BinaryPredicate geos_equals: BinaryPredicate geos_equalsexact: BinaryPredicate geos_equalsidentical: BinaryPredicate geos_intersects: BinaryPredicate geos_overlaps: BinaryPredicate geos_relatepattern: BinaryPredicate geos_touches: BinaryPredicate geos_within: BinaryPredicate django-stubs-5.2.9/django-stubs/contrib/gis/geos/prototypes/prepared.pyi000066400000000000000000000006621513401051600264630ustar00rootroot00000000000000from typing import Any from django.contrib.gis.geos.libgeos import GEOSFuncFactory geos_prepare: Any prepared_destroy: Any class PreparedPredicate(GEOSFuncFactory): argtypes: Any restype: Any errcheck: Any prepared_contains: Any prepared_contains_properly: Any prepared_covers: Any prepared_crosses: Any prepared_disjoint: Any prepared_intersects: Any prepared_overlaps: Any prepared_touches: Any prepared_within: Any django-stubs-5.2.9/django-stubs/contrib/gis/geos/prototypes/threadsafe.pyi000066400000000000000000000007601513401051600267660ustar00rootroot00000000000000import threading from typing import Any from django.contrib.gis.geos.base import GEOSBase class GEOSContextHandle(GEOSBase): ptr_type: Any destructor: Any ptr: Any def __init__(self) -> None: ... class GEOSContext(threading.local): handle: Any thread_context: Any class GEOSFunc: cfunc: Any thread_context: Any def __init__(self, func_name: Any) -> None: ... def __call__(self, *args: Any) -> Any: ... argtypes: Any restype: Any errcheck: Any django-stubs-5.2.9/django-stubs/contrib/gis/geos/prototypes/topology.pyi000066400000000000000000000011411513401051600265260ustar00rootroot00000000000000from typing import Any from django.contrib.gis.geos.libgeos import GEOSFuncFactory class Topology(GEOSFuncFactory): argtypes: Any restype: Any errcheck: Any geos_boundary: Any geos_buffer: Any geos_bufferwithstyle: Any geos_centroid: Any geos_convexhull: Any geos_difference: Any geos_envelope: Any geos_intersection: Any geos_linemerge: Any geos_pointonsurface: Any geos_preservesimplify: Any geos_simplify: Any geos_symdifference: Any geos_union: Any geos_unary_union: Any geos_relate: Any geos_project: Any geos_interpolate: Any geos_project_normalized: Any geos_interpolate_normalized: Any django-stubs-5.2.9/django-stubs/contrib/gis/measure.pyi000066400000000000000000000025521513401051600231350ustar00rootroot00000000000000from decimal import Decimal from typing import Any, TypeAlias from typing_extensions import Self _NUMERIC_TYPES: TypeAlias = int | float | Decimal class MeasureBase: STANDARD_UNIT: str | None UNITS: dict[str, float] ALIAS: dict[str, str] LALIAS: dict[str, str] def __init__(self, default_unit: str | None = None, **kwargs: Any) -> None: ... standard: Any def __getattr__(self, name: str) -> float: ... def __eq__(self, other: object) -> bool: ... def __lt__(self, other: Self) -> bool: ... def __add__(self, other: Self) -> Self: ... def __iadd__(self, other: Self) -> Self: ... def __sub__(self, other: Self) -> Self: ... def __isub__(self, other: Self) -> Self: ... def __mul__(self, other: _NUMERIC_TYPES) -> Any: ... def __imul__(self, other: _NUMERIC_TYPES) -> Self: ... def __rmul__(self, other: Any) -> Self: ... def __truediv__(self, other: _NUMERIC_TYPES) -> Self: ... def __itruediv__(self, other: _NUMERIC_TYPES) -> Self: ... def __bool__(self) -> bool: ... def default_units(self, kwargs: dict[str, Any]) -> tuple[float, str]: ... @classmethod def unit_attname(cls, unit_str: str) -> str: ... class Distance(MeasureBase): STANDARD_UNIT: str class Area(MeasureBase): STANDARD_UNIT: str D: TypeAlias = Distance A: TypeAlias = Area __all__ = ["A", "Area", "D", "Distance"] django-stubs-5.2.9/django-stubs/contrib/gis/ptr.pyi000066400000000000000000000003741513401051600223010ustar00rootroot00000000000000from typing import Any class CPointerBase: ptr_type: Any destructor: Any null_ptr_exception_class: Any @property def ptr(self) -> Any: ... @ptr.setter def ptr(self, ptr: Any) -> None: ... def __del__(self) -> None: ... django-stubs-5.2.9/django-stubs/contrib/gis/serializers/000077500000000000000000000000001513401051600233015ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/contrib/gis/serializers/__init__.pyi000066400000000000000000000000001513401051600255510ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/contrib/gis/serializers/geojson.pyi000066400000000000000000000007551513401051600254770ustar00rootroot00000000000000from typing import Any from django.core.serializers.json import Serializer as JSONSerializer class Serializer(JSONSerializer): def start_serialization(self) -> None: ... def end_serialization(self) -> None: ... geometry_field: Any def start_object(self, obj: Any) -> None: ... def get_dump_object(self, obj: Any) -> Any: ... def handle_field(self, obj: Any, field: Any) -> None: ... class Deserializer: def __init__(self, *args: Any, **kwargs: Any) -> None: ... django-stubs-5.2.9/django-stubs/contrib/gis/shortcuts.pyi000066400000000000000000000003641513401051600235310ustar00rootroot00000000000000from typing import Any from django.http.response import HttpResponse def compress_kml(kml: str) -> bytes: ... def render_to_kml(*args: Any, **kwargs: Any) -> HttpResponse: ... def render_to_kmz(*args: Any, **kwargs: Any) -> HttpResponse: ... django-stubs-5.2.9/django-stubs/contrib/gis/sitemaps/000077500000000000000000000000001513401051600225725ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/contrib/gis/sitemaps/__init__.pyi000066400000000000000000000002621513401051600250540ustar00rootroot00000000000000from django.contrib.gis.sitemaps.kml import KMLSitemap as KMLSitemap from django.contrib.gis.sitemaps.kml import KMZSitemap as KMZSitemap __all__ = ["KMLSitemap", "KMZSitemap"] django-stubs-5.2.9/django-stubs/contrib/gis/sitemaps/kml.pyi000066400000000000000000000005101513401051600240740ustar00rootroot00000000000000from typing import Any from django.contrib.sitemaps import Sitemap class KMLSitemap(Sitemap): geo_format: str locations: Any def __init__(self, locations: Any | None = ...) -> None: ... def items(self) -> Any: ... def location(self, obj: Any) -> Any: ... class KMZSitemap(KMLSitemap): geo_format: str django-stubs-5.2.9/django-stubs/contrib/gis/sitemaps/views.pyi000066400000000000000000000005401513401051600244510ustar00rootroot00000000000000from django.http import HttpRequest, HttpResponse def kml( request: HttpRequest, label: str, model: str, field_name: str | None = ..., compress: bool = ..., using: str = ..., ) -> HttpResponse: ... def kmz( request: HttpRequest, label: str, model: str, field_name: str | None = ..., using: str = ... ) -> HttpResponse: ... django-stubs-5.2.9/django-stubs/contrib/gis/utils/000077500000000000000000000000001513401051600221055ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/contrib/gis/utils/__init__.pyi000066400000000000000000000010261513401051600243660ustar00rootroot00000000000000from django.contrib.gis.utils.layermapping import LayerMapError as LayerMapError from django.contrib.gis.utils.layermapping import LayerMapping as LayerMapping from django.contrib.gis.utils.ogrinfo import ogrinfo as ogrinfo from django.contrib.gis.utils.ogrinspect import mapping as mapping from django.contrib.gis.utils.ogrinspect import ogrinspect as ogrinspect from django.contrib.gis.utils.srs import add_srs_entry as add_srs_entry __all__ = ["LayerMapError", "LayerMapping", "add_srs_entry", "mapping", "ogrinfo", "ogrinspect"] django-stubs-5.2.9/django-stubs/contrib/gis/utils/layermapping.pyi000066400000000000000000000050631513401051600253240ustar00rootroot00000000000000from collections.abc import Mapping from pathlib import Path from typing import Any, Protocol, type_check_only from django.contrib.gis.gdal import DataSource, OGRGeomType from django.contrib.gis.gdal.field import Field as OGRField from django.contrib.gis.gdal.layer import Layer from django.db.backends.base.operations import BaseDatabaseOperations from django.db.models import Field, Model class LayerMapError(Exception): ... class InvalidString(LayerMapError): ... class InvalidDecimal(LayerMapError): ... class InvalidInteger(LayerMapError): ... class MissingForeignKey(LayerMapError): ... @type_check_only class _Writer(Protocol): def write(self, s: str, /) -> Any: ... class LayerMapping: MULTI_TYPES: dict[int, OGRGeomType] FIELD_TYPES: dict[Field, OGRField | tuple[OGRField, ...]] ds: DataSource layer: Layer using: str spatial_backend: BaseDatabaseOperations mapping: Mapping[str, str] model: type[Model] geo_field: Any source_srs: Any transform: Any encoding: str | None unique: list[str] | tuple[str, ...] | str | None transaction_mode: Any transaction_decorator: Any def __init__( self, model: type[Model], data: str | Path | DataSource, mapping: Mapping[str, str], layer: int = ..., source_srs: Any | None = ..., encoding: str = ..., transaction_mode: str = ..., transform: bool = ..., unique: list[str] | tuple[str, ...] | str | None = ..., using: str | None = ..., ) -> None: ... def check_fid_range(self, fid_range: Any) -> Any: ... geom_field: str fields: dict[str, Field] coord_dim: int def check_layer(self) -> Any: ... def check_srs(self, source_srs: Any) -> Any: ... def check_unique(self, unique: Any) -> None: ... def feature_kwargs(self, feat: Any) -> Any: ... def unique_kwargs(self, kwargs: Any) -> Any: ... def verify_ogr_field(self, ogr_field: Any, model_field: Any) -> Any: ... def verify_fk(self, feat: Any, rel_model: Any, rel_mapping: Any) -> Any: ... def verify_geom(self, geom: Any, model_field: Any) -> Any: ... def coord_transform(self) -> Any: ... def geometry_field(self) -> Any: ... def make_multi(self, geom_type: Any, model_field: Any) -> Any: ... def save( self, verbose: bool = ..., fid_range: bool | tuple[int, int] | list[int] | slice = ..., step: bool | int = ..., progress: bool | int = ..., silent: bool = ..., stream: _Writer = ..., strict: bool = ..., ) -> Any: ... django-stubs-5.2.9/django-stubs/contrib/gis/utils/ogrinfo.pyi000066400000000000000000000002011513401051600242640ustar00rootroot00000000000000from django.contrib.gis.gdal import DataSource def ogrinfo(data_source: str | DataSource, num_features: int = ...) -> None: ... django-stubs-5.2.9/django-stubs/contrib/gis/utils/ogrinspect.pyi000066400000000000000000000005001513401051600250000ustar00rootroot00000000000000from typing import Any from django.contrib.gis.gdal import DataSource def mapping( data_source: str | DataSource, geom_name: str = ..., layer_key: int | str = ..., multi_geom: bool = ... ) -> dict[str, str]: ... def ogrinspect(data_source: str | DataSource, model_name: str, *args: Any, **kwargs: Any) -> str: ... django-stubs-5.2.9/django-stubs/contrib/gis/utils/srs.pyi000066400000000000000000000003071513401051600234370ustar00rootroot00000000000000from typing import Any def add_srs_entry( srs: Any, auth_name: str = ..., auth_srid: Any | None = ..., ref_sys_name: Any | None = ..., database: Any | None = ..., ) -> None: ... django-stubs-5.2.9/django-stubs/contrib/gis/views.pyi000066400000000000000000000003121513401051600226210ustar00rootroot00000000000000from django.contrib.gis.feeds import Feed from django.http import HttpRequest, HttpResponse def feed(request: HttpRequest, url: str, feed_dict: dict[str, type[Feed]] | None = ...) -> HttpResponse: ... django-stubs-5.2.9/django-stubs/contrib/humanize/000077500000000000000000000000001513401051600220035ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/contrib/humanize/__init__.pyi000066400000000000000000000000001513401051600242530ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/contrib/humanize/apps.pyi000066400000000000000000000002001513401051600234610ustar00rootroot00000000000000from typing import Any from django.apps import AppConfig class HumanizeConfig(AppConfig): name: str verbose_name: Any django-stubs-5.2.9/django-stubs/contrib/humanize/templatetags/000077500000000000000000000000001513401051600244755ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/contrib/humanize/templatetags/__init__.pyi000066400000000000000000000000001513401051600267450ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/contrib/humanize/templatetags/humanize.pyi000066400000000000000000000015351513401051600270440ustar00rootroot00000000000000from collections.abc import Callable from datetime import date, datetime from typing import Any, SupportsInt from django import template register: template.Library def ordinal(value: str | SupportsInt | None) -> str | None: ... def intcomma(value: str | SupportsInt | None, use_l10n: bool = True) -> str: ... intword_converters: tuple[tuple[int, Callable]] def intword(value: str | SupportsInt | None) -> int | str | None: ... def apnumber(value: str | SupportsInt | None) -> int | str | None: ... def naturalday(value: date | str | None, arg: str | None = None) -> str | None: ... def naturaltime(value: datetime) -> str: ... class NaturalTimeFormatter: time_strings: dict[str, str] past_substrings: dict[str, str] future_substrings: dict[str, str] @classmethod def string_for(cls: type[NaturalTimeFormatter], value: Any) -> Any: ... django-stubs-5.2.9/django-stubs/contrib/messages/000077500000000000000000000000001513401051600217725ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/contrib/messages/__init__.pyi000066400000000000000000000012621513401051600242550ustar00rootroot00000000000000from .api import MessageFailure as MessageFailure from .api import add_message as add_message from .api import debug as debug from .api import error as error from .api import get_level as get_level from .api import get_messages as get_messages from .api import info as info from .api import set_level as set_level from .api import success as success from .api import warning as warning from .constants import DEBUG as DEBUG from .constants import DEFAULT_LEVELS as DEFAULT_LEVELS from .constants import DEFAULT_TAGS as DEFAULT_TAGS from .constants import ERROR as ERROR from .constants import INFO as INFO from .constants import SUCCESS as SUCCESS from .constants import WARNING as WARNING django-stubs-5.2.9/django-stubs/contrib/messages/api.pyi000066400000000000000000000027061513401051600232730ustar00rootroot00000000000000from typing import Any from django.contrib.messages.storage.base import BaseStorage from django.http.request import HttpRequest from django.utils.functional import _StrOrPromise class MessageFailure(Exception): ... def add_message( request: HttpRequest | None, level: int, message: _StrOrPromise, extra_tags: str = "", fail_silently: bool | str = False, ) -> None: ... def get_messages(request: HttpRequest) -> list[Any] | BaseStorage: ... def get_level(request: HttpRequest) -> int: ... def set_level(request: HttpRequest, level: int) -> bool: ... def debug( request: HttpRequest, message: _StrOrPromise, extra_tags: str = "", fail_silently: bool | str = False, ) -> None: ... def info( request: HttpRequest, message: _StrOrPromise, extra_tags: str = "", fail_silently: bool | str = False, ) -> None: ... def success( request: HttpRequest, message: _StrOrPromise, extra_tags: str = "", fail_silently: bool | str = False, ) -> None: ... def warning( request: HttpRequest, message: _StrOrPromise, extra_tags: str = "", fail_silently: bool | str = False, ) -> None: ... def error( request: HttpRequest, message: _StrOrPromise, extra_tags: str = "", fail_silently: bool | str = False, ) -> None: ... __all__ = ( "MessageFailure", "add_message", "debug", "error", "get_level", "get_messages", "info", "set_level", "success", "warning", ) django-stubs-5.2.9/django-stubs/contrib/messages/apps.pyi000066400000000000000000000003011513401051600234520ustar00rootroot00000000000000from typing import Any from django.apps import AppConfig def update_level_tags(setting: str, **kwargs: Any) -> None: ... class MessagesConfig(AppConfig): name: str verbose_name: Any django-stubs-5.2.9/django-stubs/contrib/messages/constants.pyi000066400000000000000000000001701513401051600245270ustar00rootroot00000000000000DEBUG: int INFO: int SUCCESS: int WARNING: int ERROR: int DEFAULT_TAGS: dict[int, str] DEFAULT_LEVELS: dict[str, int] django-stubs-5.2.9/django-stubs/contrib/messages/context_processors.pyi000066400000000000000000000003411513401051600264610ustar00rootroot00000000000000from typing import Any from django.contrib.messages.storage.base import BaseStorage from django.http.request import HttpRequest def messages(request: HttpRequest) -> dict[str, dict[str, int] | list[Any] | BaseStorage]: ... django-stubs-5.2.9/django-stubs/contrib/messages/middleware.pyi000066400000000000000000000005351513401051600246350ustar00rootroot00000000000000from django.http.request import HttpRequest from django.http.response import HttpResponse from django.utils.deprecation import MiddlewareMixin class MessageMiddleware(MiddlewareMixin): def process_request(self, request: HttpRequest) -> None: ... def process_response(self, request: HttpRequest, response: HttpResponse) -> HttpResponse: ... django-stubs-5.2.9/django-stubs/contrib/messages/storage/000077500000000000000000000000001513401051600234365ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/contrib/messages/storage/__init__.pyi000066400000000000000000000002501513401051600257150ustar00rootroot00000000000000from django.contrib.messages.storage.base import BaseStorage from django.http.request import HttpRequest def default_storage(request: HttpRequest) -> BaseStorage: ... django-stubs-5.2.9/django-stubs/contrib/messages/storage/base.pyi000066400000000000000000000016121513401051600250730ustar00rootroot00000000000000from collections.abc import Iterator from typing import Any from django.http.request import HttpRequest from django.http.response import HttpResponseBase LEVEL_TAGS: Any class Message: level: int message: str extra_tags: str def __init__(self, level: int, message: str, extra_tags: str | None = None) -> None: ... @property def tags(self) -> str: ... @property def level_tag(self) -> str: ... class BaseStorage: request: HttpRequest used: bool added_new: bool def __init__(self, request: HttpRequest, *args: Any, **kwargs: Any) -> None: ... def __len__(self) -> int: ... def __iter__(self) -> Iterator[Message]: ... def __contains__(self, item: Any) -> bool: ... def update(self, response: HttpResponseBase) -> list[Message] | None: ... def add(self, level: int, message: str, extra_tags: str | None = "") -> None: ... level: Any django-stubs-5.2.9/django-stubs/contrib/messages/storage/cookie.pyi000066400000000000000000000016601513401051600254350ustar00rootroot00000000000000import json from collections.abc import Callable, Sequence from typing import Any from django.contrib.messages.storage.base import BaseStorage class MessageEncoder(json.JSONEncoder): allow_nan: bool check_circular: bool ensure_ascii: bool skipkeys: bool sort_keys: bool message_key: str class MessageDecoder(json.JSONDecoder): def process_messages(self, obj: Any) -> Any: ... class MessagePartSerializer: def dumps(self, obj: Any) -> Sequence[str]: ... class MessagePartGatherSerializer: def dumps(self, obj: Any) -> bytes: ... class MessageSerializer: def loads(self, data: bytes | bytearray) -> Any: ... class CookieStorage(BaseStorage): cookie_name: str max_cookie_size: int not_finished: str not_finished_json: str def bisect_keep_left(a: list[int], fn: Callable[[list[int]], bool]) -> int: ... def bisect_keep_right(a: list[int], fn: Callable[[list[int]], bool]) -> int: ... django-stubs-5.2.9/django-stubs/contrib/messages/storage/fallback.pyi000066400000000000000000000003441513401051600257210ustar00rootroot00000000000000from typing import Any from django.contrib.messages.storage.base import BaseStorage class FallbackStorage(BaseStorage): storage_classes: Any storages: Any def __init__(self, *args: Any, **kwargs: Any) -> None: ... django-stubs-5.2.9/django-stubs/contrib/messages/storage/session.pyi000066400000000000000000000007241513401051600256470ustar00rootroot00000000000000from collections.abc import Sequence from typing import Any from django.contrib.messages.storage.base import BaseStorage from django.http.request import HttpRequest class SessionStorage(BaseStorage): session_key: str def __init__(self, request: HttpRequest, *args: Any, **kwargs: Any) -> None: ... def serialize_messages(self, messages: Sequence[Any]) -> str: ... def deserialize_messages(self, data: list[Any] | str | None) -> list[Any] | None: ... django-stubs-5.2.9/django-stubs/contrib/messages/test.pyi000066400000000000000000000004621513401051600234760ustar00rootroot00000000000000from typing import Any from django.contrib.messages.storage.base import BaseStorage from django.http.response import HttpResponse class MessagesTestMixin: def assertMessages( self, response: HttpResponse, expected_messages: list[Any] | BaseStorage, *, ordered: bool = True ) -> None: ... django-stubs-5.2.9/django-stubs/contrib/messages/utils.pyi000066400000000000000000000000541513401051600236540ustar00rootroot00000000000000def get_level_tags() -> dict[int, str]: ... django-stubs-5.2.9/django-stubs/contrib/messages/views.pyi000066400000000000000000000006531513401051600236560ustar00rootroot00000000000000from typing import Generic, TypeVar from django.forms.forms import BaseForm from django.http.response import HttpResponse from django.utils.functional import _StrOrPromise _F = TypeVar("_F", bound=BaseForm) class SuccessMessageMixin(Generic[_F]): success_message: _StrOrPromise def form_valid(self, form: _F) -> HttpResponse: ... def get_success_message(self, cleaned_data: dict[str, str]) -> _StrOrPromise: ... django-stubs-5.2.9/django-stubs/contrib/postgres/000077500000000000000000000000001513401051600220315ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/contrib/postgres/__init__.pyi000066400000000000000000000000001513401051600243010ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/contrib/postgres/aggregates/000077500000000000000000000000001513401051600241425ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/contrib/postgres/aggregates/__init__.pyi000066400000000000000000000015401513401051600264240ustar00rootroot00000000000000from .general import ArrayAgg as ArrayAgg from .general import BitAnd as BitAnd from .general import BitOr as BitOr from .general import BitXor as BitXor from .general import BoolAnd as BoolAnd from .general import BoolOr as BoolOr from .general import JSONBAgg as JSONBAgg from .general import StringAgg as StringAgg from .statistics import Corr as Corr from .statistics import CovarPop as CovarPop from .statistics import RegrAvgX as RegrAvgX from .statistics import RegrAvgY as RegrAvgY from .statistics import RegrCount as RegrCount from .statistics import RegrIntercept as RegrIntercept from .statistics import RegrR2 as RegrR2 from .statistics import RegrSlope as RegrSlope from .statistics import RegrSXX as RegrSXX from .statistics import RegrSXY as RegrSXY from .statistics import RegrSYY as RegrSYY from .statistics import StatAggregate as StatAggregate django-stubs-5.2.9/django-stubs/contrib/postgres/aggregates/general.pyi000066400000000000000000000041671513401051600263120ustar00rootroot00000000000000from typing import Any, ClassVar from django.contrib.postgres.fields import ArrayField from django.db.backends.base.base import BaseDatabaseWrapper from django.db.models import Aggregate, BooleanField, JSONField, TextField from django.db.models.expressions import BaseExpression, Combinable from django.db.models.sql.compiler import SQLCompiler, _AsSqlType from typing_extensions import Self from .mixins import OrderableAggMixin class ArrayAgg(OrderableAggMixin, Aggregate): @property def output_field(self) -> ArrayField: ... def resolve_expression( self, query: Any = ..., allow_joins: bool = ..., reuse: set[str] | None = ..., summarize: bool = ..., for_save: bool = ..., ) -> Self: ... def as_sql(self, compiler: SQLCompiler, connection: BaseDatabaseWrapper) -> _AsSqlType: ... # type: ignore[override] class BitAnd(Aggregate): ... class BitOr(Aggregate): ... class BitXor(Aggregate): ... class BoolAnd(Aggregate): output_field: ClassVar[BooleanField] class BoolOr(Aggregate): output_field: ClassVar[BooleanField] class JSONBAgg(OrderableAggMixin, Aggregate): output_field: ClassVar[JSONField] def resolve_expression( self, query: Any = ..., allow_joins: bool = ..., reuse: set[str] | None = ..., summarize: bool = ..., for_save: bool = ..., ) -> Self: ... def as_sql(self, compiler: SQLCompiler, connection: BaseDatabaseWrapper) -> _AsSqlType: ... # type: ignore[override] class StringAgg(OrderableAggMixin, Aggregate): output_field: ClassVar[TextField] def __init__(self, expression: BaseExpression | Combinable | str, delimiter: Any, **extra: Any) -> None: ... def resolve_expression( self, query: Any = ..., allow_joins: bool = ..., reuse: set[str] | None = ..., summarize: bool = ..., for_save: bool = ..., ) -> Self: ... def as_sql(self, compiler: SQLCompiler, connection: BaseDatabaseWrapper) -> _AsSqlType: ... # type: ignore[override] __all__ = ["ArrayAgg", "BitAnd", "BitOr", "BitXor", "BoolAnd", "BoolOr", "JSONBAgg", "StringAgg"] django-stubs-5.2.9/django-stubs/contrib/postgres/aggregates/mixins.pyi000066400000000000000000000014121513401051600261720ustar00rootroot00000000000000from collections.abc import Sequence from typing import Any from django.db.backends.base.base import BaseDatabaseWrapper from django.db.models.expressions import BaseExpression, Combinable, Expression, OrderByList from django.db.models.sql.compiler import SQLCompiler, _AsSqlType class OrderableAggMixin: order_by: OrderByList def __init__( self, *expressions: BaseExpression | Combinable | str, ordering: Sequence[str] = ..., order_by: Sequence[str] = ..., **extra: Any, ) -> None: ... def get_source_expressions(self) -> list[Expression]: ... def set_source_expressions(self, exprs: Sequence[Combinable]) -> None: ... def as_sql(self, compiler: SQLCompiler, connection: BaseDatabaseWrapper) -> _AsSqlType: ... django-stubs-5.2.9/django-stubs/contrib/postgres/aggregates/statistics.pyi000066400000000000000000000021401513401051600270540ustar00rootroot00000000000000from typing import Any, ClassVar from django.db.models import Aggregate, FloatField, IntegerField class StatAggregate(Aggregate): output_field: ClassVar[FloatField] def __init__( self, y: Any, x: Any, output_field: Any | None = ..., filter: Any | None = ..., default: Any | None = ... ) -> None: ... class Corr(StatAggregate): ... class CovarPop(StatAggregate): def __init__( self, y: Any, x: Any, sample: bool = ..., filter: Any | None = ..., default: Any | None = ... ) -> None: ... class RegrAvgX(StatAggregate): ... class RegrAvgY(StatAggregate): ... class RegrCount(StatAggregate): output_field: ClassVar[IntegerField] # type: ignore[assignment] class RegrIntercept(StatAggregate): ... class RegrR2(StatAggregate): ... class RegrSlope(StatAggregate): ... class RegrSXX(StatAggregate): ... class RegrSXY(StatAggregate): ... class RegrSYY(StatAggregate): ... __all__ = [ "Corr", "CovarPop", "RegrAvgX", "RegrAvgY", "RegrCount", "RegrIntercept", "RegrR2", "RegrSXX", "RegrSXY", "RegrSYY", "RegrSlope", "StatAggregate", ] django-stubs-5.2.9/django-stubs/contrib/postgres/apps.pyi000066400000000000000000000004161513401051600235200ustar00rootroot00000000000000from typing import Any from django.apps import AppConfig RANGE_TYPES: Any def uninstall_if_needed(setting: Any, value: Any, enter: Any, **kwargs: Any) -> None: ... class PostgresConfig(AppConfig): name: str verbose_name: Any def ready(self) -> None: ... django-stubs-5.2.9/django-stubs/contrib/postgres/constraints.pyi000066400000000000000000000023051513401051600251230ustar00rootroot00000000000000from collections.abc import Iterable, Sequence from django.db.models import Deferrable from django.db.models.base import Model from django.db.models.constraints import BaseConstraint from django.db.models.expressions import Combinable from django.db.models.indexes import IndexExpression from django.db.models.query_utils import Q from django.utils.functional import _StrOrPromise class ExclusionConstraintExpression(IndexExpression): ... class ExclusionConstraint(BaseConstraint): template: str expressions: Sequence[tuple[str | Combinable, str]] index_type: str condition: Q | None def __init__( self, *, name: str, expressions: Sequence[tuple[str | Combinable, str]], index_type: str | None = None, condition: Q | None = None, deferrable: Deferrable | None = None, include: list[str] | tuple[str, ...] | None = None, violation_error_code: str | None = None, violation_error_message: _StrOrPromise | None = None, ) -> None: ... def validate( self, model: type[Model], instance: Model, exclude: Iterable[str] | None = None, using: str = "default" ) -> None: ... __all__ = ["ExclusionConstraint"] django-stubs-5.2.9/django-stubs/contrib/postgres/expressions.pyi000066400000000000000000000007131513401051600251370ustar00rootroot00000000000000from typing import Any from django.contrib.postgres.fields import ArrayField from django.db.models import Subquery from django.db.models.query import QuerySet from django.db.models.sql.query import Query from django.utils.functional import cached_property class ArraySubquery(Subquery): template: str def __init__(self, queryset: Query | QuerySet[Any], **kwargs: Any) -> None: ... @cached_property def output_field(self) -> ArrayField: ... django-stubs-5.2.9/django-stubs/contrib/postgres/fields/000077500000000000000000000000001513401051600232775ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/contrib/postgres/fields/__init__.pyi000066400000000000000000000013221513401051600255570ustar00rootroot00000000000000from .array import ArrayField as ArrayField from .citext import CICharField as CICharField from .citext import CIEmailField as CIEmailField from .citext import CITextField as CITextField from .hstore import HStoreField as HStoreField from .jsonb import JSONField as JSONField from .ranges import BigIntegerRangeField as BigIntegerRangeField from .ranges import DateRangeField as DateRangeField from .ranges import DateTimeRangeField as DateTimeRangeField from .ranges import DecimalRangeField as DecimalRangeField from .ranges import IntegerRangeField as IntegerRangeField from .ranges import RangeBoundary as RangeBoundary from .ranges import RangeField as RangeField from .ranges import RangeOperators as RangeOperators django-stubs-5.2.9/django-stubs/contrib/postgres/fields/array.pyi000066400000000000000000000046161513401051600251470ustar00rootroot00000000000000from collections.abc import Iterable, Sequence from typing import Any, ClassVar, TypeVar from _typeshed import Unused from django.core.validators import _ValidatorCallable from django.db.backends.base.base import BaseDatabaseWrapper from django.db.models import Field from django.db.models.expressions import Combinable, Expression from django.db.models.fields import NOT_PROVIDED, _ErrorMessagesDict, _ErrorMessagesMapping from django.db.models.fields.mixins import CheckFieldDefaultMixin from django.db.models.lookups import Transform from django.utils.choices import _Choices from django.utils.functional import _StrOrPromise # __set__ value type _ST = TypeVar("_ST") # __get__ return type _GT = TypeVar("_GT") class ArrayField(CheckFieldDefaultMixin, Field[_ST, _GT]): _pyi_private_set_type: Sequence[Any] | Combinable _pyi_private_get_type: list[Any] empty_strings_allowed: bool default_error_messages: ClassVar[_ErrorMessagesDict] base_field: Field size: int | None default_validators: Sequence[_ValidatorCallable] from_db_value: Any def __init__( self, base_field: Field, size: int | None = None, *, verbose_name: _StrOrPromise | None = ..., name: str | None = ..., primary_key: bool = ..., max_length: int | None = ..., unique: bool = ..., blank: bool = ..., null: bool = ..., db_index: bool = ..., default: Any = ..., db_default: type[NOT_PROVIDED] | Expression | _ST = ..., editable: bool = ..., auto_created: bool = ..., serialize: bool = ..., unique_for_date: str | None = ..., unique_for_month: str | None = ..., unique_for_year: str | None = ..., choices: _Choices | None = ..., help_text: _StrOrPromise = ..., db_column: str | None = ..., db_comment: str | None = ..., db_tablespace: str | None = ..., validators: Iterable[_ValidatorCallable] = ..., error_messages: _ErrorMessagesMapping | None = ..., ) -> None: ... @property def description(self) -> str: ... # type: ignore[override] def cast_db_type(self, connection: BaseDatabaseWrapper) -> str: ... def get_placeholder(self, value: Unused, compiler: Unused, connection: BaseDatabaseWrapper) -> str: ... def get_transform(self, name: str) -> type[Transform] | None: ... __all__ = ["ArrayField"] django-stubs-5.2.9/django-stubs/contrib/postgres/fields/citext.pyi000066400000000000000000000003501513401051600253200ustar00rootroot00000000000000from django.db.models.fields import CharField, EmailField, TextField class CICharField(CharField): ... class CIEmailField(EmailField): ... class CITextField(TextField): ... __all__ = ["CICharField", "CIEmailField", "CITextField"] django-stubs-5.2.9/django-stubs/contrib/postgres/fields/hstore.pyi000066400000000000000000000020201513401051600253200ustar00rootroot00000000000000from typing import Any, ClassVar from django.contrib.postgres.fields.array import ArrayField from django.db.backends.base.base import BaseDatabaseWrapper from django.db.models import Field, TextField, Transform from django.db.models.fields.mixins import CheckFieldDefaultMixin from django.db.models.sql.compiler import SQLCompiler, _AsSqlType class HStoreField(CheckFieldDefaultMixin, Field): def get_transform(self, name: str) -> Any: ... class KeyTransform(Transform): output_field: ClassVar[TextField] def __init__(self, key_name: str, *args: Any, **kwargs: Any) -> None: ... def as_sql(self, compiler: SQLCompiler, connection: BaseDatabaseWrapper) -> _AsSqlType: ... # type: ignore[override] class KeyTransformFactory: def __init__(self, key_name: str) -> None: ... def __call__(self, *args: Any, **kwargs: Any) -> KeyTransform: ... class KeysTransform(Transform): output_field: ClassVar[ArrayField] class ValuesTransform(Transform): output_field: ClassVar[ArrayField] __all__ = ["HStoreField"] django-stubs-5.2.9/django-stubs/contrib/postgres/fields/jsonb.pyi000066400000000000000000000001741513401051600251370ustar00rootroot00000000000000from django.db.models import JSONField as BuiltinJSONField class JSONField(BuiltinJSONField): ... __all__ = ["JSONField"] django-stubs-5.2.9/django-stubs/contrib/postgres/fields/ranges.pyi000066400000000000000000000064721513401051600253120ustar00rootroot00000000000000from typing import Any, ClassVar, Literal, TypeVar from _typeshed import Unused from django.contrib.postgres import forms from django.db import models from django.db.backends.base.base import BaseDatabaseWrapper from django.db.models.lookups import PostgresOperatorLookup from django.db.models.sql.compiler import SQLCompiler, _AsSqlType from psycopg2.extras import DateRange, DateTimeTZRange, NumericRange, Range # type: ignore [import-untyped] class RangeBoundary(models.Expression): lower: str upper: str def __init__(self, inclusive_lower: bool = ..., inclusive_upper: bool = ...) -> None: ... class RangeOperators: EQUAL: Literal["="] NOT_EQUAL: Literal["<>"] CONTAINS: Literal["@>"] CONTAINED_BY: Literal["<@"] OVERLAPS: Literal["&&"] FULLY_LT: Literal["<<"] FULLY_GT: Literal[">>"] NOT_LT: Literal["&>"] NOT_GT: Literal["&<"] ADJACENT_TO: Literal["-|-"] _RangeT = TypeVar("_RangeT", bound=Range[Any]) class RangeField(models.Field[Any, _RangeT]): empty_strings_allowed: bool base_field: type[models.Field] range_type: type[_RangeT] def get_prep_value(self, value: Any) -> Any | None: ... def get_placeholder(self, value: Unused, compiler: Unused, connection: BaseDatabaseWrapper) -> str: ... def to_python(self, value: Any) -> Any: ... class IntegerRangeField(RangeField[NumericRange]): base_field: type[models.IntegerField] form_field: type[forms.IntegerRangeField] class BigIntegerRangeField(RangeField[NumericRange]): base_field: type[models.BigIntegerField] form_field: type[forms.IntegerRangeField] class DecimalRangeField(RangeField[NumericRange]): base_field: type[models.DecimalField] form_field: type[forms.DecimalRangeField] class DateTimeRangeField(RangeField[DateTimeTZRange]): base_field: type[models.DateTimeField] form_field: type[forms.DateTimeRangeField] class DateRangeField(RangeField[DateRange]): base_field: type[models.DateField] form_field: type[forms.DateRangeField] class DateTimeRangeContains(PostgresOperatorLookup): ... class RangeContainedBy(PostgresOperatorLookup): type_mapping: dict[str, str] def process_lhs(self, compiler: SQLCompiler, connection: BaseDatabaseWrapper) -> _AsSqlType: ... # type: ignore[override] class FullyLessThan(PostgresOperatorLookup): ... class FullGreaterThan(PostgresOperatorLookup): ... class NotLessThan(PostgresOperatorLookup): ... class NotGreaterThan(PostgresOperatorLookup): ... class AdjacentToLookup(PostgresOperatorLookup): ... class RangeStartsWith(models.Transform): @property def output_field(self) -> models.Field: ... class RangeEndsWith(models.Transform): @property def output_field(self) -> models.Field: ... class IsEmpty(models.Transform): output_field: ClassVar[models.BooleanField] class LowerInclusive(models.Transform): output_field: ClassVar[models.BooleanField] class LowerInfinite(models.Transform): output_field: ClassVar[models.BooleanField] class UpperInclusive(models.Transform): output_field: ClassVar[models.BooleanField] class UpperInfinite(models.Transform): output_field: ClassVar[models.BooleanField] __all__ = [ "BigIntegerRangeField", "DateRangeField", "DateTimeRangeField", "DecimalRangeField", "IntegerRangeField", "RangeBoundary", "RangeField", "RangeOperators", ] django-stubs-5.2.9/django-stubs/contrib/postgres/fields/utils.pyi000066400000000000000000000001521513401051600251600ustar00rootroot00000000000000from typing import Any class AttributeSetter: def __init__(self, name: Any, value: Any) -> None: ... django-stubs-5.2.9/django-stubs/contrib/postgres/forms/000077500000000000000000000000001513401051600231575ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/contrib/postgres/forms/__init__.pyi000066400000000000000000000011341513401051600254400ustar00rootroot00000000000000from .array import SimpleArrayField as SimpleArrayField from .array import SplitArrayField as SplitArrayField from .array import SplitArrayWidget as SplitArrayWidget from .hstore import HStoreField as HStoreField from .ranges import BaseRangeField as BaseRangeField from .ranges import DateRangeField as DateRangeField from .ranges import DateTimeRangeField as DateTimeRangeField from .ranges import DecimalRangeField as DecimalRangeField from .ranges import HiddenRangeWidget as HiddenRangeWidget from .ranges import IntegerRangeField as IntegerRangeField from .ranges import RangeWidget as RangeWidget django-stubs-5.2.9/django-stubs/contrib/postgres/forms/array.pyi000066400000000000000000000044361513401051600250270ustar00rootroot00000000000000from collections.abc import Sequence from typing import Any, ClassVar from django import forms from django.db.models.fields import _ErrorMessagesDict from django.forms.fields import _ClassLevelWidgetT from django.forms.utils import _DataT, _FilesT from django.forms.widgets import _OptAttrs from ..utils import prefix_validation_error as prefix_validation_error class SimpleArrayField(forms.CharField): default_error_messages: ClassVar[_ErrorMessagesDict] base_field: forms.Field delimiter: str min_length: int | None max_length: int | None def __init__( self, base_field: forms.Field, *, delimiter: str = ",", max_length: int | None = None, min_length: int | None = None, **kwargs: Any, ) -> None: ... def clean(self, value: Any) -> Sequence[Any]: ... def prepare_value(self, value: Any) -> Any: ... def to_python(self, value: Any) -> Sequence[Any]: ... # type: ignore[override] def validate(self, value: Sequence[Any]) -> None: ... def run_validators(self, value: Sequence[Any]) -> None: ... def has_changed(self, initial: Any, data: Any) -> bool: ... class SplitArrayWidget(forms.Widget): template_name: str widget: _ClassLevelWidgetT size: int def __init__(self, widget: forms.Widget | type[forms.Widget], size: int, **kwargs: Any) -> None: ... @property def is_hidden(self) -> bool: ... def value_from_datadict(self, data: _DataT, files: _FilesT, name: str) -> Any: ... def value_omitted_from_data(self, data: _DataT, files: _FilesT, name: str) -> bool: ... def id_for_label(self, id_: str) -> str: ... def get_context(self, name: str, value: Any, attrs: _OptAttrs | None = None) -> dict[str, Any]: ... @property def needs_multipart_form(self) -> bool: ... # type: ignore[override] class SplitArrayField(forms.Field): default_error_messages: ClassVar[_ErrorMessagesDict] base_field: forms.Field size: int remove_trailing_nulls: bool def __init__( self, base_field: forms.Field, size: int, *, remove_trailing_nulls: bool = False, **kwargs: Any ) -> None: ... def to_python(self, value: Any) -> Sequence[Any]: ... def clean(self, value: Any) -> Sequence[Any]: ... def has_changed(self, initial: Any, data: Any) -> bool: ... django-stubs-5.2.9/django-stubs/contrib/postgres/forms/hstore.pyi000066400000000000000000000010151513401051600252030ustar00rootroot00000000000000from typing import Any, ClassVar from django import forms from django.db.models.fields import _ErrorMessagesDict from django.forms.fields import _ClassLevelWidgetT class HStoreField(forms.CharField): widget: _ClassLevelWidgetT default_error_messages: ClassVar[_ErrorMessagesDict] def prepare_value(self, value: Any) -> Any: ... def to_python(self, value: Any) -> dict[str, str | None]: ... # type: ignore[override] def has_changed(self, initial: Any, data: Any) -> bool: ... __all__ = ["HStoreField"] django-stubs-5.2.9/django-stubs/contrib/postgres/forms/ranges.pyi000066400000000000000000000033621513401051600251650ustar00rootroot00000000000000from typing import Any, ClassVar from django import forms from django.db.models.fields import _ErrorMessagesDict from django.forms.widgets import MultiWidget, _OptAttrs from psycopg2.extras import Range # type: ignore [import-untyped] class RangeWidget(MultiWidget): def __init__(self, base_widget: forms.Widget | type[forms.Widget], attrs: _OptAttrs | None = None) -> None: ... def decompress(self, value: Any) -> tuple[Any | None, Any | None]: ... class HiddenRangeWidget(RangeWidget): def __init__(self, attrs: _OptAttrs | None = None) -> None: ... class BaseRangeField(forms.MultiValueField): default_error_messages: ClassVar[_ErrorMessagesDict] base_field: type[forms.Field] range_type: type[Range] hidden_widget: type[forms.Widget] def __init__(self, **kwargs: Any) -> None: ... def prepare_value(self, value: Any) -> Any: ... def compress(self, values: tuple[Any | None, Any | None]) -> Range | None: ... class IntegerRangeField(BaseRangeField): default_error_messages: ClassVar[_ErrorMessagesDict] base_field: type[forms.Field] range_type: type[Range] class DecimalRangeField(BaseRangeField): default_error_messages: ClassVar[_ErrorMessagesDict] base_field: type[forms.Field] range_type: type[Range] class DateTimeRangeField(BaseRangeField): default_error_messages: ClassVar[_ErrorMessagesDict] base_field: type[forms.Field] range_type: type[Range] class DateRangeField(BaseRangeField): default_error_messages: ClassVar[_ErrorMessagesDict] base_field: type[forms.Field] range_type: type[Range] __all__ = [ "BaseRangeField", "DateRangeField", "DateTimeRangeField", "DecimalRangeField", "HiddenRangeWidget", "IntegerRangeField", "RangeWidget", ] django-stubs-5.2.9/django-stubs/contrib/postgres/functions.pyi000066400000000000000000000003371513401051600245670ustar00rootroot00000000000000from typing import ClassVar from django.db.models import DateTimeField, Func, UUIDField class RandomUUID(Func): output_field: ClassVar[UUIDField] class TransactionNow(Func): output_field: ClassVar[DateTimeField] django-stubs-5.2.9/django-stubs/contrib/postgres/indexes.pyi000066400000000000000000000101521513401051600242120ustar00rootroot00000000000000from collections.abc import Sequence from typing import Any from django.db.backends.base.schema import BaseDatabaseSchemaEditor from django.db.backends.ddl_references import Statement from django.db.models import Func, Index, Model from django.db.models.expressions import BaseExpression, Combinable from django.db.models.query_utils import Q from django.utils.datastructures import _ListOrTuple from django.utils.functional import cached_property class PostgresIndex(Index): @cached_property def max_name_length(self) -> int: ... # type: ignore[override] def create_sql( self, model: type[Model], schema_editor: BaseDatabaseSchemaEditor, using: str = "", **kwargs: Any ) -> Statement: ... def check_supported(self, schema_editor: BaseDatabaseSchemaEditor) -> None: ... def get_with_params(self) -> Sequence[str]: ... class BloomIndex(PostgresIndex): def __init__( self, *expressions: BaseExpression | Combinable | str, length: int | None = None, columns: _ListOrTuple[int] = (), fields: Sequence[str] = ..., name: str | None = ..., db_tablespace: str | None = ..., opclasses: Sequence[str] = ..., condition: Q | None = ..., include: Sequence[str] | None = ..., ) -> None: ... class BrinIndex(PostgresIndex): def __init__( self, *expressions: BaseExpression | Combinable | str, autosummarize: bool | None = None, pages_per_range: int | None = None, fields: Sequence[str] = ..., name: str | None = ..., db_tablespace: str | None = ..., opclasses: Sequence[str] = ..., condition: Q | None = ..., include: Sequence[str] | None = ..., ) -> None: ... class BTreeIndex(PostgresIndex): def __init__( self, *expressions: BaseExpression | Combinable | str, fillfactor: int | None = None, deduplicate_items: bool | None = None, fields: Sequence[str] = ..., name: str | None = ..., db_tablespace: str | None = ..., opclasses: Sequence[str] = ..., condition: Q | None = ..., include: Sequence[str] | None = ..., ) -> None: ... class GinIndex(PostgresIndex): def __init__( self, *expressions: BaseExpression | Combinable | str, fastupdate: bool | None = None, gin_pending_list_limit: int | None = None, fields: Sequence[str] = ..., name: str | None = ..., db_tablespace: str | None = ..., opclasses: Sequence[str] = ..., condition: Q | None = ..., include: Sequence[str] | None = ..., ) -> None: ... class GistIndex(PostgresIndex): def __init__( self, *expressions: BaseExpression | Combinable | str, buffering: bool | None = None, fillfactor: int | None = None, fields: Sequence[str] = ..., name: str | None = ..., db_tablespace: str | None = ..., opclasses: Sequence[str] = ..., condition: Q | None = ..., include: Sequence[str] | None = ..., ) -> None: ... class HashIndex(PostgresIndex): def __init__( self, *expressions: BaseExpression | Combinable | str, fillfactor: int | None = None, fields: Sequence[str] = ..., name: str | None = ..., db_tablespace: str | None = ..., opclasses: Sequence[str] = ..., condition: Q | None = ..., include: Sequence[str] | None = ..., ) -> None: ... class SpGistIndex(PostgresIndex): def __init__( self, *expressions: BaseExpression | Combinable | str, fillfactor: int | None = None, fields: Sequence[str] = ..., name: str | None = ..., db_tablespace: str | None = ..., opclasses: Sequence[str] = ..., condition: Q | None = ..., include: Sequence[str] | None = ..., ) -> None: ... class OpClass(Func): def __init__( self, expression: BaseExpression | Combinable | str, name: str, ) -> None: ... __all__ = ["BTreeIndex", "BloomIndex", "BrinIndex", "GinIndex", "GistIndex", "HashIndex", "SpGistIndex"] django-stubs-5.2.9/django-stubs/contrib/postgres/lookups.pyi000066400000000000000000000015551513401051600242560ustar00rootroot00000000000000from django.db.backends.base.base import BaseDatabaseWrapper from django.db.models import Transform from django.db.models.lookups import PostgresOperatorLookup from django.db.models.sql.compiler import SQLCompiler, _AsSqlType from .search import SearchVectorExact class DataContains(PostgresOperatorLookup): ... class ContainedBy(PostgresOperatorLookup): ... class Overlap(PostgresOperatorLookup): ... class HasKey(PostgresOperatorLookup): ... class HasKeys(PostgresOperatorLookup): ... class HasAnyKeys(HasKeys): ... class Unaccent(Transform): ... class SearchLookup(SearchVectorExact): def process_lhs(self, qn: SQLCompiler, connection: BaseDatabaseWrapper) -> _AsSqlType: ... # type: ignore[override] class TrigramSimilar(PostgresOperatorLookup): ... class TrigramWordSimilar(PostgresOperatorLookup): ... class TrigramStrictWordSimilar(PostgresOperatorLookup): ... django-stubs-5.2.9/django-stubs/contrib/postgres/operations.pyi000066400000000000000000000036411513401051600247430ustar00rootroot00000000000000from django.db.backends.base.schema import BaseDatabaseSchemaEditor from django.db.migrations import AddConstraint, AddIndex, RemoveIndex from django.db.migrations.operations.base import Operation class CreateExtension(Operation): name: str def __init__(self, name: str) -> None: ... def extension_exists(self, schema_editor: BaseDatabaseSchemaEditor, extension: str) -> bool: ... class BloomExtension(CreateExtension): def __init__(self) -> None: ... class BtreeGinExtension(CreateExtension): def __init__(self) -> None: ... class BtreeGistExtension(CreateExtension): def __init__(self) -> None: ... class CITextExtension(CreateExtension): def __init__(self) -> None: ... class CryptoExtension(CreateExtension): def __init__(self) -> None: ... class HStoreExtension(CreateExtension): def __init__(self) -> None: ... class TrigramExtension(CreateExtension): def __init__(self) -> None: ... class UnaccentExtension(CreateExtension): def __init__(self) -> None: ... class NotInTransactionMixin: def _ensure_not_in_transaction(self, schema_editor: BaseDatabaseSchemaEditor) -> None: ... class AddIndexConcurrently(NotInTransactionMixin, AddIndex): ... class RemoveIndexConcurrently(NotInTransactionMixin, RemoveIndex): ... class CollationOperation(Operation): name: str locale: str provider: str deterministic: bool def __init__(self, name: str, locale: str, *, provider: str = "libc", deterministic: bool = True) -> None: ... def create_collation(self, schema_editor: BaseDatabaseSchemaEditor) -> None: ... def remove_collation(self, schema_editor: BaseDatabaseSchemaEditor) -> None: ... class CreateCollation(CollationOperation): ... class RemoveCollation(CollationOperation): ... class AddConstraintNotValid(AddConstraint): ... class ValidateConstraint(Operation): model_name: str name: str def __init__(self, model_name: str, name: str) -> None: ... django-stubs-5.2.9/django-stubs/contrib/postgres/search.pyi000066400000000000000000000113741513401051600240270ustar00rootroot00000000000000from typing import Any, ClassVar, TypeAlias from django.db.backends.base.base import BaseDatabaseWrapper from django.db.models import Expression, Field, FloatField, TextField from django.db.models.expressions import Combinable, CombinedExpression, Func from django.db.models.lookups import Lookup from django.db.models.sql.compiler import SQLCompiler, _AsSqlType from typing_extensions import Self _Expression: TypeAlias = str | Combinable | SearchQueryCombinable class SearchVectorExact(Lookup): def process_rhs(self, qn: SQLCompiler, connection: BaseDatabaseWrapper) -> _AsSqlType: ... def as_sql(self, qn: SQLCompiler, connection: BaseDatabaseWrapper) -> _AsSqlType: ... class SearchVectorField(Field): ... class SearchQueryField(Field): ... class SearchConfig(Expression): config: _Expression | None def __init__(self, config: _Expression) -> None: ... @classmethod def from_parameter(cls, config: _Expression | None) -> SearchConfig: ... class SearchVectorCombinable: ADD: str class SearchVector(SearchVectorCombinable, Func): config: _Expression | None function: str arg_joiner: str output_field: ClassVar[SearchVectorField] def __init__( self, *expressions: _Expression, config: _Expression | None = None, weight: Any | None = None ) -> None: ... def as_sql( # type: ignore[override] self, compiler: SQLCompiler, connection: BaseDatabaseWrapper, function: str | None = None, template: str | None = None, ) -> _AsSqlType: ... class CombinedSearchVector(SearchVectorCombinable, CombinedExpression): def __init__( self, lhs: Combinable, connector: str, rhs: Combinable, config: _Expression | None, output_field: Field | None = None, ) -> None: ... class SearchQueryCombinable: BITAND: str BITOR: str def __or__(self, other: SearchQueryCombinable) -> Self: ... def __ror__(self, other: SearchQueryCombinable) -> Self: ... def __and__(self, other: SearchQueryCombinable) -> Self: ... def __rand__(self, other: SearchQueryCombinable) -> Self: ... class SearchQuery(SearchQueryCombinable, Func): # type: ignore[misc] output_field: ClassVar[SearchQueryField] SEARCH_TYPES: dict[str, str] def __init__( self, value: _Expression, output_field: Field | None = None, *, config: _Expression | None = None, invert: bool = False, search_type: str = "plain", ) -> None: ... def as_sql( # type: ignore[override] self, compiler: SQLCompiler, connection: BaseDatabaseWrapper, function: str | None = None, template: str | None = None, ) -> _AsSqlType: ... def __invert__(self) -> Self: ... # type: ignore[override] class CombinedSearchQuery(SearchQueryCombinable, CombinedExpression): # type: ignore[misc] def __init__( self, lhs: Combinable, connector: str, rhs: Combinable, config: _Expression | None, output_field: Field | None = None, ) -> None: ... class SearchRank(Func): output_field: ClassVar[FloatField] def __init__( self, vector: SearchVector | _Expression, query: SearchQuery | _Expression, weights: Any | None = None, normalization: Any | None = None, cover_density: bool = False, ) -> None: ... class SearchHeadline(Func): function: str template: str output_field: ClassVar[TextField] def __init__( self, expression: _Expression, query: _Expression, *, config: _Expression | None = None, start_sel: Any | None = None, stop_sel: Any | None = None, max_words: int | None = None, min_words: int | None = None, short_word: str | None = None, highlight_all: bool | None = None, max_fragments: int | None = None, fragment_delimiter: str | None = None, ) -> None: ... def as_sql( # type: ignore[override] self, compiler: SQLCompiler, connection: BaseDatabaseWrapper, function: str | None = None, template: str | None = None, ) -> _AsSqlType: ... class TrigramBase(Func): output_field: ClassVar[FloatField] def __init__(self, expression: _Expression, string: str, **extra: Any) -> None: ... class TrigramWordBase(Func): output_field: ClassVar[FloatField] def __init__(self, string: str, expression: _Expression, **extra: Any) -> None: ... class TrigramSimilarity(TrigramBase): ... class TrigramDistance(TrigramBase): ... class TrigramWordDistance(TrigramWordBase): ... class TrigramStrictWordDistance(TrigramWordBase): ... class TrigramWordSimilarity(TrigramWordBase): ... class TrigramStrictWordSimilarity(TrigramWordBase): ... django-stubs-5.2.9/django-stubs/contrib/postgres/serializers.pyi000066400000000000000000000002301513401051600251030ustar00rootroot00000000000000from django.db.migrations.serializer import BaseSerializer class RangeSerializer(BaseSerializer): def serialize(self) -> tuple[str, set[str]]: ... django-stubs-5.2.9/django-stubs/contrib/postgres/signals.pyi000066400000000000000000000005771513401051600242250ustar00rootroot00000000000000from typing import Any def get_type_oids(connection_alias: str, type_name: str) -> tuple[tuple[Any, ...], tuple[Any, ...]]: ... def get_hstore_oids(connection_alias: str) -> tuple[tuple[Any, ...], tuple[Any, ...]]: ... def get_citext_oids(connection_alias: str) -> tuple[tuple[Any, ...], tuple[Any, ...]]: ... def register_type_handlers(connection: Any, **kwargs: Any) -> None: ... django-stubs-5.2.9/django-stubs/contrib/postgres/utils.pyi000066400000000000000000000002611513401051600237130ustar00rootroot00000000000000from typing import Any from django.core.exceptions import ValidationError def prefix_validation_error(error: Any, prefix: Any, code: Any, params: Any) -> ValidationError: ... django-stubs-5.2.9/django-stubs/contrib/postgres/validators.pyi000066400000000000000000000013241513401051600247240ustar00rootroot00000000000000from collections.abc import Iterable, Mapping from typing import Any from django.core.validators import MaxLengthValidator, MaxValueValidator, MinLengthValidator, MinValueValidator from django.utils.deconstruct import _Deconstructible class ArrayMaxLengthValidator(MaxLengthValidator): ... class ArrayMinLengthValidator(MinLengthValidator): ... class KeysValidator(_Deconstructible): messages: dict[str, str] strict: bool def __init__( self, keys: Iterable[str], strict: bool = False, messages: Mapping[str, str] | None = None ) -> None: ... def __call__(self, value: Any) -> None: ... class RangeMaxValueValidator(MaxValueValidator): ... class RangeMinValueValidator(MinValueValidator): ... django-stubs-5.2.9/django-stubs/contrib/redirects/000077500000000000000000000000001513401051600221475ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/contrib/redirects/__init__.pyi000066400000000000000000000000001513401051600244170ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/contrib/redirects/admin.pyi000066400000000000000000000003411513401051600237600ustar00rootroot00000000000000from typing import Any, ClassVar from django.contrib import admin class RedirectAdmin(admin.ModelAdmin): list_display: Any list_filter: ClassVar[Any] search_fields: ClassVar[Any] radio_fields: ClassVar[Any] django-stubs-5.2.9/django-stubs/contrib/redirects/apps.pyi000066400000000000000000000002011513401051600236260ustar00rootroot00000000000000from typing import Any from django.apps import AppConfig class RedirectsConfig(AppConfig): name: str verbose_name: Any django-stubs-5.2.9/django-stubs/contrib/redirects/middleware.pyi000066400000000000000000000007561513401051600250170ustar00rootroot00000000000000from typing import ClassVar from django.http.request import HttpRequest from django.http.response import HttpResponse, HttpResponseBase, HttpResponseRedirectBase from django.utils.deprecation import MiddlewareMixin class RedirectFallbackMiddleware(MiddlewareMixin): response_gone_class: ClassVar[type[HttpResponseBase]] response_redirect_class: ClassVar[type[HttpResponseRedirectBase]] def process_response(self, request: HttpRequest, response: HttpResponse) -> HttpResponse: ... django-stubs-5.2.9/django-stubs/contrib/redirects/migrations/000077500000000000000000000000001513401051600243235ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/contrib/redirects/migrations/__init__.pyi000066400000000000000000000000001513401051600265730ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/contrib/redirects/models.pyi000066400000000000000000000002261513401051600241550ustar00rootroot00000000000000from django.db import models class Redirect(models.Model): site: models.ForeignKey old_path: models.CharField new_path: models.CharField django-stubs-5.2.9/django-stubs/contrib/sessions/000077500000000000000000000000001513401051600220315ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/contrib/sessions/__init__.pyi000066400000000000000000000000001513401051600243010ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/contrib/sessions/apps.pyi000066400000000000000000000002001513401051600235070ustar00rootroot00000000000000from typing import Any from django.apps import AppConfig class SessionsConfig(AppConfig): name: str verbose_name: Any django-stubs-5.2.9/django-stubs/contrib/sessions/backends/000077500000000000000000000000001513401051600236035ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/contrib/sessions/backends/__init__.pyi000066400000000000000000000000001513401051600260530ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/contrib/sessions/backends/base.pyi000066400000000000000000000073751513401051600252540ustar00rootroot00000000000000from _collections_abc import dict_items, dict_keys, dict_values from collections.abc import Iterable from datetime import datetime, timedelta from typing import Any, overload from _typeshed import SupportsKeysAndGetItem VALID_KEY_CHARS: Any class CreateError(Exception): ... class UpdateError(Exception): ... class SessionBase(dict[str, Any]): TEST_COOKIE_NAME: str TEST_COOKIE_VALUE: str accessed: bool modified: bool serializer: Any def __init__(self, session_key: str | None = None) -> None: ... async def aset(self, key: str, value: Any) -> None: ... @property def key_salt(self) -> str: ... @overload async def aget(self, key: str) -> Any | None: ... @overload async def aget(self, key: str, default: Any) -> Any: ... @overload async def apop(self, key: str) -> Any: ... @overload async def apop(self, key: str, default: Any) -> Any: ... async def asetdefault(self, key: str, value: Any) -> Any: ... def set_test_cookie(self) -> None: ... async def aset_test_cookie(self) -> None: ... def test_cookie_worked(self) -> bool: ... async def atest_cookie_worked(self) -> bool: ... def delete_test_cookie(self) -> None: ... async def adelete_test_cookie(self) -> None: ... def encode(self, session_dict: dict[str, Any]) -> str: ... def decode(self, session_data: bytes | str) -> dict[str, Any]: ... @overload # type: ignore[override] def update(self, dict_: SupportsKeysAndGetItem[str, Any]) -> None: ... @overload def update(self, dict_: Iterable[tuple[str, Any]]) -> None: ... @overload async def aupdate(self, dict_: SupportsKeysAndGetItem[str, Any]) -> None: ... @overload async def aupdate(self, dict_: Iterable[tuple[str, Any]]) -> None: ... def has_key(self, key: Any) -> bool: ... async def ahas_key(self, key: Any) -> bool: ... async def akeys(self) -> dict_keys[str, Any]: ... async def avalues(self) -> dict_values[str, Any]: ... async def aitems(self) -> dict_items[str, Any]: ... def clear(self) -> None: ... def is_empty(self) -> bool: ... def _get_session_key(self) -> str | None: ... def _set_session_key(self, value: str | None) -> None: ... @property def session_key(self) -> str | None: ... @property def _session_key(self) -> str | None: ... @_session_key.setter def _session_key(self, value: str | None) -> None: ... def get_session_cookie_age(self) -> int: ... def get_expiry_age(self, **kwargs: Any) -> int: ... async def aget_expiry_age(self, **kwargs: Any) -> int: ... def get_expiry_date(self, **kwargs: Any) -> datetime: ... async def aget_expiry_date(self, **kwargs: Any) -> datetime: ... def set_expiry(self, value: datetime | timedelta | int | None) -> None: ... async def aset_expiry(self, value: datetime | timedelta | int | None) -> None: ... def get_expire_at_browser_close(self) -> bool: ... async def aget_expire_at_browser_close(self) -> bool: ... def flush(self) -> None: ... async def aflush(self) -> None: ... def cycle_key(self) -> None: ... async def acycle_key(self) -> None: ... def exists(self, session_key: str) -> bool: ... async def aexists(self, session_key: str) -> bool: ... def create(self) -> None: ... async def acreate(self) -> None: ... def save(self, must_create: bool = False) -> None: ... async def asave(self, must_create: bool = False) -> None: ... def delete(self, session_key: str | None = None) -> None: ... async def adelete(self, session_key: str | None = None) -> None: ... def load(self) -> dict[str, Any]: ... async def aload(self) -> dict[str, Any]: ... @classmethod def clear_expired(cls) -> None: ... @classmethod async def aclear_expired(cls) -> None: ... django-stubs-5.2.9/django-stubs/contrib/sessions/backends/cache.pyi000066400000000000000000000005041513401051600253700ustar00rootroot00000000000000from typing import Any from django.contrib.sessions.backends.base import SessionBase KEY_PREFIX: str class SessionStore(SessionBase): cache_key_prefix: Any def __init__(self, session_key: str | None = None) -> None: ... @property def cache_key(self) -> str: ... async def acache_key(self) -> str: ... django-stubs-5.2.9/django-stubs/contrib/sessions/backends/cached_db.pyi000066400000000000000000000005651513401051600262100ustar00rootroot00000000000000from logging import Logger from typing import Any from django.contrib.sessions.backends.db import SessionStore as DBStore KEY_PREFIX: str logger: Logger class SessionStore(DBStore): cache_key_prefix: Any def __init__(self, session_key: str | None = None) -> None: ... @property def cache_key(self) -> str: ... async def acache_key(self) -> str: ... django-stubs-5.2.9/django-stubs/contrib/sessions/backends/db.pyi000066400000000000000000000012611513401051600247130ustar00rootroot00000000000000from typing import Any, Generic, TypeVar from django.contrib.sessions.backends.base import SessionBase from django.contrib.sessions.base_session import AbstractBaseSession from django.utils.functional import cached_property _ST = TypeVar("_ST", bound=AbstractBaseSession, default=AbstractBaseSession) class SessionStore(SessionBase, Generic[_ST]): def __init__(self, session_key: str | None = None) -> None: ... @classmethod def get_model_class(cls) -> type[_ST]: ... @cached_property def model(self) -> type[_ST]: ... def create_model_instance(self, data: dict[str, Any]) -> _ST: ... async def acreate_model_instance(self, data: dict[str, Any]) -> _ST: ... django-stubs-5.2.9/django-stubs/contrib/sessions/backends/file.pyi000066400000000000000000000003171513401051600252460ustar00rootroot00000000000000from django.contrib.sessions.backends.base import SessionBase class SessionStore(SessionBase): storage_path: str file_prefix: str def __init__(self, session_key: str | None = None) -> None: ... django-stubs-5.2.9/django-stubs/contrib/sessions/backends/signed_cookies.pyi000066400000000000000000000002511513401051600273110ustar00rootroot00000000000000from django.contrib.sessions.backends.base import SessionBase class SessionStore(SessionBase): async def aexists(self, session_key: str | None = None) -> bool: ... django-stubs-5.2.9/django-stubs/contrib/sessions/base_session.pyi000066400000000000000000000014601513401051600252320ustar00rootroot00000000000000from datetime import datetime from typing import Any, ClassVar, TypeVar from django.contrib.sessions.backends.base import SessionBase from django.db import models from typing_extensions import Self _T = TypeVar("_T", bound=AbstractBaseSession) class BaseSessionManager(models.Manager[_T]): def encode(self, session_dict: dict[str, Any]) -> str: ... def save(self, session_key: str, session_dict: dict[str, Any], expire_date: datetime) -> _T: ... class AbstractBaseSession(models.Model): session_key = models.CharField(primary_key=True) session_data = models.TextField() expire_date = models.DateTimeField() objects: ClassVar[BaseSessionManager[Self]] @classmethod def get_session_store_class(cls) -> type[SessionBase] | None: ... def get_decoded(self) -> dict[str, Any]: ... django-stubs-5.2.9/django-stubs/contrib/sessions/exceptions.pyi000066400000000000000000000003221513401051600247320ustar00rootroot00000000000000from django.core.exceptions import BadRequest, SuspiciousOperation class InvalidSessionKey(SuspiciousOperation): ... class SuspiciousSession(SuspiciousOperation): ... class SessionInterrupted(BadRequest): ... django-stubs-5.2.9/django-stubs/contrib/sessions/management/000077500000000000000000000000001513401051600241455ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/contrib/sessions/management/__init__.pyi000066400000000000000000000000001513401051600264150ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/contrib/sessions/management/commands/000077500000000000000000000000001513401051600257465ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/contrib/sessions/management/commands/__init__.pyi000066400000000000000000000000001513401051600302160ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/contrib/sessions/management/commands/clearsessions.pyi000066400000000000000000000002331513401051600313440ustar00rootroot00000000000000from typing import Any from django.core.management.base import BaseCommand class Command(BaseCommand): def handle(self, **options: Any) -> None: ... django-stubs-5.2.9/django-stubs/contrib/sessions/middleware.pyi000066400000000000000000000006771513401051600247030ustar00rootroot00000000000000from django.contrib.sessions.backends.base import SessionBase from django.http.request import HttpRequest from django.http.response import HttpResponse from django.utils.deprecation import MiddlewareMixin class SessionMiddleware(MiddlewareMixin): SessionStore: type[SessionBase] def process_request(self, request: HttpRequest) -> None: ... def process_response(self, request: HttpRequest, response: HttpResponse) -> HttpResponse: ... django-stubs-5.2.9/django-stubs/contrib/sessions/migrations/000077500000000000000000000000001513401051600242055ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/contrib/sessions/migrations/__init__.pyi000066400000000000000000000000001513401051600264550ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/contrib/sessions/models.pyi000066400000000000000000000003631513401051600240410ustar00rootroot00000000000000from typing import TypeVar from django.contrib.sessions.base_session import AbstractBaseSession, BaseSessionManager _T = TypeVar("_T", bound=Session) class SessionManager(BaseSessionManager[_T]): ... class Session(AbstractBaseSession): ... django-stubs-5.2.9/django-stubs/contrib/sessions/serializers.pyi000066400000000000000000000002231513401051600251050ustar00rootroot00000000000000from typing import TypeAlias from django.core.signing import JSONSerializer as BaseJSONSerializer JSONSerializer: TypeAlias = BaseJSONSerializer django-stubs-5.2.9/django-stubs/contrib/sitemaps/000077500000000000000000000000001513401051600220105ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/contrib/sitemaps/__init__.pyi000066400000000000000000000033221513401051600242720ustar00rootroot00000000000000from collections.abc import Iterable, Mapping, Sequence from datetime import datetime from typing import Any, Generic, TypeVar from django.contrib.sites.models import Site from django.contrib.sites.requests import RequestSite from django.core.paginator import Paginator from django.db.models.base import Model from django.db.models.query import QuerySet _ItemT = TypeVar("_ItemT") class Sitemap(Generic[_ItemT]): limit: int protocol: str | None i18n: bool languages: Sequence[str] | None alternates: bool x_default: bool def items(self) -> Iterable[_ItemT]: ... def location(self, item: _ItemT) -> str: ... @property def paginator(self) -> Paginator: ... def get_languages_for_item(self, item: _ItemT) -> list[str]: ... def get_protocol(self, protocol: str | None = None) -> str: ... def get_domain(self, site: Site | RequestSite | None = None) -> str: ... def get_urls( self, page: int | str = 1, site: Site | RequestSite | None = None, protocol: str | None = None ) -> list[dict[str, Any]]: ... def get_latest_lastmod(self) -> datetime | None: ... _ModelT = TypeVar("_ModelT", bound=Model) class GenericSitemap(Sitemap[_ModelT]): priority: float | None changefreq: str | None queryset: QuerySet[_ModelT] date_field: str | None protocol: str | None def __init__( self, info_dict: Mapping[str, datetime | QuerySet[_ModelT] | str], priority: float | None = None, changefreq: str | None = None, protocol: str | None = None, ) -> None: ... def items(self) -> QuerySet[_ModelT]: ... def lastmod(self, item: _ModelT) -> datetime | None: ... def get_latest_lastmod(self) -> datetime | None: ... django-stubs-5.2.9/django-stubs/contrib/sitemaps/apps.pyi000066400000000000000000000002001513401051600234660ustar00rootroot00000000000000from typing import Any from django.apps import AppConfig class SiteMapsConfig(AppConfig): name: str verbose_name: Any django-stubs-5.2.9/django-stubs/contrib/sitemaps/views.pyi000066400000000000000000000012661513401051600236750ustar00rootroot00000000000000from collections.abc import Callable from typing import TypeVar from django.contrib.sitemaps import Sitemap from django.http.request import HttpRequest from django.template.response import TemplateResponse _C = TypeVar("_C", bound=Callable) def x_robots_tag(func: _C) -> _C: ... def index( request: HttpRequest, sitemaps: dict[str, type[Sitemap] | Sitemap], template_name: str = ..., content_type: str = ..., sitemap_url_name: str = ..., ) -> TemplateResponse: ... def sitemap( request: HttpRequest, sitemaps: dict[str, type[Sitemap] | Sitemap], section: str | None = ..., template_name: str = ..., content_type: str = ..., ) -> TemplateResponse: ... django-stubs-5.2.9/django-stubs/contrib/sites/000077500000000000000000000000001513401051600213125ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/contrib/sites/__init__.pyi000066400000000000000000000000001513401051600235620ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/contrib/sites/admin.pyi000066400000000000000000000002361513401051600231260ustar00rootroot00000000000000from typing import Any, ClassVar from django.contrib import admin class SiteAdmin(admin.ModelAdmin): list_display: Any search_fields: ClassVar[Any] django-stubs-5.2.9/django-stubs/contrib/sites/apps.pyi000066400000000000000000000001051513401051600227740ustar00rootroot00000000000000from django.apps import AppConfig class SitesConfig(AppConfig): ... django-stubs-5.2.9/django-stubs/contrib/sites/checks.pyi000066400000000000000000000003631513401051600232770ustar00rootroot00000000000000from collections.abc import Sequence from typing import Any from django.apps.config import AppConfig from django.core.checks.messages import Error def check_site_id(app_configs: Sequence[AppConfig] | None, **kwargs: Any) -> list[Error]: ... django-stubs-5.2.9/django-stubs/contrib/sites/management.pyi000066400000000000000000000004461513401051600241550ustar00rootroot00000000000000from typing import Any from django.apps.config import AppConfig from django.apps.registry import Apps def create_default_site( app_config: AppConfig, verbosity: int = 2, interactive: bool = True, using: str = "default", apps: Apps = ..., **kwargs: Any, ) -> None: ... django-stubs-5.2.9/django-stubs/contrib/sites/managers.pyi000066400000000000000000000003231513401051600236300ustar00rootroot00000000000000from typing import TypeVar from django.db import models _T = TypeVar("_T", bound=models.Model) class CurrentSiteManager(models.Manager[_T]): def __init__(self, field_name: str | None = None) -> None: ... django-stubs-5.2.9/django-stubs/contrib/sites/middleware.pyi000066400000000000000000000003211513401051600241460ustar00rootroot00000000000000from django.http.request import HttpRequest from django.utils.deprecation import MiddlewareMixin class CurrentSiteMiddleware(MiddlewareMixin): def process_request(self, request: HttpRequest) -> None: ... django-stubs-5.2.9/django-stubs/contrib/sites/migrations/000077500000000000000000000000001513401051600234665ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/contrib/sites/migrations/__init__.pyi000066400000000000000000000000001513401051600257360ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/contrib/sites/models.pyi000066400000000000000000000011351513401051600233200ustar00rootroot00000000000000from typing import Any, ClassVar from django.db import models from django.http.request import HttpRequest SITE_CACHE: Any class SiteManager(models.Manager[Site]): def get_current(self, request: HttpRequest | None = ...) -> Site: ... def clear_cache(self) -> None: ... def get_by_natural_key(self, domain: str) -> Site: ... class Site(models.Model): objects: ClassVar[SiteManager] domain = models.CharField(max_length=100) name = models.CharField(max_length=50) def natural_key(self) -> tuple[str]: ... def clear_site_cache(sender: type[Site], **kwargs: Any) -> None: ... django-stubs-5.2.9/django-stubs/contrib/sites/requests.pyi000066400000000000000000000005731513401051600237150ustar00rootroot00000000000000from typing import NoReturn from django.db.models.base import ModelBase from django.http.request import HttpRequest class RequestSite: name: str domain: str def __init__(self, request: HttpRequest) -> None: ... def save(self, force_insert: bool | tuple[ModelBase, ...] = False, force_update: bool = False) -> NoReturn: ... def delete(self) -> NoReturn: ... django-stubs-5.2.9/django-stubs/contrib/sites/shortcuts.pyi000066400000000000000000000003351513401051600240740ustar00rootroot00000000000000from django.contrib.sites.models import Site from django.contrib.sites.requests import RequestSite from django.http.request import HttpRequest def get_current_site(request: HttpRequest | None) -> Site | RequestSite: ... django-stubs-5.2.9/django-stubs/contrib/staticfiles/000077500000000000000000000000001513401051600224755ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/contrib/staticfiles/__init__.pyi000066400000000000000000000000001513401051600247450ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/contrib/staticfiles/apps.pyi000066400000000000000000000001701513401051600241610ustar00rootroot00000000000000from typing import Any from django.apps import AppConfig class StaticFilesConfig(AppConfig): ignore_patterns: Any django-stubs-5.2.9/django-stubs/contrib/staticfiles/checks.pyi000066400000000000000000000006111513401051600244560ustar00rootroot00000000000000from collections.abc import Sequence from typing import Any from django.apps.config import AppConfig from django.core.checks.messages import CheckMessage, Error E005: Error def check_finders(app_configs: Sequence[AppConfig] | None = None, **kwargs: Any) -> list[CheckMessage]: ... def check_storages(app_configs: Sequence[AppConfig] | None = None, **kwargs: Any) -> list[CheckMessage]: ... django-stubs-5.2.9/django-stubs/contrib/staticfiles/finders.pyi000066400000000000000000000050001513401051600246450ustar00rootroot00000000000000from collections.abc import Iterable, Iterator, Sequence from typing import Any, Literal, overload from django.core.checks.messages import CheckMessage from django.core.files.storage import FileSystemStorage, Storage searched_locations: Any class BaseFinder: def check(self, **kwargs: Any) -> list[CheckMessage]: ... @overload def find(self, path: str, find_all: Literal[False] = False) -> str | None: ... @overload def find(self, path: str, find_all: Literal[True]) -> list[str]: ... def list(self, ignore_patterns: Iterable[str] | None) -> Iterable[Any]: ... class FileSystemFinder(BaseFinder): locations: list[tuple[str, str]] storages: dict[str, Any] def __init__(self, app_names: Sequence[str] | None = None, *args: Any, **kwargs: Any) -> None: ... def find_location(self, root: str, path: str, prefix: str | None = None) -> str | None: ... @overload def find(self, path: str, find_all: Literal[False] = False) -> str | None: ... @overload def find(self, path: str, find_all: Literal[True]) -> list[str]: ... def list(self, ignore_patterns: Iterable[str] | None) -> Iterable[Any]: ... class AppDirectoriesFinder(BaseFinder): storage_class: type[FileSystemStorage] source_dir: str apps: list[str] storages: dict[str, FileSystemStorage] def __init__(self, app_names: Iterable[str] | None = None, *args: Any, **kwargs: Any) -> None: ... def find_in_app(self, app: str, path: str) -> str | None: ... @overload def find(self, path: str, find_all: Literal[False] = False) -> str | None: ... @overload def find(self, path: str, find_all: Literal[True]) -> list[str]: ... def list(self, ignore_patterns: Iterable[str] | None) -> Iterable[Any]: ... class BaseStorageFinder(BaseFinder): storage: Storage def __init__(self, storage: Storage | None = None, *args: Any, **kwargs: Any) -> None: ... @overload def find(self, path: str, find_all: Literal[False] = False) -> str | None: ... @overload def find(self, path: str, find_all: Literal[True]) -> list[str]: ... def list(self, ignore_patterns: Iterable[str] | None) -> Iterable[Any]: ... class DefaultStorageFinder(BaseStorageFinder): storage: Storage def __init__(self, *args: Any, **kwargs: Any) -> None: ... @overload def find(path: str, find_all: Literal[False] = False) -> str | None: ... @overload def find(path: str, find_all: Literal[True]) -> list[str]: ... def get_finders() -> Iterator[BaseFinder]: ... def get_finder(import_path: str) -> BaseFinder: ... django-stubs-5.2.9/django-stubs/contrib/staticfiles/handlers.pyi000066400000000000000000000034271513401051600250260ustar00rootroot00000000000000import sys from collections.abc import Awaitable, Callable, Mapping from typing import Any from urllib.parse import ParseResult from django.core.handlers.asgi import ASGIHandler from django.core.handlers.base import BaseHandler from django.core.handlers.wsgi import WSGIHandler from django.http import HttpRequest from django.http.response import FileResponse, HttpResponseBase if sys.version_info >= (3, 11): from wsgiref.types import StartResponse, WSGIEnvironment else: from _typeshed.wsgi import StartResponse, WSGIEnvironment class StaticFilesHandlerMixin: handles_files: bool application: BaseHandler base_url: ParseResult def load_middleware(self) -> None: ... def get_base_url(self) -> str: ... def _should_handle(self, path: str) -> bool: ... def file_path(self, url: str) -> str: ... def serve(self, request: HttpRequest) -> FileResponse: ... def get_response(self, request: HttpRequest) -> HttpResponseBase: ... async def get_response_async(self, request: HttpRequest) -> HttpResponseBase: ... class StaticFilesHandler(StaticFilesHandlerMixin, WSGIHandler): # type: ignore[misc] application: WSGIHandler base_url: ParseResult def __init__(self, application: WSGIHandler) -> None: ... def __call__( self, environ: WSGIEnvironment, start_response: StartResponse, ) -> HttpResponseBase: ... class ASGIStaticFilesHandler(StaticFilesHandlerMixin, ASGIHandler): # type: ignore[misc] application: ASGIHandler base_url: ParseResult def __init__(self, application: ASGIHandler) -> None: ... async def __call__( self, scope: dict[str, Any], receive: Callable[[], Awaitable[Mapping[str, Any]]], send: Callable[[Mapping[str, Any]], Awaitable[None]], ) -> None: ... django-stubs-5.2.9/django-stubs/contrib/staticfiles/management/000077500000000000000000000000001513401051600246115ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/contrib/staticfiles/management/__init__.pyi000066400000000000000000000000001513401051600270610ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/contrib/staticfiles/management/commands/000077500000000000000000000000001513401051600264125ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/contrib/staticfiles/management/commands/__init__.pyi000066400000000000000000000000001513401051600306620ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/contrib/staticfiles/management/commands/collectstatic.pyi000066400000000000000000000022201513401051600317660ustar00rootroot00000000000000from typing import Any from django.core.files.storage import Storage from django.core.management.base import BaseCommand from django.utils.functional import cached_property class Command(BaseCommand): copied_files: Any symlinked_files: Any unmodified_files: Any post_processed_files: Any storage: Any def __init__(self, *args: Any, **kwargs: Any) -> None: ... @cached_property def local(self) -> bool: ... interactive: Any verbosity: Any symlink: Any clear: Any dry_run: Any ignore_patterns: Any post_process: Any def set_options(self, **options: Any) -> None: ... def collect(self) -> dict[str, list[str]]: ... def handle(self, **options: Any) -> str | None: ... def log(self, msg: str, level: int = 2) -> None: ... def is_local_storage(self) -> bool: ... def clear_dir(self, path: str) -> None: ... def delete_file(self, path: str, prefixed_path: str, source_storage: Storage) -> bool: ... def link_file(self, path: str, prefixed_path: str, source_storage: Storage) -> None: ... def copy_file(self, path: str, prefixed_path: str, source_storage: Storage) -> None: ... django-stubs-5.2.9/django-stubs/contrib/staticfiles/management/commands/findstatic.pyi000066400000000000000000000003161513401051600312650ustar00rootroot00000000000000from typing import Any from django.core.management.base import LabelCommand class Command(LabelCommand): def handle_label(self, path: str, **options: Any) -> str | None: ... # type: ignore[override] django-stubs-5.2.9/django-stubs/contrib/staticfiles/management/commands/runserver.pyi000066400000000000000000000001701513401051600311660ustar00rootroot00000000000000from django.core.management.commands.runserver import Command as RunserverCommand class Command(RunserverCommand): ... django-stubs-5.2.9/django-stubs/contrib/staticfiles/storage.pyi000066400000000000000000000044411513401051600246670ustar00rootroot00000000000000from collections.abc import Callable, Iterator from re import Match from typing import Any, TypeAlias from django.core.files.base import File from django.core.files.storage import FileSystemStorage, Storage from django.utils._os import _PathCompatible from django.utils.functional import LazyObject _PostProcessT: TypeAlias = Iterator[tuple[str, str, bool] | tuple[str, None, RuntimeError]] class StaticFilesStorage(FileSystemStorage): def __init__( self, location: _PathCompatible | None = None, base_url: str | None = None, *args: Any, **kwargs: Any ) -> None: ... def path(self, name: _PathCompatible) -> str: ... class HashedFilesMixin: default_template: str max_post_process_passes: int support_js_module_import_aggregation: bool patterns: Any hashed_files: Any keep_intermediate_files: bool def __init__(self, *args: Any, **kwargs: Any) -> None: ... def file_hash(self, name: str, content: File | None = None) -> str | None: ... def hashed_name(self, name: str, content: File | None = None, filename: str | None = None) -> str: ... def url(self, name: str, force: bool = False) -> str: ... def url_converter( self, name: str, hashed_files: dict[str, Any], template: str | None = None ) -> Callable[[Match], str]: ... def post_process(self, paths: dict[str, Any], dry_run: bool = False, **options: Any) -> _PostProcessT: ... def clean_name(self, name: str) -> str: ... def hash_key(self, name: str) -> str: ... def stored_name(self, name: str) -> str: ... class ManifestFilesMixin(HashedFilesMixin): manifest_version: str manifest_name: str manifest_strict: bool keep_intermediate_files: bool manifest_storage: Storage | None hashed_files: dict[str, str] manifest_hash: str def __init__(self, *args: Any, manifest_storage: Storage | None = None, **kwargs: Any) -> None: ... def read_manifest(self) -> str: ... def load_manifest(self) -> dict[str, Any]: ... def save_manifest(self) -> None: ... def post_process(self, *args: Any, **kwargs: Any) -> _PostProcessT: ... def stored_name(self, name: str) -> str: ... class ManifestStaticFilesStorage(ManifestFilesMixin, StaticFilesStorage): ... # type: ignore[misc] class ConfiguredStorage(LazyObject): ... staticfiles_storage: Storage django-stubs-5.2.9/django-stubs/contrib/staticfiles/testing.pyi000066400000000000000000000001441513401051600246740ustar00rootroot00000000000000from django.test import LiveServerTestCase class StaticLiveServerTestCase(LiveServerTestCase): ... django-stubs-5.2.9/django-stubs/contrib/staticfiles/urls.pyi000066400000000000000000000002301513401051600242000ustar00rootroot00000000000000from django.urls import URLPattern, _AnyURL urlpatterns: list[_AnyURL] def staticfiles_urlpatterns(prefix: str | None = ...) -> list[URLPattern]: ... django-stubs-5.2.9/django-stubs/contrib/staticfiles/utils.pyi000066400000000000000000000005321513401051600243600ustar00rootroot00000000000000from collections.abc import Iterable, Iterator from django.core.files.storage import Storage def matches_patterns(path: str, patterns: Iterable[str]) -> bool: ... def get_files(storage: Storage, ignore_patterns: Iterable[str] | None = None, location: str = "") -> Iterator[str]: ... def check_settings(base_url: str | None = None) -> None: ... django-stubs-5.2.9/django-stubs/contrib/staticfiles/views.pyi000066400000000000000000000003301513401051600243510ustar00rootroot00000000000000from typing import Any from django.http.request import HttpRequest from django.http.response import FileResponse def serve(request: HttpRequest, path: str, insecure: bool = ..., **kwargs: Any) -> FileResponse: ... django-stubs-5.2.9/django-stubs/contrib/syndication/000077500000000000000000000000001513401051600225075ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/contrib/syndication/__init__.pyi000066400000000000000000000000001513401051600247570ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/contrib/syndication/apps.pyi000066400000000000000000000002031513401051600241700ustar00rootroot00000000000000from typing import Any from django.apps import AppConfig class SyndicationConfig(AppConfig): name: str verbose_name: Any django-stubs-5.2.9/django-stubs/contrib/syndication/views.pyi000066400000000000000000000035411513401051600243720ustar00rootroot00000000000000from typing import Any, Generic, TypeVar from django.core.exceptions import ObjectDoesNotExist from django.http.request import HttpRequest from django.http.response import HttpResponse from django.utils.feedgenerator import Enclosure, SyndicationFeed def add_domain(domain: str, url: str, secure: bool = ...) -> str: ... class FeedDoesNotExist(ObjectDoesNotExist): ... _Item = TypeVar("_Item") _Object = TypeVar("_Object") class Feed(Generic[_Item, _Object]): feed_type: type[SyndicationFeed] title_template: str | None description_template: str | None language: str | None # Dynamic attributes: title: Any link: Any feed_url: Any feed_guid: Any description: Any author_name: Any author_email: Any author_link: Any categories: Any feed_copyright: Any ttl: Any items: Any item_guid: Any item_guid_is_permalink: Any item_author_name: Any item_author_email: Any item_author_link: Any item_enclosure_url: Any item_enclosure_length: Any item_enclosure_mime_type: Any item_pubdate: Any item_updateddate: Any item_categories: Any item_copyright: Any item_comments: Any def __call__(self, request: HttpRequest, *args: Any, **kwargs: Any) -> HttpResponse: ... def get_object(self, request: HttpRequest, *args: Any, **kwargs: Any) -> _Object | None: ... def feed_extra_kwargs(self, obj: _Object) -> dict[Any, Any]: ... def item_extra_kwargs(self, item: _Item) -> dict[Any, Any]: ... def get_context_data(self, **kwargs: Any) -> dict[str, Any]: ... def get_feed(self, obj: _Object, request: HttpRequest) -> SyndicationFeed: ... def item_title(self, item: _Item) -> str: ... def item_description(self, item: _Item) -> str: ... def item_link(self, item: _Item) -> str: ... def item_enclosures(self, item: _Item) -> list[Enclosure]: ... django-stubs-5.2.9/django-stubs/core/000077500000000000000000000000001513401051600174535ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/core/__init__.pyi000066400000000000000000000000001513401051600217230ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/core/asgi.pyi000066400000000000000000000001421513401051600211160ustar00rootroot00000000000000from django.core.handlers.asgi import ASGIHandler def get_asgi_application() -> ASGIHandler: ... django-stubs-5.2.9/django-stubs/core/cache/000077500000000000000000000000001513401051600205165ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/core/cache/__init__.pyi000066400000000000000000000017051513401051600230030ustar00rootroot00000000000000from typing import Any from django.utils.connection import BaseConnectionHandler from .backends.base import BaseCache as BaseCache from .backends.base import CacheKeyWarning as CacheKeyWarning from .backends.base import InvalidCacheBackendError as InvalidCacheBackendError from .backends.base import InvalidCacheKey as InvalidCacheKey DEFAULT_CACHE_ALIAS: str class CacheHandler(BaseConnectionHandler[BaseCache]): settings_name: str exception_class: type[Exception] def create_connection(self, alias: str) -> BaseCache: ... def all(self, initialized_only: bool = False) -> list[BaseCache]: ... def close_caches(**kwargs: Any) -> None: ... caches: CacheHandler # Actually ConnectionProxy, but quacks exactly like BaseCache, it's not worth distinguishing the two. cache: BaseCache __all__ = [ "DEFAULT_CACHE_ALIAS", "BaseCache", "CacheKeyWarning", "InvalidCacheBackendError", "InvalidCacheKey", "cache", "caches", ] django-stubs-5.2.9/django-stubs/core/cache/backends/000077500000000000000000000000001513401051600222705ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/core/cache/backends/__init__.pyi000066400000000000000000000000001513401051600245400ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/core/cache/backends/base.pyi000066400000000000000000000101501513401051600237220ustar00rootroot00000000000000from collections.abc import Callable, Iterable, Iterator from re import Pattern from typing import Any from django.core.exceptions import ImproperlyConfigured class InvalidCacheBackendError(ImproperlyConfigured): ... class CacheKeyWarning(RuntimeWarning): ... class InvalidCacheKey(ValueError): ... DEFAULT_TIMEOUT: Any MEMCACHE_MAX_KEY_LENGTH: int def default_key_func(key: Any, key_prefix: str, version: Any) -> str: ... def get_key_func(key_func: Callable | str | None) -> Callable: ... class BaseCache: _missing_key: object default_timeout: float | None _max_entries: int _cull_frequency: int key_prefix: str version: int key_func: Callable def __init__(self, params: dict[str, Any]) -> None: ... def get_backend_timeout(self, timeout: float | None = ...) -> float | None: ... def make_key(self, key: Any, version: int | None = None) -> str: ... def validate_key(self, key: Any) -> None: ... def make_and_validate_key(self, key: Any, version: int | None = None) -> str: ... def add(self, key: Any, value: Any, timeout: float | None = ..., version: int | None = None) -> bool: ... async def aadd(self, key: Any, value: Any, timeout: float | None = ..., version: int | None = None) -> bool: ... def get(self, key: Any, default: Any | None = None, version: int | None = None) -> Any: ... async def aget(self, key: Any, default: Any | None = None, version: int | None = None) -> Any: ... def set(self, key: Any, value: Any, timeout: float | None = ..., version: int | None = None) -> None: ... async def aset(self, key: Any, value: Any, timeout: float | None = ..., version: int | None = None) -> None: ... def touch(self, key: Any, timeout: float | None = ..., version: int | None = None) -> bool: ... async def atouch(self, key: Any, timeout: float | None = ..., version: int | None = None) -> bool: ... def delete(self, key: Any, version: int | None = None) -> bool: ... async def adelete(self, key: Any, version: int | None = None) -> bool: ... def get_many(self, keys: Iterable[Any], version: int | None = None) -> dict[Any, Any]: ... async def aget_many(self, keys: Iterable[Any], version: int | None = None) -> dict[Any, Any]: ... def get_or_set( self, key: Any, default: Any | None, timeout: float | None = ..., version: int | None = None ) -> Any | None: ... async def aget_or_set( self, key: Any, default: Any | None, timeout: float | None = ..., version: int | None = None ) -> Any | None: ... def has_key(self, key: Any, version: int | None = None) -> bool: ... async def ahas_key(self, key: Any, version: int | None = None) -> bool: ... def incr(self, key: Any, delta: int = 1, version: int | None = None) -> int: ... async def aincr(self, key: Any, delta: int = 1, version: int | None = None) -> int: ... def decr(self, key: Any, delta: int = 1, version: int | None = None) -> int: ... async def adecr(self, key: Any, delta: int = 1, version: int | None = None) -> int: ... def __contains__(self, key: Any) -> bool: ... def set_many(self, data: dict[Any, Any], timeout: float | None = ..., version: int | None = None) -> list[Any]: ... async def aset_many( self, data: dict[Any, Any], timeout: float | None = ..., version: int | None = None ) -> list[Any]: ... def delete_many(self, keys: Iterable[Any], version: int | None = None) -> None: ... async def adelete_many(self, keys: Iterable[Any], version: int | None = None) -> None: ... def clear(self) -> None: ... async def aclear(self) -> None: ... def incr_version(self, key: Any, delta: int = 1, version: int | None = None) -> int: ... async def aincr_version(self, key: Any, delta: int = 1, version: int | None = None) -> int: ... def decr_version(self, key: Any, delta: int = 1, version: int | None = None) -> int: ... async def adecr_version(self, key: Any, delta: int = 1, version: int | None = None) -> int: ... def close(self, **kwargs: Any) -> None: ... async def aclose(self, **kwargs: Any) -> None: ... memcached_error_chars_re: Pattern[str] def memcache_key_warnings(key: str) -> Iterator[str]: ... django-stubs-5.2.9/django-stubs/core/cache/backends/db.pyi000066400000000000000000000011721513401051600234010ustar00rootroot00000000000000from typing import Any, ClassVar from django.core.cache.backends.base import BaseCache from django.utils.functional import _StrOrPromise class Options: db_table: str app_label: str model_name: str verbose_name: _StrOrPromise verbose_name_plural: _StrOrPromise object_name: str abstract: bool managed: bool proxy: bool swapped: bool def __init__(self, table: str) -> None: ... class BaseDatabaseCache(BaseCache): cache_model_class: Any def __init__(self, table: str, params: dict[str, Any]) -> None: ... class DatabaseCache(BaseDatabaseCache): pickle_protocol: ClassVar[int] django-stubs-5.2.9/django-stubs/core/cache/backends/dummy.pyi000066400000000000000000000002661513401051600241520ustar00rootroot00000000000000from typing import Any from django.core.cache.backends.base import BaseCache class DummyCache(BaseCache): def __init__(self, host: str, *args: Any, **kwargs: Any) -> None: ... django-stubs-5.2.9/django-stubs/core/cache/backends/filebased.pyi000066400000000000000000000004031513401051600247260ustar00rootroot00000000000000from typing import Any, ClassVar from django.core.cache.backends.base import BaseCache class FileBasedCache(BaseCache): cache_suffix: ClassVar[str] pickle_protocol: ClassVar[int] def __init__(self, dir: str, params: dict[str, Any]) -> None: ... django-stubs-5.2.9/django-stubs/core/cache/backends/locmem.pyi000066400000000000000000000003421513401051600242660ustar00rootroot00000000000000from typing import Any, ClassVar from django.core.cache.backends.base import BaseCache class LocMemCache(BaseCache): pickle_protocol: ClassVar[int] def __init__(self, name: str, params: dict[str, Any]) -> None: ... django-stubs-5.2.9/django-stubs/core/cache/backends/memcached.pyi000066400000000000000000000014101513401051600247150ustar00rootroot00000000000000from collections.abc import Sequence from types import ModuleType from typing import Any from django.core.cache.backends.base import BaseCache class BaseMemcachedCache(BaseCache): def __init__( self, server: str | Sequence[str], params: dict[str, Any], library: ModuleType, value_not_found_exception: type[BaseException], ) -> None: ... @property def client_servers(self) -> Sequence[str]: ... class PyLibMCCache(BaseMemcachedCache): def __init__(self, server: str | Sequence[str], params: dict[str, Any]) -> None: ... @property def client_servers(self) -> list[str]: ... class PyMemcacheCache(BaseMemcachedCache): def __init__(self, server: str | Sequence[str], params: dict[str, Any]) -> None: ... django-stubs-5.2.9/django-stubs/core/cache/backends/redis.pyi000066400000000000000000000043331513401051600241240ustar00rootroot00000000000000from collections.abc import Callable, Iterable, Mapping from datetime import timedelta from typing import Any, Protocol, SupportsInt, TypeAlias, overload, type_check_only from _typeshed import ReadableBuffer from django.core.cache.backends.base import BaseCache from redis._parsers import BaseParser from redis.client import Redis from redis.connection import ConnectionPool @type_check_only class _RedisCacheClientSerializer(Protocol): def dumps(self, obj: Any) -> bytes: ... @overload def loads(self, data: SupportsInt) -> int: ... @overload def loads(self, data: ReadableBuffer) -> Any: ... class RedisSerializer: def __init__(self, protocol: int | None = None) -> None: ... def dumps(self, obj: Any) -> bytes: ... @overload def loads(self, data: SupportsInt) -> int: ... @overload def loads(self, data: ReadableBuffer) -> Any: ... # Taken from https://github.com/redis/redis-py/blob/6b8978/redis/typing.py _Key: TypeAlias = str | bytes | memoryview _Expiry: TypeAlias = int | timedelta class RedisCacheClient: def __init__( self, servers: list[str], serializer: str | Callable[[], _RedisCacheClientSerializer] | _RedisCacheClientSerializer | None = None, pool_class: str | type[ConnectionPool] | None = None, parser_class: str | type[BaseParser] | None = None, **options: Any, ) -> None: ... def get_client(self, key: _Key | None = None, *, write: bool = False) -> Redis: ... def add(self, key: _Key, value: Any, timeout: _Expiry | None) -> bool: ... def get(self, key: _Key, default: Any) -> Any: ... def set(self, key: _Key, value: Any, timeout: _Expiry | None) -> None: ... def touch(self, key: _Key, timeout: _Expiry) -> bool: ... def delete(self, key: _Key) -> bool: ... def get_many(self, keys: Iterable[_Key]) -> dict[_Key, Any]: ... def has_key(self, key: _Key) -> bool: ... def incr(self, key: _Key, delta: int) -> Any: ... def set_many(self, data: Mapping[_Key, Any], timeout: _Expiry) -> None: ... def delete_many(self, keys: Iterable[_Key]) -> None: ... def clear(self) -> bool: ... class RedisCache(BaseCache): def __init__(self, server: str | list[str], params: dict[str, Any]) -> None: ... django-stubs-5.2.9/django-stubs/core/cache/utils.pyi000066400000000000000000000003071513401051600224010ustar00rootroot00000000000000from collections.abc import Iterable from typing import Any TEMPLATE_FRAGMENT_KEY_TEMPLATE: str def make_template_fragment_key(fragment_name: str, vary_on: Iterable[Any] | None = None) -> str: ... django-stubs-5.2.9/django-stubs/core/checks/000077500000000000000000000000001513401051600207135ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/core/checks/__init__.pyi000066400000000000000000000015711513401051600232010ustar00rootroot00000000000000from . import model_checks as model_checks from .messages import CRITICAL as CRITICAL from .messages import DEBUG as DEBUG from .messages import ERROR as ERROR from .messages import INFO as INFO from .messages import WARNING as WARNING from .messages import CheckMessage as CheckMessage from .messages import Critical as Critical from .messages import Debug as Debug from .messages import Error as Error from .messages import Info as Info from .messages import Warning as Warning from .registry import Tags as Tags from .registry import register as register from .registry import run_checks as run_checks from .registry import tag_exists as tag_exists __all__ = [ "CRITICAL", "DEBUG", "ERROR", "INFO", "WARNING", "CheckMessage", "Critical", "Debug", "Error", "Info", "Tags", "Warning", "register", "run_checks", "tag_exists", ] django-stubs-5.2.9/django-stubs/core/checks/async_checks.pyi000066400000000000000000000004051513401051600240720ustar00rootroot00000000000000from collections.abc import Sequence from typing import Any from django.apps.config import AppConfig from django.core.checks.messages import Error E001: Error def check_async_unsafe(app_configs: Sequence[AppConfig] | None, **kwargs: Any) -> list[Error]: ... django-stubs-5.2.9/django-stubs/core/checks/caches.pyi000066400000000000000000000010051513401051600226600ustar00rootroot00000000000000from collections.abc import Sequence from typing import Any from django.apps.config import AppConfig from django.core.checks.messages import Error, Warning E001: Error def check_default_cache_is_configured(app_configs: Sequence[AppConfig] | None, **kwargs: Any) -> list[Error]: ... def check_cache_location_not_exposed(app_configs: Sequence[AppConfig] | None, **kwargs: Any) -> list[Warning]: ... def check_file_based_cache_is_absolute(app_configs: Sequence[AppConfig] | None, **kwargs: Any) -> list[Warning]: ... django-stubs-5.2.9/django-stubs/core/checks/compatibility/000077500000000000000000000000001513401051600235645ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/core/checks/compatibility/__init__.pyi000066400000000000000000000000001513401051600260340ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/core/checks/compatibility/django_4_0.pyi000066400000000000000000000004001513401051600262050ustar00rootroot00000000000000from collections.abc import Sequence from typing import Any from django.apps.config import AppConfig from django.core.checks.messages import Error def check_csrf_trusted_origins(app_configs: Sequence[AppConfig] | None, **kwargs: Any) -> list[Error]: ... django-stubs-5.2.9/django-stubs/core/checks/database.pyi000066400000000000000000000003301513401051600231760ustar00rootroot00000000000000from collections.abc import Iterable from typing import Any from django.core.checks import CheckMessage def check_database_backends(databases: Iterable[str] | None = None, **kwargs: Any) -> list[CheckMessage]: ... django-stubs-5.2.9/django-stubs/core/checks/files.pyi000066400000000000000000000004101513401051600225330ustar00rootroot00000000000000from collections.abc import Sequence from typing import Any from django.apps.config import AppConfig from django.core.checks.messages import Error def check_setting_file_upload_temp_dir(app_configs: Sequence[AppConfig] | None, **kwargs: Any) -> list[Error]: ... django-stubs-5.2.9/django-stubs/core/checks/messages.pyi000066400000000000000000000021231513401051600232430ustar00rootroot00000000000000from typing import Any DEBUG: int INFO: int WARNING: int ERROR: int CRITICAL: int class CheckMessage: level: int msg: str hint: str | None obj: Any id: str | None def __init__( self, level: int, msg: str, hint: str | None = None, obj: Any | None = None, id: str | None = None ) -> None: ... def is_serious(self, level: int = 40) -> bool: ... def is_silenced(self) -> bool: ... class Debug(CheckMessage): def __init__(self, msg: str, hint: str | None = ..., obj: Any = ..., id: str | None = ...) -> None: ... class Info(CheckMessage): def __init__(self, msg: str, hint: str | None = ..., obj: Any = ..., id: str | None = ...) -> None: ... class Warning(CheckMessage): def __init__(self, msg: str, hint: str | None = ..., obj: Any = ..., id: str | None = ...) -> None: ... class Error(CheckMessage): def __init__(self, msg: str, hint: str | None = ..., obj: Any = ..., id: str | None = ...) -> None: ... class Critical(CheckMessage): def __init__(self, msg: str, hint: str | None = ..., obj: Any = ..., id: str | None = ...) -> None: ... django-stubs-5.2.9/django-stubs/core/checks/model_checks.pyi000066400000000000000000000005771513401051600240670ustar00rootroot00000000000000from collections.abc import Sequence from typing import Any from django.apps.config import AppConfig from django.core.checks.messages import CheckMessage def check_all_models(app_configs: Sequence[AppConfig] | None = None, **kwargs: Any) -> list[CheckMessage]: ... def check_lazy_references(app_configs: Sequence[AppConfig] | None = None, **kwargs: Any) -> list[CheckMessage]: ... django-stubs-5.2.9/django-stubs/core/checks/registry.pyi000066400000000000000000000036541513401051600233160ustar00rootroot00000000000000from collections.abc import Callable, Iterable, Sequence from typing import Any, Protocol, TypeVar, overload, type_check_only from django.apps.config import AppConfig from django.core.checks.messages import CheckMessage class Tags: admin: str async_support: str caches: str compatibility: str database: str files: str models: str security: str signals: str sites: str staticfiles: str templates: str translation: str urls: str @type_check_only class _CheckCallable(Protocol): def __call__( self, *, app_configs: Sequence[AppConfig] | None, databases: Sequence[str] | None, **kwargs: Any, ) -> Iterable[CheckMessage]: ... _C = TypeVar("_C", bound=_CheckCallable) @type_check_only class _ProcessedCheckCallable(Protocol[_C]): tags: Sequence[str] __call__: _C class CheckRegistry: registered_checks: set[_ProcessedCheckCallable] deployment_checks: set[_ProcessedCheckCallable] def __init__(self) -> None: ... @overload def register(self, check: _C, *tags: str, **kwargs: Any) -> _ProcessedCheckCallable[_C]: ... @overload def register( self, check: str | None = None, *tags: str, **kwargs: Any ) -> Callable[[_C], _ProcessedCheckCallable[_C]]: ... def run_checks( self, app_configs: Sequence[AppConfig] | None = None, tags: Sequence[str] | None = None, include_deployment_checks: bool = False, databases: Sequence[str] | None = None, ) -> list[CheckMessage]: ... def tag_exists(self, tag: str, include_deployment_checks: bool = False) -> bool: ... def tags_available(self, deployment_checks: bool = False) -> set[str]: ... def get_checks(self, include_deployment_checks: bool = False) -> list[_ProcessedCheckCallable]: ... registry: CheckRegistry = ... register = registry.register run_checks = registry.run_checks tag_exists = registry.tag_exists django-stubs-5.2.9/django-stubs/core/checks/security/000077500000000000000000000000001513401051600225625ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/core/checks/security/__init__.pyi000066400000000000000000000000001513401051600250320ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/core/checks/security/base.pyi000066400000000000000000000037571513401051600242330ustar00rootroot00000000000000from collections.abc import Sequence from typing import Any from django.apps.config import AppConfig from django.core.checks.messages import Error, Warning CROSS_ORIGIN_OPENER_POLICY_VALUES: set[str] REFERRER_POLICY_VALUES: set[str] SECRET_KEY_INSECURE_PREFIX: str SECRET_KEY_MIN_LENGTH: int SECRET_KEY_MIN_UNIQUE_CHARACTERS: int SECRET_KEY_WARNING_MSG: str W001: Warning W002: Warning W004: Warning W005: Warning W006: Warning W008: Warning W009: Warning W018: Warning W019: Warning W020: Warning W021: Warning W022: Warning E023: Error E024: Error W025: Warning def check_security_middleware(app_configs: Sequence[AppConfig] | None, **kwargs: Any) -> list[Warning]: ... def check_xframe_options_middleware(app_configs: Sequence[AppConfig] | None, **kwargs: Any) -> list[Warning]: ... def check_sts(app_configs: Sequence[AppConfig] | None, **kwargs: Any) -> list[Warning]: ... def check_sts_include_subdomains(app_configs: Sequence[AppConfig] | None, **kwargs: Any) -> list[Warning]: ... def check_sts_preload(app_configs: Sequence[AppConfig] | None, **kwargs: Any) -> list[Warning]: ... def check_content_type_nosniff(app_configs: Sequence[AppConfig] | None, **kwargs: Any) -> list[Warning]: ... def check_ssl_redirect(app_configs: Sequence[AppConfig] | None, **kwargs: Any) -> list[Warning]: ... def check_secret_key(app_configs: Sequence[AppConfig] | None, **kwargs: Any) -> list[Warning]: ... def check_secret_key_fallbacks(app_configs: Sequence[AppConfig] | None, **kwargs: Any) -> list[Warning]: ... def check_debug(app_configs: Sequence[AppConfig] | None, **kwargs: Any) -> list[Warning]: ... def check_xframe_deny(app_configs: Sequence[AppConfig] | None, **kwargs: Any) -> list[Warning]: ... def check_allowed_hosts(app_configs: Sequence[AppConfig] | None, **kwargs: Any) -> list[Warning]: ... def check_referrer_policy(app_configs: Sequence[AppConfig] | None, **kwargs: Any) -> list[Warning | Error]: ... def check_cross_origin_opener_policy(app_configs: Sequence[AppConfig] | None, **kwargs: Any) -> list[Error]: ... django-stubs-5.2.9/django-stubs/core/checks/security/csrf.pyi000066400000000000000000000007661513401051600242530ustar00rootroot00000000000000from collections.abc import Sequence from typing import Any from django.apps.config import AppConfig from django.core.checks.messages import Error, Warning W003: Warning W016: Warning def check_csrf_middleware(app_configs: Sequence[AppConfig] | None, **kwargs: Any) -> list[Warning]: ... def check_csrf_cookie_secure(app_configs: Sequence[AppConfig] | None, **kwargs: Any) -> list[Warning]: ... def check_csrf_failure_view(app_configs: Sequence[AppConfig] | None, **kwargs: Any) -> list[Error]: ... django-stubs-5.2.9/django-stubs/core/checks/security/sessions.pyi000066400000000000000000000010711513401051600251520ustar00rootroot00000000000000from collections.abc import Sequence from typing import Any from django.apps.config import AppConfig from django.core.checks.messages import Warning def add_session_cookie_message(message: str) -> str: ... W010: Warning W011: Warning W012: Warning def add_httponly_message(message: str) -> str: ... W013: Warning W014: Warning W015: Warning def check_session_cookie_secure(app_configs: Sequence[AppConfig] | None, **kwargs: Any) -> list[Warning]: ... def check_session_cookie_httponly(app_configs: Sequence[AppConfig] | None, **kwargs: Any) -> list[Warning]: ... django-stubs-5.2.9/django-stubs/core/checks/templates.pyi000066400000000000000000000004031513401051600234310ustar00rootroot00000000000000from collections.abc import Sequence from typing import Any from django.apps.config import AppConfig from django.core.checks.messages import CheckMessage def check_templates(app_configs: Sequence[AppConfig] | None, **kwargs: Any) -> list[CheckMessage]: ... django-stubs-5.2.9/django-stubs/core/checks/translation.pyi000066400000000000000000000011411513401051600237710ustar00rootroot00000000000000from collections.abc import Sequence from typing import Any from django.apps.config import AppConfig from . import Error E001: Error E002: Error E003: Error E004: Error def check_setting_language_code(app_configs: Sequence[AppConfig] | None, **kwargs: Any) -> list[Error]: ... def check_setting_languages(app_configs: Sequence[AppConfig] | None, **kwargs: Any) -> list[Error]: ... def check_setting_languages_bidi(app_configs: Sequence[AppConfig] | None, **kwargs: Any) -> list[Error]: ... def check_language_settings_consistent(app_configs: Sequence[AppConfig] | None, **kwargs: Any) -> list[Error]: ... django-stubs-5.2.9/django-stubs/core/checks/urls.pyi000066400000000000000000000014321513401051600224230ustar00rootroot00000000000000from collections.abc import Sequence from typing import Any from django.apps.config import AppConfig from django.core.checks.messages import CheckMessage, Error, Warning from django.urls import _AnyURL def check_url_config(app_configs: Sequence[AppConfig] | None, **kwargs: Any) -> list[CheckMessage]: ... def check_resolver(resolver: _AnyURL) -> list[CheckMessage]: ... def check_url_namespaces_unique(app_configs: Sequence[AppConfig] | None, **kwargs: Any) -> list[Warning]: ... def get_warning_for_invalid_pattern(pattern: Any) -> list[Error]: ... def check_url_settings(app_configs: Sequence[AppConfig] | None, **kwargs: Any) -> list[Error]: ... def E006(name: str) -> Error: ... def check_custom_error_handlers(app_configs: Sequence[AppConfig] | None, **kwargs: Any) -> list[Error]: ... django-stubs-5.2.9/django-stubs/core/exceptions.pyi000066400000000000000000000036621513401051600223660ustar00rootroot00000000000000from collections.abc import Iterator from typing import Any, Literal from django.utils.functional import _StrOrPromise class FieldDoesNotExist(Exception): ... class AppRegistryNotReady(Exception): ... class ObjectDoesNotExist(Exception): silent_variable_failure: bool class MultipleObjectsReturned(Exception): ... class SuspiciousOperation(Exception): ... class SuspiciousMultipartForm(SuspiciousOperation): ... class SuspiciousFileOperation(SuspiciousOperation): ... class DisallowedHost(SuspiciousOperation): ... class DisallowedRedirect(SuspiciousOperation): ... class TooManyFieldsSent(SuspiciousOperation): ... class TooManyFilesSent(SuspiciousOperation): ... class RequestDataTooBig(SuspiciousOperation): ... class RequestAborted(Exception): ... class BadRequest(Exception): ... class PermissionDenied(Exception): ... class ViewDoesNotExist(Exception): ... class MiddlewareNotUsed(Exception): ... class ImproperlyConfigured(Exception): ... class FieldError(Exception): ... NON_FIELD_ERRORS: Literal["__all__"] class ValidationError(Exception): error_dict: dict[str, list[ValidationError]] error_list: list[ValidationError] message: _StrOrPromise code: str | None params: dict[str, Any] | None def __init__( self, # Accepts arbitrarily nested data structure, mypy doesn't allow describing it accurately. message: _StrOrPromise | ValidationError | dict[str, Any] | list[Any], code: str | None = None, params: dict[str, Any] | None = None, ) -> None: ... @property def message_dict(self) -> dict[str, list[str]]: ... @property def messages(self) -> list[str]: ... def update_error_dict(self, error_dict: dict[str, list[ValidationError]]) -> dict[str, list[ValidationError]]: ... def __iter__(self) -> Iterator[tuple[str, list[str]] | str]: ... class EmptyResultSet(Exception): ... class FullResultSet(Exception): ... class SynchronousOnlyOperation(Exception): ... django-stubs-5.2.9/django-stubs/core/files/000077500000000000000000000000001513401051600205555ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/core/files/__init__.pyi000066400000000000000000000001041513401051600230320ustar00rootroot00000000000000from django.core.files.base import File as File __all__ = ["File"] django-stubs-5.2.9/django-stubs/core/files/base.pyi000066400000000000000000000035561513401051600222230ustar00rootroot00000000000000from collections.abc import Callable, Iterator from types import TracebackType from typing import IO, AnyStr, type_check_only from django.core.files.utils import FileProxyMixin from django.utils.functional import cached_property from typing_extensions import Self class File(FileProxyMixin[AnyStr], IO[AnyStr]): DEFAULT_CHUNK_SIZE: int file: IO[AnyStr] | None name: str | None mode: str def __init__(self, file: IO[AnyStr] | None, name: str | None = None) -> None: ... def __bool__(self) -> bool: ... def __len__(self) -> int: ... @cached_property def size(self) -> int: ... def chunks(self, chunk_size: int | None = None) -> Iterator[AnyStr]: ... def multiple_chunks(self, chunk_size: int | None = None) -> bool | None: ... def __iter__(self) -> Iterator[AnyStr]: ... def __enter__(self) -> Self: ... def __exit__( self, exc_type: type[BaseException] | None, exc_value: BaseException | None, exc_tb: TracebackType | None, ) -> None: ... def open( self, mode: str | None = None, buffering: int = -1, encoding: str | None = None, errors: str | None = None, newline: str | None = None, closefd: bool = True, opener: Callable[[str, int], int] | None = None, ) -> Self: ... def close(self) -> None: ... @type_check_only def __next__(self) -> AnyStr: ... class ContentFile(File[AnyStr]): file: IO[AnyStr] def __init__(self, content: AnyStr, name: str | None = None) -> None: ... def __bool__(self) -> bool: ... def open(self, mode: str | None = None) -> Self: ... # type: ignore[override] def close(self) -> None: ... def write(self, data: AnyStr) -> int: ... def endswith_cr(line: bytes | str) -> bool: ... def endswith_lf(line: bytes | str) -> bool: ... def equals_lf(line: bytes | str) -> bool: ... django-stubs-5.2.9/django-stubs/core/files/images.pyi000066400000000000000000000005511513401051600225460ustar00rootroot00000000000000from typing import IO from django.core.files import File from django.utils._os import _PathCompatible class ImageFile(File[bytes]): @property def width(self) -> int: ... @property def height(self) -> int: ... def get_image_dimensions( file_or_path: _PathCompatible | IO[bytes], close: bool = False ) -> tuple[int | None, int | None]: ... django-stubs-5.2.9/django-stubs/core/files/locks.pyi000066400000000000000000000006421513401051600224150ustar00rootroot00000000000000import sys from ctypes import Structure, Union from typing import Any LOCK_SH: int LOCK_NB: int LOCK_EX: int if sys.platform == "win32": ULONG_PTR: Any PVOID: Any class _OFFSET(Structure): ... class _OFFSET_UNION(Union): ... class OVERLAPPED(Structure): ... def lock(f: Any, flags: int) -> bool: ... def unlock(f: Any) -> bool: ... __all__ = ("LOCK_EX", "LOCK_NB", "LOCK_SH", "lock", "unlock") django-stubs-5.2.9/django-stubs/core/files/move.pyi000066400000000000000000000002441513401051600222460ustar00rootroot00000000000000def file_move_safe( old_file_name: str, new_file_name: str, chunk_size: int = 65536, allow_overwrite: bool = False ) -> None: ... __all__ = ["file_move_safe"] django-stubs-5.2.9/django-stubs/core/files/storage/000077500000000000000000000000001513401051600222215ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/core/files/storage/__init__.pyi000066400000000000000000000011101513401051600244740ustar00rootroot00000000000000from django.utils.functional import LazyObject from .base import Storage from .filesystem import FileSystemStorage from .handler import InvalidStorageError, StorageHandler from .memory import InMemoryStorage __all__ = ( "DefaultStorage", "FileSystemStorage", "InMemoryStorage", "InvalidStorageError", "Storage", "StorageHandler", "default_storage", "storages", ) class DefaultStorage(LazyObject): ... storages: StorageHandler # default_storage is actually an instance of DefaultStorage, but it proxies through to a Storage default_storage: Storage django-stubs-5.2.9/django-stubs/core/files/storage/base.pyi000066400000000000000000000022131513401051600236540ustar00rootroot00000000000000from datetime import datetime from typing import IO, Any from django.core.files.base import File from django.utils._os import _PathCompatible class Storage: def open(self, name: str, mode: str = "rb") -> File: ... def save(self, name: str | None, content: IO[Any], max_length: int | None = None) -> str: ... def is_name_available(self, name: str, max_length: int | None = None) -> bool: ... def get_valid_name(self, name: str) -> str: ... def get_alternative_name(self, file_root: str, file_ext: str) -> str: ... def get_available_name(self, name: str, max_length: int | None = None) -> str: ... def generate_filename(self, filename: _PathCompatible) -> str: ... def path(self, name: str) -> str: ... def delete(self, name: str) -> None: ... def exists(self, name: str) -> bool: ... def listdir(self, path: str) -> tuple[list[str], list[str]]: ... def size(self, name: str) -> int: ... def url(self, name: str | None) -> str: ... def get_accessed_time(self, name: str) -> datetime: ... def get_created_time(self, name: str) -> datetime: ... def get_modified_time(self, name: str) -> datetime: ... django-stubs-5.2.9/django-stubs/core/files/storage/filesystem.pyi000066400000000000000000000017301513401051600251310ustar00rootroot00000000000000from django.utils._os import _PathCompatible from django.utils.deconstruct import _Deconstructible from django.utils.functional import cached_property from .base import Storage from .mixins import StorageSettingsMixin class FileSystemStorage(_Deconstructible, Storage, StorageSettingsMixin): # RemovedInDjango60Warning OS_OPEN_FLAGS: int def __init__( self, location: _PathCompatible | None = None, base_url: str | None = None, file_permissions_mode: int | None = None, directory_permissions_mode: int | None = None, allow_overwrite: bool = False, ) -> None: ... @cached_property def base_location(self) -> _PathCompatible: ... @cached_property def location(self) -> _PathCompatible: ... @cached_property def base_url(self) -> str: ... @cached_property def file_permissions_mode(self) -> int | None: ... @cached_property def directory_permissions_mode(self) -> int | None: ... django-stubs-5.2.9/django-stubs/core/files/storage/handler.pyi000066400000000000000000000007761513401051600243730ustar00rootroot00000000000000from typing import Any from django.core.exceptions import ImproperlyConfigured from django.utils.functional import cached_property from .base import Storage class InvalidStorageError(ImproperlyConfigured): ... class StorageHandler: def __init__(self, backends: dict[str, Storage] | None = None) -> None: ... @cached_property def backends(self) -> dict[str, Storage]: ... def __getitem__(self, alias: str) -> Storage: ... def create_storage(self, params: dict[str, Any]) -> Storage: ... django-stubs-5.2.9/django-stubs/core/files/storage/memory.pyi000066400000000000000000000016301513401051600242540ustar00rootroot00000000000000from django.utils._os import _PathCompatible from django.utils.deconstruct import _Deconstructible from django.utils.functional import cached_property from .base import Storage from .mixins import StorageSettingsMixin class InMemoryStorage(_Deconstructible, Storage, StorageSettingsMixin): def __init__( self, location: _PathCompatible | None = None, base_url: str | None = None, file_permissions_mode: int | None = None, directory_permissions_mode: int | None = None, ) -> None: ... @cached_property def base_location(self) -> _PathCompatible: ... @cached_property def location(self) -> _PathCompatible: ... @cached_property def base_url(self) -> str: ... @cached_property def file_permissions_mode(self) -> int | None: ... @cached_property def directory_permissions_mode(self) -> int | None: ... __all__ = ("InMemoryStorage",) django-stubs-5.2.9/django-stubs/core/files/storage/mixins.pyi000066400000000000000000000005221513401051600242520ustar00rootroot00000000000000from typing import Any, Literal class StorageSettingsMixin: def _clear_cached_properties( self, setting: Literal["MEDIA_ROOT", "MEDIA_URL", "FILE_UPLOAD_PERMISSIONS", "FILE_UPLOAD_DIRECTORY_PERMISSIONS"], **kwargs: Any, ) -> None: ... def _value_or_setting(self, value: Any, setting: Any) -> Any: ... django-stubs-5.2.9/django-stubs/core/files/temp.pyi000066400000000000000000000002241513401051600222430ustar00rootroot00000000000000import tempfile NamedTemporaryFile = tempfile.NamedTemporaryFile gettempdir = tempfile.gettempdir __all__ = ("NamedTemporaryFile", "gettempdir") django-stubs-5.2.9/django-stubs/core/files/uploadedfile.pyi000066400000000000000000000032171513401051600237400ustar00rootroot00000000000000from typing import IO from django.core.files.base import File from typing_extensions import Self class UploadedFile(File): content_type: str | None charset: str | None content_type_extra: dict[str, bytes] | None size: int | None # type: ignore[assignment] name: str | None def __init__( self, file: IO | None = None, name: str | None = None, content_type: str | None = None, size: int | None = None, charset: str | None = None, content_type_extra: dict[str, bytes] | None = None, ) -> None: ... class TemporaryUploadedFile(UploadedFile): def __init__( self, name: str, content_type: str | None, size: int | None, charset: str | None, content_type_extra: dict[str, bytes] | None = None, ) -> None: ... def temporary_file_path(self) -> str: ... class InMemoryUploadedFile(UploadedFile): field_name: str | None def __init__( self, file: IO, field_name: str | None, name: str | None, content_type: str | None, size: int | None, charset: str | None, content_type_extra: dict[str, bytes] | None = None, ) -> None: ... def open(self, mode: str | None = None) -> Self: ... # type: ignore[override] class SimpleUploadedFile(InMemoryUploadedFile): def __init__(self, name: str, content: bytes | None, content_type: str = "text/plain") -> None: ... @classmethod def from_dict(cls, file_dict: dict[str, str | bytes]) -> Self: ... __all__ = ( "InMemoryUploadedFile", "SimpleUploadedFile", "TemporaryUploadedFile", "UploadedFile", ) django-stubs-5.2.9/django-stubs/core/files/uploadhandler.pyi000066400000000000000000000061621513401051600241270ustar00rootroot00000000000000from typing import IO, Any from django.core.files.uploadedfile import TemporaryUploadedFile, UploadedFile from django.http.request import HttpRequest, QueryDict from django.utils.datastructures import MultiValueDict class UploadFileException(Exception): ... class StopUpload(UploadFileException): connection_reset: bool def __init__(self, connection_reset: bool = False) -> None: ... class SkipFile(UploadFileException): ... class StopFutureHandlers(UploadFileException): ... class FileUploadHandler: chunk_size: int file_name: str | None content_type: str | None content_length: int | None charset: str | None content_type_extra: dict[str, bytes] | None request: HttpRequest | None field_name: str def __init__(self, request: HttpRequest | None = None) -> None: ... def handle_raw_input( self, input_data: IO[bytes], META: dict[str, str], content_length: int, boundary: str, encoding: str | None = None, ) -> tuple[QueryDict, MultiValueDict[str, UploadedFile]] | None: ... def new_file( self, field_name: str, file_name: str, content_type: str, content_length: int | None, charset: str | None = None, content_type_extra: dict[str, bytes] | None = None, ) -> None: ... def receive_data_chunk(self, raw_data: bytes, start: int) -> bytes | None: ... def file_complete(self, file_size: int) -> UploadedFile | None: ... def upload_complete(self) -> None: ... def upload_interrupted(self) -> None: ... class TemporaryFileUploadHandler(FileUploadHandler): file: TemporaryUploadedFile def new_file( self, field_name: str, file_name: str, content_type: str, content_length: int | None, charset: str | None = ..., content_type_extra: dict[str, bytes] | None = ..., ) -> None: ... def receive_data_chunk(self, raw_data: bytes, start: int) -> bytes | None: ... def file_complete(self, file_size: int) -> UploadedFile | None: ... def upload_interrupted(self) -> None: ... class MemoryFileUploadHandler(FileUploadHandler): activated: bool file: IO[bytes] def handle_raw_input( self, input_data: IO[bytes], META: dict[str, str], content_length: int, boundary: str, encoding: str | None = None, ) -> tuple[QueryDict, MultiValueDict[str, UploadedFile]] | None: ... def new_file( self, field_name: str, file_name: str, content_type: str, content_length: int | None, charset: str | None = ..., content_type_extra: dict[str, bytes] | None = ..., ) -> None: ... def receive_data_chunk(self, raw_data: bytes, start: int) -> bytes | None: ... def file_complete(self, file_size: int) -> UploadedFile | None: ... def load_handler(path: str, *args: Any, **kwargs: Any) -> FileUploadHandler: ... __all__ = [ "FileUploadHandler", "MemoryFileUploadHandler", "SkipFile", "StopFutureHandlers", "StopUpload", "TemporaryFileUploadHandler", "UploadFileException", "load_handler", ] django-stubs-5.2.9/django-stubs/core/files/utils.pyi000066400000000000000000000013421513401051600224400ustar00rootroot00000000000000from collections.abc import Iterator from typing import IO, Any, AnyStr, Generic from django.utils._os import _PathCompatible def validate_file_name(name: _PathCompatible, allow_relative_path: bool = False) -> _PathCompatible: ... class FileProxyMixin(Generic[AnyStr]): file: IO[AnyStr] | None encoding: Any fileno: Any flush: Any isatty: Any newlines: Any read: Any readinto: Any readline: Any readlines: Any seek: Any tell: Any truncate: Any write: Any writelines: Any @property def closed(self) -> bool: ... def readable(self) -> bool: ... def writable(self) -> bool: ... def seekable(self) -> bool: ... def __iter__(self) -> Iterator[AnyStr]: ... django-stubs-5.2.9/django-stubs/core/handlers/000077500000000000000000000000001513401051600212535ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/core/handlers/__init__.pyi000066400000000000000000000000001513401051600235230ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/core/handlers/asgi.pyi000066400000000000000000000050201513401051600227160ustar00rootroot00000000000000from collections.abc import Awaitable, Callable, Iterator, Mapping, Sequence from logging import Logger from typing import IO, Any, TypeAlias, TypeVar from django.core.files import uploadedfile from django.core.handlers import base from django.http.request import HttpRequest, _ImmutableQueryDict from django.http.response import HttpResponseBase from django.urls.resolvers import ResolverMatch, URLResolver from django.utils.datastructures import MultiValueDict from django.utils.functional import cached_property _ReceiveCallback: TypeAlias = Callable[[], Awaitable[Mapping[str, Any]]] _SendCallback: TypeAlias = Callable[[Mapping[str, Any]], Awaitable[None]] logger: Logger def get_script_prefix(scope: Mapping[str, Any]) -> str: ... class ASGIRequest(HttpRequest): body_receive_timeout: int scope: Mapping[str, Any] resolver_match: ResolverMatch | None script_name: str | None path_info: str path: str method: str META: dict[str, Any] def __init__(self, scope: Mapping[str, Any], body_file: IO[bytes]) -> None: ... @cached_property def GET(self) -> _ImmutableQueryDict: ... # type: ignore[override] POST: _ImmutableQueryDict @property def FILES(self) -> MultiValueDict[str, uploadedfile.UploadedFile]: ... # type: ignore[override] @cached_property def COOKIES(self) -> dict[str, str]: ... # type: ignore[override] _T = TypeVar("_T") class ASGIHandler(base.BaseHandler): request_class: type[ASGIRequest] chunk_size: int def __init__(self) -> None: ... async def __call__( self, scope: dict[str, Any], receive: _ReceiveCallback, send: _SendCallback, ) -> None: ... async def handle( self, scope: dict[str, Any], receive: _ReceiveCallback, send: _SendCallback ) -> HttpResponseBase | None: ... async def listen_for_disconnect(self, receive: _ReceiveCallback) -> None: ... async def run_get_response(self, request: HttpRequest) -> HttpResponseBase: ... async def read_body(self, receive: _ReceiveCallback) -> IO[bytes]: ... def create_request( self, scope: Mapping[str, Any], body_file: IO[bytes] ) -> tuple[ASGIRequest, None] | tuple[None, HttpResponseBase]: ... def handle_uncaught_exception( self, request: HttpRequest, resolver: URLResolver, exc_info: Any ) -> HttpResponseBase: ... async def send_response(self, response: HttpResponseBase, send: _SendCallback) -> None: ... @classmethod def chunk_bytes(cls, data: Sequence[_T]) -> Iterator[tuple[Sequence[_T], bool]]: ... django-stubs-5.2.9/django-stubs/core/handlers/base.pyi000066400000000000000000000025111513401051600227070ustar00rootroot00000000000000from collections.abc import Awaitable, Callable from logging import Logger from typing import Any import _typeshed from django.http.request import HttpRequest from django.http.response import HttpResponse, HttpResponseBase from django.urls.resolvers import ResolverMatch logger: Logger class BaseHandler: def load_middleware(self, is_async: bool = ...) -> None: ... def adapt_method_mode( self, is_async: bool, method: Callable[[HttpRequest], HttpResponseBase | Awaitable[HttpResponseBase]], method_is_async: bool | None = ..., debug: bool = ..., name: str | None = ..., ) -> Callable[[HttpRequest], HttpResponseBase | Awaitable[HttpResponseBase]]: ... def get_response(self, request: HttpRequest) -> HttpResponseBase: ... async def get_response_async(self, request: HttpRequest) -> HttpResponseBase: ... def resolve_request(self, request: HttpRequest) -> ResolverMatch: ... def check_response(self, response: HttpResponseBase, callback: Any, name: str | None = ...) -> None: ... def make_view_atomic(self, view: Callable[..., HttpResponseBase]) -> Callable[..., HttpResponseBase]: ... def process_exception_by_middleware(self, exception: Exception, request: HttpRequest) -> HttpResponse: ... def reset_urlconf(sender: _typeshed.Unused, **kwargs: Any) -> None: ... django-stubs-5.2.9/django-stubs/core/handlers/exception.pyi000066400000000000000000000014031513401051600237720ustar00rootroot00000000000000from collections.abc import Awaitable, Callable from typing import Any from django.http.request import HttpRequest from django.http.response import HttpResponse, HttpResponseBase from django.urls.resolvers import URLResolver def convert_exception_to_response( get_response: Callable[[HttpRequest], HttpResponseBase | Awaitable[HttpResponseBase]], ) -> Callable[[HttpRequest], HttpResponseBase | Awaitable[HttpResponseBase]]: ... def response_for_exception(request: HttpRequest, exc: Exception) -> HttpResponse: ... def get_exception_response( request: HttpRequest, resolver: URLResolver, status_code: int, exception: Exception ) -> HttpResponse: ... def handle_uncaught_exception(request: HttpRequest, resolver: URLResolver, exc_info: Any) -> HttpResponse: ... django-stubs-5.2.9/django-stubs/core/handlers/wsgi.pyi000066400000000000000000000033471513401051600227560ustar00rootroot00000000000000import sys from io import BytesIO, IOBase from typing import Any from django.core.files import uploadedfile from django.core.handlers import base from django.http import HttpRequest from django.http.request import _ImmutableQueryDict from django.http.response import HttpResponseBase from django.utils.datastructures import MultiValueDict from django.utils.functional import cached_property if sys.version_info >= (3, 11): from wsgiref.types import StartResponse, WSGIEnvironment else: from _typeshed.wsgi import StartResponse, WSGIEnvironment class LimitedStream(IOBase): limit: int def __init__(self, stream: BytesIO, limit: int) -> None: ... def read(self, size: int | None = ...) -> bytes: ... def readline(self, size: int | None = ...) -> bytes: ... class WSGIRequest(HttpRequest): environ: WSGIEnvironment def __init__(self, environ: WSGIEnvironment) -> None: ... @cached_property def GET(self) -> _ImmutableQueryDict: ... # type: ignore[override] @cached_property def COOKIES(self) -> dict[str, str]: ... # type: ignore[override] @property def FILES(self) -> MultiValueDict[str, uploadedfile.UploadedFile]: ... # type: ignore[override] class WSGIHandler(base.BaseHandler): request_class: type[WSGIRequest] def __init__(self, *args: Any, **kwargs: Any) -> None: ... def __call__( self, environ: WSGIEnvironment, start_response: StartResponse, ) -> HttpResponseBase: ... def get_path_info(environ: WSGIEnvironment) -> str: ... def get_script_name(environ: WSGIEnvironment) -> str: ... def get_bytes_from_wsgi(environ: WSGIEnvironment, key: str, default: str) -> bytes: ... def get_str_from_wsgi(environ: WSGIEnvironment, key: str, default: str) -> str: ... django-stubs-5.2.9/django-stubs/core/mail/000077500000000000000000000000001513401051600203755ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/core/mail/__init__.pyi000066400000000000000000000044251513401051600226640ustar00rootroot00000000000000from collections.abc import Iterable, Sequence from typing import Any from django.utils.functional import _StrOrPromise from .message import DEFAULT_ATTACHMENT_MIME_TYPE as DEFAULT_ATTACHMENT_MIME_TYPE from .message import BadHeaderError as BadHeaderError from .message import EmailAlternative as EmailAlternative from .message import EmailAttachment as EmailAttachment from .message import EmailMessage as EmailMessage from .message import EmailMultiAlternatives as EmailMultiAlternatives from .message import SafeMIMEMultipart as SafeMIMEMultipart from .message import SafeMIMEText as SafeMIMEText from .message import forbid_multi_line_headers as forbid_multi_line_headers from .message import make_msgid as make_msgid from .utils import DNS_NAME as DNS_NAME from .utils import CachedDnsName as CachedDnsName def get_connection(backend: str | None = None, fail_silently: bool = False, **kwds: Any) -> Any: ... def send_mail( subject: _StrOrPromise, message: _StrOrPromise, from_email: str | None, recipient_list: Sequence[str], fail_silently: bool = False, auth_user: str | None = None, auth_password: str | None = None, connection: Any | None = None, html_message: str | None = None, ) -> int: ... def send_mass_mail( datatuple: Iterable[tuple[str, str, str | None, list[str]]], fail_silently: bool = False, auth_user: str | None = None, auth_password: str | None = None, connection: Any | None = None, ) -> int: ... def mail_admins( subject: _StrOrPromise, message: _StrOrPromise, fail_silently: bool = False, connection: Any | None = None, html_message: str | None = None, ) -> None: ... def mail_managers( subject: _StrOrPromise, message: _StrOrPromise, fail_silently: bool = False, connection: Any | None = None, html_message: str | None = None, ) -> None: ... outbox: list[EmailMessage | EmailMultiAlternatives] __all__ = [ "DEFAULT_ATTACHMENT_MIME_TYPE", "DNS_NAME", "BadHeaderError", "CachedDnsName", "EmailAlternative", "EmailAttachment", "EmailMessage", "EmailMultiAlternatives", "SafeMIMEMultipart", "SafeMIMEText", "forbid_multi_line_headers", "get_connection", "mail_admins", "mail_managers", "make_msgid", "send_mail", "send_mass_mail", ] django-stubs-5.2.9/django-stubs/core/mail/backends/000077500000000000000000000000001513401051600221475ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/core/mail/backends/__init__.pyi000066400000000000000000000000001513401051600244170ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/core/mail/backends/base.pyi000066400000000000000000000012401513401051600236010ustar00rootroot00000000000000from collections.abc import Sequence from types import TracebackType from typing import Any from django.core.mail.message import EmailMessage from typing_extensions import Self class BaseEmailBackend: fail_silently: bool def __init__(self, fail_silently: bool = False, **kwargs: Any) -> None: ... def open(self) -> bool | None: ... def close(self) -> None: ... def __enter__(self) -> Self: ... def __exit__( self, exc_type: type[BaseException] | None, exc_value: BaseException | None, exc_tb: TracebackType | None, ) -> None: ... def send_messages(self, email_messages: Sequence[EmailMessage]) -> int: ... django-stubs-5.2.9/django-stubs/core/mail/backends/console.pyi000066400000000000000000000004571513401051600243420ustar00rootroot00000000000000import threading from typing import TextIO from django.core.mail.backends.base import BaseEmailBackend from django.core.mail.message import EmailMessage class EmailBackend(BaseEmailBackend): stream: TextIO _lock: threading.RLock def write_message(self, message: EmailMessage) -> None: ... django-stubs-5.2.9/django-stubs/core/mail/backends/dummy.pyi000066400000000000000000000001471513401051600240270ustar00rootroot00000000000000from django.core.mail.backends.base import BaseEmailBackend class EmailBackend(BaseEmailBackend): ... django-stubs-5.2.9/django-stubs/core/mail/backends/filebased.pyi000066400000000000000000000002001513401051600246000ustar00rootroot00000000000000from django.core.mail.backends.console import EmailBackend as ConsoleEmailBackend class EmailBackend(ConsoleEmailBackend): ... django-stubs-5.2.9/django-stubs/core/mail/backends/locmem.pyi000066400000000000000000000001471513401051600241500ustar00rootroot00000000000000from django.core.mail.backends.base import BaseEmailBackend class EmailBackend(BaseEmailBackend): ... django-stubs-5.2.9/django-stubs/core/mail/backends/smtp.pyi000066400000000000000000000007061513401051600236600ustar00rootroot00000000000000import smtplib import threading from _typeshed import StrOrBytesPath from django.core.mail.backends.base import BaseEmailBackend class EmailBackend(BaseEmailBackend): host: str port: int username: str password: str use_tls: bool use_ssl: bool timeout: int | None ssl_keyfile: StrOrBytesPath | None ssl_certfile: StrOrBytesPath | None connection: smtplib.SMTP_SSL | smtplib.SMTP | None _lock: threading.RLock django-stubs-5.2.9/django-stubs/core/mail/message.pyi000066400000000000000000000106441513401051600225510ustar00rootroot00000000000000from collections.abc import Sequence from email.message import Message, MIMEPart from email.mime.base import MIMEBase from email.mime.message import MIMEMessage from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText from email.utils import make_msgid as make_msgid from typing import Any, NamedTuple, TypeAlias, overload from django.utils.functional import _StrOrPromise utf8_charset: Any utf8_charset_qp: Any DEFAULT_ATTACHMENT_MIME_TYPE: str RFC5322_EMAIL_LINE_LENGTH_LIMIT: int class BadHeaderError(ValueError): ... ADDRESS_HEADERS: set[str] def forbid_multi_line_headers(name: str, val: str, encoding: str) -> tuple[str, str]: ... def sanitize_address(addr: tuple[str, str] | str, encoding: str) -> str: ... class MIMEMixin: def as_string(self, unixfrom: bool = False, linesep: str = "\n") -> str: ... def as_bytes(self, unixfrom: bool = False, linesep: str = "\n") -> bytes: ... class SafeMIMEMessage(MIMEMixin, MIMEMessage): ... # type: ignore[misc] class SafeMIMEText(MIMEMixin, MIMEText): # type: ignore[misc] encoding: str def __init__(self, _text: str, _subtype: str = "plain", _charset: str | None = None) -> None: ... class SafeMIMEMultipart(MIMEMixin, MIMEMultipart): # type: ignore[misc] encoding: str def __init__( self, _subtype: str = "mixed", boundary: Any | None = None, _subparts: Any | None = None, encoding: str | None = None, **_params: Any, ) -> None: ... _AttachmentContent: TypeAlias = bytes | EmailMessage | Message | SafeMIMEText | str _AttachmentTuple: TypeAlias = ( tuple[str, _AttachmentContent] | tuple[str | None, _AttachmentContent, str] | tuple[str, _AttachmentContent, None] ) class EmailAlternative(NamedTuple): content: _AttachmentContent mimetype: str class EmailAttachment(NamedTuple): filename: str | None content: _AttachmentContent mimetype: str class EmailMessage: content_subtype: str mixed_subtype: str encoding: Any to: list[str] cc: list[Any] bcc: list[Any] reply_to: list[Any] from_email: str subject: _StrOrPromise body: _StrOrPromise attachments: list[Any] extra_headers: dict[Any, Any] connection: Any def __init__( self, subject: _StrOrPromise = "", body: _StrOrPromise | None = "", from_email: str | None = None, to: Sequence[str] | None = None, bcc: Sequence[str] | None = None, connection: Any | None = None, attachments: Sequence[MIMEBase | _AttachmentTuple] | None = None, headers: dict[str, str] | None = None, cc: Sequence[str] | None = None, reply_to: Sequence[str] | None = None, ) -> None: ... def get_connection(self, fail_silently: bool = False) -> Any: ... # TODO: when typeshed gets more types for email.Message, move it to MIMEMessage, now it has too many false-positives def message(self) -> Any: ... def recipients(self) -> list[str]: ... def send(self, fail_silently: bool = False) -> int: ... @overload def attach(self, filename: MIMEBase | None = None, content: None = None, mimetype: None = None) -> None: ... @overload def attach( self, filename: None = None, content: _AttachmentContent | None = None, mimetype: str | None = None ) -> None: ... @overload def attach( self, filename: str | None = None, content: _AttachmentContent | None = None, mimetype: str | None = None ) -> None: ... @overload def attach(self, filename: MIMEPart) -> None: ... def attach_file(self, path: str, mimetype: str | None = None) -> None: ... class EmailMultiAlternatives(EmailMessage): alternative_subtype: str alternatives: list[tuple[_AttachmentContent, str]] def __init__( self, subject: _StrOrPromise = "", body: _StrOrPromise | None = "", from_email: str | None = None, to: Sequence[str] | None = None, bcc: Sequence[str] | None = None, connection: Any | None = None, attachments: Sequence[MIMEBase | _AttachmentTuple] | None = None, headers: dict[str, str] | None = None, alternatives: list[tuple[_AttachmentContent, str]] | None = None, cc: Sequence[str] | None = None, reply_to: Sequence[str] | None = None, ) -> None: ... def attach_alternative(self, content: _AttachmentContent, mimetype: str) -> None: ... def body_contains(self, text: str) -> bool: ... django-stubs-5.2.9/django-stubs/core/mail/utils.pyi000066400000000000000000000001371513401051600222610ustar00rootroot00000000000000from typing import Any class CachedDnsName: def get_fqdn(self) -> str: ... DNS_NAME: Any django-stubs-5.2.9/django-stubs/core/management/000077500000000000000000000000001513401051600215675ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/core/management/__init__.pyi000066400000000000000000000016651513401051600240610ustar00rootroot00000000000000from typing import Any from .base import BaseCommand as BaseCommand from .base import CommandError as CommandError from .base import CommandParser as CommandParser from .base import handle_default_options as handle_default_options def find_commands(management_dir: str) -> list[str]: ... def load_command_class(app_name: str, name: str) -> BaseCommand: ... def get_commands() -> dict[str, str]: ... def call_command(command_name: BaseCommand | str, *args: Any, **options: Any) -> str: ... class ManagementUtility: argv: list[str] prog_name: str settings_exception: Exception | None def __init__(self, argv: list[str] | None = None) -> None: ... def main_help_text(self, commands_only: bool = False) -> str: ... def fetch_command(self, subcommand: str) -> BaseCommand: ... def autocomplete(self) -> None: ... def execute(self) -> None: ... def execute_from_command_line(argv: list[str] | None = None) -> None: ... django-stubs-5.2.9/django-stubs/core/management/base.pyi000066400000000000000000000075371513401051600232400ustar00rootroot00000000000000from argparse import ArgumentParser, HelpFormatter, Namespace from collections.abc import Callable, Iterable, Sequence from io import TextIOBase from typing import Any, Literal, TextIO from django.apps.config import AppConfig from django.core.management.color import Style from django.utils.datastructures import _ListOrTuple ALL_CHECKS: Literal["__all__"] class CommandError(Exception): returncode: int def __init__(self, *args: Any, returncode: int = 1, **kwargs: Any) -> None: ... class SystemCheckError(CommandError): ... class CommandParser(ArgumentParser): missing_args_message: str | None called_from_command_line: bool | None def __init__( self, *, missing_args_message: str | None = None, called_from_command_line: bool | None = None, **kwargs: Any ) -> None: ... def error(self, message: str) -> Any: ... def handle_default_options(options: Namespace) -> None: ... def no_translations(handle_func: Callable) -> Callable: ... class DjangoHelpFormatter(HelpFormatter): show_last: set[str] def add_usage(self, usage: str | None, actions: Iterable[Any], *args: Any, **kwargs: Any) -> Any: ... def add_arguments(self, actions: Any) -> Any: ... class OutputWrapper(TextIOBase): @property def style_func(self) -> Callable[[str], str]: ... @style_func.setter def style_func(self, style_func: Callable[[str], str] | None) -> None: ... ending: str def __init__(self, out: TextIO, ending: str = "\n") -> None: ... def __getattr__(self, name: str) -> Callable: ... def flush(self) -> None: ... def isatty(self) -> bool: ... def write( # type: ignore[override] self, msg: str = "", style_func: Callable[[str], str] | None = None, ending: str | None = None ) -> None: ... class BaseCommand: help: str output_transaction: bool requires_migrations_checks: bool requires_system_checks: _ListOrTuple[str] | Literal["__all__"] base_stealth_options: tuple[str, ...] stealth_options: tuple[str, ...] suppressed_base_arguments: set[str] stdout: OutputWrapper stderr: OutputWrapper style: Style def __init__( self, stdout: TextIO | None = None, stderr: TextIO | None = None, no_color: bool = False, force_color: bool = False, ) -> None: ... def get_version(self) -> str: ... def create_parser(self, prog_name: str, subcommand: str, **kwargs: Any) -> CommandParser: ... def add_arguments(self, parser: CommandParser) -> None: ... def add_base_argument(self, parser: CommandParser, *args: Any, **kwargs: Any) -> None: ... def print_help(self, prog_name: str, subcommand: str) -> None: ... def run_from_argv(self, argv: list[str]) -> None: ... def execute(self, *args: Any, **options: Any) -> str | None: ... def get_check_kwargs(self, options: Any) -> dict[str | None, _ListOrTuple[str] | Literal["__all__"] | None]: ... def check( self, app_configs: Sequence[AppConfig] | None = None, tags: Sequence[str] | None = None, display_num_errors: bool = False, include_deployment_checks: bool = False, fail_level: int = 40, databases: Sequence[str] | None = None, ) -> None: ... def check_migrations(self) -> None: ... def handle(self, *args: Any, **options: Any) -> str | None: ... class AppCommand(BaseCommand): missing_args_message: str def add_arguments(self, parser: CommandParser) -> None: ... def handle(self, *app_labels: str, **options: Any) -> str | None: ... def handle_app_config(self, app_config: Any, **options: Any) -> str | None: ... class LabelCommand(BaseCommand): label: str missing_args_message: Any def add_arguments(self, parser: CommandParser) -> None: ... def handle(self, *labels: str, **options: Any) -> str | None: ... def handle_label(self, label: str, **options: Any) -> str | None: ... django-stubs-5.2.9/django-stubs/core/management/color.pyi000066400000000000000000000022331513401051600234300ustar00rootroot00000000000000HAS_COLORAMA: bool def supports_color() -> bool: ... class Style: # set by make_style. Method names are keys in django.utils.termcolors.PALETTES def ERROR(self, text: str) -> str: ... def SUCCESS(self, text: str) -> str: ... def WARNING(self, text: str) -> str: ... def NOTICE(self, text: str) -> str: ... def SQL_FIELD(self, text: str) -> str: ... def SQL_COLTYPE(self, text: str) -> str: ... def SQL_KEYWORD(self, text: str) -> str: ... def SQL_TABLE(self, text: str) -> str: ... def HTTP_INFO(self, text: str) -> str: ... def HTTP_SUCCESS(self, text: str) -> str: ... def HTTP_REDIRECT(self, text: str) -> str: ... def HTTP_NOT_MODIFIED(self, text: str) -> str: ... def HTTP_BAD_REQUEST(self, text: str) -> str: ... def HTTP_NOT_FOUND(self, text: str) -> str: ... def HTTP_SERVER_ERROR(self, text: str) -> str: ... def MIGRATE_HEADING(self, text: str) -> str: ... def MIGRATE_LABEL(self, text: str) -> str: ... def ERROR_OUTPUT(self, text: str) -> str: ... def make_style(config_string: str = "") -> Style: ... def no_style() -> Style: ... def color_style(force_color: bool = False) -> Style: ... django-stubs-5.2.9/django-stubs/core/management/commands/000077500000000000000000000000001513401051600233705ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/core/management/commands/__init__.pyi000066400000000000000000000000001513401051600256400ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/core/management/commands/check.pyi000066400000000000000000000002631513401051600251710ustar00rootroot00000000000000from typing import Any from django.core.management.base import BaseCommand class Command(BaseCommand): def handle(self, *app_labels: list[str], **options: Any) -> None: ... django-stubs-5.2.9/django-stubs/core/management/commands/compilemessages.pyi000066400000000000000000000007731513401051600273020ustar00rootroot00000000000000from pathlib import Path from typing import Any from django.core.management.base import BaseCommand from django.utils._os import _PathCompatible def has_bom(fn: Path) -> bool: ... def is_dir_writable(path: _PathCompatible) -> bool: ... class Command(BaseCommand): program: str program_options: list[str] verbosity: int has_errors: bool def handle(self, **options: Any) -> None: ... def compile_messages(self, locations: list[tuple[_PathCompatible, _PathCompatible]]) -> None: ... django-stubs-5.2.9/django-stubs/core/management/commands/createcachetable.pyi000066400000000000000000000004341513401051600273530ustar00rootroot00000000000000from typing import Any from django.core.management.base import BaseCommand class Command(BaseCommand): verbosity: int def handle(self, *tablenames: list[str], **options: Any) -> None: ... def create_table(self, database: str, tablename: str, dry_run: bool) -> None: ... django-stubs-5.2.9/django-stubs/core/management/commands/dbshell.pyi000066400000000000000000000002331513401051600255260ustar00rootroot00000000000000from typing import Any from django.core.management.base import BaseCommand class Command(BaseCommand): def handle(self, **options: Any) -> None: ... django-stubs-5.2.9/django-stubs/core/management/commands/diffsettings.pyi000066400000000000000000000010701513401051600266020ustar00rootroot00000000000000from collections.abc import Callable from typing import Any from django.core.management.base import BaseCommand def module_to_dict(module: Any, omittable: Callable[[str], bool] = ...) -> dict[str, str]: ... class Command(BaseCommand): def handle(self, **options: Any) -> str: ... def output_hash( self, user_settings: dict[str, str], default_settings: dict[str, str], **options: Any ) -> list[str]: ... def output_unified( self, user_settings: dict[str, str], default_settings: dict[str, str], **options: Any ) -> list[str]: ... django-stubs-5.2.9/django-stubs/core/management/commands/dumpdata.pyi000066400000000000000000000002311513401051600257060ustar00rootroot00000000000000from django.core.management.base import BaseCommand has_bz2: bool has_lzma: bool class ProxyModelWarning(Warning): ... class Command(BaseCommand): ... django-stubs-5.2.9/django-stubs/core/management/commands/flush.pyi000066400000000000000000000003341513401051600252340ustar00rootroot00000000000000from typing import Any from django.core.management.base import BaseCommand from django.core.management.color import Style class Command(BaseCommand): style: Style def handle(self, **options: Any) -> None: ... django-stubs-5.2.9/django-stubs/core/management/commands/inspectdb.pyi000066400000000000000000000016601513401051600260710ustar00rootroot00000000000000from collections.abc import Iterable from typing import Any from django.core.management.base import BaseCommand from django.db.backends.base.base import BaseDatabaseWrapper class Command(BaseCommand): db_module: str def handle(self, **options: Any) -> None: ... def handle_inspection(self, options: dict[str, Any]) -> Iterable[str]: ... def normalize_col_name( self, col_name: str, used_column_names: list[str], is_relation: bool ) -> tuple[str, dict[str, str], list[str]]: ... def normalize_table_name(self, table_name: str) -> str: ... def get_field_type( self, connection: BaseDatabaseWrapper, table_name: str, row: Any ) -> tuple[str, dict[str, Any], list[str]]: ... def get_meta( self, table_name: str, constraints: Any, column_to_field_name: Any, is_view: bool, is_partition: bool, comment: str | None, ) -> list[str]: ... django-stubs-5.2.9/django-stubs/core/management/commands/loaddata.pyi000066400000000000000000000043761513401051600256760ustar00rootroot00000000000000import zipfile from collections.abc import Callable, Sequence from io import BufferedReader from typing import Literal, TypeAlias from django.apps.config import AppConfig from django.core.management.base import BaseCommand from django.core.serializers.base import DeserializedObject from django.db.backends.base.base import BaseDatabaseWrapper from django.db.models.base import Model from django.utils.functional import cached_property has_bz2: bool has_lzma: bool READ_STDIN: str _ReadBinaryMode: TypeAlias = Literal["r", "rb"] class Command(BaseCommand): missing_args_message: str ignore: bool using: str app_label: str verbosity: int excluded_models: set[type[Model]] excluded_apps: set[AppConfig] format: str fixture_count: int loaded_object_count: int fixture_object_count: int models: set[type[Model]] serialization_formats: list[str] objs_with_deferred_fields: list[DeserializedObject] @cached_property def compression_formats(self) -> dict[str | None, tuple[Callable[[str, _ReadBinaryMode], BufferedReader]]]: ... def reset_sequences(self, connection: BaseDatabaseWrapper, models: set[type[Model]]) -> None: ... def loaddata(self, fixture_labels: Sequence[str]) -> None: ... def save_obj(self, obj: DeserializedObject) -> bool: ... def load_label(self, fixture_label: str) -> None: ... def get_fixture_name_and_dirs(self, fixture_name: str) -> tuple[str, list[str]]: ... def get_targets(self, fixture_name: str, ser_fmt: str | None, cmp_fmt: str | None) -> set[str]: ... def find_fixture_files_in_dir( self, fixture_dir: str, fixture_name: str, targets: set[str] ) -> list[tuple[str, str, str]]: ... def find_fixtures(self, fixture_label: str) -> list[tuple[str, str | None, str | None]]: ... @cached_property def fixture_dirs(self) -> list[str]: ... def parse_name(self, fixture_name: str) -> tuple[str, str | None, str | None]: ... class SingleZipReader(zipfile.ZipFile): # Incompatible override # zipfile.ZipFile.read( # self, # name: typing.Text | zipfile.ZipInfo, # pwd: bytes | None = ..., # ) -> bytes: ... def read(self) -> bytes: ... # type: ignore[override] def humanize(dirname: str) -> str: ... django-stubs-5.2.9/django-stubs/core/management/commands/makemessages.pyi000066400000000000000000000044201513401051600265600ustar00rootroot00000000000000from re import Match, Pattern from typing import Any from django.core.management.base import BaseCommand from django.utils.functional import cached_property plural_forms_re: Pattern[str] STATUS_OK: int NO_LOCALE_DIR: Any def check_programs(*programs: str) -> None: ... def is_valid_locale(locale: str) -> Match[str] | None: ... class TranslatableFile: dirpath: str file_name: str locale_dir: str def __init__(self, dirpath: str, file_name: str, locale_dir: str | None) -> None: ... class BuildFile: """ Represent the state of a translatable file during the build process. """ command: BaseCommand domain: str translatable: TranslatableFile def __init__(self, command: BaseCommand, domain: str, translatable: TranslatableFile) -> None: ... @cached_property def is_templatized(self) -> bool: ... @cached_property def path(self) -> str: ... @cached_property def work_path(self) -> str: ... def preprocess(self) -> None: ... def postprocess_messages(self, msgs: str) -> str: ... def cleanup(self) -> None: ... def normalize_eols(raw_contents: str) -> str: ... def write_pot_file(potfile: str, msgs: str) -> None: ... class Command(BaseCommand): translatable_file_class: type[TranslatableFile] build_file_class: type[BuildFile] msgmerge_options: list[str] msguniq_options: list[str] msgattrib_options: list[str] xgettext_options: list[str] domain: str verbosity: int symlinks: bool ignore_patterns: list[str] no_obsolete: bool keep_pot: bool extensions: set[str] invoked_for_django: bool locale_paths: list[str] default_locale_path: str | None @cached_property def gettext_version(self) -> tuple[int, int] | tuple[int, int, int]: ... @cached_property def settings_available(self) -> bool: ... def build_potfiles(self) -> list[str]: ... def remove_potfiles(self) -> None: ... def find_files(self, root: str) -> list[TranslatableFile]: ... def process_files(self, file_list: list[TranslatableFile]) -> None: ... def process_locale_dir(self, locale_dir: str, files: list[TranslatableFile]) -> None: ... def write_po_file(self, potfile: str, locale: str) -> None: ... def copy_plural_forms(self, msgs: str, locale: str) -> str: ... django-stubs-5.2.9/django-stubs/core/management/commands/makemigrations.pyi000066400000000000000000000017261513401051600271330ustar00rootroot00000000000000from typing import Any, ClassVar from django.core.management.base import BaseCommand, OutputWrapper from django.db.migrations.autodetector import MigrationAutodetector from django.db.migrations.loader import MigrationLoader class Command(BaseCommand): autodetector: ClassVar[type[MigrationAutodetector]] verbosity: int interactive: bool dry_run: bool merge: bool empty: bool migration_name: str include_header: bool scriptable: bool update: bool @property def log_output(self) -> OutputWrapper: ... def log(self, msg: str) -> None: ... def write_to_last_migration_files(self, changes: dict[str, Any]) -> None: ... def write_migration_files( self, changes: dict[str, Any], update_previous_migration_paths: dict[str, str] | None = None ) -> None: ... @staticmethod def get_relative_path(path: str) -> str: ... def handle_merge(self, loader: MigrationLoader, conflicts: dict[str, Any]) -> None: ... django-stubs-5.2.9/django-stubs/core/management/commands/migrate.pyi000066400000000000000000000014141513401051600255430ustar00rootroot00000000000000from collections.abc import Container from typing import Any, ClassVar from django.core.management.base import BaseCommand from django.db.backends.base.base import BaseDatabaseWrapper from django.db.migrations.autodetector import MigrationAutodetector from django.db.migrations.operations.base import Operation class Command(BaseCommand): autodetector: ClassVar[type[MigrationAutodetector]] verbosity: int interactive: bool start: float def migration_progress_callback(self, action: str, migration: Any | None = None, fake: bool = False) -> None: ... def sync_apps(self, connection: BaseDatabaseWrapper, app_labels: Container[str]) -> None: ... @staticmethod def describe_operation(operation: Operation, backwards: bool) -> tuple[str, bool]: ... django-stubs-5.2.9/django-stubs/core/management/commands/optimizemigration.pyi000066400000000000000000000001251513401051600276630ustar00rootroot00000000000000from django.core.management.base import BaseCommand class Command(BaseCommand): ... django-stubs-5.2.9/django-stubs/core/management/commands/runserver.pyi000066400000000000000000000011511513401051600261440ustar00rootroot00000000000000from re import Pattern from typing import Any from django.core.handlers.wsgi import WSGIHandler from django.core.management.base import BaseCommand from django.core.servers.basehttp import WSGIServer naiveip_re: Pattern[str] class Command(BaseCommand): default_addr: str default_addr_ipv6: str default_port: str protocol: str server_cls: type[WSGIServer] def run(self, **options: Any) -> None: ... def get_handler(self, *args: Any, **options: Any) -> WSGIHandler: ... def inner_run(self, *args: Any, **options: Any) -> None: ... def on_bind(self, server_port: int) -> None: ... django-stubs-5.2.9/django-stubs/core/management/commands/sendtestemail.pyi000066400000000000000000000001571513401051600267570ustar00rootroot00000000000000from django.core.management.base import BaseCommand class Command(BaseCommand): missing_args_message: str django-stubs-5.2.9/django-stubs/core/management/commands/shell.pyi000066400000000000000000000006721513401051600252270ustar00rootroot00000000000000from typing import Any from django.core.management import BaseCommand class Command(BaseCommand): shells: list[str] def handle(self, **options: Any) -> None: ... def ipython(self, options: Any) -> None: ... def bpython(self, options: Any) -> None: ... def python(self, options: Any) -> None: ... def get_auto_imports(self) -> list[str] | None: ... def get_namespace(self, **options: Any) -> dict[str, Any]: ... django-stubs-5.2.9/django-stubs/core/management/commands/showmigrations.pyi000066400000000000000000000005651513401051600271760ustar00rootroot00000000000000from django.core.management.base import BaseCommand from django.db.backends.base.base import BaseDatabaseWrapper class Command(BaseCommand): verbosity: int def show_list(self, connection: BaseDatabaseWrapper, app_names: list[str] | None = None) -> None: ... def show_plan(self, connection: BaseDatabaseWrapper, app_names: list[str] | None = None) -> None: ... django-stubs-5.2.9/django-stubs/core/management/commands/sqlflush.pyi000066400000000000000000000002701513401051600257530ustar00rootroot00000000000000from typing import Any from django.core.management.base import BaseCommand class Command(BaseCommand): output_transaction: bool def handle(self, **options: Any) -> str: ... django-stubs-5.2.9/django-stubs/core/management/commands/sqlmigrate.pyi000066400000000000000000000003131513401051600262600ustar00rootroot00000000000000from typing import Any from django.core.management.base import BaseCommand class Command(BaseCommand): output_transaction: bool def execute(self, *args: Any, **options: Any) -> str | None: ... django-stubs-5.2.9/django-stubs/core/management/commands/sqlsequencereset.pyi000066400000000000000000000001231513401051600275020ustar00rootroot00000000000000from django.core.management.base import AppCommand class Command(AppCommand): ... django-stubs-5.2.9/django-stubs/core/management/commands/squashmigrations.pyi000066400000000000000000000006251513401051600275170ustar00rootroot00000000000000from typing import Any from django.core.management.base import BaseCommand from django.db.migrations.loader import MigrationLoader from django.db.migrations.migration import Migration class Command(BaseCommand): verbosity: int interactive: bool def handle(self, **options: Any) -> None: ... def find_migration(self, loader: MigrationLoader, app_label: str, name: str) -> Migration: ... django-stubs-5.2.9/django-stubs/core/management/commands/startapp.pyi000066400000000000000000000003411513401051600257470ustar00rootroot00000000000000from typing import Any from django.core.management.templates import TemplateCommand class Command(TemplateCommand): missing_args_message: str def handle(self, **options: Any) -> None: ... # type: ignore[override] django-stubs-5.2.9/django-stubs/core/management/commands/startproject.pyi000066400000000000000000000003411513401051600266350ustar00rootroot00000000000000from typing import Any from django.core.management.templates import TemplateCommand class Command(TemplateCommand): missing_args_message: str def handle(self, **options: Any) -> None: ... # type: ignore[override] django-stubs-5.2.9/django-stubs/core/management/commands/test.pyi000066400000000000000000000003501513401051600250700ustar00rootroot00000000000000from typing import Any from django.core.management.base import BaseCommand class Command(BaseCommand): test_runner: Any def run_from_argv(self, argv: Any) -> None: ... def add_arguments(self, parser: Any) -> None: ... django-stubs-5.2.9/django-stubs/core/management/commands/testserver.pyi000066400000000000000000000001251513401051600263170ustar00rootroot00000000000000from django.core.management.base import BaseCommand class Command(BaseCommand): ... django-stubs-5.2.9/django-stubs/core/management/sql.pyi000066400000000000000000000007531513401051600231160ustar00rootroot00000000000000from typing import Any from django.core.management.color import Style from django.db.backends.base.base import BaseDatabaseWrapper def sql_flush( style: Style, connection: BaseDatabaseWrapper, reset_sequences: bool = True, allow_cascade: bool = False, ) -> list[str]: ... def emit_pre_migrate_signal(verbosity: int, interactive: bool, db: str, **kwargs: Any) -> None: ... def emit_post_migrate_signal(verbosity: int, interactive: bool, db: str, **kwargs: Any) -> None: ... django-stubs-5.2.9/django-stubs/core/management/templates.pyi000066400000000000000000000020111513401051600243020ustar00rootroot00000000000000from argparse import ArgumentParser from collections.abc import Sequence from typing import Any from django.core.management.base import BaseCommand class TemplateCommand(BaseCommand): url_schemes: Sequence[str] rewrite_template_suffixes: Sequence[tuple[str, str]] app_or_project: str a_or_an: str paths_to_remove: Sequence[Any] verbosity: Any def add_arguments(self, parser: ArgumentParser) -> None: ... def handle(self, app_or_project: str, name: str, target: str | None = ..., **options: Any) -> None: ... def handle_template(self, template: str | None, subdir: str | None) -> str: ... def validate_name(self, name: str, name_or_dir: str = ...) -> None: ... def download(self, url: str) -> str: ... def splitext(self, the_path: str) -> tuple[str, str]: ... def extract(self, filename: str) -> str: ... def is_url(self, template: str) -> bool: ... def apply_umask(self, old_path: str, new_path: str) -> None: ... def make_writeable(self, filename: str) -> None: ... django-stubs-5.2.9/django-stubs/core/management/utils.pyi000066400000000000000000000020751513401051600234560ustar00rootroot00000000000000from collections.abc import Iterable, Sequence from typing import Any from _typeshed import StrOrBytesPath, StrPath, SupportsWrite from django.apps.config import AppConfig from django.db.models.base import Model def popen_wrapper(args: list[str], stdout_encoding: str = "utf-8") -> tuple[str, str, int]: ... def handle_extensions(extensions: Iterable[str]) -> set[str]: ... def find_command( cmd: str, path: str | Iterable[str] | None = None, pathext: str | Iterable[str] | None = None, ) -> str | None: ... def get_random_secret_key() -> str: ... def parse_apps_and_model_labels(labels: Iterable[str]) -> tuple[set[type[Model]], set[AppConfig]]: ... def get_command_line_option(argv: Sequence[Any], option: Any) -> Any | None: ... def normalize_path_patterns(patterns: Iterable[str]) -> list[str]: ... def is_ignored_path(path: StrPath, ignore_patterns: Iterable[str]) -> bool: ... def find_formatters() -> dict[str, str | None]: ... def run_formatters( written_files: Iterable[StrOrBytesPath], black_path: str = ..., stderr: SupportsWrite[str] = ... ) -> None: ... django-stubs-5.2.9/django-stubs/core/paginator.pyi000066400000000000000000000047261513401051600221730ustar00rootroot00000000000000from collections.abc import Iterable, Iterator, Sequence, Sized from typing import ClassVar, Generic, Protocol, TypeVar, overload, type_check_only from django.db.models.fields import _ErrorMessagesDict from django.utils.functional import _StrPromise, cached_property class UnorderedObjectListWarning(RuntimeWarning): ... class InvalidPage(Exception): ... class PageNotAnInteger(InvalidPage): ... class EmptyPage(InvalidPage): ... _T = TypeVar("_T") @type_check_only class _SupportsPagination(Protocol[_T], Sized, Iterable): @overload def __getitem__(self, index: int, /) -> _T: ... @overload def __getitem__(self, index: slice, /) -> _SupportsPagination[_T]: ... class Paginator(Generic[_T]): ELLIPSIS: ClassVar[_StrPromise] default_error_messages: ClassVar[_ErrorMessagesDict] error_messages: _ErrorMessagesDict object_list: _SupportsPagination[_T] per_page: int orphans: int allow_empty_first_page: bool def __init__( self, object_list: _SupportsPagination[_T], per_page: int | str, orphans: int = 0, allow_empty_first_page: bool = True, error_messages: _ErrorMessagesDict | None = None, ) -> None: ... def __iter__(self) -> Iterator[Page[_T]]: ... def validate_number(self, number: int | float | str) -> int: ... def get_page(self, number: int | float | str | None) -> Page[_T]: ... def page(self, number: int | str) -> Page[_T]: ... @cached_property def count(self) -> int: ... @cached_property def num_pages(self) -> int: ... @property def page_range(self) -> range: ... def get_elided_page_range( self, number: int | float | str = 1, *, on_each_side: int = 3, on_ends: int = 2 ) -> Iterator[str | int]: ... class Page(Sequence[_T]): object_list: _SupportsPagination[_T] number: int paginator: Paginator[_T] def __init__( self, object_list: _SupportsPagination[_T], number: int, paginator: Paginator[_T], ) -> None: ... @overload def __getitem__(self, index: int) -> _T: ... @overload def __getitem__(self, index: slice) -> Sequence[_T]: ... # Avoid override error def __len__(self) -> int: ... def has_next(self) -> bool: ... def has_previous(self) -> bool: ... def has_other_pages(self) -> bool: ... def next_page_number(self) -> int: ... def previous_page_number(self) -> int: ... def start_index(self) -> int: ... def end_index(self) -> int: ... django-stubs-5.2.9/django-stubs/core/serializers/000077500000000000000000000000001513401051600220075ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/core/serializers/__init__.pyi000066400000000000000000000022541513401051600242740ustar00rootroot00000000000000from collections.abc import Callable, Iterable, Iterator from typing import Any from django.db.models.base import Model from .base import DeserializedObject, Deserializer, Serializer from .base import SerializerDoesNotExist as SerializerDoesNotExist BUILTIN_SERIALIZERS: dict[str, str] class BadSerializer: internal_use_only: bool exception: BaseException def __init__(self, exception: BaseException) -> None: ... def __call__(self, *args: Any, **kwargs: Any) -> Any: ... def register_serializer(format: str, serializer_module: str, serializers: dict[str, Any] | None = None) -> None: ... def unregister_serializer(format: str) -> None: ... def get_serializer(format: str) -> type[Serializer] | BadSerializer: ... def get_serializer_formats() -> list[str]: ... def get_public_serializer_formats() -> list[str]: ... def get_deserializer(format: str) -> Callable | type[Deserializer]: ... def serialize(format: str, queryset: Iterable[Model], **options: Any) -> Any: ... def deserialize(format: str, stream_or_string: Any, **options: Any) -> Iterator[DeserializedObject]: ... def sort_dependencies(app_list: Iterable[Any], allow_cycles: bool = False) -> list[type[Model]]: ... django-stubs-5.2.9/django-stubs/core/serializers/base.pyi000066400000000000000000000062051513401051600234470ustar00rootroot00000000000000from collections.abc import Collection, Iterable, Sequence from typing import IO, Any from django.db.models.base import Model from django.db.models.fields import Field from django.db.models.fields.related import ForeignKey, ManyToManyField DEFER_FIELD: object class SerializerDoesNotExist(KeyError): ... class SerializationError(Exception): ... class DeserializationError(Exception): @classmethod def WithData( cls, original_exc: Exception, model: str, fk: int | str, field_value: Sequence[str] | str | None ) -> DeserializationError: ... class M2MDeserializationError(Exception): original_exc: Exception pk: Any def __init__(self, original_exc: Exception, pk: Any) -> None: ... class ProgressBar: progress_width: int output: IO[str] | None total_count: int prev_done: int def __init__(self, output: IO[str] | None, total_count: int) -> None: ... def update(self, count: int) -> None: ... class Serializer: internal_use_only: bool progress_class: type[ProgressBar] stream_class: type[IO[str]] options: dict[str, Any] stream: IO[str] selected_fields: Collection[str] | None use_natural_foreign_keys: bool use_natural_primary_keys: bool first: bool def serialize( self, queryset: Iterable[Model], *, stream: IO[str] | None = None, fields: Collection[str] | None = None, use_natural_foreign_keys: bool = False, use_natural_primary_keys: bool = False, progress_output: IO[str] | None = None, object_count: int = 0, **options: Any, ) -> Any: ... def start_serialization(self) -> None: ... def end_serialization(self) -> None: ... def start_object(self, obj: Any) -> None: ... def end_object(self, obj: Any) -> None: ... def handle_field(self, obj: Any, field: Any) -> None: ... def handle_fk_field(self, obj: Any, field: Any) -> None: ... def handle_m2m_field(self, obj: Any, field: Any) -> None: ... def getvalue(self) -> bytes | str | None: ... class Deserializer: options: dict[str, Any] stream: IO[str] | IO[bytes] def __init__(self, stream_or_string: bytes | str | IO[bytes] | IO[str], **options: Any) -> None: ... def __iter__(self) -> Deserializer: ... def __next__(self) -> Any: ... class DeserializedObject: object: Model m2m_data: dict[str, Sequence[Any]] | None deferred_fields: dict[Field, Any] def __init__( self, obj: Model, m2m_data: dict[str, Sequence[Any]] | None = None, deferred_fields: dict[Field, Any] | None = None, ) -> None: ... def save(self, save_m2m: bool = True, using: str | None = None, **kwargs: Any) -> None: ... def save_deferred_fields(self, using: str | None = None) -> None: ... def build_instance(Model: type[Model], data: dict[str, Any], db: str) -> Model: ... def deserialize_m2m_values( field: ManyToManyField, field_value: Iterable[Any], using: str | None, handle_forward_references: bool ) -> Sequence[Any] | object: ... def deserialize_fk_value( field: ForeignKey, field_value: Any, using: str | None, handle_forward_references: bool ) -> Any | object: ... django-stubs-5.2.9/django-stubs/core/serializers/json.pyi000066400000000000000000000012321513401051600235010ustar00rootroot00000000000000import json from typing import Any, TypeAlias import _typeshed from django.core.serializers.python import Deserializer as PythonDeserializer from django.core.serializers.python import Serializer as PythonSerializer _DeserializerInput: TypeAlias = _typeshed.SupportsRead[bytes | str] | bytes | str class Serializer(PythonSerializer): json_kwargs: dict[str, Any] class Deserializer(PythonDeserializer): def __init__(self, stream_or_string: _DeserializerInput, **options: Any) -> None: ... class DjangoJSONEncoder(json.JSONEncoder): allow_nan: bool check_circular: bool ensure_ascii: bool indent: int skipkeys: bool sort_keys: bool django-stubs-5.2.9/django-stubs/core/serializers/jsonl.pyi000066400000000000000000000006641513401051600236650ustar00rootroot00000000000000from typing import Any from django.core.serializers.json import _DeserializerInput from django.core.serializers.python import Deserializer as PythonDeserializer from django.core.serializers.python import Serializer as PythonSerializer class Serializer(PythonSerializer): json_kwargs: dict[str, Any] class Deserializer(PythonDeserializer): def __init__(self, stream_or_string: _DeserializerInput, **options: Any) -> None: ... django-stubs-5.2.9/django-stubs/core/serializers/python.pyi000066400000000000000000000007721513401051600240610ustar00rootroot00000000000000from collections.abc import Iterable from typing import Any from django.core.serializers import base from django.db.models.base import Model class Serializer(base.Serializer): objects: list[Any] def get_dump_object(self, obj: Model) -> dict[str, Any]: ... class Deserializer(base.Deserializer): def __init__( self, object_list: Iterable[dict[str, Any]], *, using: str = ..., ignorenonexistent: bool = False, **options: Any, ) -> None: ... django-stubs-5.2.9/django-stubs/core/serializers/pyyaml.pyi000066400000000000000000000014721513401051600240510ustar00rootroot00000000000000from typing import IO, Any from django.core.serializers.base import Deserializer as PythonDeserializer from django.core.serializers.python import Serializer as PythonSerializer from django.db.models.fields import Field from yaml import CSafeDumper as SafeDumper from yaml import MappingNode, ScalarNode class DjangoSafeDumper(SafeDumper): def represent_decimal(self, data: Any) -> ScalarNode: ... def represent_ordered_dict(self, data: Any) -> MappingNode: ... class Serializer(PythonSerializer): internal_use_only: bool def handle_field(self, obj: Any, field: Field) -> None: ... def end_serialization(self) -> None: ... def getvalue(self) -> Any: ... class Deserializer(PythonDeserializer): def __init__(self, stream_or_string: bytes | str | IO[bytes] | IO[str], **options: Any) -> None: ... django-stubs-5.2.9/django-stubs/core/serializers/xml_serializer.pyi000066400000000000000000000046401513401051600255670ustar00rootroot00000000000000from contextlib import AbstractContextManager from typing import IO, Any from xml.sax.expatreader import ExpatParser from django.core.serializers import base def fast_cache_clearing() -> AbstractContextManager[None]: ... class Serializer(base.Serializer): def indent(self, level: int) -> None: ... xml: Any def start_serialization(self) -> None: ... def end_serialization(self) -> None: ... def start_object(self, obj: Any) -> None: ... def end_object(self, obj: Any) -> None: ... def handle_field(self, obj: Any, field: Any) -> None: ... def handle_fk_field(self, obj: Any, field: Any) -> None: ... def handle_m2m_field(self, obj: Any, field: Any) -> None: ... class Deserializer(base.Deserializer): handle_forward_references: bool event_stream: Any db: str ignore: bool def __init__( self, stream_or_string: bytes | str | IO[bytes] | IO[str], *, using: str = ..., ignorenonexistent: bool = ..., **options: Any, ) -> None: ... def __next__(self) -> base.DeserializedObject: ... def getInnerText(node: Any) -> str: ... def getInnerTextList(node: Any) -> list[str]: ... class DefusedExpatParser(ExpatParser): def __init__(self, *args: Any, **kwargs: Any) -> None: ... def start_doctype_decl(self, name: Any, sysid: Any, pubid: Any, has_internal_subset: Any) -> None: ... def entity_decl( self, name: Any, is_parameter_entity: Any, value: Any, base: Any, sysid: Any, pubid: Any, notation_name: Any ) -> None: ... def unparsed_entity_decl(self, name: Any, base: Any, sysid: Any, pubid: Any, notation_name: Any) -> None: ... def external_entity_ref_handler(self, context: Any, base: Any, sysid: Any, pubid: Any) -> None: ... def reset(self) -> None: ... class DefusedXmlException(ValueError): ... class DTDForbidden(DefusedXmlException): name: Any sysid: Any pubid: Any def __init__(self, name: Any, sysid: Any, pubid: Any) -> None: ... class EntitiesForbidden(DefusedXmlException): name: Any value: Any base: Any sysid: Any pubid: Any notation_name: Any def __init__(self, name: Any, value: Any, base: Any, sysid: Any, pubid: Any, notation_name: Any) -> None: ... class ExternalReferenceForbidden(DefusedXmlException): context: Any base: Any sysid: Any pubid: Any def __init__(self, context: Any, base: Any, sysid: Any, pubid: Any) -> None: ... django-stubs-5.2.9/django-stubs/core/servers/000077500000000000000000000000001513401051600211445ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/core/servers/__init__.pyi000066400000000000000000000000001513401051600234140ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/core/servers/basehttp.pyi000066400000000000000000000027761513401051600235150ustar00rootroot00000000000000import socketserver from collections.abc import Callable from io import BytesIO from typing import Any from wsgiref import simple_server from django.core.handlers.wsgi import WSGIHandler, WSGIRequest def get_internal_wsgi_application() -> WSGIHandler: ... def is_broken_pipe_error() -> bool: ... class WSGIServer(simple_server.WSGIServer): request_queue_size: int address_family: Any allow_reuse_address: Any def __init__(self, *args: Any, ipv6: bool = ..., allow_reuse_address: bool = ..., **kwargs: Any) -> None: ... def handle_error(self, request: Any, client_address: Any) -> None: ... class ThreadedWSGIServer(socketserver.ThreadingMixIn, WSGIServer): ... class ServerHandler(simple_server.ServerHandler): def handle_error(self) -> None: ... class WSGIRequestHandler(simple_server.WSGIRequestHandler): close_connection: bool connection: WSGIRequest request: WSGIRequest rfile: BytesIO wfile: BytesIO protocol_version: str def address_string(self) -> str: ... def log_message(self, format: str, *args: Any) -> None: ... def get_environ(self) -> dict[str, str]: ... raw_requestline: bytes requestline: str request_version: str def handle(self) -> None: ... def run( addr: str | bytes | bytearray, port: int, wsgi_handler: WSGIHandler, ipv6: bool = ..., threading: bool = ..., on_bind: Callable[[str], None] | None = ..., server_cls: type[WSGIServer] = ..., ) -> None: ... __all__ = ("WSGIRequestHandler", "WSGIServer") django-stubs-5.2.9/django-stubs/core/signals.pyi000066400000000000000000000002131513401051600216320ustar00rootroot00000000000000from django.dispatch import Signal request_started: Signal request_finished: Signal got_request_exception: Signal setting_changed: Signal django-stubs-5.2.9/django-stubs/core/signing.pyi000066400000000000000000000043651513401051600216440ustar00rootroot00000000000000from datetime import timedelta from typing import Any, Protocol, type_check_only BASE62_ALPHABET: str class BadSignature(Exception): ... class SignatureExpired(BadSignature): ... def b62_encode(s: int) -> str: ... def b62_decode(s: str) -> int: ... def b64_encode(s: bytes) -> bytes: ... def b64_decode(s: bytes) -> bytes: ... def base64_hmac(salt: bytes | str, value: bytes | str, key: bytes | str, algorithm: str = "sha1") -> str: ... def get_cookie_signer(salt: str = "django.core.signing.get_cookie_signer") -> TimestampSigner: ... @type_check_only class Serializer(Protocol): def dumps(self, obj: Any) -> bytes: ... def loads(self, data: bytes) -> Any: ... class JSONSerializer: def dumps(self, obj: Any) -> bytes: ... def loads(self, data: bytes) -> Any: ... def dumps( obj: Any, key: bytes | str | None = None, salt: bytes | str = "django.core.signing", serializer: type[Serializer] = ..., compress: bool = False, ) -> str: ... def loads( s: str, key: bytes | str | None = None, salt: bytes | str = "django.core.signing", serializer: type[Serializer] = ..., max_age: int | timedelta | None = None, fallback_keys: list[str | bytes] | None = None, ) -> Any: ... class Signer: key: bytes | str fallback_keys: list[bytes | str] sep: str salt: bytes | str algorithm: str def __init__( self, *, key: bytes | str | None = None, sep: str = ":", salt: bytes | str | None = None, algorithm: str | None = None, fallback_keys: list[bytes | str] | None = None, ) -> None: ... def signature(self, value: bytes | str, key: bytes | str | None = None) -> str: ... def sign(self, value: str) -> str: ... def unsign(self, signed_value: str) -> str: ... def sign_object( self, obj: Any, serializer: type[Serializer] = ..., compress: bool = False, ) -> str: ... def unsign_object( self, signed_obj: str, serializer: type[Serializer] = ..., **kwargs: Any, ) -> Any: ... class TimestampSigner(Signer): def timestamp(self) -> str: ... def sign(self, value: str) -> str: ... def unsign(self, value: str, max_age: int | timedelta | None = None) -> str: ... django-stubs-5.2.9/django-stubs/core/validators.pyi000066400000000000000000000117601513401051600223530ustar00rootroot00000000000000from collections.abc import Callable, Collection, Sequence, Sized from decimal import Decimal from re import Pattern, RegexFlag from typing import Any, TypeAlias from django.core.files.base import File from django.utils.deconstruct import _Deconstructible from django.utils.functional import _StrOrPromise EMPTY_VALUES: Any _Regex: TypeAlias = str | Pattern[str] _ValidatorCallable: TypeAlias = Callable[[Any], None] # noqa: PYI047 class RegexValidator(_Deconstructible): regex: _Regex # Pattern[str] on instance, but may be str on class definition message: _StrOrPromise code: str inverse_match: bool flags: int def __init__( self, regex: _Regex | None = None, message: _StrOrPromise | None = None, code: str | None = None, inverse_match: bool | None = None, flags: RegexFlag | None = None, ) -> None: ... def __call__(self, value: Any) -> None: ... class DomainNameValidator(RegexValidator): ul: str hostname_re: str domain_re: str tld_no_fqdn_re: str tld_re: str ascii_only_hostname_re: str ascii_only_domain_re: str ascii_only_tld_re: str max_length: int def __init__(self, *, accept_idna: bool = True, **kwargs: Any) -> None: ... def __call__(self, value: Any) -> None: ... validate_domain_name: DomainNameValidator class URLValidator(RegexValidator): ul: str ipv4_re: str ipv6_re: str hostname_re: str domain_re: str tld_re: str host_re: str schemes: Sequence[str] unsafe_chars: frozenset[str] max_length: int def __init__(self, schemes: Sequence[str] | None = None, **kwargs: Any) -> None: ... def __call__(self, value: Any) -> None: ... integer_validator: RegexValidator def validate_integer(value: float | str | None) -> None: ... class EmailValidator(_Deconstructible): message: _StrOrPromise code: str domain_re: str hostname_re: str tld_no_fqdn_re: str user_regex: Pattern[str] domain_regex: Pattern[str] literal_regex: Pattern[str] domain_allowlist: Sequence[str] def __init__( self, message: _StrOrPromise | None = None, code: str | None = None, allowlist: Sequence[str] | None = None, ) -> None: ... def __call__(self, value: str | None) -> None: ... def validate_domain_part(self, domain_part: str) -> bool: ... def __eq__(self, other: object) -> bool: ... validate_email: EmailValidator slug_re: Pattern[str] validate_slug: RegexValidator slug_unicode_re: Pattern[str] validate_unicode_slug: RegexValidator def validate_ipv4_address(value: str) -> None: ... def validate_ipv6_address(value: str) -> None: ... def validate_ipv46_address(value: str) -> None: ... _IPValidator: TypeAlias = tuple[list[Callable[[Any], None]], str] ip_address_validator_map: dict[str, _IPValidator] def ip_address_validators(protocol: str, unpack_ipv4: bool) -> _IPValidator: ... def int_list_validator( sep: str = ",", message: _StrOrPromise | None = None, code: str = "invalid", allow_negative: bool = False ) -> RegexValidator: ... validate_comma_separated_integer_list: RegexValidator class BaseValidator(_Deconstructible): message: _StrOrPromise code: str limit_value: Any def __init__(self, limit_value: Any | Callable[[], Any], message: _StrOrPromise | None = None) -> None: ... def __call__(self, value: Any) -> None: ... def compare(self, a: Any, b: Any) -> bool: ... def clean(self, x: Any) -> Any: ... def __eq__(self, other: object) -> bool: ... class MaxValueValidator(BaseValidator): ... class MinValueValidator(BaseValidator): ... class StepValueValidator(BaseValidator): offset: int | None def __init__( self, limit_value: Any | Callable[[], Any], message: _StrOrPromise | None = None, offset: int | None = None ) -> None: ... class MinLengthValidator(BaseValidator): def clean(self, x: Sized) -> int: ... class MaxLengthValidator(BaseValidator): def clean(self, x: Sized) -> int: ... class DecimalValidator(_Deconstructible): messages: dict[str, str] max_digits: int | None decimal_places: int | None def __init__(self, max_digits: int | None, decimal_places: int | None) -> None: ... def __call__(self, value: Decimal) -> None: ... def __eq__(self, other: object) -> bool: ... class FileExtensionValidator(_Deconstructible): message: _StrOrPromise code: str allowed_extensions: Collection[str] | None def __init__( self, allowed_extensions: Collection[str] | None = None, message: _StrOrPromise | None = None, code: str | None = None, ) -> None: ... def __call__(self, value: File) -> None: ... def get_available_image_extensions() -> Sequence[str]: ... def validate_image_file_extension(value: File) -> None: ... class ProhibitNullCharactersValidator(_Deconstructible): message: _StrOrPromise code: str def __init__(self, message: _StrOrPromise | None = None, code: str | None = None) -> None: ... def __call__(self, value: Any) -> None: ... django-stubs-5.2.9/django-stubs/core/wsgi.pyi000066400000000000000000000001421513401051600211440ustar00rootroot00000000000000from django.core.handlers.wsgi import WSGIHandler def get_wsgi_application() -> WSGIHandler: ... django-stubs-5.2.9/django-stubs/db/000077500000000000000000000000001513401051600171105ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/db/__init__.pyi000066400000000000000000000025721513401051600214000ustar00rootroot00000000000000from typing import Any from .backends.base.base import BaseDatabaseWrapper from .utils import DEFAULT_DB_ALIAS as DEFAULT_DB_ALIAS # Not exported in __all__ from .utils import DJANGO_VERSION_PICKLE_KEY as DJANGO_VERSION_PICKLE_KEY from .utils import ConnectionHandler, ConnectionRouter from .utils import DatabaseError as DatabaseError from .utils import DataError as DataError from .utils import Error as Error from .utils import IntegrityError as IntegrityError from .utils import InterfaceError as InterfaceError from .utils import InternalError as InternalError from .utils import NotSupportedError as NotSupportedError from .utils import OperationalError as OperationalError from .utils import ProgrammingError as ProgrammingError connections: ConnectionHandler router: ConnectionRouter # Actually ConnectionProxy, but quacks exactly like BaseDatabaseWrapper, it's not worth distinguishing the two. connection: BaseDatabaseWrapper def close_old_connections(**kwargs: Any) -> None: ... def reset_queries(**kwargs: Any) -> None: ... __all__ = [ "DEFAULT_DB_ALIAS", "DJANGO_VERSION_PICKLE_KEY", "DataError", "DatabaseError", "Error", "IntegrityError", "InterfaceError", "InternalError", "NotSupportedError", "OperationalError", "ProgrammingError", "close_old_connections", "connection", "connections", "reset_queries", "router", ] django-stubs-5.2.9/django-stubs/db/backends/000077500000000000000000000000001513401051600206625ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/db/backends/__init__.pyi000066400000000000000000000000001513401051600231320ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/db/backends/base/000077500000000000000000000000001513401051600215745ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/db/backends/base/__init__.pyi000066400000000000000000000000001513401051600240440ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/db/backends/base/base.pyi000066400000000000000000000125221513401051600232330ustar00rootroot00000000000000from collections.abc import Callable, MutableMapping from contextlib import AbstractContextManager from datetime import tzinfo from logging import Logger from typing import Any, TypeAlias from django.db.backends.base.client import BaseDatabaseClient from django.db.backends.base.creation import BaseDatabaseCreation from django.db.backends.base.features import BaseDatabaseFeatures from django.db.backends.base.introspection import BaseDatabaseIntrospection from django.db.backends.base.operations import BaseDatabaseOperations from django.db.backends.base.schema import BaseDatabaseSchemaEditor from django.db.backends.base.validation import BaseDatabaseValidation from django.db.backends.utils import CursorDebugWrapper, CursorWrapper from django.db.transaction import Atomic from django.utils.functional import cached_property from typing_extensions import Self NO_DB_ALIAS: str RAN_DB_VERSION_CHECK: set[str] logger: Logger _ExecuteWrapper: TypeAlias = Callable[ [Callable[[str, Any, bool, dict[str, Any]], Any], str, Any, bool, dict[str, Any]], Any ] class BaseDatabaseWrapper: data_types: dict[str, str] data_types_suffix: dict[str, str] data_type_check_constraints: dict[str, str] vendor: str display_name: str SchemaEditorClass: type[BaseDatabaseSchemaEditor] client_class: type[BaseDatabaseClient] creation_class: type[BaseDatabaseCreation] features_class: type[BaseDatabaseFeatures] introspection_class: type[BaseDatabaseIntrospection] ops_class: type[BaseDatabaseOperations] validation_class: type[BaseDatabaseValidation] queries_limit: int connection: Any settings_dict: dict[str, Any] alias: str queries_log: Any force_debug_cursor: bool autocommit: bool in_atomic_block: bool savepoint_state: int savepoint_ids: list[str] commit_on_exit: bool needs_rollback: bool close_at: float | None closed_in_transaction: bool errors_occurred: bool run_on_commit: list[tuple[set[str], Callable[[], None]]] run_commit_hooks_on_set_autocommit_on: bool execute_wrappers: list[_ExecuteWrapper] client: BaseDatabaseClient creation: BaseDatabaseCreation features: BaseDatabaseFeatures introspection: BaseDatabaseIntrospection ops: BaseDatabaseOperations validation: BaseDatabaseValidation operators: MutableMapping[str, str] atomic_blocks: list[Atomic] def __init__(self, settings_dict: dict[str, Any], alias: str = "default") -> None: ... def ensure_timezone(self) -> bool: ... @cached_property def timezone(self) -> tzinfo | None: ... @cached_property def timezone_name(self) -> str: ... @property def queries_logged(self) -> bool: ... @property def queries(self) -> list[dict[str, str]]: ... def get_database_version(self) -> tuple[int, ...]: ... def check_database_version_supported(self) -> None: ... def get_connection_params(self) -> dict[str, Any]: ... def get_new_connection(self, conn_params: Any) -> Any: ... def init_connection_state(self) -> None: ... def create_cursor(self, name: Any | None = None) -> Any: ... def connect(self) -> None: ... def check_settings(self) -> None: ... def ensure_connection(self) -> None: ... def cursor(self) -> CursorWrapper: ... def commit(self) -> None: ... def rollback(self) -> None: ... def close(self) -> None: ... def savepoint(self) -> str | None: ... def savepoint_rollback(self, sid: str) -> None: ... def savepoint_commit(self, sid: str) -> None: ... def clean_savepoints(self) -> None: ... def get_autocommit(self) -> bool: ... def set_autocommit( self, autocommit: bool, force_begin_transaction_with_broken_autocommit: bool = False ) -> None: ... def get_rollback(self) -> bool: ... def set_rollback(self, rollback: bool) -> None: ... def validate_no_atomic_block(self) -> None: ... def validate_no_broken_transaction(self) -> None: ... def constraint_checks_disabled(self) -> AbstractContextManager[None]: ... def disable_constraint_checking(self) -> bool: ... def enable_constraint_checking(self) -> None: ... def check_constraints(self, table_names: Any | None = None) -> None: ... def is_usable(self) -> bool: ... def close_if_health_check_failed(self) -> None: ... def close_if_unusable_or_obsolete(self) -> None: ... @property def allow_thread_sharing(self) -> bool: ... def inc_thread_sharing(self) -> None: ... def dec_thread_sharing(self) -> None: ... def validate_thread_sharing(self) -> None: ... def prepare_database(self) -> None: ... @property def wrap_database_errors(self) -> Any: ... def chunked_cursor(self) -> CursorWrapper: ... def make_debug_cursor(self, cursor: CursorWrapper) -> CursorDebugWrapper: ... def make_cursor(self, cursor: CursorWrapper) -> CursorWrapper: ... def temporary_connection(self) -> AbstractContextManager[CursorWrapper]: ... def _nodb_cursor(self) -> AbstractContextManager[CursorWrapper]: ... def schema_editor(self, *args: Any, **kwargs: Any) -> BaseDatabaseSchemaEditor: ... def on_commit(self, func: Callable[[], object], robust: bool = False) -> None: ... def run_and_clear_commit_hooks(self) -> None: ... def execute_wrapper(self, wrapper: _ExecuteWrapper) -> AbstractContextManager[None]: ... def copy(self, alias: str | None = None) -> Self: ... django-stubs-5.2.9/django-stubs/db/backends/base/client.pyi000066400000000000000000000010531513401051600235740ustar00rootroot00000000000000from collections.abc import Iterable, Sequence from typing import Any from django.db.backends.base.base import BaseDatabaseWrapper class BaseDatabaseClient: executable_name: str | None connection: BaseDatabaseWrapper def __init__(self, connection: BaseDatabaseWrapper) -> None: ... @classmethod def settings_to_cmd_args_env( cls, settings_dict: dict[str, Any], parameters: Iterable[str], ) -> tuple[Sequence[str], dict[str, str] | None]: ... def runshell(self, parameters: Iterable[str]) -> None: ... django-stubs-5.2.9/django-stubs/db/backends/base/creation.pyi000066400000000000000000000024521513401051600241260ustar00rootroot00000000000000from typing import Any from django.db.backends.base.base import BaseDatabaseWrapper TEST_DATABASE_PREFIX: str class BaseDatabaseCreation: connection: BaseDatabaseWrapper def __init__(self, connection: BaseDatabaseWrapper) -> None: ... def log(self, msg: str) -> None: ... def create_test_db( self, verbosity: int = 1, autoclobber: bool = False, serialize: bool = True, keepdb: bool = False ) -> str: ... def set_as_test_mirror(self, primary_settings_dict: dict[str, dict[str, None] | int | str | None]) -> None: ... def serialize_db_to_string(self) -> str: ... def deserialize_db_from_string(self, data: str) -> None: ... def clone_test_db( self, suffix: Any, verbosity: int = 1, autoclobber: bool = False, keepdb: bool = False ) -> None: ... def get_test_db_clone_settings(self, suffix: str) -> dict[str, Any]: ... def destroy_test_db( self, old_database_name: str | None = None, verbosity: int = 1, keepdb: bool = False, suffix: str | None = None, ) -> None: ... def mark_expected_failures_and_skips(self) -> None: ... def sql_table_creation_suffix(self) -> str: ... def test_db_signature(self) -> tuple[str, str, str, str]: ... def setup_worker_connection(self, _worker_id: int) -> None: ... django-stubs-5.2.9/django-stubs/db/backends/base/features.pyi000066400000000000000000000137331513401051600241440ustar00rootroot00000000000000from collections.abc import Sequence from typing import Any from django.db.backends.base.base import BaseDatabaseWrapper from django.db.models.base import Model from django.db.utils import DatabaseError, DataError from django.utils.functional import cached_property class BaseDatabaseFeatures: minimum_database_version: tuple[int, ...] | None gis_enabled: bool allows_group_by_lob: bool allows_group_by_selected_pks: bool allows_group_by_select_index: bool empty_fetchmany_value: Sequence[Any] update_can_self_select: bool delete_can_self_reference_subquery: bool interprets_empty_strings_as_nulls: bool supports_nullable_unique_constraints: bool supports_partially_nullable_unique_constraints: bool supports_deferrable_unique_constraints: bool can_use_chunked_reads: bool can_return_columns_from_insert: bool can_return_rows_from_bulk_insert: bool has_bulk_insert: bool uses_savepoints: bool can_release_savepoints: bool related_fields_match_type: bool allow_sliced_subqueries_with_in: bool has_select_for_update: bool has_select_for_update_nowait: bool has_select_for_update_skip_locked: bool has_select_for_update_of: bool has_select_for_no_key_update: bool select_for_update_of_column: bool test_db_allows_multiple_connections: bool supports_unspecified_pk: bool supports_forward_references: bool truncates_names: bool has_real_datatype: bool supports_subqueries_in_group_by: bool ignores_unnecessary_order_by_in_subqueries: bool has_native_uuid_field: bool has_native_duration_field: bool supports_temporal_subtraction: bool supports_regex_backreferencing: bool supports_date_lookup_using_string: bool supports_timezones: bool has_zoneinfo_database: bool requires_explicit_null_ordering_when_grouping: bool nulls_order_largest: bool supports_order_by_nulls_modifier: bool order_by_nulls_first: bool max_query_params: int | None allows_auto_pk_0: bool can_defer_constraint_checks: bool supports_tablespaces: bool supports_sequence_reset: bool can_introspect_default: bool can_introspect_foreign_keys: bool introspected_field_types: dict[str, str] supports_index_column_ordering: bool can_introspect_materialized_views: bool can_distinct_on_fields: bool atomic_transactions: bool can_rollback_ddl: bool schema_editor_uses_clientside_param_binding: bool supports_combined_alters: bool supports_foreign_keys: bool can_create_inline_fk: bool can_rename_index: bool indexes_foreign_keys: bool supports_column_check_constraints: bool supports_table_check_constraints: bool can_introspect_check_constraints: bool supports_paramstyle_pyformat: bool requires_literal_defaults: bool supports_expression_defaults: bool supports_default_keyword_in_insert: bool supports_default_keyword_in_bulk_insert: bool connection_persists_old_columns: bool closed_cursor_error_class: type[DatabaseError] has_case_insensitive_like: bool bare_select_suffix: str implied_column_null: bool supports_select_for_update_with_limit: bool greatest_least_ignores_nulls: bool can_clone_databases: bool ignores_table_name_case: bool for_update_after_from: bool supports_select_union: bool supports_select_intersection: bool supports_select_difference: bool supports_slicing_ordering_in_compound: bool supports_parentheses_in_compound: bool supports_nulls_distinct_unique_constraints: bool requires_compound_order_by_subquery: bool supports_aggregate_filter_clause: bool supports_index_on_text_field: bool supports_over_clause: bool supports_frame_range_fixed_distance: bool supports_frame_exclusion: bool only_supports_unbounded_with_preceding_and_following: bool supports_cast_with_precision: bool time_cast_precision: int create_test_procedure_without_params_sql: str | None create_test_procedure_with_int_param_sql: str | None create_test_table_with_composite_primary_key: str | None supports_callproc_kwargs: bool supported_explain_formats: set[str] supports_default_in_lead_lag: bool supports_ignore_conflicts: bool supports_update_conflicts: bool supports_update_conflicts_with_target: bool requires_casted_case_in_updates: bool supports_partial_indexes: bool supports_functions_in_partial_indexes: bool supports_covering_indexes: bool supports_expression_indexes: bool collate_as_index_expression: bool allows_multiple_constraints_on_same_fields: bool supports_comparing_boolean_expr: bool supports_json_field: bool can_introspect_json_field: bool supports_primitives_in_json_field: bool has_native_json_field: bool has_json_operators: bool supports_json_field_contains: bool json_key_contains_list_matching_requires_list: bool has_json_object_function: bool supports_collation_on_charfield: bool supports_collation_on_textfield: bool supports_non_deterministic_collations: bool supports_comments: bool supports_comments_inline: bool supports_stored_generated_columns: bool supports_virtual_generated_columns: bool supports_logical_xor: bool prohibits_null_characters_in_text_exception: tuple[ValueError | DataError] | None supports_unlimited_charfield: bool test_collations: dict[str, str | None] test_now_utc_template: str | None insert_test_table_with_defaults: str | None django_test_expected_failures: set[str] django_test_skips: dict[str, set[str]] connection: BaseDatabaseWrapper def __init__(self, connection: BaseDatabaseWrapper) -> None: ... @cached_property def supports_explaining_query_execution(self) -> bool: ... @cached_property def supports_transactions(self) -> bool: ... @cached_property def supports_boolean_expr_in_select_clause(self) -> bool: ... def allows_group_by_selected_pks_on_model(self, model: type[Model]) -> bool: ... django-stubs-5.2.9/django-stubs/db/backends/base/introspection.pyi000066400000000000000000000035421513401051600252230ustar00rootroot00000000000000from collections.abc import Iterable from typing import Any, NamedTuple from django.db.backends.base.base import BaseDatabaseWrapper from django.db.backends.utils import CursorWrapper from django.db.models.base import Model class TableInfo(NamedTuple): name: str type: str class FieldInfo(NamedTuple): name: str type_code: int display_size: int internal_size: int precision: int scale: int null_ok: bool default: str collation: str class BaseDatabaseIntrospection: data_types_reverse: Any connection: BaseDatabaseWrapper def __init__(self, connection: BaseDatabaseWrapper) -> None: ... def get_field_type(self, data_type: str, description: FieldInfo) -> str: ... def identifier_converter(self, name: str) -> str: ... def table_names(self, cursor: CursorWrapper | None = None, include_views: bool = False) -> list[str]: ... def get_table_list(self, cursor: CursorWrapper | None) -> Any: ... def get_table_description(self, cursor: CursorWrapper | None, table_name: str) -> Any: ... def get_migratable_models(self) -> Iterable[type[Model]]: ... def django_table_names(self, only_existing: bool = False, include_views: bool = True) -> list[str]: ... def installed_models(self, tables: list[str]) -> set[type[Model]]: ... def sequence_list(self) -> list[dict[str, str]]: ... def get_sequences(self, cursor: CursorWrapper | None, table_name: str, table_fields: Any = ()) -> Any: ... def get_relations(self, cursor: CursorWrapper | None, table_name: str) -> dict[str, tuple[str, str]]: ... def get_primary_key_column(self, cursor: CursorWrapper | None, table_name: str) -> str | None: ... def get_primary_key_columns(self, cursor: CursorWrapper | None, table_name: str) -> list[str] | None: ... def get_constraints(self, cursor: CursorWrapper | None, table_name: str) -> Any: ... django-stubs-5.2.9/django-stubs/db/backends/base/operations.pyi000066400000000000000000000166601513401051600245130ustar00rootroot00000000000000import json from collections.abc import Iterable, Sequence from datetime import date, time, timedelta from datetime import datetime as real_datetime from decimal import Decimal from typing import Any from django.core.management.color import Style from django.db.backends.base.base import BaseDatabaseWrapper from django.db.backends.utils import CursorWrapper from django.db.models.base import Model from django.db.models.constants import OnConflict from django.db.models.expressions import Case, Col, Expression from django.db.models.fields import Field from django.db.models.sql.compiler import SQLCompiler from typing_extensions import deprecated class BaseDatabaseOperations: compiler_module: str integer_field_ranges: dict[str, tuple[int, int]] set_operators: dict[str, str] cast_data_types: dict[Any, Any] cast_char_field_without_max_length: Any PRECEDING: str FOLLOWING: str UNBOUNDED_PRECEDING: str UNBOUNDED_FOLLOWING: str CURRENT_ROW: str explain_prefix: str | None connection: BaseDatabaseWrapper def __init__(self, connection: BaseDatabaseWrapper) -> None: ... def autoinc_sql(self, table: str, column: str) -> str | None: ... def bulk_batch_size(self, fields: Any, objs: Any) -> int: ... def cache_key_culling_sql(self) -> str: ... def unification_cast_sql(self, output_field: Field) -> str: ... def date_extract_sql(self, lookup_type: str, sql: Any, params: Any) -> tuple[str, Any]: ... # def date_interval_sql(self, timedelta: None) -> Any: ... def date_trunc_sql(self, lookup_type: str, sql: str, params: Any, tzname: str | None = None) -> tuple[str, Any]: ... def datetime_cast_date_sql(self, sql: str, params: Any, tzname: str | None) -> tuple[str, Any]: ... def datetime_cast_time_sql(self, sql: str, params: Any, tzname: str | None) -> tuple[str, Any]: ... def datetime_extract_sql(self, lookup_type: str, sql: str, params: Any, tzname: str | None) -> tuple[str, Any]: ... def datetime_trunc_sql(self, lookup_type: str, sql: str, params: Any, tzname: str | None) -> str: ... def time_trunc_sql(self, lookup_type: str, sql: str, params: Any, tzname: str | None = None) -> str: ... def time_extract_sql(self, lookup_type: str, sql: str, params: Any) -> str: ... def deferrable_sql(self) -> str: ... def distinct_sql(self, fields: list[str], params: list[Any] | None) -> tuple[list[str], list[str]]: ... def fetch_returned_insert_columns(self, cursor: Any, returning_params: Any) -> Any: ... @deprecated("field_cast_sql() is deprecated and will be removed in Django 6.0. Use lookup_cast() instead.") def field_cast_sql(self, db_type: str | None, internal_type: str) -> str: ... def force_group_by(self) -> list[str]: ... def force_no_ordering(self) -> list[Any]: ... def for_update_sql( self, nowait: bool = False, skip_locked: bool = False, of: Any = (), no_key: bool = False ) -> str: ... def limit_offset_sql(self, low_mark: int, high_mark: int | None) -> str: ... def bulk_insert_sql(self, fields: Iterable[Field], placeholder_rows: Iterable[str]) -> str: ... def last_executed_query(self, cursor: Any, sql: Any, params: Any) -> str: ... def last_insert_id(self, cursor: CursorWrapper, table_name: str, pk_name: str) -> int: ... def lookup_cast(self, lookup_type: str, internal_type: str | None = None) -> str: ... def max_in_list_size(self) -> int | None: ... def max_name_length(self) -> int | None: ... def no_limit_value(self) -> str | None: ... def pk_default_value(self) -> str: ... def prepare_sql_script(self, sql: Any) -> list[str]: ... def process_clob(self, value: str) -> str: ... def return_insert_columns(self, fields: Any) -> Any: ... def compiler(self, compiler_name: str) -> type[SQLCompiler]: ... def quote_name(self, name: str) -> str: ... def regex_lookup(self, lookup_type: str) -> str: ... def savepoint_create_sql(self, sid: str) -> str: ... def savepoint_commit_sql(self, sid: str) -> str: ... def savepoint_rollback_sql(self, sid: str) -> str: ... def set_time_zone_sql(self) -> str: ... def sql_flush( self, style: Any, tables: Sequence[str], *, reset_sequences: bool = False, allow_cascade: bool = False ) -> list[str]: ... def execute_sql_flush(self, sql_list: Iterable[str]) -> None: ... def sequence_reset_by_name_sql(self, style: Style | None, sequences: list[Any]) -> list[Any]: ... def sequence_reset_sql(self, style: Style, model_list: Sequence[type[Model]]) -> list[Any]: ... def start_transaction_sql(self) -> str: ... def end_transaction_sql(self, success: bool = True) -> str: ... def tablespace_sql(self, tablespace: str | None, inline: bool = False) -> str: ... def prep_for_like_query(self, x: str) -> str: ... prep_for_iexact_query: Any def validate_autopk_value(self, value: int) -> int: ... def adapt_unknown_value(self, value: Any) -> Any: ... def adapt_datefield_value(self, value: date | None) -> str | None: ... def adapt_datetimefield_value(self, value: real_datetime | None) -> str | None: ... def adapt_timefield_value(self, value: real_datetime | time | None) -> str | None: ... def adapt_decimalfield_value( self, value: Decimal | None, max_digits: int | None = None, decimal_places: int | None = None ) -> str | None: ... def adapt_ipaddressfield_value(self, value: str | None) -> str | None: ... def adapt_json_value(self, value: Any, encoder: type[json.JSONEncoder] | None) -> str: ... def adapt_integerfield_value(self, value: Any, internal_type: Any) -> Any: ... def year_lookup_bounds_for_date_field(self, value: int, iso_year: bool = False) -> list[str]: ... def year_lookup_bounds_for_datetime_field(self, value: int, iso_year: bool = False) -> list[str]: ... def get_db_converters(self, expression: Expression) -> list[Any]: ... def convert_durationfield_value( self, value: float | None, expression: Expression, connection: BaseDatabaseWrapper ) -> timedelta | None: ... def check_expression_support(self, expression: Any) -> None: ... def conditional_expression_supported_in_where_clause(self, expression: Any) -> bool: ... def combine_expression(self, connector: str, sub_expressions: list[str]) -> str: ... def combine_duration_expression(self, connector: Any, sub_expressions: Any) -> str: ... def binary_placeholder_sql(self, value: Case | None) -> str: ... def modify_insert_params(self, placeholder: str, params: Any) -> Any: ... def integer_field_range(self, internal_type: Any) -> tuple[int, int]: ... def subtract_temporals(self, internal_type: Any, lhs: Any, rhs: Any) -> tuple[str, tuple[Any, ...]]: ... def window_frame_value(self, value: int | None) -> str: ... def window_frame_rows_start_end(self, start: int | None = None, end: int | None = None) -> tuple[str, str]: ... def window_frame_range_start_end(self, start: int | None = None, end: int | None = None) -> tuple[str, str]: ... def explain_query_prefix(self, format: str | None = None, **options: Any) -> str: ... def insert_statement(self, on_conflict: OnConflict | None = None) -> str: ... def on_conflict_suffix_sql( self, fields: Any, on_conflict: Any, update_fields: Any, unique_fields: Any ) -> str | Any: ... def format_for_duration_arithmetic(self, sql: str) -> str: ... def prepare_join_on_clause( self, lhs_table: str, lhs_field: Field, rhs_table: str, rhs_field: Field ) -> tuple[Col, Col]: ... django-stubs-5.2.9/django-stubs/db/backends/base/schema.pyi000066400000000000000000000106611513401051600235630ustar00rootroot00000000000000from collections.abc import Sequence from contextlib import AbstractContextManager from logging import Logger from types import TracebackType from typing import Any from django.db.backends.base.base import BaseDatabaseWrapper from django.db.backends.ddl_references import Statement from django.db.models.base import Model from django.db.models.constraints import BaseConstraint from django.db.models.fields import Field from django.db.models.indexes import Index from django.db.models.sql.compiler import _AsSqlType from typing_extensions import Self logger: Logger class BaseDatabaseSchemaEditor(AbstractContextManager[Any]): sql_create_table: str sql_rename_table: str sql_retablespace_table: str sql_delete_table: str sql_create_column: str sql_alter_column: str sql_alter_column_type: str sql_alter_column_null: str sql_alter_column_not_null: str sql_alter_column_default: str sql_alter_column_no_default: str sql_alter_column_no_default_null: str sql_delete_column: str sql_rename_column: str sql_update_with_default: str sql_unique_constraint: str sql_check_constraint: str sql_delete_constraint: str sql_constraint: str sql_create_check: str sql_delete_check: str sql_create_unique: str sql_delete_unique: str sql_create_fk: str sql_create_inline_fk: str | None sql_create_column_inline_fk: str | None sql_delete_fk: str sql_create_index: str sql_create_unique_index: str sql_rename_index: str sql_delete_index: str sql_create_pk: str sql_delete_pk: str sql_delete_procedure: str sql_alter_table_comment: str sql_alter_column_comment: str connection: BaseDatabaseWrapper collect_sql: bool collected_sql: Any atomic_migration: Any def __init__(self, connection: BaseDatabaseWrapper, collect_sql: bool = False, atomic: bool = True) -> None: ... deferred_sql: Any atomic: Any def __enter__(self) -> Self: ... def __exit__( self, exc_type: type[BaseException] | None, exc_value: BaseException | None, exc_tb: TracebackType | None, ) -> None: ... def execute(self, sql: Statement | str, params: Sequence[Any] | None = ()) -> None: ... def quote_name(self, name: str) -> str: ... def table_sql(self, model: type[Model]) -> tuple[str, list[Any]]: ... def column_sql( self, model: type[Model], field: Field, include_default: bool = False ) -> tuple[None, None] | tuple[str, list[Any]]: ... def skip_default(self, field: Field) -> bool: ... def skip_default_on_alter(self, field: Field) -> bool: ... def prepare_default(self, value: Any) -> Any: ... def db_default_sql(self, field: Field) -> _AsSqlType: ... def effective_default(self, field: Field) -> int | str: ... def quote_value(self, value: Any) -> str: ... def create_model(self, model: type[Model]) -> None: ... def delete_model(self, model: type[Model]) -> None: ... def add_index(self, model: type[Model], index: Index) -> None: ... def remove_index(self, model: type[Model], index: Index) -> None: ... def rename_index(self, model: type[Model], old_index: Index, new_index: Index) -> None: ... def add_constraint(self, model: type[Model], constraint: BaseConstraint) -> None: ... def remove_constraint(self, model: type[Model], constraint: BaseConstraint) -> None: ... def alter_unique_together( self, model: type[Model], old_unique_together: Sequence[Sequence[str]], new_unique_together: Sequence[Sequence[str]], ) -> None: ... def alter_index_together( self, model: type[Model], old_index_together: Sequence[Sequence[str]], new_index_together: Sequence[Sequence[str]], ) -> None: ... def alter_db_table(self, model: type[Model], old_db_table: str, new_db_table: str) -> None: ... def alter_db_table_comment( self, model: type[Model], old_db_table_comment: str, new_db_table_comment: str ) -> None: ... def alter_db_tablespace(self, model: type[Model], old_db_tablespace: str, new_db_tablespace: str) -> None: ... def add_field(self, model: type[Model], field: Field) -> None: ... def remove_field(self, model: type[Model], field: Field) -> None: ... def alter_field(self, model: type[Model], old_field: Field, new_field: Field, strict: bool = False) -> None: ... def remove_procedure(self, procedure_name: Any, param_types: Any = ()) -> None: ... django-stubs-5.2.9/django-stubs/db/backends/base/validation.pyi000066400000000000000000000007141513401051600244530ustar00rootroot00000000000000from typing import Any from django.core.checks.messages import CheckMessage from django.db.backends.base.base import BaseDatabaseWrapper from django.db.models.fields import Field class BaseDatabaseValidation: connection: BaseDatabaseWrapper def __init__(self, connection: BaseDatabaseWrapper) -> None: ... def check(self, **kwargs: Any) -> list[CheckMessage]: ... def check_field(self, field: Field, **kwargs: Any) -> list[CheckMessage]: ... django-stubs-5.2.9/django-stubs/db/backends/ddl_references.pyi000066400000000000000000000064701513401051600243600ustar00rootroot00000000000000from collections.abc import Sequence from typing import Any, Protocol, type_check_only @type_check_only class _QuoteCallable(Protocol): """Get rid of `cannot assign to method`""" def __call__(self, column: str, /) -> str: ... class Reference: def references_table(self, table: Any) -> bool: ... def references_column(self, table: Any, column: Any) -> bool: ... def references_index(self, table: Any, index: Any) -> bool: ... def rename_table_references(self, old_table: Any, new_table: Any) -> None: ... def rename_column_references(self, table: Any, old_column: Any, new_column: Any) -> None: ... class Table(Reference): table: str quote_name: _QuoteCallable def __init__(self, table: str, quote_name: _QuoteCallable) -> None: ... def references_index(self, table: Any, index: Any) -> bool: ... def references_table(self, table: str) -> bool: ... def rename_table_references(self, old_table: str, new_table: str) -> None: ... class TableColumns(Table): table: str columns: list[str] def __init__(self, table: str, columns: list[str]) -> None: ... def references_column(self, table: str, column: str) -> bool: ... def rename_column_references(self, table: str, old_column: str, new_column: str) -> None: ... class Columns(TableColumns): columns: list[str] table: str quote_name: _QuoteCallable col_suffixes: Sequence[str] def __init__( self, table: str, columns: list[str], quote_name: _QuoteCallable, col_suffixes: Sequence[str] = () ) -> None: ... @type_check_only class _NameCallable(Protocol): """Get rid of `cannot assign to method`""" def __call__(self, table: str, columns: list[str], suffix: str, /) -> str: ... class IndexName(TableColumns): columns: list[str] table: str suffix: str create_index_name: _NameCallable def __init__(self, table: str, columns: list[str], suffix: str, create_index_name: _NameCallable) -> None: ... class IndexColumns(Columns): opclasses: Any def __init__( self, table: Any, columns: Any, quote_name: Any, col_suffixes: Any = (), opclasses: Any = () ) -> None: ... class ForeignKeyName(TableColumns): columns: list[str] table: str to_reference: TableColumns suffix_template: str create_fk_name: _NameCallable def __init__( self, from_table: str, from_columns: list[str], to_table: str, to_columns: list[str], suffix_template: str, create_fk_name: _NameCallable, ) -> None: ... def references_table(self, table: str) -> bool: ... def references_column(self, table: str, column: str) -> bool: ... def rename_table_references(self, old_table: str, new_table: str) -> None: ... def rename_column_references(self, table: str, old_column: str, new_column: str) -> None: ... class Statement(Reference): template: str parts: dict[str, Table] def __init__(self, template: str, **parts: Any) -> None: ... def references_table(self, table: str) -> bool: ... def references_column(self, table: str, column: str) -> bool: ... def references_index(self, table: Any, index: Any) -> bool: ... def rename_table_references(self, old_table: str, new_table: str) -> None: ... def rename_column_references(self, table: str, old_column: str, new_column: str) -> None: ... django-stubs-5.2.9/django-stubs/db/backends/dummy/000077500000000000000000000000001513401051600220155ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/db/backends/dummy/__init__.pyi000066400000000000000000000000001513401051600242650ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/db/backends/dummy/base.pyi000066400000000000000000000016341513401051600234560ustar00rootroot00000000000000from typing import Any from django.db.backends.base.base import BaseDatabaseWrapper from django.db.backends.base.client import BaseDatabaseClient from django.db.backends.base.creation import BaseDatabaseCreation from django.db.backends.base.introspection import BaseDatabaseIntrospection from django.db.backends.base.operations import BaseDatabaseOperations def complain(*args: Any, **kwargs: Any) -> Any: ... def ignore(*args: Any, **kwargs: Any) -> None: ... class DatabaseOperations(BaseDatabaseOperations): quote_name: Any class DatabaseClient(BaseDatabaseClient): ... class DatabaseCreation(BaseDatabaseCreation): create_test_db: Any destroy_test_db: Any class DatabaseIntrospection(BaseDatabaseIntrospection): get_table_list: Any get_table_description: Any get_relations: Any get_indexes: Any class DatabaseWrapper(BaseDatabaseWrapper): operators: Any ensure_connection: Any django-stubs-5.2.9/django-stubs/db/backends/dummy/features.pyi000066400000000000000000000002601513401051600243540ustar00rootroot00000000000000from django.db.backends.base.features import BaseDatabaseFeatures class DummyDatabaseFeatures(BaseDatabaseFeatures): supports_transactions: bool uses_savepoints: bool django-stubs-5.2.9/django-stubs/db/backends/mysql/000077500000000000000000000000001513401051600220275ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/db/backends/mysql/__init__.pyi000066400000000000000000000000001513401051600242770ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/db/backends/mysql/base.pyi000066400000000000000000000046731513401051600234760ustar00rootroot00000000000000from collections.abc import Container, Iterator from typing import Any, Literal from django.db.backends.base.base import BaseDatabaseWrapper from .client import DatabaseClient from .creation import DatabaseCreation from .features import DatabaseFeatures from .introspection import DatabaseIntrospection from .operations import DatabaseOperations from .validation import DatabaseValidation version: Any django_conversions: Any server_version_re: Any class CursorWrapper: codes_for_integrityerror: Any cursor: Any def __init__(self, cursor: Any) -> None: ... def execute(self, query: Any, args: Any | None = ...) -> Any: ... def executemany(self, query: Any, args: Any) -> Any: ... def __getattr__(self, attr: Any) -> Any: ... def __iter__(self) -> Iterator[Any]: ... class DatabaseWrapper(BaseDatabaseWrapper): client: DatabaseClient creation: DatabaseCreation features: DatabaseFeatures introspection: DatabaseIntrospection validation: DatabaseValidation ops: DatabaseOperations client_class: type[DatabaseClient] creation_class: type[DatabaseCreation] features_class: type[DatabaseFeatures] introspection_class: type[DatabaseIntrospection] ops_class: type[DatabaseOperations] validation_class: type[DatabaseValidation] vendor: str data_types: Any operators: Any pattern_esc: str pattern_ops: Any isolation_levels: Any Database: Any SchemaEditorClass: Any isolation_level: Any def get_connection_params(self) -> dict[str, Any]: ... def get_new_connection(self, conn_params: Any) -> Any: ... def init_connection_state(self) -> None: ... def create_cursor(self, name: Any | None = ...) -> CursorWrapper: ... def disable_constraint_checking(self) -> Literal[True]: ... needs_rollback: Any def enable_constraint_checking(self) -> None: ... def check_constraints(self, table_names: Any | None = ...) -> None: ... def is_usable(self) -> bool: ... @property def display_name(self) -> str: ... # type: ignore[override] @property def data_type_check_constraints(self) -> dict[str, str]: ... # type: ignore[override] @property def mysql_server_data(self) -> dict[str, Any]: ... @property def mysql_server_info(self) -> str: ... @property def mysql_version(self) -> tuple[int, ...]: ... @property def mysql_is_mariadb(self) -> bool: ... @property def sql_mode(self) -> Container[str]: ... django-stubs-5.2.9/django-stubs/db/backends/mysql/client.pyi000066400000000000000000000007311513401051600240310ustar00rootroot00000000000000from collections.abc import Iterable from typing import Any from django.db.backends.base.client import BaseDatabaseClient from django.db.backends.mysql.base import DatabaseWrapper class DatabaseClient(BaseDatabaseClient): connection: DatabaseWrapper executable_name: str @classmethod def settings_to_cmd_args_env( cls, settings_dict: dict[str, Any], parameters: Iterable[str], ) -> tuple[list[str], dict[str, str] | None]: ... django-stubs-5.2.9/django-stubs/db/backends/mysql/compiler.pyi000066400000000000000000000013331513401051600243640ustar00rootroot00000000000000from django.db.models.sql import compiler from django.db.models.sql.compiler import _AsSqlType class SQLCompiler(compiler.SQLCompiler): ... class SQLInsertCompiler(compiler.SQLInsertCompiler, SQLCompiler): ... class SQLDeleteCompiler(compiler.SQLDeleteCompiler, SQLCompiler): # https://github.com/django/django/blob/242499f2dc2bf24a9a5c855690a2e13d3303581a/django/db/backends/mysql/compiler.py#L26 def as_sql(self) -> _AsSqlType: ... # type: ignore[override] class SQLUpdateCompiler(compiler.SQLUpdateCompiler, SQLCompiler): ... class SQLAggregateCompiler(compiler.SQLAggregateCompiler, SQLCompiler): ... __all__ = ["SQLAggregateCompiler", "SQLCompiler", "SQLDeleteCompiler", "SQLInsertCompiler", "SQLUpdateCompiler"] django-stubs-5.2.9/django-stubs/db/backends/mysql/creation.pyi000066400000000000000000000003771513401051600243650ustar00rootroot00000000000000from django.db.backends.base.creation import BaseDatabaseCreation from django.db.backends.mysql.base import DatabaseWrapper class DatabaseCreation(BaseDatabaseCreation): connection: DatabaseWrapper def sql_table_creation_suffix(self) -> str: ... django-stubs-5.2.9/django-stubs/db/backends/mysql/features.pyi000066400000000000000000000073441513401051600244000ustar00rootroot00000000000000from typing import Any from django.db.backends.base.features import BaseDatabaseFeatures from django.db.backends.mysql.base import DatabaseWrapper from django.utils.functional import cached_property class DatabaseFeatures(BaseDatabaseFeatures): connection: DatabaseWrapper empty_fetchmany_value: Any allows_group_by_pk: bool related_fields_match_type: bool allow_sliced_subqueries_with_in: bool has_select_for_update: bool supports_forward_references: bool supports_regex_backreferencing: bool supports_date_lookup_using_string: bool can_introspect_autofield: bool can_introspect_binary_field: bool can_introspect_duration_field: bool can_introspect_small_integer_field: bool can_introspect_positive_integer_field: bool introspected_boolean_field_type: str supports_timezones: bool requires_explicit_null_ordering_when_grouping: bool can_release_savepoints: bool atomic_transactions: bool can_clone_databases: bool supports_temporal_subtraction: bool supports_select_intersection: bool supports_select_difference: bool supports_slicing_ordering_in_compound: bool supports_index_on_text_field: bool has_case_insensitive_like: bool create_test_procedure_without_params_sql: str create_test_procedure_with_int_param_sql: str db_functions_convert_bytes_to_str: bool supports_partial_indexes: bool supports_order_by_nulls_modifier: bool order_by_nulls_first: bool # fake properties (until `property` is generic) supports_frame_range_fixed_distance: bool supports_table_check_constraints: bool can_return_rows_from_bulk_insert: bool @cached_property def allows_auto_pk_0(self) -> bool: ... # type: ignore[override] @cached_property def update_can_self_select(self) -> bool: ... # type: ignore[override] @cached_property def can_introspect_foreign_keys(self) -> bool: ... # type: ignore[override] @cached_property def introspected_field_types(self) -> dict[str, str]: ... # type: ignore[override] @cached_property def can_return_columns_from_insert(self) -> bool: ... # type: ignore[override] @cached_property def has_zoneinfo_database(self) -> bool: ... # type: ignore[override] @cached_property def is_sql_auto_is_null_enabled(self) -> bool: ... @cached_property def supports_over_clause(self) -> bool: ... # type: ignore[override] @cached_property def supports_column_check_constraints(self) -> bool: ... # type: ignore[override] @cached_property def can_introspect_check_constraints(self) -> bool: ... # type: ignore[override] @cached_property def has_select_for_update_skip_locked(self) -> bool: ... # type: ignore[override] @cached_property def has_select_for_update_nowait(self) -> bool: ... # type: ignore[override] @cached_property def has_select_for_update_of(self) -> bool: ... # type: ignore[override] @cached_property def supports_explain_analyze(self) -> bool: ... @cached_property def supported_explain_formats(self) -> set[str]: ... # type: ignore[override] @cached_property def supports_transactions(self) -> bool: ... @cached_property def ignores_table_name_case(self) -> bool: ... # type: ignore[override] @cached_property def supports_default_in_lead_lag(self) -> bool: ... # type: ignore[override] @property def supports_json_field(self) -> bool: ... # type: ignore[override] @cached_property def can_introspect_json_field(self) -> bool: ... # type: ignore[override] @cached_property def supports_index_column_ordering(self) -> bool: ... # type: ignore[override] @cached_property def supports_expression_indexes(self) -> bool: ... # type: ignore[override] django-stubs-5.2.9/django-stubs/db/backends/mysql/introspection.pyi000066400000000000000000000007761513401051600254640ustar00rootroot00000000000000from typing import Any, NamedTuple from django.db.backends.base.introspection import BaseDatabaseIntrospection from django.db.backends.mysql.base import DatabaseWrapper FieldInfo: Any class InfoLine(NamedTuple): col_name: str data_type: str max_len: int num_prec: int num_scale: int extra: str column_default: str collation: str | None is_unsigned: bool class DatabaseIntrospection(BaseDatabaseIntrospection): connection: DatabaseWrapper data_types_reverse: Any django-stubs-5.2.9/django-stubs/db/backends/mysql/operations.pyi000066400000000000000000000053571513401051600247470ustar00rootroot00000000000000from typing import Any from django.db.backends.base.operations import BaseDatabaseOperations from django.db.backends.mysql.base import DatabaseWrapper from django.db.models.constants import OnConflict class DatabaseOperations(BaseDatabaseOperations): connection: DatabaseWrapper compiler_module: str integer_field_ranges: dict[str, tuple[int, int]] cast_data_types: dict[str, str] cast_char_field_without_max_length: str explain_prefix: str def date_extract_sql(self, lookup_type: str, sql: str, params: Any) -> tuple[str, Any]: ... def date_trunc_sql(self, lookup_type: str, sql: str, params: Any, tzname: str | None = None) -> Any: ... def datetime_cast_date_sql(self, sql: str, params: Any, tzname: str | None) -> Any: ... def datetime_cast_time_sql(self, sql: str, params: Any, tzname: str | None) -> Any: ... def datetime_extract_sql(self, lookup_type: str, sql: str, params: Any, tzname: str | None) -> Any: ... def datetime_trunc_sql(self, lookup_type: str, sql: str, params: Any, tzname: str | None) -> Any: ... def time_trunc_sql(self, lookup_type: str, sql: str, params: Any, tzname: str | None = None) -> Any: ... def fetch_returned_insert_rows(self, cursor: Any) -> Any: ... def format_for_duration_arithmetic(self, sql: Any) -> Any: ... def force_no_ordering(self) -> Any: ... def last_executed_query(self, cursor: Any, sql: Any, params: Any) -> Any: ... def no_limit_value(self) -> Any: ... def quote_name(self, name: str) -> Any: ... def return_insert_columns(self, fields: Any) -> Any: ... def sequence_reset_by_name_sql(self, style: Any, sequences: Any) -> Any: ... def validate_autopk_value(self, value: Any) -> Any: ... def adapt_datetimefield_value(self, value: Any) -> Any: ... def adapt_timefield_value(self, value: Any) -> Any: ... def max_name_length(self) -> Any: ... def combine_expression(self, connector: Any, sub_expressions: Any) -> Any: ... def get_db_converters(self, expression: Any) -> Any: ... def convert_booleanfield_value(self, value: Any, expression: Any, connection: Any) -> Any: ... def convert_datetimefield_value(self, value: Any, expression: Any, connection: Any) -> Any: ... def convert_uuidfield_value(self, value: Any, expression: Any, connection: Any) -> Any: ... def binary_placeholder_sql(self, value: Any) -> Any: ... def subtract_temporals(self, internal_type: Any, lhs: Any, rhs: Any) -> Any: ... def explain_query_prefix(self, format: Any | None = None, **options: Any) -> Any: ... def regex_lookup(self, lookup_type: str) -> Any: ... def insert_statement(self, on_conflict: OnConflict | None = None) -> str: ... def lookup_cast(self, lookup_type: str, internal_type: Any | None = None) -> Any: ... django-stubs-5.2.9/django-stubs/db/backends/mysql/schema.pyi000066400000000000000000000017441513401051600240200ustar00rootroot00000000000000from typing import Any from django.db.backends.base.schema import BaseDatabaseSchemaEditor from django.db.backends.mysql.base import DatabaseWrapper from django.db.models.base import Model from django.db.models.fields import Field class DatabaseSchemaEditor(BaseDatabaseSchemaEditor): connection: DatabaseWrapper sql_rename_table: str sql_alter_column_null: str sql_alter_column_not_null: str sql_alter_column_type: str sql_delete_column: str sql_delete_unique: str sql_create_column_inline_fk: str sql_delete_fk: str sql_delete_index: str sql_create_pk: str sql_delete_pk: str sql_create_index: str @property def sql_delete_check(self) -> str: ... # type: ignore[override] @property def sql_rename_column(self) -> str: ... # type: ignore[override] def quote_value(self, value: Any) -> str: ... def skip_default(self, field: Field) -> bool: ... def add_field(self, model: type[Model], field: Field) -> None: ... django-stubs-5.2.9/django-stubs/db/backends/mysql/validation.pyi000066400000000000000000000007411513401051600247060ustar00rootroot00000000000000from typing import Any from django.core.checks.messages import CheckMessage from django.db.backends.base.validation import BaseDatabaseValidation from django.db.backends.mysql.base import DatabaseWrapper from django.db.models.fields import Field class DatabaseValidation(BaseDatabaseValidation): connection: DatabaseWrapper def check(self, **kwargs: Any) -> list[CheckMessage]: ... def check_field_type(self, field: Field, field_type: str) -> list[CheckMessage]: ... django-stubs-5.2.9/django-stubs/db/backends/oracle/000077500000000000000000000000001513401051600221275ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/db/backends/oracle/__init__.pyi000066400000000000000000000000001513401051600243770ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/db/backends/oracle/base.pyi000066400000000000000000000052231513401051600235660ustar00rootroot00000000000000from collections.abc import Iterator from contextlib import AbstractContextManager from typing import Any from django.db.backends.base.base import BaseDatabaseWrapper from .client import DatabaseClient from .creation import DatabaseCreation from .features import DatabaseFeatures from .introspection import DatabaseIntrospection from .operations import DatabaseOperations from .validation import DatabaseValidation def wrap_oracle_errors() -> AbstractContextManager[None]: ... class _UninitializedOperatorsDescriptor: def __get__(self, instance: Any, cls: Any | None = None) -> Any: ... class DatabaseWrapper(BaseDatabaseWrapper): client: DatabaseClient creation: DatabaseCreation features: DatabaseFeatures introspection: DatabaseIntrospection validation: DatabaseValidation ops: DatabaseOperations client_class: type[DatabaseClient] creation_class: type[DatabaseCreation] features_class: type[DatabaseFeatures] introspection_class: type[DatabaseIntrospection] ops_class: type[DatabaseOperations] validation_class: type[DatabaseValidation] vendor: str display_name: str data_types: Any data_type_check_constraints: Any operators: Any pattern_esc: str Database: Any SchemaEditorClass: Any def __init__(self, *args: Any, **kwargs: Any) -> None: ... def get_connection_params(self) -> Any: ... def get_new_connection(self, conn_params: Any) -> Any: ... pattern_ops: Any def init_connection_state(self) -> None: ... def create_cursor(self, name: Any | None = None) -> Any: ... def check_constraints(self, table_names: Any | None = None) -> None: ... def is_usable(self) -> Any: ... @property def oracle_version(self) -> Any: ... class OracleParam: force_bytes: Any input_size: Any def __init__(self, param: Any, cursor: Any, strings_only: bool = False) -> None: ... class VariableWrapper: var: Any def __init__(self, var: Any) -> None: ... def bind_parameter(self, cursor: Any) -> Any: ... def __getattr__(self, key: Any) -> Any: ... def __setattr__(self, key: Any, value: Any) -> None: ... class FormatStylePlaceholderCursor: charset: str cursor: Any database: BaseDatabaseWrapper def __init__(self, connection: Any, database: BaseDatabaseWrapper) -> None: ... def execute(self, query: Any, params: Any | None = None) -> Any: ... def executemany(self, query: Any, params: Any | None = None) -> Any: ... def close(self) -> None: ... def var(self, *args: Any) -> Any: ... def arrayvar(self, *args: Any) -> Any: ... def __getattr__(self, attr: Any) -> Any: ... def __iter__(self) -> Iterator[Any]: ... django-stubs-5.2.9/django-stubs/db/backends/oracle/client.pyi000066400000000000000000000010421513401051600241250ustar00rootroot00000000000000from collections.abc import Iterable from typing import Any from django.db.backends.base.client import BaseDatabaseClient from django.db.backends.oracle.base import DatabaseWrapper class DatabaseClient(BaseDatabaseClient): connection: DatabaseWrapper executable_name: str wrapper_name: str @staticmethod def connect_string(settings_dict: dict[str, Any]) -> str: ... @classmethod def settings_to_cmd_args_env( cls, settings_dict: dict[str, Any], parameters: Iterable[str] ) -> tuple[list[str], None]: ... django-stubs-5.2.9/django-stubs/db/backends/oracle/creation.pyi000066400000000000000000000005651513401051600244640ustar00rootroot00000000000000from typing import Any from django.db.backends.base.creation import BaseDatabaseCreation from django.db.backends.oracle.base import DatabaseWrapper TEST_DATABASE_PREFIX: str class DatabaseCreation(BaseDatabaseCreation): connection: DatabaseWrapper def set_as_test_mirror(self, primary_settings_dict: Any) -> None: ... def test_db_signature(self) -> Any: ... django-stubs-5.2.9/django-stubs/db/backends/oracle/features.pyi000066400000000000000000000035221513401051600244720ustar00rootroot00000000000000from typing import Any from django.db.backends.base.features import BaseDatabaseFeatures from django.db.backends.oracle.base import DatabaseWrapper class DatabaseFeatures(BaseDatabaseFeatures): connection: DatabaseWrapper interprets_empty_strings_as_nulls: bool has_select_for_update: bool has_select_for_update_nowait: bool has_select_for_update_skip_locked: bool has_select_for_update_of: bool select_for_update_of_column: bool can_return_columns_from_insert: bool can_introspect_autofield: bool supports_subqueries_in_group_by: bool supports_transactions: bool supports_timezones: bool has_native_duration_field: bool can_defer_constraint_checks: bool supports_partially_nullable_unique_constraints: bool supports_deferrable_unique_constraints: bool truncates_names: bool supports_tablespaces: bool supports_sequence_reset: bool can_introspect_materialized_views: bool can_introspect_time_field: bool atomic_transactions: bool supports_combined_alters: bool nulls_order_largest: bool requires_literal_defaults: bool closed_cursor_error_class: Any bare_select_suffix: str supports_select_for_update_with_limit: bool supports_temporal_subtraction: bool ignores_table_name_case: bool supports_index_on_text_field: bool has_case_insensitive_like: bool create_test_procedure_without_params_sql: str create_test_procedure_with_int_param_sql: str supports_callproc_kwargs: bool supports_over_clause: bool supports_frame_range_fixed_distance: bool supports_ignore_conflicts: bool max_query_params: Any supports_partial_indexes: bool supports_slicing_ordering_in_compound: bool allows_multiple_constraints_on_same_fields: bool supports_primitives_in_json_field: bool supports_json_field_contains: bool django-stubs-5.2.9/django-stubs/db/backends/oracle/functions.pyi000066400000000000000000000006201513401051600246600ustar00rootroot00000000000000from typing import Any from django.db.models import Func class IntervalToSeconds(Func): function: str template: str def __init__(self, expression: Any, *, output_field: Any | None = None, **extra: Any) -> None: ... class SecondsToInterval(Func): function: str template: str def __init__(self, expression: Any, *, output_field: Any | None = None, **extra: Any) -> None: ... django-stubs-5.2.9/django-stubs/db/backends/oracle/introspection.pyi000066400000000000000000000005371513401051600255570ustar00rootroot00000000000000from typing import Any from django.db.backends.base.introspection import BaseDatabaseIntrospection from django.db.backends.oracle.base import DatabaseWrapper FieldInfo: Any class DatabaseIntrospection(BaseDatabaseIntrospection): connection: DatabaseWrapper cache_bust_counter: int @property def data_types_reverse(self) -> Any: ... django-stubs-5.2.9/django-stubs/db/backends/oracle/operations.pyi000066400000000000000000000075101513401051600250400ustar00rootroot00000000000000from typing import Any from django.db.backends.base.operations import BaseDatabaseOperations from django.db.backends.oracle.base import DatabaseWrapper class DatabaseOperations(BaseDatabaseOperations): connection: DatabaseWrapper integer_field_ranges: Any set_operators: Any cast_char_field_without_max_length: str cast_data_types: Any def cache_key_culling_sql(self) -> str: ... def date_extract_sql(self, lookup_type: str, sql: str, params: Any) -> tuple[str, Any]: ... def date_trunc_sql(self, lookup_type: str, sql: str, params: Any, tzname: str | None = ...) -> tuple[str, Any]: ... def datetime_cast_date_sql(self, sql: str, params: Any, tzname: str | None) -> tuple[str, Any]: ... def datetime_cast_time_sql(self, sql: str, params: Any, tzname: str | None) -> tuple[str, Any]: ... def datetime_extract_sql(self, lookup_type: str, sql: str, params: Any, tzname: str | None) -> tuple[str, Any]: ... def datetime_trunc_sql(self, lookup_type: str, sql: str, params: Any, tzname: str | None) -> str: ... def time_trunc_sql(self, lookup_type: str, sql: str, params: Any, tzname: str | None = ...) -> str: ... def get_db_converters(self, expression: Any) -> list[Any]: ... def convert_textfield_value(self, value: Any, expression: Any, connection: Any) -> Any: ... def convert_binaryfield_value(self, value: Any, expression: Any, connection: Any) -> Any: ... def convert_booleanfield_value(self, value: Any, expression: Any, connection: Any) -> Any: ... def convert_datetimefield_value(self, value: Any, expression: Any, connection: Any) -> Any: ... def convert_datefield_value(self, value: Any, expression: Any, connection: Any) -> Any: ... def convert_timefield_value(self, value: Any, expression: Any, connection: Any) -> Any: ... def convert_uuidfield_value(self, value: Any, expression: Any, connection: Any) -> Any: ... @staticmethod def convert_empty_string(value: Any, expression: Any, connection: Any) -> Any: ... @staticmethod def convert_empty_bytes(value: Any, expression: Any, connection: Any) -> Any: ... def deferrable_sql(self) -> str: ... def fetch_returned_insert_columns(self, cursor: Any, returning_params: Any) -> Any: ... def field_cast_sql(self, db_type: Any, internal_type: Any) -> str: ... def no_limit_value(self) -> str | None: ... def limit_offset_sql(self, low_mark: Any, high_mark: Any) -> str: ... def last_executed_query(self, cursor: Any, sql: Any, params: Any) -> str: ... def last_insert_id(self, cursor: Any, table_name: Any, pk_name: Any) -> Any: ... def lookup_cast(self, lookup_type: str, internal_type: Any | None = ...) -> str: ... def max_in_list_size(self) -> int: ... def max_name_length(self) -> int: ... def pk_default_value(self) -> str: ... def prep_for_iexact_query(self, x: Any) -> str: ... def process_clob(self, value: Any) -> Any: ... def quote_name(self, name: str) -> str: ... def regex_lookup(self, lookup_type: str) -> str: ... def return_insert_columns(self, fields: Any) -> Any: ... def sequence_reset_by_name_sql(self, style: Any, sequences: Any) -> list[str]: ... def sequence_reset_sql(self, style: Any, model_list: Any) -> list[str]: ... def start_transaction_sql(self) -> str: ... def tablespace_sql(self, tablespace: Any, inline: bool = ...) -> str: ... def adapt_datefield_value(self, value: Any) -> Any: ... def adapt_datetimefield_value(self, value: Any) -> Any: ... def adapt_timefield_value(self, value: Any) -> Any: ... def combine_expression(self, connector: Any, sub_expressions: Any) -> Any: ... def subtract_temporals(self, internal_type: Any, lhs: Any, rhs: Any) -> Any: ... def bulk_batch_size(self, fields: Any, objs: Any) -> int: ... def conditional_expression_supported_in_where_clause(self, expression: Any) -> bool: ... django-stubs-5.2.9/django-stubs/db/backends/oracle/schema.pyi000066400000000000000000000020161513401051600241110ustar00rootroot00000000000000from typing import Any from django.db.backends.base.schema import BaseDatabaseSchemaEditor from django.db.backends.oracle.base import DatabaseWrapper from django.db.models.base import Model from django.db.models.fields import Field class DatabaseSchemaEditor(BaseDatabaseSchemaEditor): connection: DatabaseWrapper sql_create_column: str sql_alter_column_type: str sql_alter_column_null: str sql_alter_column_not_null: str sql_alter_column_default: str sql_alter_column_no_default: str sql_delete_column: str sql_create_column_inline_fk: str sql_delete_table: str sql_create_index: str def quote_value(self, value: Any) -> str: ... def remove_field(self, model: type[Model], field: Field) -> None: ... def delete_model(self, model: type[Model]) -> None: ... def alter_field(self, model: type[Model], old_field: Field, new_field: Field, strict: bool = False) -> None: ... def normalize_name(self, name: Any) -> str: ... def prepare_default(self, value: Any) -> Any: ... django-stubs-5.2.9/django-stubs/db/backends/oracle/utils.pyi000066400000000000000000000007771513401051600240250ustar00rootroot00000000000000import datetime from typing import Any class InsertVar: types: Any db_type: Any bound_param: Any def __init__(self, field: Any) -> None: ... def bind_parameter(self, cursor: Any) -> Any: ... def get_value(self) -> Any: ... class Oracle_datetime(datetime.datetime): input_size: Any @classmethod def from_datetime(cls, dt: Any) -> Any: ... class BulkInsertMapper: BLOB: str CLOB: str DATE: str INTERVAL: str NUMBER: str TIMESTAMP: str types: Any django-stubs-5.2.9/django-stubs/db/backends/oracle/validation.pyi000066400000000000000000000006141513401051600250050ustar00rootroot00000000000000from django.core.checks.messages import CheckMessage from django.db.backends.base.validation import BaseDatabaseValidation from django.db.backends.oracle.base import DatabaseWrapper from django.db.models.fields import Field class DatabaseValidation(BaseDatabaseValidation): connection: DatabaseWrapper def check_field_type(self, field: Field, field_type: str) -> list[CheckMessage]: ... django-stubs-5.2.9/django-stubs/db/backends/postgresql/000077500000000000000000000000001513401051600230655ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/db/backends/postgresql/__init__.pyi000066400000000000000000000000001513401051600253350ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/db/backends/postgresql/base.pyi000066400000000000000000000026021513401051600245220ustar00rootroot00000000000000from io import IOBase from typing import Any from django.db.backends.base.base import BaseDatabaseWrapper from django.db.backends.utils import CursorDebugWrapper as BaseCursorDebugWrapper from django.db.backends.utils import _ExecuteQuery from django.utils.functional import cached_property from .client import DatabaseClient from .creation import DatabaseCreation from .features import DatabaseFeatures from .introspection import DatabaseIntrospection from .operations import DatabaseOperations def psycopg_version() -> tuple[int, int, int]: ... class DatabaseWrapper(BaseDatabaseWrapper): client: DatabaseClient creation: DatabaseCreation features: DatabaseFeatures introspection: DatabaseIntrospection ops: DatabaseOperations client_class: type[DatabaseClient] creation_class: type[DatabaseCreation] features_class: type[DatabaseFeatures] introspection_class: type[DatabaseIntrospection] ops_class: type[DatabaseOperations] operators: dict[str, str] pattern_esc: str pattern_ops: dict[str, str] # PostgreSQL backend-specific attributes. _named_cursor_idx: int @cached_property def pg_version(self) -> int: ... class CursorDebugWrapper(BaseCursorDebugWrapper): def copy_expert(self, sql: _ExecuteQuery, file: IOBase, *args: Any) -> Any: ... def copy_to(self, file: IOBase, table: str, *args: Any, **kwargs: Any) -> Any: ... django-stubs-5.2.9/django-stubs/db/backends/postgresql/client.pyi000066400000000000000000000010141513401051600250620ustar00rootroot00000000000000from collections.abc import Iterable from typing import Any from django.db.backends.base.client import BaseDatabaseClient from django.db.backends.postgresql.base import DatabaseWrapper class DatabaseClient(BaseDatabaseClient): connection: DatabaseWrapper executable_name: str @classmethod def settings_to_cmd_args_env( cls, settings_dict: dict[str, Any], parameters: Iterable[str] ) -> tuple[list[str], dict[str, str] | None]: ... def runshell(self, parameters: Iterable[str]) -> None: ... django-stubs-5.2.9/django-stubs/db/backends/postgresql/creation.pyi000066400000000000000000000003201513401051600254070ustar00rootroot00000000000000from django.db.backends.base.creation import BaseDatabaseCreation from django.db.backends.postgresql.base import DatabaseWrapper class DatabaseCreation(BaseDatabaseCreation): connection: DatabaseWrapper django-stubs-5.2.9/django-stubs/db/backends/postgresql/features.pyi000066400000000000000000000042261513401051600254320ustar00rootroot00000000000000from typing import Any from django.db.backends.base.features import BaseDatabaseFeatures from django.db.backends.postgresql.base import DatabaseWrapper from django.utils.functional import cached_property class DatabaseFeatures(BaseDatabaseFeatures): connection: DatabaseWrapper allows_group_by_selected_pks: bool can_return_columns_from_insert: bool can_return_rows_from_bulk_insert: bool has_real_datatype: bool has_native_uuid_field: bool has_native_duration_field: bool has_native_json_field: bool can_defer_constraint_checks: bool has_select_for_update: bool has_select_for_update_nowait: bool has_select_for_update_of: bool has_select_for_update_skip_locked: bool has_select_for_no_key_update: bool can_release_savepoints: bool supports_tablespaces: bool supports_transactions: bool can_introspect_materialized_views: bool can_distinct_on_fields: bool can_rollback_ddl: bool supports_combined_alters: bool nulls_order_largest: bool closed_cursor_error_class: Any has_case_insensitive_like: bool greatest_least_ignores_nulls: bool can_clone_databases: bool supports_temporal_subtraction: bool supports_slicing_ordering_in_compound: bool create_test_procedure_without_params_sql: str create_test_procedure_with_int_param_sql: str requires_casted_case_in_updates: bool supports_over_clause: bool only_supports_unbounded_with_preceding_and_following: bool supports_aggregate_filter_clause: bool supported_explain_formats: Any validates_explain_options: bool supports_deferrable_unique_constraints: bool has_json_operators: bool json_key_contains_list_matching_requires_list: bool @property def is_postgresql_15(self) -> bool: ... @cached_property def is_postgresql_16(self) -> bool: ... @property def is_postgresql_17(self) -> bool: ... has_brin_autosummarize: bool has_websearch_to_tsquery: bool supports_table_partitions: bool supports_covering_indexes: bool supports_covering_gist_indexes: bool supports_non_deterministic_collations: bool supports_alternate_collation_providers: bool django-stubs-5.2.9/django-stubs/db/backends/postgresql/introspection.pyi000066400000000000000000000004601513401051600265100ustar00rootroot00000000000000from typing import Any from django.db.backends.base.introspection import BaseDatabaseIntrospection from django.db.backends.postgresql.base import DatabaseWrapper class DatabaseIntrospection(BaseDatabaseIntrospection): connection: DatabaseWrapper data_types_reverse: Any ignored_tables: Any django-stubs-5.2.9/django-stubs/db/backends/postgresql/operations.pyi000066400000000000000000000006241513401051600257750ustar00rootroot00000000000000from typing import Any from django.db.backends.base.operations import BaseDatabaseOperations from django.db.backends.postgresql.base import DatabaseWrapper class DatabaseOperations(BaseDatabaseOperations): connection: DatabaseWrapper explain_options: frozenset[str] def compose_sql(self, sql: Any, params: Any) -> Any: ... def fetch_returned_insert_rows(self, cursor: Any) -> Any: ... django-stubs-5.2.9/django-stubs/db/backends/postgresql/schema.pyi000066400000000000000000000016241513401051600250530ustar00rootroot00000000000000from typing import Any from django.db.backends.base.schema import BaseDatabaseSchemaEditor from django.db.backends.postgresql.base import DatabaseWrapper from django.db.models.base import Model from django.db.models.indexes import Index class DatabaseSchemaEditor(BaseDatabaseSchemaEditor): connection: DatabaseWrapper sql_create_sequence: str sql_delete_sequence: str sql_set_sequence_max: str sql_set_sequence_owner: str sql_create_index: str sql_create_index_concurrently: str sql_delete_index: str sql_delete_index_concurrently: str sql_create_column_inline_fk: str sql_delete_fk: str sql_delete_procedure: str def quote_value(self, value: Any) -> str: ... def add_index(self, model: type[Model], index: Index, concurrently: bool = False) -> None: ... def remove_index(self, model: type[Model], index: Index, concurrently: bool = False) -> None: ... django-stubs-5.2.9/django-stubs/db/backends/signals.pyi000066400000000000000000000000771513401051600230510ustar00rootroot00000000000000from django.dispatch import Signal connection_created: Signal django-stubs-5.2.9/django-stubs/db/backends/sqlite3/000077500000000000000000000000001513401051600222465ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/db/backends/sqlite3/__init__.pyi000066400000000000000000000000001513401051600245160ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/db/backends/sqlite3/base.pyi000066400000000000000000000017631513401051600237120ustar00rootroot00000000000000from collections.abc import Callable from sqlite3 import dbapi2 as Database from typing import Any, TypeVar from django.db.backends.base.base import BaseDatabaseWrapper from .client import DatabaseClient from .creation import DatabaseCreation from .features import DatabaseFeatures from .introspection import DatabaseIntrospection from .operations import DatabaseOperations _R = TypeVar("_R") def decoder(conv_func: Callable[[str], _R]) -> Callable[[bytes], _R]: ... class DatabaseWrapper(BaseDatabaseWrapper): client: DatabaseClient creation: DatabaseCreation features: DatabaseFeatures introspection: DatabaseIntrospection ops: DatabaseOperations client_class: type[DatabaseClient] creation_class: type[DatabaseCreation] features_class: type[DatabaseFeatures] introspection_class: type[DatabaseIntrospection] ops_class: type[DatabaseOperations] def is_in_memory_db(self) -> bool: ... FORMAT_QMARK_REGEX: Any class SQLiteCursorWrapper(Database.Cursor): ... django-stubs-5.2.9/django-stubs/db/backends/sqlite3/client.pyi000066400000000000000000000006711513401051600242530ustar00rootroot00000000000000from collections.abc import Iterable from typing import Any from django.db.backends.base.client import BaseDatabaseClient from django.db.backends.sqlite3.base import DatabaseWrapper class DatabaseClient(BaseDatabaseClient): connection: DatabaseWrapper executable_name: str @classmethod def settings_to_cmd_args_env( cls, settings_dict: dict[str, Any], parameters: Iterable[str] ) -> tuple[list[str], None]: ... django-stubs-5.2.9/django-stubs/db/backends/sqlite3/creation.pyi000066400000000000000000000005021513401051600245720ustar00rootroot00000000000000from os import PathLike from django.db.backends.base.creation import BaseDatabaseCreation from django.db.backends.sqlite3.base import DatabaseWrapper class DatabaseCreation(BaseDatabaseCreation): connection: DatabaseWrapper @staticmethod def is_in_memory_db(database_name: str | PathLike[str]) -> bool: ... django-stubs-5.2.9/django-stubs/db/backends/sqlite3/features.pyi000066400000000000000000000003151513401051600246060ustar00rootroot00000000000000from django.db.backends.base.features import BaseDatabaseFeatures from django.db.backends.sqlite3.base import DatabaseWrapper class DatabaseFeatures(BaseDatabaseFeatures): connection: DatabaseWrapper django-stubs-5.2.9/django-stubs/db/backends/sqlite3/introspection.pyi000066400000000000000000000006601513401051600256730ustar00rootroot00000000000000from typing import Any from django.db.backends.base.introspection import BaseDatabaseIntrospection from django.db.backends.sqlite3.base import DatabaseWrapper field_size_re: Any def get_field_size(name: str) -> int | None: ... class FlexibleFieldLookupDict: base_data_types_reverse: Any def __getitem__(self, key: str) -> Any: ... class DatabaseIntrospection(BaseDatabaseIntrospection): connection: DatabaseWrapper django-stubs-5.2.9/django-stubs/db/backends/sqlite3/operations.pyi000066400000000000000000000016241513401051600251570ustar00rootroot00000000000000from collections.abc import Callable from typing import Any from uuid import UUID from django.db.backends.base.operations import BaseDatabaseOperations class DatabaseOperations(BaseDatabaseOperations): jsonfield_datatype_values: frozenset[str] def convert_booleanfield_value(self, value: Any, expression: Any, connection: Any) -> Any: ... def convert_datefield_value(self, value: Any, expression: Any, connection: Any) -> Any: ... def convert_datetimefield_value(self, value: Any, expression: Any, connection: Any) -> Any | None: ... def convert_timefield_value(self, value: Any, expression: Any, connection: Any) -> Any: ... def convert_uuidfield_value(self, value: Any, expression: Any, connection: Any) -> UUID | None: ... def fetch_returned_insert_rows(self, cursor: Any) -> Any: ... def get_decimalfield_converter( self, expression: Any, ) -> Callable: ... django-stubs-5.2.9/django-stubs/db/backends/sqlite3/schema.pyi000066400000000000000000000003271513401051600242330ustar00rootroot00000000000000from django.db.backends.base.schema import BaseDatabaseSchemaEditor from django.db.backends.sqlite3.base import DatabaseWrapper class DatabaseSchemaEditor(BaseDatabaseSchemaEditor): connection: DatabaseWrapper django-stubs-5.2.9/django-stubs/db/backends/utils.pyi000066400000000000000000000056201513401051600225500ustar00rootroot00000000000000import datetime from collections.abc import Iterator, Mapping, Sequence from contextlib import AbstractContextManager from decimal import Decimal from logging import Logger from types import TracebackType from typing import Any, Literal, Protocol, TypeAlias, overload, type_check_only from uuid import UUID from typing_extensions import Self logger: Logger # Protocol matching psycopg2.sql.Composable, to avoid depending psycopg2 @type_check_only class _Composable(Protocol): def as_string(self, context: Any) -> str: ... def __add__(self, other: Self) -> _Composable: ... def __mul__(self, n: int) -> _Composable: ... _ExecuteQuery: TypeAlias = str | _Composable # Python types that can be adapted to SQL. _SQLType: TypeAlias = ( None | bool | int | float | Decimal | str | bytes | datetime.date | datetime.datetime | UUID | tuple[Any, ...] | list[Any] ) _ExecuteParameters: TypeAlias = Sequence[_SQLType] | Mapping[str, _SQLType] | None class CursorWrapper: cursor: Any db: Any def __init__(self, cursor: Any, db: Any) -> None: ... WRAP_ERROR_ATTRS: Any APPS_NOT_READY_WARNING_MSG: str def __getattr__(self, attr: str) -> Any: ... def __iter__(self) -> Iterator[tuple[Any, ...]]: ... def __enter__(self) -> Self: ... def __exit__( self, exc_type: type[BaseException] | None, exc_value: BaseException | None, exc_tb: TracebackType | None, ) -> None: ... def callproc( self, procname: str, params: Sequence[Any] | None = None, kparams: dict[str, int] | None = None ) -> Any: ... def execute(self, sql: _ExecuteQuery, params: _ExecuteParameters | None = None) -> Any: ... def executemany(self, sql: _ExecuteQuery, param_list: Sequence[_ExecuteParameters]) -> Any: ... class CursorDebugWrapper(CursorWrapper): cursor: Any db: Any def debug_sql( self, sql: str | None = None, params: _ExecuteParameters | Sequence[_ExecuteParameters] | None = None, use_last_executed_query: bool = False, many: bool = False, ) -> AbstractContextManager[None]: ... @overload def typecast_date(s: None | Literal[""]) -> None: ... # type: ignore[overload-overlap] @overload def typecast_date(s: str) -> datetime.date: ... @overload def typecast_time(s: None | Literal[""]) -> None: ... # type: ignore[overload-overlap] @overload def typecast_time(s: str) -> datetime.time: ... @overload def typecast_timestamp(s: None | Literal[""]) -> None: ... # type: ignore[overload-overlap] @overload def typecast_timestamp(s: str) -> datetime.datetime: ... def split_identifier(identifier: str) -> tuple[str, str]: ... def truncate_name(identifier: str, length: int | None = None, hash_len: int = 4) -> str: ... def format_number(value: Decimal | None, max_digits: int | None, decimal_places: int | None) -> str | None: ... def strip_quotes(table_name: str) -> str: ... django-stubs-5.2.9/django-stubs/db/migrations/000077500000000000000000000000001513401051600212645ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/db/migrations/__init__.pyi000066400000000000000000000002141513401051600235430ustar00rootroot00000000000000from .migration import Migration as Migration from .migration import swappable_dependency as swappable_dependency from .operations import * django-stubs-5.2.9/django-stubs/db/migrations/autodetector.pyi000066400000000000000000000061451513401051600245170ustar00rootroot00000000000000from collections.abc import Callable, Iterable from typing import Any from django.db.migrations.graph import MigrationGraph from django.db.migrations.migration import Migration from django.db.migrations.operations.base import Operation from django.db.migrations.questioner import MigrationQuestioner from django.db.migrations.state import ProjectState from django.db.models.fields import Field class MigrationAutodetector: from_state: ProjectState to_state: ProjectState questioner: MigrationQuestioner existing_apps: set[Any] def __init__( self, from_state: ProjectState, to_state: ProjectState, questioner: MigrationQuestioner | None = None ) -> None: ... def changes( self, graph: MigrationGraph, trim_to_apps: set[str] | None = None, convert_apps: set[str] | None = None, migration_name: str | None = None, ) -> dict[str, list[Migration]]: ... def deep_deconstruct(self, obj: Any) -> Any: ... def only_relation_agnostic_fields( self, fields: dict[str, Field] ) -> list[tuple[str, list[Any], dict[str, Callable | int | str]]]: ... def check_dependency(self, operation: Operation, dependency: tuple[str, str, str | None, bool | str]) -> bool: ... def add_operation( self, app_label: str, operation: Operation, dependencies: Iterable[tuple[str, str, str | None, bool | str]] | None = None, beginning: bool = False, ) -> None: ... def swappable_first_key(self, item: tuple[str, str]) -> tuple[str, str]: ... renamed_models: Any renamed_models_rel: Any def generate_renamed_models(self) -> None: ... def generate_created_models(self) -> None: ... def generate_created_proxies(self) -> None: ... def generate_deleted_models(self) -> None: ... def generate_deleted_proxies(self) -> None: ... def create_renamed_fields(self) -> None: ... renamed_fields: Any def generate_renamed_fields(self) -> None: ... def generate_added_fields(self) -> None: ... def generate_removed_fields(self) -> None: ... def generate_altered_fields(self) -> None: ... def create_altered_indexes(self) -> None: ... def generate_renamed_indexes(self) -> None: ... def create_altered_constraints(self) -> None: ... def generate_added_constraints(self) -> None: ... def generate_removed_constraints(self) -> None: ... def generate_added_indexes(self) -> None: ... def generate_removed_indexes(self) -> None: ... def generate_removed_altered_unique_together(self) -> None: ... def generate_altered_unique_together(self) -> None: ... def generate_altered_db_table(self) -> None: ... def generate_altered_db_table_comment(self) -> None: ... def generate_altered_options(self) -> None: ... def generate_altered_order_with_respect_to(self) -> None: ... def generate_altered_managers(self) -> None: ... def arrange_for_graph( self, changes: dict[str, list[Migration]], graph: MigrationGraph, migration_name: str | None = None ) -> dict[str, list[Migration]]: ... @classmethod def parse_number(cls, name: str) -> int: ... django-stubs-5.2.9/django-stubs/db/migrations/exceptions.pyi000066400000000000000000000012311513401051600241650ustar00rootroot00000000000000from django.db.migrations.migration import Migration from django.db.utils import DatabaseError class AmbiguityError(Exception): ... class BadMigrationError(Exception): ... class CircularDependencyError(Exception): ... class InconsistentMigrationHistory(Exception): ... class InvalidBasesError(ValueError): ... class IrreversibleError(RuntimeError): ... class NodeNotFoundError(LookupError): message: str origin: Migration | None node: tuple[str, str] def __init__(self, message: str, node: tuple[str, str], origin: Migration | None = None) -> None: ... class MigrationSchemaMissing(DatabaseError): ... class InvalidMigrationPlan(ValueError): ... django-stubs-5.2.9/django-stubs/db/migrations/executor.pyi000066400000000000000000000033711513401051600236510ustar00rootroot00000000000000from collections.abc import Sequence from typing import Protocol, type_check_only from django.db.backends.base.base import BaseDatabaseWrapper from django.db.migrations.migration import Migration from .loader import MigrationLoader from .recorder import MigrationRecorder from .state import ProjectState @type_check_only class _ProgressCallbackT(Protocol): def __call__(self, action: str, migration: Migration | None = ..., fake: bool | None = ..., /) -> None: ... class MigrationExecutor: connection: BaseDatabaseWrapper loader: MigrationLoader recorder: MigrationRecorder progress_callback: _ProgressCallbackT | None def __init__( self, connection: BaseDatabaseWrapper | None, progress_callback: _ProgressCallbackT | None = None, ) -> None: ... def migration_plan( self, targets: Sequence[tuple[str, str | None]] | set[tuple[str, str]], clean_start: bool = False ) -> list[tuple[Migration, bool]]: ... def migrate( self, targets: Sequence[tuple[str, str | None]] | None, plan: Sequence[tuple[Migration, bool]] | None = None, state: ProjectState | None = None, fake: bool = False, fake_initial: bool = False, ) -> ProjectState: ... def apply_migration( self, state: ProjectState, migration: Migration, fake: bool = False, fake_initial: bool = False ) -> ProjectState: ... def record_migration(self, migration: Migration) -> None: ... def unapply_migration(self, state: ProjectState, migration: Migration, fake: bool = False) -> ProjectState: ... def check_replacements(self) -> None: ... def detect_soft_applied( self, project_state: ProjectState | None, migration: Migration ) -> tuple[bool, ProjectState]: ... django-stubs-5.2.9/django-stubs/db/migrations/graph.pyi000066400000000000000000000045251513401051600231160ustar00rootroot00000000000000from collections.abc import Sequence from typing import Any from django.db.migrations.migration import Migration from django.db.migrations.state import ProjectState class Node: key: tuple[str, str] children: set[Any] parents: set[Any] def __init__(self, key: tuple[str, str]) -> None: ... def __eq__(self, other: object) -> bool: ... def __lt__(self, other: tuple[str, str] | Node) -> bool: ... def __getitem__(self, item: int) -> str: ... def __hash__(self) -> int: ... def add_child(self, child: Node) -> None: ... def add_parent(self, parent: Node) -> None: ... class DummyNode(Node): origin: Any error_message: Any def __init__(self, key: tuple[str, str], origin: Migration | str, error_message: str) -> None: ... def raise_error(self) -> None: ... class MigrationGraph: node_map: dict[tuple[str, str], Node] nodes: dict[tuple[str, str], Migration | None] cached: bool def __init__(self) -> None: ... def add_node(self, key: tuple[str, str], migration: Migration | None) -> None: ... def add_dummy_node(self, key: tuple[str, str], origin: Migration | str, error_message: str) -> None: ... def add_dependency( self, migration: Migration | str | None, child: tuple[str, str], parent: tuple[str, str], skip_validation: bool = False, ) -> None: ... def remove_replaced_nodes(self, replacement: tuple[str, str], replaced: list[tuple[str, str]]) -> None: ... def remove_replacement_node(self, replacement: tuple[str, str], replaced: list[tuple[str, str]]) -> None: ... def validate_consistency(self) -> None: ... def forwards_plan(self, target: tuple[str, str]) -> list[tuple[str, str]]: ... def backwards_plan(self, target: tuple[str, str]) -> list[tuple[str, str]]: ... def iterative_dfs(self, start: Any, forwards: bool = True) -> list[tuple[str, str]]: ... def root_nodes(self, app: str | None = None) -> list[tuple[str, str]]: ... def leaf_nodes(self, app: str | None = None) -> list[tuple[str, str]]: ... def ensure_not_cyclic(self) -> None: ... def make_state( self, nodes: None | tuple[str, str] | Sequence[tuple[str, str]] = None, at_end: bool = True, real_apps: list[str] | None = None, ) -> ProjectState: ... def __contains__(self, node: tuple[str, str]) -> bool: ... django-stubs-5.2.9/django-stubs/db/migrations/loader.pyi000066400000000000000000000036561513401051600232670ustar00rootroot00000000000000from collections.abc import Sequence from typing import Any from django.db.backends.base.base import BaseDatabaseWrapper from django.db.migrations.migration import Migration from django.db.migrations.state import ProjectState from .exceptions import AmbiguityError as AmbiguityError from .exceptions import BadMigrationError as BadMigrationError from .exceptions import InconsistentMigrationHistory as InconsistentMigrationHistory from .exceptions import NodeNotFoundError as NodeNotFoundError MIGRATIONS_MODULE_NAME: str class MigrationLoader: connection: BaseDatabaseWrapper | None disk_migrations: dict[tuple[str, str], Migration] applied_migrations: dict[tuple[str, str], Migration] ignore_no_migrations: bool def __init__( self, connection: BaseDatabaseWrapper | None, load: bool = True, ignore_no_migrations: bool = False, replace_migrations: bool = True, ) -> None: ... @classmethod def migrations_module(cls, app_label: str) -> tuple[str | None, bool]: ... unmigrated_apps: set[str] migrated_apps: set[str] def load_disk(self) -> None: ... def get_migration(self, app_label: str, name_prefix: str) -> Migration: ... def get_migration_by_prefix(self, app_label: str, name_prefix: str) -> Migration: ... def check_key(self, key: tuple[str, str], current_app: str) -> tuple[str, str] | None: ... def add_internal_dependencies(self, key: tuple[str, str], migration: Migration) -> None: ... def add_external_dependencies(self, key: tuple[str, str], migration: Migration) -> None: ... graph: Any replacements: Any def build_graph(self) -> None: ... def check_consistent_history(self, connection: BaseDatabaseWrapper) -> None: ... def detect_conflicts(self) -> dict[str, list[str]]: ... def project_state( self, nodes: tuple[str, str] | Sequence[tuple[str, str]] | None = None, at_end: bool = True ) -> ProjectState: ... django-stubs-5.2.9/django-stubs/db/migrations/migration.pyi000066400000000000000000000023461513401051600240050ustar00rootroot00000000000000from collections.abc import Sequence from typing import ClassVar from django.db.backends.base.schema import BaseDatabaseSchemaEditor from django.db.migrations.operations.base import Operation from django.db.migrations.state import ProjectState from typing_extensions import Self class Migration: operations: ClassVar[Sequence[Operation]] dependencies: ClassVar[Sequence[tuple[str, str]]] run_before: ClassVar[Sequence[tuple[str, str]]] replaces: ClassVar[Sequence[tuple[str, str]]] initial: ClassVar[bool | None] atomic: ClassVar[bool] name: str app_label: str def __init__(self, name: str, app_label: str) -> None: ... def mutate_state(self, project_state: ProjectState, preserve: bool = True) -> ProjectState: ... def apply( self, project_state: ProjectState, schema_editor: BaseDatabaseSchemaEditor, collect_sql: bool = False ) -> ProjectState: ... def unapply( self, project_state: ProjectState, schema_editor: BaseDatabaseSchemaEditor, collect_sql: bool = False ) -> ProjectState: ... class SwappableTuple(tuple[str, str]): setting: str def __new__(cls, value: tuple[str, str], setting: str) -> Self: ... def swappable_dependency(value: str) -> SwappableTuple: ... django-stubs-5.2.9/django-stubs/db/migrations/operations/000077500000000000000000000000001513401051600234475ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/db/migrations/operations/__init__.pyi000066400000000000000000000033031513401051600257300ustar00rootroot00000000000000from .fields import AddField as AddField from .fields import AlterField as AlterField from .fields import RemoveField as RemoveField from .fields import RenameField as RenameField from .models import AddConstraint as AddConstraint from .models import AddIndex as AddIndex from .models import AlterConstraint as AlterConstraint from .models import AlterIndexTogether as AlterIndexTogether from .models import AlterModelManagers as AlterModelManagers from .models import AlterModelOptions as AlterModelOptions from .models import AlterModelTable as AlterModelTable from .models import AlterModelTableComment as AlterModelTableComment from .models import AlterOrderWithRespectTo as AlterOrderWithRespectTo from .models import AlterUniqueTogether as AlterUniqueTogether from .models import CreateModel as CreateModel from .models import DeleteModel as DeleteModel from .models import RemoveConstraint as RemoveConstraint from .models import RemoveIndex as RemoveIndex from .models import RenameIndex as RenameIndex from .models import RenameModel as RenameModel from .special import RunPython as RunPython from .special import RunSQL as RunSQL from .special import SeparateDatabaseAndState as SeparateDatabaseAndState __all__ = [ "AddConstraint", "AddField", "AddIndex", "AlterConstraint", "AlterField", "AlterIndexTogether", "AlterModelManagers", "AlterModelOptions", "AlterModelTable", "AlterModelTableComment", "AlterOrderWithRespectTo", "AlterUniqueTogether", "CreateModel", "DeleteModel", "RemoveConstraint", "RemoveField", "RemoveIndex", "RenameField", "RenameIndex", "RenameModel", "RunPython", "RunSQL", "SeparateDatabaseAndState", ] django-stubs-5.2.9/django-stubs/db/migrations/operations/base.pyi000066400000000000000000000033671513401051600251150ustar00rootroot00000000000000from collections.abc import Sequence from enum import Enum from typing import Any, ClassVar from django.db.backends.base.base import BaseDatabaseWrapper from django.db.backends.base.schema import BaseDatabaseSchemaEditor from django.db.migrations.state import ProjectState from django.db.models import Model from typing_extensions import Self class OperationCategory(str, Enum): ADDITION = "+" REMOVAL = "-" ALTERATION = "~" PYTHON = "p" SQL = "s" MIXED = "?" class Operation: reversible: ClassVar[bool] reduces_to_sql: ClassVar[bool] atomic: ClassVar[bool] elidable: ClassVar[bool] serialization_expand_args: ClassVar[list[str]] category: ClassVar[OperationCategory | None] def __new__(cls, *args: Any, **kwargs: Any) -> Self: ... def deconstruct(self) -> tuple[str, Sequence[Any], dict[str, Any]]: ... def state_forwards(self, app_label: str, state: ProjectState) -> None: ... def database_forwards( self, app_label: str, schema_editor: BaseDatabaseSchemaEditor, from_state: ProjectState, to_state: ProjectState ) -> None: ... def database_backwards( self, app_label: str, schema_editor: BaseDatabaseSchemaEditor, from_state: ProjectState, to_state: ProjectState ) -> None: ... def describe(self) -> str: ... def formatted_description(self) -> str: ... @property def migration_name_fragment(self) -> str: ... def references_model(self, name: str, app_label: str) -> bool: ... def references_field(self, model_name: str, name: str, app_label: str) -> bool: ... def allow_migrate_model(self, connection_alias: BaseDatabaseWrapper | str, model: type[Model]) -> bool: ... def reduce(self, operation: Operation, app_label: str) -> bool | list[Operation]: ... django-stubs-5.2.9/django-stubs/db/migrations/operations/fields.pyi000066400000000000000000000023461513401051600254450ustar00rootroot00000000000000from django.db.models.fields import Field from django.utils.functional import cached_property from .base import Operation class FieldOperation(Operation): model_name: str name: str def __init__(self, model_name: str, name: str, field: Field | None = None) -> None: ... @cached_property def name_lower(self) -> str: ... @cached_property def model_name_lower(self) -> str: ... def is_same_model_operation(self, operation: FieldOperation) -> bool: ... def is_same_field_operation(self, operation: FieldOperation) -> bool: ... class AddField(FieldOperation): field: Field preserve_default: bool def __init__(self, model_name: str, name: str, field: Field, preserve_default: bool = True) -> None: ... class RemoveField(FieldOperation): ... class AlterField(FieldOperation): field: Field preserve_default: bool def __init__(self, model_name: str, name: str, field: Field, preserve_default: bool = True) -> None: ... class RenameField(FieldOperation): old_name: str new_name: str def __init__(self, model_name: str, old_name: str, new_name: str) -> None: ... @cached_property def old_name_lower(self) -> str: ... @cached_property def new_name_lower(self) -> str: ... django-stubs-5.2.9/django-stubs/db/migrations/operations/models.pyi000066400000000000000000000123331513401051600254570ustar00rootroot00000000000000from collections.abc import Sequence from typing import Any from django.db.backends.base.schema import BaseDatabaseSchemaEditor from django.db.migrations.operations.base import Operation from django.db.models.base import Model from django.db.models.constraints import BaseConstraint from django.db.models.fields import Field from django.db.models.indexes import Index from django.db.models.manager import Manager from django.db.models.options import _OptionTogetherT from django.utils.functional import cached_property class ModelOperation(Operation): name: str def __init__(self, name: str) -> None: ... @cached_property def name_lower(self) -> str: ... def can_reduce_through(self, operation: Operation, app_label: str) -> bool: ... class CreateModel(ModelOperation): fields: list[tuple[str, Field]] options: dict[str, Any] bases: Sequence[type[Model] | str] | None managers: Sequence[tuple[str, Manager]] | None def __init__( self, name: str, fields: list[tuple[str, Field]], options: dict[str, Any] | None = None, bases: Sequence[type[Any] | str] | None = None, managers: Sequence[tuple[str, Manager]] | None = None, ) -> None: ... class DeleteModel(ModelOperation): ... class RenameModel(ModelOperation): old_name: str new_name: str def __init__(self, old_name: str, new_name: str) -> None: ... @cached_property def old_name_lower(self) -> str: ... @cached_property def new_name_lower(self) -> str: ... class ModelOptionOperation(ModelOperation): ... class AlterModelTable(ModelOptionOperation): table: str | None def __init__(self, name: str, table: str | None) -> None: ... class AlterModelTableComment(ModelOptionOperation): table_comment: str def __init__(self, name: str, table_comment: str) -> None: ... def state_forwards(self, app_label: str, state: Any) -> None: ... def database_forwards( self, app_label: str, schema_editor: BaseDatabaseSchemaEditor, from_state: Any, to_state: Any ) -> None: ... def database_backwards( self, app_label: str, schema_editor: BaseDatabaseSchemaEditor, from_state: Any, to_state: Any ) -> None: ... def describe(self) -> str: ... @property def migration_name_fragment(self) -> str: ... class AlterTogetherOptionOperation(ModelOptionOperation): option_name: str def __init__( self, name: str, option_value: _OptionTogetherT | None, ) -> None: ... @cached_property def option_value(self) -> set[tuple[str, ...]] | None: ... def state_forwards(self, app_label: str, state: Any) -> None: ... def database_forwards( self, app_label: str, schema_editor: BaseDatabaseSchemaEditor, from_state: Any, to_state: Any ) -> None: ... def database_backwards( self, app_label: str, schema_editor: BaseDatabaseSchemaEditor, from_state: Any, to_state: Any ) -> None: ... def references_field(self, model_name: str, name: str, app_label: str) -> bool: ... def describe(self) -> str: ... @property def migration_name_fragment(self) -> str: ... class AlterUniqueTogether(AlterTogetherOptionOperation): option_name: str unique_together: set[tuple[str, ...]] | None def __init__(self, name: str, unique_together: _OptionTogetherT | None) -> None: ... class AlterIndexTogether(AlterTogetherOptionOperation): option_name: str index_together: set[tuple[str, ...]] | None def __init__(self, name: str, index_together: _OptionTogetherT | None) -> None: ... class AlterOrderWithRespectTo(ModelOptionOperation): option_name: str order_with_respect_to: str | None def __init__(self, name: str, order_with_respect_to: str | None) -> None: ... class AlterModelOptions(ModelOptionOperation): ALTER_OPTION_KEYS: list[str] options: dict[str, Any] def __init__(self, name: str, options: dict[str, Any]) -> None: ... class AlterModelManagers(ModelOptionOperation): managers: Sequence[tuple[str, Manager]] def __init__(self, name: str, managers: Sequence[tuple[str, Manager]]) -> None: ... class IndexOperation(Operation): option_name: str @cached_property def model_name_lower(self) -> str: ... class AddIndex(IndexOperation): model_name: str index: Index def __init__(self, model_name: str, index: Index) -> None: ... class RemoveIndex(IndexOperation): model_name: str name: str def __init__(self, model_name: str, name: str) -> None: ... class RenameIndex(IndexOperation): model_name: str new_name: str old_name: str | None old_fields: Sequence[str] | None def __init__( self, model_name: str, new_name: str, old_name: str | None = None, old_fields: Sequence[str] | None = None, ) -> None: ... @cached_property def old_name_lower(self) -> str: ... @cached_property def new_name_lower(self) -> str: ... class AddConstraint(IndexOperation): def __init__(self, model_name: str, constraint: BaseConstraint) -> None: ... class RemoveConstraint(IndexOperation): def __init__(self, model_name: str, name: str) -> None: ... class AlterConstraint(IndexOperation): def __init__(self, model_name: str, name: str, constraint: BaseConstraint) -> None: ... django-stubs-5.2.9/django-stubs/db/migrations/operations/special.pyi000066400000000000000000000036551513401051600256230ustar00rootroot00000000000000from collections.abc import Mapping, Sequence from typing import Any, Literal, Protocol, TypeAlias, type_check_only from django.db.backends.base.schema import BaseDatabaseSchemaEditor from django.db.migrations.state import StateApps from django.utils.datastructures import _ListOrTuple from .base import Operation _SqlOperations: TypeAlias = str | _ListOrTuple[str | tuple[str, dict[str, Any] | _ListOrTuple[Any] | None]] class SeparateDatabaseAndState(Operation): database_operations: Sequence[Operation] state_operations: Sequence[Operation] def __init__( self, database_operations: Sequence[Operation] | None = None, state_operations: Sequence[Operation] | None = None, ) -> None: ... class RunSQL(Operation): noop: Literal[""] sql: _SqlOperations reverse_sql: _SqlOperations | None state_operations: Sequence[Operation] hints: Mapping[str, Any] def __init__( self, sql: _SqlOperations, reverse_sql: _SqlOperations | None = None, state_operations: Sequence[Operation] | None = None, hints: Mapping[str, Any] | None = None, elidable: bool = False, ) -> None: ... @property def reversible(self) -> bool: ... # type: ignore[override] @type_check_only class _CodeCallable(Protocol): def __call__(self, state_apps: StateApps, schema_editor: BaseDatabaseSchemaEditor, /) -> None: ... class RunPython(Operation): code: _CodeCallable reverse_code: _CodeCallable | None hints: Mapping[str, Any] def __init__( self, code: _CodeCallable, reverse_code: _CodeCallable | None = None, atomic: bool | None = None, hints: Mapping[str, Any] | None = None, elidable: bool = False, ) -> None: ... @staticmethod def noop(apps: StateApps, schema_editor: BaseDatabaseSchemaEditor) -> None: ... @property def reversible(self) -> bool: ... # type: ignore[override] django-stubs-5.2.9/django-stubs/db/migrations/operations/utils.pyi000066400000000000000000000016721513401051600253400ustar00rootroot00000000000000from collections.abc import Iterator from typing import Any, Literal, NamedTuple from django.db.migrations.state import ModelState, ProjectState from django.db.models import Field, Model def resolve_relation( model: str | type[Model], app_label: str | None = ..., model_name: str | None = ... ) -> tuple[str, str]: ... class FieldReference(NamedTuple): to: Any through: Any def field_references( model_tuple: tuple[str, str], field: Field, reference_model_tuple: tuple[str, str], reference_field_name: str | None = ..., reference_field: Field | None = ..., ) -> Literal[False] | FieldReference: ... def get_references( state: ProjectState, model_tuple: tuple[str, str], field_tuple: tuple[()] | tuple[str, Field] = ..., ) -> Iterator[tuple[ModelState, str, Field, FieldReference]]: ... def field_is_referenced(state: ProjectState, model_tuple: tuple[str, str], field_tuple: tuple[str, Field]) -> bool: ... django-stubs-5.2.9/django-stubs/db/migrations/optimizer.pyi000066400000000000000000000004421513401051600240310ustar00rootroot00000000000000from django.db.migrations.operations.base import Operation class MigrationOptimizer: def optimize(self, operations: list[Operation], app_label: str | None) -> list[Operation]: ... def optimize_inner(self, operations: list[Operation], app_label: str | None) -> list[Operation]: ... django-stubs-5.2.9/django-stubs/db/migrations/questioner.pyi000066400000000000000000000021301513401051600242010ustar00rootroot00000000000000from typing import Any from django.db.migrations.state import ModelState from django.db.models.fields import Field class MigrationQuestioner: defaults: dict[str, Any] specified_apps: set[str] dry_run: bool | None def __init__( self, defaults: dict[str, bool] | None = None, specified_apps: set[str] | None = None, dry_run: bool | None = None, ) -> None: ... def ask_initial(self, app_label: str) -> bool: ... def ask_not_null_addition(self, field_name: str, model_name: str) -> Any: ... def ask_not_null_alteration(self, field_name: Any, model_name: Any) -> Any: ... def ask_rename(self, model_name: str, old_name: str, new_name: str, field_instance: Field) -> bool: ... def ask_rename_model(self, old_model_state: ModelState, new_model_state: ModelState) -> bool: ... def ask_merge(self, app_label: str) -> bool: ... def ask_auto_now_add_addition(self, field_name: str, model_name: str) -> Any: ... class InteractiveMigrationQuestioner(MigrationQuestioner): ... class NonInteractiveMigrationQuestioner(MigrationQuestioner): ... django-stubs-5.2.9/django-stubs/db/migrations/recorder.pyi000066400000000000000000000015671513401051600236250ustar00rootroot00000000000000from typing import Any, ClassVar from django.db.backends.base.base import BaseDatabaseWrapper from django.db.models.base import Model from django.db.models.manager import Manager from django.db.models.query import QuerySet from typing_extensions import Self class MigrationRecorder: class Migration(Model): app: Any name: Any applied: Any objects: ClassVar[Manager[Self]] connection: BaseDatabaseWrapper def __init__(self, connection: BaseDatabaseWrapper) -> None: ... @property def migration_qs(self) -> QuerySet: ... def has_table(self) -> bool: ... def ensure_schema(self) -> None: ... def applied_migrations(self) -> dict[tuple[str, str], Migration]: ... def record_applied(self, app: str, name: str) -> None: ... def record_unapplied(self, app: str, name: str) -> None: ... def flush(self) -> None: ... django-stubs-5.2.9/django-stubs/db/migrations/serializer.pyi000066400000000000000000000036421513401051600241650ustar00rootroot00000000000000from collections.abc import Callable from typing import Any FUNCTION_TYPES: tuple[type, ...] class BaseSerializer: value: Any def __init__(self, value: Any) -> None: ... def serialize(self) -> tuple[str, set[str]]: ... class BaseSequenceSerializer(BaseSerializer): ... class BaseUnorderedSequenceSerializer(BaseSequenceSerializer): ... class BaseSimpleSerializer(BaseSerializer): ... class DateTimeSerializer(BaseSerializer): ... class DatetimeDatetimeSerializer(BaseSerializer): ... class DecimalSerializer(BaseSerializer): ... class DeconstructableSerializer(BaseSerializer): @staticmethod def serialize_deconstructed( path: str, args: list[Any], kwargs: dict[str, Callable | int | str] ) -> tuple[str, set[str]]: ... class DictionarySerializer(BaseSerializer): ... class EnumSerializer(BaseSerializer): ... class FloatSerializer(BaseSimpleSerializer): ... class FrozensetSerializer(BaseUnorderedSequenceSerializer): ... class FunctionTypeSerializer(BaseSerializer): ... class FunctoolsPartialSerializer(BaseSerializer): ... class IterableSerializer(BaseSerializer): ... class ModelFieldSerializer(DeconstructableSerializer): ... class ModelManagerSerializer(DeconstructableSerializer): ... class OperationSerializer(BaseSerializer): ... class PathLikeSerializer(BaseSerializer): ... class PathSerializer(BaseSerializer): ... class RegexSerializer(BaseSerializer): ... class SequenceSerializer(BaseSequenceSerializer): ... class SetSerializer(BaseUnorderedSequenceSerializer): ... class SettingsReferenceSerializer(BaseSerializer): ... class TupleSerializer(BaseSequenceSerializer): ... class TypeSerializer(BaseSerializer): ... class UUIDSerializer(BaseSerializer): ... def serializer_factory(value: Any) -> BaseSerializer: ... class Serializer: @classmethod def register(cls, type_: type, serializer: type[BaseSerializer]) -> None: ... @classmethod def unregister(cls, type_: type) -> None: ... django-stubs-5.2.9/django-stubs/db/migrations/state.pyi000066400000000000000000000115511513401051600231320ustar00rootroot00000000000000from collections.abc import Iterable, Iterator, Sequence from contextlib import AbstractContextManager from typing import Any from django.apps import AppConfig from django.apps.registry import Apps from django.db.models.base import Model from django.db.models.fields import Field from django.db.models.manager import Manager from django.utils.functional import cached_property class AppConfigStub(AppConfig): def __init__(self, label: str) -> None: ... class ModelState: name: str app_label: str fields: dict[str, Field] options: dict[str, Any] bases: Sequence[type[Model] | str] managers: list[tuple[str, Manager]] def __init__( self, app_label: str, name: str, fields: list[tuple[str, Field]] | dict[str, Field], options: dict[str, Any] | None = None, bases: Sequence[type[Model] | str] | None = None, managers: list[tuple[str, Manager]] | None = None, ) -> None: ... def clone(self) -> ModelState: ... def construct_managers(self) -> Iterator[tuple[str, Manager]]: ... @classmethod def from_model(cls, model: type[Model], exclude_rels: bool = False) -> ModelState: ... def get_field(self, field_name: str) -> Field: ... @cached_property def name_lower(self) -> str: ... def render(self, apps: Apps) -> Any: ... def get_index_by_name(self, name: str) -> Any: ... def get_constraint_by_name(self, name: str) -> Any: ... def __eq__(self, other: object) -> bool: ... def get_related_models_tuples(model: type[Model]) -> set[tuple[str, str]]: ... def get_related_models_recursive(model: type[Model]) -> set[tuple[str, str]]: ... class ProjectState: is_delayed: bool models: dict[Any, Any] real_apps: set[str] def __init__( self, models: dict[tuple[str, str], ModelState] | None = None, real_apps: set[str] | None = None ) -> None: ... @property def relations(self) -> Any: ... def add_model(self, model_state: ModelState) -> None: ... @cached_property def apps(self) -> StateApps: ... def clear_delayed_apps_cache(self) -> None: ... def clone(self) -> ProjectState: ... @classmethod def from_apps(cls, apps: Apps) -> ProjectState: ... def reload_model(self, app_label: str, model_name: str, delay: bool = False) -> None: ... def reload_models(self, models: list[Any], delay: bool = True) -> None: ... def remove_model(self, app_label: str, model_name: str) -> None: ... def rename_model(self, app_label: str, old_name: str, new_name: str) -> None: ... def alter_model_options( self, app_label: str, model_name: str, options: dict[str, Any], option_keys: Iterable[str] | None = None ) -> None: ... def remove_model_options(self, app_label: str, model_name: str, option_name: str, value_to_remove: Any) -> None: ... def alter_model_managers(self, app_label: str, model_name: str, managers: list[tuple[str, Manager]]) -> None: ... def add_index(self, app_label: str, model_name: str, index: Any) -> None: ... def remove_index(self, app_label: str, model_name: str, index_name: str) -> None: ... def rename_index(self, app_label: str, model_name: str, old_index_name: str, new_index_name: str) -> None: ... def add_constraint(self, app_label: str, model_name: str, constraint: Any) -> None: ... def remove_constraint(self, app_label: str, model_name: str, constraint_name: str) -> None: ... def add_field(self, app_label: str, model_name: str, name: str, field: Field, preserve_default: Any) -> None: ... def remove_field(self, app_label: str, model_name: str, name: str) -> None: ... def alter_field(self, app_label: str, model_name: str, name: str, field: Field, preserve_default: Any) -> None: ... def rename_field(self, app_label: str, model_name: str, old_name: str, new_name: str) -> None: ... def update_model_field_relation( self, model: type[Model], model_key: tuple[str, str], field_name: str, field: Field, concretes: Any ) -> None: ... def resolve_model_field_relations( self, model_key: tuple[str, str], field_name: str, field: Field, concretes: Any | None = None ) -> None: ... def resolve_model_relations(self, model_key: tuple[str, str], concretes: Any | None = None) -> None: ... def resolve_fields_and_relations(self) -> None: ... def get_concrete_model_key(self, model: type[Model]) -> Any: ... class StateApps(Apps): real_models: list[ModelState] def __init__( self, real_apps: list[str], models: dict[tuple[str, str], ModelState], ignore_swappable: bool = False ) -> None: ... def bulk_update(self) -> AbstractContextManager[None]: ... def clone(self) -> StateApps: ... def render_multiple(self, model_states: list[ModelState]) -> None: ... def register_model(self, app_label: str, model: type[Model]) -> None: ... def unregister_model(self, app_label: str, model_name: str) -> None: ... django-stubs-5.2.9/django-stubs/db/migrations/utils.pyi000066400000000000000000000003031513401051600231430ustar00rootroot00000000000000from typing import Any COMPILED_REGEX_TYPE: Any class RegexObject: pattern: str flags: int def __init__(self, obj: Any) -> None: ... def get_migration_name_timestamp() -> str: ... django-stubs-5.2.9/django-stubs/db/migrations/writer.pyi000066400000000000000000000023221513401051600233220ustar00rootroot00000000000000from typing import Any from django.db.migrations.migration import Migration from django.db.migrations.operations.base import Operation from django.db.migrations.serializer import BaseSerializer class OperationWriter: operation: Operation buff: list[Any] indentation: int def __init__(self, operation: Operation, indentation: int = 2) -> None: ... def serialize(self) -> tuple[str, set[str]]: ... def indent(self) -> None: ... def unindent(self) -> None: ... def feed(self, line: str) -> None: ... def render(self) -> str: ... class MigrationWriter: migration: Migration needs_manual_porting: bool def __init__(self, migration: Migration, include_header: bool = True) -> None: ... def as_string(self) -> str: ... @property def basedir(self) -> str: ... @property def filename(self) -> str: ... @property def path(self) -> str: ... @classmethod def serialize(cls, value: Any) -> tuple[str, set[str]]: ... @classmethod def register_serializer(cls, type_: type, serializer: type[BaseSerializer]) -> None: ... @classmethod def unregister_serializer(cls, type_: type) -> None: ... MIGRATION_HEADER_TEMPLATE: str MIGRATION_TEMPLATE: str django-stubs-5.2.9/django-stubs/db/models/000077500000000000000000000000001513401051600203735ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/db/models/__init__.pyi000066400000000000000000000153721513401051600226650ustar00rootroot00000000000000from django.core.exceptions import ObjectDoesNotExist as ObjectDoesNotExist from . import lookups as lookups from . import signals as signals from .aggregates import Aggregate as Aggregate from .aggregates import Avg as Avg from .aggregates import Count as Count from .aggregates import Max as Max from .aggregates import Min as Min from .aggregates import StdDev as StdDev from .aggregates import Sum as Sum from .aggregates import Variance as Variance from .base import DEFERRED as DEFERRED from .base import Model as Model from .constraints import BaseConstraint as BaseConstraint from .constraints import CheckConstraint as CheckConstraint from .constraints import Deferrable as Deferrable from .constraints import UniqueConstraint as UniqueConstraint from .deletion import CASCADE as CASCADE from .deletion import DO_NOTHING as DO_NOTHING from .deletion import PROTECT as PROTECT from .deletion import RESTRICT as RESTRICT from .deletion import SET as SET from .deletion import SET_DEFAULT as SET_DEFAULT from .deletion import SET_NULL as SET_NULL from .deletion import ProtectedError as ProtectedError from .deletion import RestrictedError as RestrictedError from .enums import Choices as Choices from .enums import IntegerChoices as IntegerChoices from .enums import TextChoices as TextChoices from .expressions import Case as Case from .expressions import Exists as Exists from .expressions import Expression as Expression from .expressions import ExpressionList as ExpressionList from .expressions import ExpressionWrapper as ExpressionWrapper from .expressions import F as F from .expressions import Func as Func from .expressions import OrderBy as OrderBy from .expressions import OuterRef as OuterRef from .expressions import RowRange as RowRange from .expressions import Subquery as Subquery from .expressions import Value as Value from .expressions import ValueRange as ValueRange from .expressions import When as When from .expressions import Window as Window from .expressions import WindowFrame as WindowFrame from .expressions import WindowFrameExclusion as WindowFrameExclusion from .fields import BLANK_CHOICE_DASH as BLANK_CHOICE_DASH from .fields import NOT_PROVIDED as NOT_PROVIDED from .fields import AutoField as AutoField from .fields import BigAutoField as BigAutoField from .fields import BigIntegerField as BigIntegerField from .fields import BinaryField as BinaryField from .fields import BooleanField as BooleanField from .fields import CharField as CharField from .fields import CommaSeparatedIntegerField as CommaSeparatedIntegerField from .fields import DateField as DateField from .fields import DateTimeField as DateTimeField from .fields import DecimalField as DecimalField from .fields import DurationField as DurationField from .fields import EmailField as EmailField from .fields import Empty as Empty from .fields import Field as Field from .fields import FilePathField as FilePathField from .fields import FloatField as FloatField from .fields import GenericIPAddressField as GenericIPAddressField from .fields import IntegerField as IntegerField from .fields import IPAddressField as IPAddressField from .fields import NullBooleanField as NullBooleanField from .fields import PositiveBigIntegerField as PositiveBigIntegerField from .fields import PositiveIntegerField as PositiveIntegerField from .fields import PositiveSmallIntegerField as PositiveSmallIntegerField from .fields import SlugField as SlugField from .fields import SmallAutoField as SmallAutoField from .fields import SmallIntegerField as SmallIntegerField from .fields import TextField as TextField from .fields import TimeField as TimeField from .fields import URLField as URLField from .fields import UUIDField as UUIDField from .fields.composite import CompositePrimaryKey from .fields.files import FileField as FileField from .fields.files import ImageField as ImageField from .fields.generated import GeneratedField as GeneratedField from .fields.json import JSONField as JSONField from .fields.proxy import OrderWrt as OrderWrt from .fields.related import ForeignKey as ForeignKey from .fields.related import ForeignObject as ForeignObject from .fields.related import ForeignObjectRel as ForeignObjectRel from .fields.related import ManyToManyField as ManyToManyField from .fields.related import ManyToManyRel as ManyToManyRel from .fields.related import ManyToOneRel as ManyToOneRel from .fields.related import OneToOneField as OneToOneField from .fields.related import OneToOneRel as OneToOneRel from .indexes import Index as Index from .lookups import Lookup as Lookup from .lookups import Transform as Transform from .manager import Manager as Manager from .query import Prefetch as Prefetch from .query import QuerySet as QuerySet from .query import aprefetch_related_objects as aprefetch_related_objects from .query import prefetch_related_objects as prefetch_related_objects from .query_utils import FilteredRelation as FilteredRelation from .query_utils import Q as Q __all__ = [ "BLANK_CHOICE_DASH", "CASCADE", "DEFERRED", "DO_NOTHING", "NOT_PROVIDED", "PROTECT", "RESTRICT", "SET", "SET_DEFAULT", "SET_NULL", "Aggregate", "AutoField", "Avg", "BaseConstraint", "BigAutoField", "BigIntegerField", "BinaryField", "BooleanField", "Case", "CharField", "CheckConstraint", "Choices", "CommaSeparatedIntegerField", "CompositePrimaryKey", "Count", "DateField", "DateTimeField", "DecimalField", "Deferrable", "DurationField", "EmailField", "Empty", "Exists", "Expression", "ExpressionList", "ExpressionWrapper", "F", "Field", "FileField", "FilePathField", "FilteredRelation", "FloatField", "ForeignKey", "ForeignObject", "ForeignObjectRel", "Func", "GeneratedField", "GenericIPAddressField", "IPAddressField", "ImageField", "Index", "IntegerChoices", "IntegerField", "JSONField", "Lookup", "Manager", "ManyToManyField", "ManyToManyRel", "ManyToOneRel", "Max", "Min", "Model", "NullBooleanField", "ObjectDoesNotExist", "OneToOneField", "OneToOneRel", "OrderBy", "OrderWrt", "OuterRef", "PositiveBigIntegerField", "PositiveIntegerField", "PositiveSmallIntegerField", "Prefetch", "ProtectedError", "Q", "QuerySet", "RestrictedError", "RowRange", "SlugField", "SmallAutoField", "SmallIntegerField", "StdDev", "Subquery", "Sum", "TextChoices", "TextField", "TimeField", "Transform", "URLField", "UUIDField", "UniqueConstraint", "Value", "ValueRange", "Variance", "When", "Window", "WindowFrame", "WindowFrameExclusion", "aprefetch_related_objects", "prefetch_related_objects", "signals", ] django-stubs-5.2.9/django-stubs/db/models/aggregates.pyi000066400000000000000000000016141513401051600232310ustar00rootroot00000000000000from typing import Any, ClassVar from django.db.models.expressions import Func from django.db.models.fields import IntegerField from django.db.models.functions.mixins import FixDurationInputMixin, NumericOutputFieldMixin class Aggregate(Func): filter_template: str filter: Any allow_distinct: bool empty_result_set_value: int | None def __init__(self, *expressions: Any, distinct: bool = False, filter: Any | None = None, **extra: Any) -> None: ... class Avg(FixDurationInputMixin, NumericOutputFieldMixin, Aggregate): ... class Count(Aggregate): output_field: ClassVar[IntegerField] class Max(Aggregate): ... class Min(Aggregate): ... class StdDev(NumericOutputFieldMixin, Aggregate): ... class Sum(FixDurationInputMixin, Aggregate): ... class Variance(NumericOutputFieldMixin, Aggregate): ... __all__ = ["Aggregate", "Avg", "Count", "Max", "Min", "StdDev", "Sum", "Variance"] django-stubs-5.2.9/django-stubs/db/models/base.pyi000066400000000000000000000116661513401051600220420ustar00rootroot00000000000000from collections.abc import Collection, Iterable, Sequence from typing import Any, ClassVar, Final, TypeVar, overload from django.core.checks.messages import CheckMessage from django.core.exceptions import MultipleObjectsReturned as BaseMultipleObjectsReturned from django.core.exceptions import ObjectDoesNotExist, ValidationError from django.db.models import BaseConstraint, Field, QuerySet from django.db.models.manager import Manager from django.db.models.options import Options from typing_extensions import Self _Self = TypeVar("_Self", bound=Model) class Deferred: ... DEFERRED: Deferred class ModelStateFieldsCacheDescriptor: @overload def __get__(self, inst: None, owner: object) -> Self: ... @overload def __get__(self, inst: object, owner: object) -> dict[Any, Any]: ... class ModelState: db: str | None adding: bool fields_cache: ModelStateFieldsCacheDescriptor class ModelBase(type): @property def _default_manager(cls: type[_Self]) -> Manager[_Self]: ... # type: ignore[misc] @property def _base_manager(cls: type[_Self]) -> Manager[_Self]: ... # type: ignore[misc] class Model(metaclass=ModelBase): # Note: these two metaclass generated attributes don't really exist on the 'Model' # class, runtime they are only added on concrete subclasses of 'Model'. The # metaclass also sets up correct inheritance from concrete parent models exceptions. # Our mypy plugin aligns with this behaviour and will remove the 2 attributes below # and re-add them to correct concrete subclasses of 'Model' DoesNotExist: Final[type[ObjectDoesNotExist]] MultipleObjectsReturned: Final[type[BaseMultipleObjectsReturned]] # This 'objects' attribute will be deleted, via the plugin, in favor of managing it # to only exist on subclasses it exists on during runtime. objects: ClassVar[Manager[Self]] _meta: ClassVar[Options[Self]] pk: Any _state: ModelState def __init__(self, *args: Any, **kwargs: Any) -> None: ... @classmethod def add_to_class(cls, name: str, value: Any) -> Any: ... @classmethod def from_db(cls, db: str | None, field_names: Collection[str], values: Collection[Any]) -> Self: ... def _do_update( self, base_qs: QuerySet[Self], using: str | None, pk_val: Any, values: Collection[tuple[Field, type[Model] | None, Any]], update_fields: Iterable[str] | None, forced_update: bool, ) -> bool: ... def delete(self, using: Any | None = None, keep_parents: bool = False) -> tuple[int, dict[str, int]]: ... async def adelete(self, using: Any | None = None, keep_parents: bool = False) -> tuple[int, dict[str, int]]: ... def full_clean( self, exclude: Iterable[str] | None = None, validate_unique: bool = True, validate_constraints: bool = True ) -> None: ... def clean(self) -> None: ... def clean_fields(self, exclude: Collection[str] | None = None) -> None: ... def validate_unique(self, exclude: Collection[str] | None = None) -> None: ... def date_error_message(self, lookup_type: str, field_name: str, unique_for: str) -> ValidationError: ... def unique_error_message(self, model_class: type[Self], unique_check: Sequence[str]) -> ValidationError: ... def validate_constraints(self, exclude: Collection[str] | None = None) -> None: ... def get_constraints(self) -> list[tuple[type[Model], Sequence[BaseConstraint]]]: ... def save( self, *, force_insert: bool | tuple[ModelBase, ...] = False, force_update: bool = False, using: str | None = None, update_fields: Iterable[str] | None = None, ) -> None: ... async def asave( self, *, force_insert: bool | tuple[ModelBase, ...] = False, force_update: bool = False, using: str | None = None, update_fields: Iterable[str] | None = None, ) -> None: ... def save_base( self, raw: bool = False, force_insert: bool | tuple[ModelBase, ...] = False, force_update: bool = False, using: str | None = None, update_fields: Iterable[str] | None = None, ) -> None: ... def refresh_from_db( self, using: str | None = None, fields: Iterable[str] | None = None, from_queryset: QuerySet[Self] | None = None, ) -> None: ... async def arefresh_from_db( self, using: str | None = None, fields: Iterable[str] | None = None, from_queryset: QuerySet[Self] | None = None, ) -> None: ... def serializable_value(self, field_name: str) -> Any: ... def prepare_database_save(self, field: Field) -> Any: ... def get_deferred_fields(self) -> set[str]: ... @classmethod def check(cls, **kwargs: Any) -> list[CheckMessage]: ... def __getstate__(self) -> dict: ... def _get_pk_val(self, meta: Options[Self] | None = None) -> str: ... def model_unpickle(model_id: tuple[str, str] | type[Model]) -> Model: ... django-stubs-5.2.9/django-stubs/db/models/constants.pyi000066400000000000000000000002201513401051600231240ustar00rootroot00000000000000from enum import Enum from typing import cast LOOKUP_SEP: str class OnConflict(Enum): IGNORE = cast(str, ...) UPDATE = cast(str, ...) django-stubs-5.2.9/django-stubs/db/models/constraints.pyi000066400000000000000000000072531513401051600234740ustar00rootroot00000000000000from collections.abc import Sequence from enum import Enum from typing import Any, cast, overload from django.db.backends.base.schema import BaseDatabaseSchemaEditor from django.db.models.base import Model from django.db.models.expressions import BaseExpression, Combinable from django.db.models.query_utils import Q from django.utils.functional import _StrOrPromise from typing_extensions import Self, deprecated class Deferrable(Enum): DEFERRED = cast(str, ...) IMMEDIATE = cast(str, ...) class BaseConstraint: name: str violation_error_code: str | None violation_error_message: _StrOrPromise | None default_violation_error_message: _StrOrPromise @overload def __init__( self, *, name: str, violation_error_code: str | None = None, violation_error_message: _StrOrPromise | None = None, ) -> None: ... @overload @deprecated("Passing positional arguments to BaseConstraint is deprecated and will be removed in Django 6.0") def __init__( self, *args: Any, name: str | None = None, violation_error_code: str | None = None, violation_error_message: _StrOrPromise | None = None, ) -> None: ... def constraint_sql(self, model: type[Model] | None, schema_editor: BaseDatabaseSchemaEditor | None) -> str: ... def create_sql(self, model: type[Model] | None, schema_editor: BaseDatabaseSchemaEditor | None) -> str: ... def remove_sql(self, model: type[Model] | None, schema_editor: BaseDatabaseSchemaEditor | None) -> str: ... def get_violation_error_message(self) -> str: ... def deconstruct(self) -> tuple[str, Sequence[Any], dict[str, Any]]: ... def clone(self) -> Self: ... class CheckConstraint(BaseConstraint): check: Q | BaseExpression condition: Q | BaseExpression @overload @deprecated("check keyword argument is deprecated in favor of condition and will be removed in Django 6.0") def __init__( self, *, name: str, condition: None = None, check: Q | BaseExpression, violation_error_code: str | None = None, violation_error_message: _StrOrPromise | None = None, ) -> None: ... @overload def __init__( self, *, name: str, condition: Q | BaseExpression, check: None = None, violation_error_code: str | None = None, violation_error_message: _StrOrPromise | None = None, ) -> None: ... class UniqueConstraint(BaseConstraint): expressions: Sequence[BaseExpression | Combinable] fields: Sequence[str] condition: Q | None deferrable: Deferrable | None nulls_distinct: bool | None @overload def __init__( self, *expressions: str | BaseExpression | Combinable, fields: None = None, name: str | None = None, condition: Q | None = None, deferrable: Deferrable | None = None, include: Sequence[str] | None = None, opclasses: Sequence[Any] = (), nulls_distinct: bool | None = None, violation_error_code: str | None = None, violation_error_message: _StrOrPromise | None = None, ) -> None: ... @overload def __init__( self, *, fields: Sequence[str], name: str | None = None, condition: Q | None = None, deferrable: Deferrable | None = None, include: Sequence[str] | None = None, opclasses: Sequence[Any] = (), nulls_distinct: bool | None = None, violation_error_code: str | None = None, violation_error_message: _StrOrPromise | None = None, ) -> None: ... __all__ = ["BaseConstraint", "CheckConstraint", "Deferrable", "UniqueConstraint"] django-stubs-5.2.9/django-stubs/db/models/deletion.pyi000066400000000000000000000072471513401051600227330ustar00rootroot00000000000000from collections import defaultdict from collections.abc import Callable, Iterable, Iterator, Sequence from typing import Any from django.db import IntegrityError from django.db.models.base import Model from django.db.models.fields import Field from django.db.models.options import Options from django.db.models.query import QuerySet from django.utils.datastructures import _IndexableCollection def CASCADE( collector: Collector, field: Field[Any, Any], sub_objs: QuerySet[Model], using: str, ) -> None: ... def SET_NULL( collector: Collector, field: Field[Any, Any], sub_objs: QuerySet[Model], using: str, ) -> None: ... def SET_DEFAULT( collector: Collector, field: Field[Any, Any], sub_objs: QuerySet[Model], using: str, ) -> None: ... def DO_NOTHING( collector: Collector, field: Field[Any, Any], sub_objs: QuerySet[Model], using: str, ) -> None: ... def PROTECT( collector: Collector, field: Field[Any, Any], sub_objs: QuerySet[Model], using: str, ) -> None: ... def RESTRICT( collector: Collector, field: Field[Any, Any], sub_objs: QuerySet[Model], using: str, ) -> None: ... def SET(value: Any) -> Callable[..., Any]: ... def get_candidate_relations_to_delete(opts: Options) -> Iterable[Field]: ... class ProtectedError(IntegrityError): protected_objects: set[Model] def __init__(self, msg: str, protected_objects: set[Model]) -> None: ... class RestrictedError(IntegrityError): restricted_objects: set[Model] def __init__(self, msg: str, restricted_objects: set[Model]) -> None: ... class Collector: using: str origin: Model | QuerySet[Model] | None data: dict[type[Model], set[Model] | list[Model]] field_updates: defaultdict[tuple[Field, Any], list[Model]] restricted_objects: defaultdict[Model, defaultdict[Field, set[Model]]] fast_deletes: list[QuerySet[Model]] dependencies: defaultdict[Model, set[Model]] def __init__(self, using: str, origin: Model | QuerySet[Model] | None = None) -> None: ... def add( self, objs: _IndexableCollection[Model], source: type[Model] | None = None, nullable: bool = False, reverse_dependency: bool = False, ) -> list[Model]: ... def add_dependency(self, model: type[Model], dependency: type[Model], reverse_dependency: bool = False) -> None: ... def add_field_update(self, field: Field, value: Any, objs: _IndexableCollection[Model]) -> None: ... def add_restricted_objects(self, field: Field, objs: _IndexableCollection[Model]) -> None: ... def clear_restricted_objects_from_set(self, model: type[Model], objs: set[Model]) -> None: ... def clear_restricted_objects_from_queryset(self, model: type[Model], qs: QuerySet[Model]) -> None: ... def can_fast_delete(self, objs: Model | Iterable[Model], from_field: Field | None = None) -> bool: ... def get_del_batches( self, objs: _IndexableCollection[Model], fields: Iterable[Field] ) -> Sequence[Sequence[Model]]: ... def collect( self, objs: _IndexableCollection[Model | None], source: type[Model] | None = None, nullable: bool = False, collect_related: bool = True, source_attr: str | None = None, reverse_dependency: bool = False, keep_parents: bool = False, fail_on_restricted: bool = True, ) -> None: ... def related_objects( self, related_model: type[Model], related_fields: Iterable[Field], objs: _IndexableCollection[Model] ) -> QuerySet[Model]: ... def instances_with_model(self) -> Iterator[tuple[type[Model], Model]]: ... def sort(self) -> None: ... def delete(self) -> tuple[int, dict[str, int]]: ... django-stubs-5.2.9/django-stubs/db/models/enums.pyi000066400000000000000000000056141513401051600222530ustar00rootroot00000000000000import enum import sys from typing import Any, Literal, TypeVar, overload, type_check_only from _typeshed import ConvertibleToInt from django.utils.functional import _StrOrPromise from typing_extensions import deprecated if sys.version_info >= (3, 11): from enum import EnumType, IntEnum, StrEnum from enum import property as enum_property else: from enum import EnumMeta as EnumType from types import DynamicClassAttribute as enum_property class ReprEnum(enum.Enum): ... # type: ignore[misc] class IntEnum(int, ReprEnum): ... # type: ignore[misc] class StrEnum(str, ReprEnum): ... # type: ignore[misc] _Self = TypeVar("_Self", bound=ChoicesType) class ChoicesType(EnumType): __empty__: _StrOrPromise def __new__( metacls: type[_Self], classname: str, bases: tuple[type, ...], classdict: enum._EnumDict, **kwds: Any ) -> _Self: ... @property def names(self) -> list[str]: ... @property def choices(self) -> list[tuple[Any, _StrOrPromise]]: ... @property def labels(self) -> list[_StrOrPromise]: ... @property def values(self) -> list[Any]: ... if sys.version_info < (3, 12): def __contains__(self, member: Any) -> bool: ... @deprecated("ChoicesMeta is deprecated in favor of ChoicesType and will be removed in Django 6.0.") class ChoicesMeta(ChoicesType): ... class Choices(enum.Enum, metaclass=ChoicesType): # type: ignore[misc] _label_: _StrOrPromise do_not_call_in_templates: Literal[True] @enum_property def label(self) -> _StrOrPromise: ... @enum_property def value(self) -> Any: ... # fake, to keep simulate class properties @type_check_only class _IntegerChoicesType(ChoicesType): @property def choices(self) -> list[tuple[int, _StrOrPromise]]: ... @property def values(self) -> list[int]: ... # In reality, the `__init__` overloads provided below should also support # all the arguments of `int.__new__`/`str.__new__` (e.g. `base`, `encoding`). # They are omitted on purpose to avoid having convoluted stubs for these enums: class IntegerChoices(Choices, IntEnum, metaclass=_IntegerChoicesType): # type: ignore[misc] @overload def __init__(self, x: ConvertibleToInt) -> None: ... @overload def __init__(self, x: ConvertibleToInt, label: _StrOrPromise) -> None: ... @enum_property def value(self) -> int: ... # fake, to keep simulate class properties @type_check_only class _TextChoicesType(ChoicesType): @property def choices(self) -> list[tuple[str, _StrOrPromise]]: ... @property def values(self) -> list[str]: ... class TextChoices(Choices, StrEnum, metaclass=_TextChoicesType): # type: ignore[misc] @overload def __init__(self, object: str) -> None: ... @overload def __init__(self, object: str, label: _StrOrPromise) -> None: ... @enum_property def value(self) -> str: ... __all__ = ["Choices", "IntegerChoices", "TextChoices"] django-stubs-5.2.9/django-stubs/db/models/expressions.pyi000066400000000000000000000271431513401051600235070ustar00rootroot00000000000000import datetime from collections.abc import Callable, Iterable, Iterator, Mapping, Sequence from decimal import Decimal from enum import Enum from typing import Any, ClassVar, Generic, Literal, NoReturn, TypeAlias, TypeVar from django.db.backends.base.base import BaseDatabaseWrapper from django.db.models import Q, fields from django.db.models.fields import Field from django.db.models.lookups import Lookup, Transform from django.db.models.query import QuerySet from django.db.models.sql.compiler import SQLCompiler, _AsSqlType, _ParamsT from django.db.models.sql.query import Query from django.utils.deconstruct import _Deconstructible from django.utils.functional import cached_property from typing_extensions import Self class SQLiteNumericMixin: def as_sqlite(self, compiler: SQLCompiler, connection: BaseDatabaseWrapper, **extra_context: Any) -> _AsSqlType: ... _Numeric: TypeAlias = float | Decimal class Combinable: ADD: str SUB: str MUL: str DIV: str POW: str MOD: str BITAND: str BITOR: str BITLEFTSHIFT: str BITRIGHTSHIFT: str BITXOR: str def __neg__(self) -> CombinedExpression: ... def __add__(self, other: datetime.timedelta | Combinable | _Numeric | str | None) -> CombinedExpression: ... def __sub__(self, other: datetime.timedelta | Combinable | _Numeric) -> CombinedExpression: ... def __mul__(self, other: datetime.timedelta | Combinable | _Numeric) -> CombinedExpression: ... def __truediv__(self, other: Combinable | _Numeric) -> CombinedExpression: ... def __mod__(self, other: int | Combinable) -> CombinedExpression: ... def __pow__(self, other: _Numeric | Combinable) -> CombinedExpression: ... def __and__(self, other: Combinable | Q) -> Q: ... def bitand(self, other: int) -> CombinedExpression: ... def bitleftshift(self, other: int) -> CombinedExpression: ... def bitrightshift(self, other: int) -> CombinedExpression: ... def __xor__(self, other: Combinable | Q) -> Q: ... def bitxor(self, other: int) -> CombinedExpression: ... def __or__(self, other: Combinable | Q) -> Q: ... def bitor(self, other: int) -> CombinedExpression: ... def __radd__(self, other: datetime.datetime | _Numeric | Combinable | None) -> CombinedExpression: ... def __rsub__(self, other: _Numeric | Combinable) -> CombinedExpression: ... def __rmul__(self, other: _Numeric | Combinable) -> CombinedExpression: ... def __rtruediv__(self, other: _Numeric | Combinable) -> CombinedExpression: ... def __rmod__(self, other: int | Combinable) -> CombinedExpression: ... def __rpow__(self, other: _Numeric | Combinable) -> CombinedExpression: ... def __rand__(self, other: Any) -> Combinable: ... def __ror__(self, other: Any) -> Combinable: ... def __rxor__(self, other: Any) -> Combinable: ... def __invert__(self) -> NegatedExpression[Combinable]: ... class BaseExpression: is_summary: bool filterable: bool window_compatible: bool allowed_default: bool constraint_validation_compatible: bool def __init__(self, output_field: Field | None = None) -> None: ... def get_db_converters(self, connection: BaseDatabaseWrapper) -> list[Callable]: ... def get_source_expressions(self) -> list[Any]: ... def set_source_expressions(self, exprs: Sequence[Combinable | Expression]) -> None: ... def as_sql(self, compiler: SQLCompiler, connection: BaseDatabaseWrapper) -> _AsSqlType: ... @cached_property def contains_aggregate(self) -> bool: ... @cached_property def contains_over_clause(self) -> bool: ... @cached_property def contains_column_references(self) -> bool: ... @cached_property def contains_subquery(self) -> bool: ... def resolve_expression( self, query: Any | None = None, allow_joins: bool = True, reuse: set[str] | None = None, summarize: bool = False, for_save: bool = False, ) -> Self: ... @property def conditional(self) -> bool: ... @property def field(self) -> Field: ... @cached_property def output_field(self) -> Field: ... @cached_property def convert_value(self) -> Callable: ... def get_lookup(self, lookup: str) -> type[Lookup] | None: ... def get_transform(self, name: str) -> type[Transform] | None: ... def relabeled_clone(self, change_map: Mapping[str, str]) -> Self: ... def get_refs(self) -> set[str]: ... def copy(self) -> Self: ... def get_group_by_cols(self) -> list[BaseExpression]: ... def get_source_fields(self) -> list[Field | None]: ... def asc( self, *, descending: bool = ..., nulls_first: bool | None = ..., nulls_last: bool | None = ..., ) -> OrderBy: ... def desc( self, *, nulls_first: bool | None = ..., nulls_last: bool | None = ..., ) -> OrderBy: ... def reverse_ordering(self) -> BaseExpression: ... def flatten(self) -> Iterator[BaseExpression]: ... def select_format(self, compiler: SQLCompiler, sql: str, params: _ParamsT) -> _AsSqlType: ... def get_expression_for_validation(self) -> BaseExpression: ... class Expression(_Deconstructible, BaseExpression, Combinable): @cached_property def identity(self) -> tuple[Any, ...]: ... class CombinedExpression(SQLiteNumericMixin, Expression): connector: str lhs: Combinable rhs: Combinable def __init__(self, lhs: Combinable, connector: str, rhs: Combinable, output_field: Field | None = None) -> None: ... class DurationExpression(CombinedExpression): def compile(self, side: Combinable, compiler: SQLCompiler, connection: BaseDatabaseWrapper) -> _AsSqlType: ... class TemporalSubtraction(CombinedExpression): output_field: ClassVar[fields.DurationField] def __init__(self, lhs: Combinable, rhs: Combinable) -> None: ... class F(_Deconstructible, Combinable): name: str allowed_default: ClassVar[bool] def __init__(self, name: str) -> None: ... def __getitem__(self, subscript: int | slice) -> Sliced: ... def __contains__(self, other: Any) -> NoReturn: ... def resolve_expression( self, query: Any | None = None, allow_joins: bool = True, reuse: set[str] | None = None, summarize: bool = False, for_save: bool = False, ) -> Expression: ... def replace_expressions(self, replacements: Mapping[F, Any]) -> F: ... def asc( self, *, descending: bool = ..., nulls_first: bool | None = ..., nulls_last: bool | None = ..., ) -> OrderBy: ... def desc( self, *, nulls_first: bool | None = ..., nulls_last: bool | None = ..., ) -> OrderBy: ... def copy(self) -> Self: ... class Sliced(F): def __init__(self, obj: F, subscript: int | slice) -> None: ... def resolve_expression( self, query: Any | None = None, allow_joins: bool = True, reuse: set[str] | None = None, summarize: bool = False, for_save: bool = False, ) -> Func: ... class ResolvedOuterRef(F): contains_aggregate: ClassVar[bool] contains_over_clause: ClassVar[bool] class OuterRef(F): contains_aggregate: ClassVar[bool] contains_over_clause: ClassVar[bool] def __init__(self, name: str | OuterRef) -> None: ... def relabeled_clone(self, relabels: Any) -> Self: ... class Func(SQLiteNumericMixin, Expression): function: str | None = None name: str template: str arg_joiner: str arity: int | None source_expressions: list[Expression] extra: dict[Any, Any] def __init__(self, *expressions: Any, output_field: Field | None = None, **extra: Any) -> None: ... def as_sql( self, compiler: SQLCompiler, connection: BaseDatabaseWrapper, function: str | None = None, template: str | None = None, arg_joiner: str | None = None, **extra_context: Any, ) -> _AsSqlType: ... class Value(Expression): value: Any def __init__(self, value: Any, output_field: Field | None = None) -> None: ... class RawSQL(Expression): params: list[Any] sql: str def __init__(self, sql: str, params: Sequence[Any], output_field: Field | None = None) -> None: ... class Star(Expression): ... class DatabaseDefault(Expression): def __init__(self, expression: Expression, output_field: Field | None = None) -> None: ... class Col(Expression): target: Field alias: str contains_column_references: Literal[True] possibly_multivalued: Literal[False] def __init__(self, alias: str, target: Field, output_field: Field | None = None) -> None: ... class Ref(Expression): def __init__(self, refs: str, source: Expression) -> None: ... class ExpressionList(Func): def __init__( self, *expressions: BaseExpression | Combinable, output_field: Field | None = None, **extra: Any ) -> None: ... class OrderByList(Func): ... _E = TypeVar("_E", bound=Q | Combinable) class ExpressionWrapper(Expression, Generic[_E]): def __init__(self, expression: _E, output_field: Field) -> None: ... expression: _E class NegatedExpression(ExpressionWrapper[_E]): def __init__(self, expression: _E) -> None: ... def __invert__(self) -> _E: ... # type: ignore[override] class When(Expression): template: str condition: Any result: Any def __init__(self, condition: Any | None = None, then: Any | None = None, **lookups: Any) -> None: ... class Case(Expression): template: str case_joiner: str cases: Any default: Any extra: Any def __init__( self, *cases: Any, default: Any | None = None, output_field: Field | None = None, **extra: Any ) -> None: ... class Subquery(BaseExpression, Combinable): template: str subquery: bool query: Query extra: dict[Any, Any] def __init__(self, queryset: Query | QuerySet, output_field: Field | None = None, **extra: Any) -> None: ... class Exists(Subquery): output_field: ClassVar[fields.BooleanField] def __init__(self, queryset: Query | QuerySet, **kwargs: Any) -> None: ... class OrderBy(Expression): template: str nulls_first: bool nulls_last: bool descending: bool expression: Expression | F | Subquery def __init__( self, expression: Expression | F | Subquery, descending: bool = False, nulls_first: bool | None = None, nulls_last: bool | None = None, ) -> None: ... def asc(self) -> None: ... # type: ignore[override] def desc(self) -> None: ... # type: ignore[override] class Window(SQLiteNumericMixin, Expression): template: str contains_aggregate: bool contains_over_clause: bool partition_by: ExpressionList | None order_by: ExpressionList | None def __init__( self, expression: BaseExpression, partition_by: str | Iterable[BaseExpression | F] | F | BaseExpression | None = None, order_by: Sequence[BaseExpression | F | str] | BaseExpression | F | str | None = None, frame: WindowFrame | None = None, output_field: Field | None = None, ) -> None: ... class WindowFrameExclusion(Enum): CURRENT_ROW = "CURRENT ROW" GROUP = "GROUP" TIES = "TIES" NO_OTHERS = "NO OTHERS" class WindowFrame(Expression): template: str frame_type: str def __init__( self, start: int | None = None, end: int | None = None, exclusion: WindowFrameExclusion | None = None, ) -> None: ... def window_frame_start_end( self, connection: BaseDatabaseWrapper, start: int | None, end: int | None ) -> tuple[int, int]: ... def get_exclusion(self) -> str: ... class RowRange(WindowFrame): ... class ValueRange(WindowFrame): ... django-stubs-5.2.9/django-stubs/db/models/fields/000077500000000000000000000000001513401051600216415ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/db/models/fields/__init__.pyi000066400000000000000000000564661513401051600241440ustar00rootroot00000000000000import decimal import uuid from collections.abc import Callable, Iterable, Mapping, Sequence from datetime import date, time, timedelta from datetime import datetime as real_datetime from typing import Any, ClassVar, Generic, Literal, Protocol, TypeAlias, TypeVar, overload, type_check_only from django import forms from django.core import validators # due to weird mypy.stubtest error from django.core.checks import CheckMessage from django.db.backends.base.base import BaseDatabaseWrapper from django.db.models import Model from django.db.models.expressions import Col, Combinable, Expression, Func from django.db.models.fields.reverse_related import ForeignObjectRel from django.db.models.query_utils import Q, RegisterLookupMixin from django.db.models.sql.compiler import SQLCompiler, _AsSqlType, _ParamsT from django.forms import Widget from django.utils.choices import BlankChoiceIterator, _Choice, _ChoiceNamedGroup, _ChoicesCallable, _ChoicesInput from django.utils.datastructures import DictWrapper from django.utils.functional import _Getter, _StrOrPromise, cached_property from typing_extensions import Self class Empty: ... class NOT_PROVIDED: ... BLANK_CHOICE_DASH: list[tuple[str, str]] _ChoicesList: TypeAlias = Sequence[_Choice] | Sequence[_ChoiceNamedGroup] _LimitChoicesTo: TypeAlias = Q | dict[str, Any] _LimitChoicesToCallable: TypeAlias = Callable[[], _LimitChoicesTo] _F = TypeVar("_F", bound=Field, covariant=True) @type_check_only class _FieldDescriptor(Protocol[_F]): """ Accessing fields of a model class (not instance) returns an object conforming to this protocol. Depending on field type this could be DeferredAttribute, ForwardManyToOneDescriptor, FileDescriptor, etc. """ @property def field(self) -> _F: ... _AllLimitChoicesTo: TypeAlias = _LimitChoicesTo | _LimitChoicesToCallable | _ChoicesCallable # noqa: PYI047 _ErrorMessagesMapping: TypeAlias = Mapping[str, _StrOrPromise] _ErrorMessagesDict: TypeAlias = dict[str, _StrOrPromise] # __set__ value type _ST = TypeVar("_ST", contravariant=True) # __get__ return type _GT = TypeVar("_GT", covariant=True) class Field(RegisterLookupMixin, Generic[_ST, _GT]): """ Typing model fields. How does this work? Let's take a look at the self-contained example (it is way easier than our django implementation, but has the same concept). To understand this example you need: 1. Be familiar with descriptors: https://docs.python.org/3/howto/descriptor.html 2. Follow our explanation below Let's start with defining our fake model class and fake integer field. .. code:: python from typing import Generic, Union class Model(object): ... _SetType = Union[int, float] # You can assign ints and floats _GetType = int # access type is always `int` class IntField(object): def __get__(self, instance: Model, owner) -> _GetType: ... def __set__(self, instance, value: _SetType) -> None: ... Now, let's create our own example model, this would be something like ``User`` in your own apps: .. code:: python class Example(Model): count = IntField() And now, lets test that our reveal type works: .. code:: python example = Example() reveal_type(example.count) # Revealed type is "builtins.int" example.count = 1.5 # ok example.count = 'a' # Incompatible types in assignment # (expression has type "str", variable has type "Union[int, float]") Notice, that this is not magic. This is how descriptors work with ``mypy``. We also need ``_pyi_private_set_type`` attributes and friends to help inside our plugin. It is required to enhance parts like ``filter`` queries. """ _pyi_private_set_type: Any _pyi_private_get_type: Any _pyi_lookup_exact_type: Any widget: Widget help_text: _StrOrPromise attname: str auto_created: bool primary_key: bool remote_field: ForeignObjectRel | None is_relation: bool related_model: type[Model] | Literal["self"] | None generated: ClassVar[bool] one_to_many: bool | None one_to_one: bool | None many_to_many: bool | None many_to_one: bool | None max_length: int | None model: type[Model] name: str verbose_name: _StrOrPromise description: _StrOrPromise | _Getter[_StrOrPromise] blank: bool null: bool unique: bool editable: bool empty_strings_allowed: bool choices: _ChoicesList | None db_column: str | None db_comment: str | None db_default: type[NOT_PROVIDED] | Expression column: str concrete: bool default: Any error_messages: _ErrorMessagesDict empty_values: Sequence[Any] creation_counter: int auto_creation_counter: int default_validators: Sequence[validators._ValidatorCallable] default_error_messages: ClassVar[_ErrorMessagesDict] hidden: bool system_check_removed_details: Any | None system_check_deprecated_details: Any | None non_db_attrs: tuple[str, ...] def __init__( self, verbose_name: _StrOrPromise | None = None, name: str | None = None, primary_key: bool = False, max_length: int | None = None, unique: bool = False, blank: bool = False, null: bool = False, db_index: bool = False, rel: ForeignObjectRel | None = None, default: Any = ..., editable: bool = True, serialize: bool = True, unique_for_date: str | None = None, unique_for_month: str | None = None, unique_for_year: str | None = None, choices: _ChoicesInput | None = None, help_text: _StrOrPromise = "", db_column: str | None = None, db_tablespace: str | None = None, auto_created: bool = False, validators: Iterable[validators._ValidatorCallable] = (), error_messages: _ErrorMessagesMapping | None = None, db_comment: str | None = None, db_default: type[NOT_PROVIDED] | Expression | _ST = ..., ) -> None: ... def __set__(self, instance: Any, value: _ST) -> None: ... # class access @overload def __get__(self, instance: None, owner: Any) -> _FieldDescriptor[Self]: ... # Model instance access @overload def __get__(self, instance: Model, owner: Any) -> _GT: ... # non-Model instances @overload def __get__(self, instance: Any, owner: Any) -> Self: ... def select_format(self, compiler: SQLCompiler, sql: str, params: _ParamsT) -> _AsSqlType: ... def deconstruct(self) -> tuple[str, str, Sequence[Any], dict[str, Any]]: ... def set_attributes_from_name(self, name: str) -> None: ... def db_type_parameters(self, connection: BaseDatabaseWrapper) -> DictWrapper: ... def db_check(self, connection: BaseDatabaseWrapper) -> str | None: ... def db_type(self, connection: BaseDatabaseWrapper) -> str | None: ... def db_parameters(self, connection: BaseDatabaseWrapper) -> dict[str, str | None]: ... def pre_save(self, model_instance: Model, add: bool) -> Any: ... def get_prep_value(self, value: Any) -> Any: ... def get_db_prep_value(self, value: Any, connection: BaseDatabaseWrapper, prepared: bool = False) -> Any: ... def get_db_prep_save(self, value: Any, connection: BaseDatabaseWrapper) -> Any: ... def get_internal_type(self) -> str: ... # TODO: plugin support def formfield( self, form_class: type[forms.Field] | None = None, choices_form_class: type[forms.ChoiceField] | None = None, **kwargs: Any, ) -> forms.Field | None: ... def save_form_data(self, instance: Model, data: Any) -> None: ... def contribute_to_class(self, cls: type[Model], name: str, private_only: bool = False) -> None: ... def to_python(self, value: Any) -> Any: ... @cached_property def validators(self) -> list[validators._ValidatorCallable]: ... def run_validators(self, value: Any) -> None: ... def validate(self, value: Any, model_instance: Model | None) -> None: ... def clean(self, value: Any, model_instance: Model | None) -> Any: ... def get_choices( self, include_blank: bool = True, blank_choice: _ChoicesList = ..., limit_choices_to: _LimitChoicesTo | None = None, ordering: Sequence[str] = (), ) -> BlankChoiceIterator | _ChoicesList: ... @property def flatchoices(self) -> list[_Choice]: ... def has_default(self) -> bool: ... def get_default(self) -> Any: ... def check(self, **kwargs: Any) -> list[CheckMessage]: ... def get_col(self, alias: str, output_field: Field | None = None) -> Col: ... @cached_property def cached_col(self) -> Col: ... def value_from_object(self, obj: Model) -> _GT: ... def get_attname(self) -> str: ... def get_attname_column(self) -> tuple[str, str]: ... def value_to_string(self, obj: Model) -> str: ... def slice_expression(self, expression: Expression, start: int, length: int | None) -> Func: ... class IntegerField(Field[_ST, _GT]): _pyi_private_set_type: float | int | str | Combinable _pyi_private_get_type: int _pyi_lookup_exact_type: str | int class PositiveIntegerRelDbTypeMixin: def rel_db_type(self, connection: BaseDatabaseWrapper) -> str: ... class SmallIntegerField(IntegerField[_ST, _GT]): ... class BigIntegerField(IntegerField[_ST, _GT]): MAX_BIGINT: ClassVar[int] class PositiveIntegerField(PositiveIntegerRelDbTypeMixin, IntegerField[_ST, _GT]): ... class PositiveSmallIntegerField(PositiveIntegerRelDbTypeMixin, SmallIntegerField[_ST, _GT]): ... class PositiveBigIntegerField(PositiveIntegerRelDbTypeMixin, BigIntegerField[_ST, _GT]): ... class FloatField(Field[_ST, _GT]): _pyi_private_set_type: float | int | str | Combinable _pyi_private_get_type: float _pyi_lookup_exact_type: float class DecimalField(Field[_ST, _GT]): _pyi_private_set_type: str | float | decimal.Decimal | Combinable _pyi_private_get_type: decimal.Decimal _pyi_lookup_exact_type: str | int | decimal.Decimal # attributes max_digits: int decimal_places: int def __init__( self, verbose_name: _StrOrPromise | None = None, name: str | None = None, max_digits: int | None = None, decimal_places: int | None = None, *, primary_key: bool = ..., unique: bool = ..., blank: bool = ..., null: bool = ..., db_index: bool = ..., default: Any = ..., db_default: type[NOT_PROVIDED] | Expression | _ST = ..., editable: bool = ..., auto_created: bool = ..., serialize: bool = ..., choices: _ChoicesInput | None = ..., help_text: _StrOrPromise = ..., db_column: str | None = ..., db_comment: str | None = ..., db_tablespace: str | None = ..., validators: Iterable[validators._ValidatorCallable] = ..., error_messages: _ErrorMessagesMapping | None = ..., ) -> None: ... class CharField(Field[_ST, _GT]): _pyi_private_set_type: str | int | Combinable _pyi_private_get_type: str # objects are converted to string before comparison _pyi_lookup_exact_type: Any def __init__( self, verbose_name: _StrOrPromise | None = ..., name: str | None = ..., primary_key: bool = ..., max_length: int | None = ..., unique: bool = ..., blank: bool = ..., null: bool = ..., db_index: bool = ..., default: Any = ..., db_default: type[NOT_PROVIDED] | Expression | _ST = ..., editable: bool = ..., auto_created: bool = ..., serialize: bool = ..., unique_for_date: str | None = ..., unique_for_month: str | None = ..., unique_for_year: str | None = ..., choices: _ChoicesInput | None = ..., help_text: _StrOrPromise = ..., db_column: str | None = ..., db_comment: str | None = ..., db_tablespace: str | None = ..., validators: Iterable[validators._ValidatorCallable] = ..., error_messages: _ErrorMessagesMapping | None = ..., *, db_collation: str | None = None, ) -> None: ... class CommaSeparatedIntegerField(CharField[_ST, _GT]): ... class SlugField(CharField[_ST, _GT]): def __init__( self, verbose_name: _StrOrPromise | None = ..., name: str | None = ..., primary_key: bool = ..., unique: bool = ..., blank: bool = ..., null: bool = ..., default: Any = ..., db_default: type[NOT_PROVIDED] | Expression | _ST = ..., editable: bool = ..., auto_created: bool = ..., serialize: bool = ..., unique_for_date: str | None = ..., unique_for_month: str | None = ..., unique_for_year: str | None = ..., choices: _ChoicesInput | None = ..., help_text: _StrOrPromise = ..., db_column: str | None = ..., db_comment: str | None = ..., db_tablespace: str | None = ..., validators: Iterable[validators._ValidatorCallable] = ..., error_messages: _ErrorMessagesMapping | None = ..., *, max_length: int | None = 50, db_index: bool = True, allow_unicode: bool = False, ) -> None: ... class EmailField(CharField[_ST, _GT]): _pyi_private_set_type: str | Combinable class URLField(CharField[_ST, _GT]): def __init__( self, verbose_name: _StrOrPromise | None = None, name: str | None = None, *, primary_key: bool = ..., max_length: int | None = ..., unique: bool = ..., blank: bool = ..., null: bool = ..., db_index: bool = ..., rel: ForeignObjectRel | None = ..., default: Any = ..., db_default: type[NOT_PROVIDED] | Expression | _ST = ..., editable: bool = ..., serialize: bool = ..., unique_for_date: str | None = ..., unique_for_month: str | None = ..., unique_for_year: str | None = ..., choices: _ChoicesInput | None = ..., help_text: _StrOrPromise = ..., db_column: str | None = ..., db_comment: str | None = ..., db_tablespace: str | None = ..., auto_created: bool = ..., validators: Iterable[validators._ValidatorCallable] = ..., error_messages: _ErrorMessagesMapping | None = ..., ) -> None: ... class TextField(Field[_ST, _GT]): _pyi_private_set_type: str | Combinable _pyi_private_get_type: str # objects are converted to string before comparison _pyi_lookup_exact_type: Any def __init__( self, verbose_name: _StrOrPromise | None = ..., name: str | None = ..., primary_key: bool = ..., max_length: int | None = ..., unique: bool = ..., blank: bool = ..., null: bool = ..., db_index: bool = ..., default: Any = ..., db_default: type[NOT_PROVIDED] | Expression | _ST = ..., editable: bool = ..., auto_created: bool = ..., serialize: bool = ..., unique_for_date: str | None = ..., unique_for_month: str | None = ..., unique_for_year: str | None = ..., choices: _ChoicesInput | None = ..., help_text: _StrOrPromise = ..., db_column: str | None = ..., db_comment: str | None = ..., db_tablespace: str | None = ..., validators: Iterable[validators._ValidatorCallable] = ..., error_messages: _ErrorMessagesMapping | None = ..., *, db_collation: str | None = None, ) -> None: ... class BooleanField(Field[_ST, _GT]): _pyi_private_set_type: bool | Combinable _pyi_private_get_type: bool _pyi_lookup_exact_type: bool class NullBooleanField(BooleanField[_ST, _GT]): _pyi_private_set_type: bool | Combinable | None # type: ignore[assignment] _pyi_private_get_type: bool | None # type: ignore[assignment] _pyi_lookup_exact_type: bool | None # type: ignore[assignment] class IPAddressField(Field[_ST, _GT]): _pyi_private_set_type: str | Combinable _pyi_private_get_type: str class GenericIPAddressField(Field[_ST, _GT]): _pyi_private_set_type: str | int | Callable[..., Any] | Combinable _pyi_private_get_type: str default_error_messages: ClassVar[_ErrorMessagesDict] unpack_ipv4: bool protocol: str def __init__( self, verbose_name: _StrOrPromise | None = None, name: Any | None = None, protocol: str = "both", unpack_ipv4: bool = False, primary_key: bool = ..., unique: bool = ..., blank: bool = ..., null: bool = ..., db_index: bool = ..., default: Any = ..., db_default: type[NOT_PROVIDED] | Expression | _ST = ..., editable: bool = ..., auto_created: bool = ..., serialize: bool = ..., choices: _ChoicesInput | None = ..., help_text: _StrOrPromise = ..., db_column: str | None = ..., db_comment: str | None = ..., db_tablespace: str | None = ..., validators: Iterable[validators._ValidatorCallable] = ..., error_messages: _ErrorMessagesMapping | None = ..., ) -> None: ... class DateTimeCheckMixin: ... class DateField(DateTimeCheckMixin, Field[_ST, _GT]): _pyi_private_set_type: str | date | Combinable _pyi_private_get_type: date _pyi_lookup_exact_type: str | date auto_now: bool auto_now_add: bool def __init__( self, verbose_name: _StrOrPromise | None = None, name: str | None = None, auto_now: bool = False, auto_now_add: bool = False, *, primary_key: bool = ..., max_length: int | None = ..., unique: bool = ..., blank: bool = ..., null: bool = ..., db_index: bool = ..., default: Any = ..., db_default: type[NOT_PROVIDED] | Expression | _ST = ..., editable: bool = ..., auto_created: bool = ..., serialize: bool = ..., choices: _ChoicesInput | None = ..., help_text: _StrOrPromise = ..., db_column: str | None = ..., db_comment: str | None = ..., db_tablespace: str | None = ..., validators: Iterable[validators._ValidatorCallable] = ..., error_messages: _ErrorMessagesMapping | None = ..., ) -> None: ... def contribute_to_class(self, cls: type[Model], name: str, **kwargs: Any) -> None: ... # type: ignore[override] class TimeField(DateTimeCheckMixin, Field[_ST, _GT]): _pyi_private_set_type: str | time | real_datetime | Combinable _pyi_private_get_type: time auto_now: bool auto_now_add: bool def __init__( self, verbose_name: _StrOrPromise | None = None, name: str | None = None, auto_now: bool = False, auto_now_add: bool = False, *, primary_key: bool = ..., unique: bool = ..., blank: bool = ..., null: bool = ..., db_index: bool = ..., default: Any = ..., db_default: type[NOT_PROVIDED] | Expression | _ST = ..., editable: bool = ..., auto_created: bool = ..., serialize: bool = ..., choices: _ChoicesInput | None = ..., help_text: _StrOrPromise = ..., db_column: str | None = ..., db_comment: str | None = ..., db_tablespace: str | None = ..., validators: Iterable[validators._ValidatorCallable] = ..., error_messages: _ErrorMessagesMapping | None = ..., ) -> None: ... class DateTimeField(DateField[_ST, _GT]): _pyi_private_set_type: str | real_datetime | date | Combinable _pyi_private_get_type: real_datetime _pyi_lookup_exact_type: str | real_datetime class UUIDField(Field[_ST, _GT]): _pyi_private_set_type: str | uuid.UUID _pyi_private_get_type: uuid.UUID _pyi_lookup_exact_type: uuid.UUID | str def __init__( self, verbose_name: _StrOrPromise | None = None, *, name: str | None = ..., primary_key: bool = ..., max_length: int | None = ..., unique: bool = ..., blank: bool = ..., null: bool = ..., db_index: bool = ..., rel: ForeignObjectRel | None = ..., default: Any = ..., db_default: type[NOT_PROVIDED] | Expression | _ST = ..., editable: bool = ..., serialize: bool = ..., unique_for_date: str | None = ..., unique_for_month: str | None = ..., unique_for_year: str | None = ..., choices: _ChoicesInput | None = ..., help_text: _StrOrPromise = ..., db_column: str | None = ..., db_comment: str | None = ..., db_tablespace: str | None = ..., auto_created: bool = ..., validators: Iterable[validators._ValidatorCallable] = ..., error_messages: _ErrorMessagesMapping | None = ..., ) -> None: ... class FilePathField(Field[_ST, _GT]): path: Any match: str | None recursive: bool allow_files: bool allow_folders: bool def __init__( self, verbose_name: _StrOrPromise | None = None, name: str | None = None, path: str | Callable[..., str] = "", match: str | None = None, recursive: bool = False, allow_files: bool = True, allow_folders: bool = False, *, primary_key: bool = ..., max_length: int = ..., unique: bool = ..., blank: bool = ..., null: bool = ..., db_index: bool = ..., default: Any = ..., db_default: type[NOT_PROVIDED] | Expression | _ST = ..., editable: bool = ..., auto_created: bool = ..., serialize: bool = ..., choices: _ChoicesInput | None = ..., help_text: _StrOrPromise = ..., db_column: str | None = ..., db_comment: str | None = ..., db_tablespace: str | None = ..., validators: Iterable[validators._ValidatorCallable] = ..., error_messages: _ErrorMessagesMapping | None = ..., ) -> None: ... class BinaryField(Field[_ST, _GT]): _pyi_private_get_type: bytes | memoryview class DurationField(Field[_ST, _GT]): _pyi_private_get_type: timedelta class AutoFieldMixin: db_returning: bool def deconstruct(self) -> tuple[str, str, Sequence[Any], dict[str, Any]]: ... def contribute_to_class(self, cls: type[Model], name: str, **kwargs: Any) -> None: ... class AutoFieldMeta(type): ... class AutoField(AutoFieldMixin, IntegerField[_ST, _GT], metaclass=AutoFieldMeta): # type: ignore[misc] _pyi_private_set_type: Combinable | int | str _pyi_private_get_type: int _pyi_lookup_exact_type: str | int class BigAutoField(AutoFieldMixin, BigIntegerField[_ST, _GT]): ... # type: ignore[misc] class SmallAutoField(AutoFieldMixin, SmallIntegerField[_ST, _GT]): ... # type: ignore[misc] __all__ = [ "BLANK_CHOICE_DASH", "NOT_PROVIDED", "AutoField", "BigAutoField", "BigIntegerField", "BinaryField", "BooleanField", "CharField", "CommaSeparatedIntegerField", "DateField", "DateTimeField", "DecimalField", "DurationField", "EmailField", "Empty", "Field", "FilePathField", "FloatField", "GenericIPAddressField", "IPAddressField", "IntegerField", "NullBooleanField", "PositiveBigIntegerField", "PositiveIntegerField", "PositiveSmallIntegerField", "SlugField", "SmallAutoField", "SmallIntegerField", "TextField", "TimeField", "URLField", "UUIDField", ] django-stubs-5.2.9/django-stubs/db/models/fields/composite.pyi000066400000000000000000000051041513401051600243660ustar00rootroot00000000000000from collections.abc import Iterable, Iterator, Mapping from typing import Any, Literal from django.contrib.contenttypes.fields import GenericForeignKey from django.core import validators # due to weird mypy.stubtest error from django.db.models import NOT_PROVIDED, Field from django.db.models.base import Model from django.db.models.fields.reverse_related import ForeignObjectRel from django.utils.choices import _ChoicesInput from django.utils.functional import _StrOrPromise, cached_property class AttributeSetter: def __init__(self, name: str, value: Any) -> None: ... class CompositeAttribute: field: CompositePrimaryKey def __init__(self, field: CompositePrimaryKey) -> None: ... @property def attnames(self) -> list[str]: ... def __get__(self, instance: Model, cls: type[Model] | None = None) -> tuple[Any, ...]: ... def __set__(self, instance: Model, values: list[Any] | tuple[Any] | None) -> None: ... class CompositePrimaryKey(Field): field_names: tuple[str] descriptor_class: type[CompositeAttribute] def __init__( self, *args: str, verbose_name: _StrOrPromise | None = None, name: str | None = None, primary_key: Literal[True] = True, max_length: int | None = None, unique: bool = False, blank: Literal[True] = True, null: bool = False, db_index: bool = False, rel: ForeignObjectRel | None = None, default: type[NOT_PROVIDED] = ..., editable: Literal[False] = False, serialize: bool = True, unique_for_date: str | None = None, unique_for_month: str | None = None, unique_for_year: str | None = None, choices: _ChoicesInput | None = None, help_text: _StrOrPromise = "", db_column: None = None, db_tablespace: str | None = None, auto_created: bool = False, validators: Iterable[validators._ValidatorCallable] = (), error_messages: Mapping[str, _StrOrPromise] | None = None, db_comment: str | None = None, db_default: type[NOT_PROVIDED] = ..., ) -> None: ... @cached_property def fields( self, ) -> tuple[Field | ForeignObjectRel | GenericForeignKey, ...]: ... @cached_property def columns(self) -> tuple[str, ...]: ... def __iter__(self) -> Iterator[Field | ForeignObjectRel | GenericForeignKey]: ... def __len__(self) -> int: ... def get_pk_value_on_save(self, instance: Model) -> tuple: ... # actual type is tuple of field.value_from_object def unnest(fields: Iterable[Field[Any, Any]]) -> list[Field[Any, Any]]: ... django-stubs-5.2.9/django-stubs/db/models/fields/files.pyi000066400000000000000000000110571513401051600234720ustar00rootroot00000000000000from collections.abc import Callable, Iterable from typing import Any, Protocol, TypeVar, overload, type_check_only from django.core import validators # due to weird mypy.stubtest error from django.core.files.base import File from django.core.files.images import ImageFile from django.core.files.storage import Storage from django.db.models.base import Model from django.db.models.expressions import Expression from django.db.models.fields import NOT_PROVIDED, Field, _ErrorMessagesMapping from django.db.models.query_utils import DeferredAttribute from django.db.models.utils import AltersData from django.utils._os import _PathCompatible from django.utils.choices import _Choices from django.utils.functional import _StrOrPromise from typing_extensions import Self class FieldFile(File, AltersData): instance: Model field: FileField storage: Storage name: str | None def __init__(self, instance: Model, field: FileField, name: str | None) -> None: ... file: Any @property def path(self) -> str: ... @property def url(self) -> str: ... @property def size(self) -> int: ... def open(self, mode: str = "rb") -> Self: ... # type: ignore[override] def save(self, name: str, content: File, save: bool = True) -> None: ... def delete(self, save: bool = True) -> None: ... @property def closed(self) -> bool: ... def __getstate__(self) -> dict[str, Any]: ... def __setstate__(self, state: dict[str, Any]) -> None: ... def __eq__(self, other: object) -> bool: ... def __hash__(self) -> int: ... class FileDescriptor(DeferredAttribute): field: FileField def __set__(self, instance: Model, value: Any | None) -> None: ... def __get__(self, instance: Model | None, cls: type[Model] | None = None) -> FieldFile | FileDescriptor: ... _M = TypeVar("_M", bound=Model, contravariant=True) @type_check_only class _UploadToCallable(Protocol[_M]): def __call__(self, instance: _M, filename: str, /) -> _PathCompatible: ... class FileField(Field): storage: Storage upload_to: _PathCompatible | _UploadToCallable def __init__( self, verbose_name: _StrOrPromise | None = None, name: str | None = None, upload_to: _PathCompatible | _UploadToCallable = "", storage: Storage | Callable[[], Storage] | None = None, *, max_length: int | None = ..., unique: bool = ..., blank: bool = ..., null: bool = ..., db_index: bool = ..., default: Any = ..., db_default: type[NOT_PROVIDED] | Expression | str = ..., editable: bool = ..., auto_created: bool = ..., serialize: bool = ..., unique_for_date: str | None = ..., unique_for_month: str | None = ..., unique_for_year: str | None = ..., choices: _Choices | None = ..., help_text: _StrOrPromise = ..., db_column: str | None = ..., db_comment: str | None = ..., db_tablespace: str | None = ..., validators: Iterable[validators._ValidatorCallable] = ..., error_messages: _ErrorMessagesMapping | None = ..., ) -> None: ... # class access @overload def __get__(self, instance: None, owner: Any) -> FileDescriptor: ... # Model instance access @overload def __get__(self, instance: Model, owner: Any) -> Any: ... # non-Model instances @overload def __get__(self, instance: Any, owner: Any) -> Self: ... def contribute_to_class(self, cls: type[Model], name: str, **kwargs: Any) -> None: ... # type: ignore[override] def generate_filename(self, instance: Model | None, filename: _PathCompatible) -> str: ... class ImageFileDescriptor(FileDescriptor): field: ImageField def __set__(self, instance: Model, value: str | None) -> None: ... class ImageFieldFile(ImageFile, FieldFile): field: ImageField def delete(self, save: bool = True) -> None: ... class ImageField(FileField): def __init__( self, verbose_name: _StrOrPromise | None = None, name: str | None = None, width_field: str | None = None, height_field: str | None = None, **kwargs: Any, ) -> None: ... # class access @overload def __get__(self, instance: None, owner: Any) -> ImageFileDescriptor: ... # Model instance access @overload def __get__(self, instance: Model, owner: Any) -> Any: ... # non-Model instances @overload def __get__(self, instance: Any, owner: Any) -> Self: ... def update_dimension_fields(self, instance: Model, force: bool = False, *args: Any, **kwargs: Any) -> None: ... django-stubs-5.2.9/django-stubs/db/models/fields/generated.pyi000066400000000000000000000034461513401051600243310ustar00rootroot00000000000000from collections.abc import Iterable from typing import Any, ClassVar, Literal from django.core.validators import _ValidatorCallable from django.db import models from django.db.backends.base.base import BaseDatabaseWrapper from django.db.models.expressions import Expression from django.db.models.fields import _ErrorMessagesMapping from django.db.models.sql import Query from django.utils.choices import _Choices from django.utils.datastructures import DictWrapper from django.utils.functional import _StrOrPromise class GeneratedField(models.Field): generated: ClassVar[Literal[True]] db_returning: Literal[True] _query: Query | None output_field: models.Field | None def __init__( self, *, expression: Expression, output_field: models.Field, db_persist: bool, verbose_name: _StrOrPromise | None = ..., name: str | None = ..., primary_key: bool = ..., unique: bool = ..., blank: bool = ..., null: bool = ..., default: Any = ..., editable: bool = ..., auto_created: bool = ..., serialize: bool = ..., unique_for_date: str | None = ..., unique_for_month: str | None = ..., unique_for_year: str | None = ..., choices: _Choices | None = ..., help_text: _StrOrPromise = ..., db_column: str | None = ..., db_comment: str | None = ..., db_tablespace: str | None = ..., validators: Iterable[_ValidatorCallable] = ..., error_messages: _ErrorMessagesMapping | None = ..., **kwargs: Any, ) -> None: ... def generated_sql(self, connection: BaseDatabaseWrapper) -> tuple[str, Any]: ... def db_type_parameters(self, connection: BaseDatabaseWrapper) -> DictWrapper: ... __all__ = ["GeneratedField"] django-stubs-5.2.9/django-stubs/db/models/fields/json.pyi000066400000000000000000000075661513401051600233530ustar00rootroot00000000000000import json from collections.abc import Callable from typing import Any, ClassVar, TypeVar from django.db.backends.base.base import BaseDatabaseWrapper from django.db.models import lookups from django.db.models.expressions import Expression from django.db.models.fields import TextField from django.db.models.lookups import PostgresOperatorLookup, Transform from django.db.models.sql.compiler import SQLCompiler from django.utils.functional import _StrOrPromise from typing_extensions import Self from . import Field from .mixins import CheckFieldDefaultMixin # __set__ value type _ST = TypeVar("_ST", contravariant=True, default=Any) # __get__ return type _GT = TypeVar("_GT", covariant=True, default=Any) class JSONField(CheckFieldDefaultMixin, Field[_ST, _GT]): encoder: type[json.JSONEncoder] | None decoder: type[json.JSONDecoder] | None def __init__( self, verbose_name: _StrOrPromise | None = None, name: str | None = None, encoder: type[json.JSONEncoder] | None = None, decoder: type[json.JSONDecoder] | None = None, **kwargs: Any, ) -> None: ... def from_db_value(self, value: str | None, expression: Expression, connection: BaseDatabaseWrapper) -> Any: ... class DataContains(PostgresOperatorLookup): ... class ContainedBy(PostgresOperatorLookup): ... class HasKeyLookup(PostgresOperatorLookup): logical_operator: str | None def compile_json_path_final_key(self, key_transform: Any) -> str: ... class HasKey(HasKeyLookup): postgres_operator: str class HasKeys(HasKeyLookup): postgres_operator: str logical_operator: str class HasAnyKeys(HasKeys): postgres_operator: str logical_operator: str class HasKeyOrArrayIndex(HasKey): ... class JSONExact(lookups.Exact): ... class CaseInsensitiveMixin: ... class JSONIContains(CaseInsensitiveMixin, lookups.IContains): ... class KeyTransform(Transform): key_name: str postgres_operator: str postgres_nested_operator: str def __init__(self, key_name: Any, *args: Any, **kwargs: Any) -> None: ... def preprocess_lhs(self, compiler: SQLCompiler, connection: BaseDatabaseWrapper) -> Any: ... class KeyTextTransform(KeyTransform): postgres_operator: str postgres_nested_operator: str output_field: ClassVar[TextField] @classmethod def from_lookup(cls, lookup: str) -> Self: ... KT: Callable[[str], KeyTextTransform] class KeyTransformTextLookupMixin: def __init__(self, key_transform: Any, *args: Any, **kwargs: Any) -> None: ... class KeyTransformIsNull(lookups.IsNull): ... class KeyTransformIn(lookups.In): ... class KeyTransformExact(JSONExact): ... class KeyTransformIExact(CaseInsensitiveMixin, KeyTransformTextLookupMixin, lookups.IExact): ... class KeyTransformIContains(CaseInsensitiveMixin, KeyTransformTextLookupMixin, lookups.IContains): ... class KeyTransformStartsWith(KeyTransformTextLookupMixin, lookups.StartsWith): ... class KeyTransformIStartsWith(CaseInsensitiveMixin, KeyTransformTextLookupMixin, lookups.IStartsWith): ... class KeyTransformEndsWith(KeyTransformTextLookupMixin, lookups.EndsWith): ... class KeyTransformIEndsWith(CaseInsensitiveMixin, KeyTransformTextLookupMixin, lookups.IEndsWith): ... class KeyTransformRegex(KeyTransformTextLookupMixin, lookups.Regex): ... class KeyTransformIRegex(CaseInsensitiveMixin, KeyTransformTextLookupMixin, lookups.IRegex): ... class KeyTransformNumericLookupMixin: ... class KeyTransformLt(KeyTransformNumericLookupMixin, lookups.LessThan): ... class KeyTransformLte(KeyTransformNumericLookupMixin, lookups.LessThanOrEqual): ... class KeyTransformGt(KeyTransformNumericLookupMixin, lookups.GreaterThan): ... class KeyTransformGte(KeyTransformNumericLookupMixin, lookups.GreaterThanOrEqual): ... class KeyTransformFactory: key_name: Any def __init__(self, key_name: Any) -> None: ... def __call__(self, *args: Any, **kwargs: Any) -> KeyTransform: ... __all__ = ["JSONField"] django-stubs-5.2.9/django-stubs/db/models/fields/mixins.pyi000066400000000000000000000015131513401051600236730ustar00rootroot00000000000000from typing import Any from django.core.checks.messages import CheckMessage from django.db.models.base import Model from django.utils.functional import cached_property from typing_extensions import deprecated NOT_PROVIDED: Any class FieldCacheMixin: @deprecated("get_cache_name() is deprecated and will be removed in Django 6.0. Use cache_name instead.") def get_cache_name(self) -> str: ... @cached_property def cache_name(self) -> str: ... def get_cached_value(self, instance: Model, default: Any = ...) -> Model | None: ... def is_cached(self, instance: Model) -> bool: ... def set_cached_value(self, instance: Model, value: Model | None) -> None: ... def delete_cached_value(self, instance: Model) -> None: ... class CheckFieldDefaultMixin: def check(self, **kwargs: Any) -> list[CheckMessage]: ... django-stubs-5.2.9/django-stubs/db/models/fields/proxy.pyi000066400000000000000000000002411513401051600235420ustar00rootroot00000000000000from typing import Any from django.db.models import fields class OrderWrt(fields.IntegerField): def __init__(self, *args: Any, **kwargs: Any) -> None: ... django-stubs-5.2.9/django-stubs/db/models/fields/related.pyi000066400000000000000000000305541513401051600240130ustar00rootroot00000000000000from collections.abc import Callable, Iterable, Sequence from typing import Any, Generic, Literal, TypeVar, overload from uuid import UUID from django.core import validators # due to weird mypy.stubtest error from django.db.models.base import Model from django.db.models.expressions import Combinable, Expression from django.db.models.fields import NOT_PROVIDED, Field, _AllLimitChoicesTo, _ErrorMessagesMapping, _LimitChoicesTo from django.db.models.fields.mixins import FieldCacheMixin from django.db.models.fields.related_descriptors import ForwardManyToOneDescriptor as ForwardManyToOneDescriptor from django.db.models.fields.related_descriptors import ForwardOneToOneDescriptor as ForwardOneToOneDescriptor from django.db.models.fields.related_descriptors import ManyRelatedManager from django.db.models.fields.related_descriptors import ManyToManyDescriptor as ManyToManyDescriptor from django.db.models.fields.related_descriptors import ReverseManyToOneDescriptor as ReverseManyToOneDescriptor from django.db.models.fields.related_descriptors import ReverseOneToOneDescriptor as ReverseOneToOneDescriptor from django.db.models.fields.reverse_related import ForeignObjectRel as ForeignObjectRel from django.db.models.fields.reverse_related import ManyToManyRel as ManyToManyRel from django.db.models.fields.reverse_related import ManyToOneRel as ManyToOneRel from django.db.models.fields.reverse_related import OneToOneRel as OneToOneRel from django.db.models.query_utils import FilteredRelation, PathInfo, Q from django.utils.choices import _Choices from django.utils.functional import _StrOrPromise, cached_property from typing_extensions import Self RECURSIVE_RELATIONSHIP_CONSTANT: Literal["self"] def resolve_relation(scope_model: type[Model], relation: str | type[Model]) -> str | type[Model]: ... # __set__ value type _ST = TypeVar("_ST", contravariant=True) # __get__ return type _GT = TypeVar("_GT", covariant=True, default=_ST) class RelatedField(FieldCacheMixin, Field[_ST, _GT]): one_to_many: bool one_to_one: bool many_to_many: bool many_to_one: bool opts: Any remote_field: ForeignObjectRel rel_class: type[ForeignObjectRel] swappable: bool def __init__( self, related_name: str | None = None, related_query_name: str | None = None, limit_choices_to: _AllLimitChoicesTo | None = None, *, verbose_name: _StrOrPromise | None = ..., name: str | None = ..., primary_key: bool = ..., max_length: int | None = ..., unique: bool = ..., blank: bool = ..., null: bool = ..., db_index: bool = ..., rel: ForeignObjectRel | None = ..., default: Any = ..., db_default: type[NOT_PROVIDED] | Expression | _ST = ..., editable: bool = ..., serialize: bool = ..., unique_for_date: str | None = ..., unique_for_month: str | None = ..., unique_for_year: str | None = ..., choices: _Choices | None = ..., help_text: _StrOrPromise = ..., db_column: str | None = ..., db_tablespace: str | None = ..., auto_created: bool = ..., validators: Iterable[validators._ValidatorCallable] = ..., error_messages: _ErrorMessagesMapping | None = ..., db_comment: str | None = ..., ) -> None: ... @cached_property def related_model(self) -> type[Model] | Literal["self"]: ... # type: ignore[override] def contribute_to_class(self, cls: type[Model], name: str, private_only: bool = ..., **kwargs: Any) -> None: ... def get_forward_related_filter(self, obj: Model) -> dict[str, int | UUID]: ... def get_reverse_related_filter(self, obj: Model) -> Q: ... @property def swappable_setting(self) -> str | None: ... def set_attributes_from_rel(self) -> None: ... def do_related_class(self, other: type[Model], cls: type[Model]) -> None: ... def get_limit_choices_to(self) -> _LimitChoicesTo: ... def related_query_name(self) -> str: ... @property def target_field(self) -> Field: ... class ForeignObject(RelatedField[_ST, _GT]): remote_field: ForeignObjectRel rel_class: type[ForeignObjectRel] from_fields: Sequence[str] to_fields: Sequence[str | None] # None occurs in ForeignKey, where to_field defaults to None swappable: bool def __init__( self, to: type[Model] | str, on_delete: Callable[..., None], from_fields: Sequence[str], to_fields: Sequence[str], rel: ForeignObjectRel | None = None, related_name: str | None = None, related_query_name: str | None = None, limit_choices_to: _AllLimitChoicesTo | None = None, parent_link: bool = False, swappable: bool = True, *, verbose_name: _StrOrPromise | None = ..., name: str | None = ..., primary_key: bool = ..., unique: bool = ..., blank: bool = ..., null: bool = ..., db_index: bool = ..., default: Any = ..., db_default: type[NOT_PROVIDED] | Expression | _ST = ..., editable: bool = ..., auto_created: bool = ..., serialize: bool = ..., choices: _Choices | None = ..., help_text: _StrOrPromise = ..., db_column: str | None = ..., db_tablespace: str | None = ..., validators: Iterable[validators._ValidatorCallable] = ..., error_messages: _ErrorMessagesMapping | None = ..., db_comment: str | None = ..., ) -> None: ... # class access @overload def __get__(self, instance: None, owner: Any) -> ForwardManyToOneDescriptor[Self]: ... # Model instance access @overload def __get__(self, instance: Model, owner: Any) -> _GT: ... # non-Model instances @overload def __get__(self, instance: Any, owner: Any) -> Self: ... def resolve_related_fields(self) -> list[tuple[Field, Field]]: ... @cached_property def related_fields(self) -> list[tuple[Field, Field]]: ... @cached_property def reverse_related_fields(self) -> list[tuple[Field, Field]]: ... @cached_property def local_related_fields(self) -> tuple[Field, ...]: ... @cached_property def foreign_related_fields(self) -> tuple[Field, ...]: ... def get_joining_fields(self, reverse_join: bool = False) -> tuple[tuple[Field, Field], ...]: ... def get_reverse_joining_fields(self) -> tuple[tuple[Field, Field], ...]: ... class ForeignKey(ForeignObject[_ST, _GT]): _pyi_private_set_type: Any | Combinable _pyi_private_get_type: Any remote_field: ManyToOneRel rel_class: type[ManyToOneRel] def __init__( self, to: type[Model] | str, on_delete: Callable[..., None], related_name: str | None = None, related_query_name: str | None = None, limit_choices_to: _AllLimitChoicesTo | None = None, parent_link: bool = False, to_field: str | None = None, db_constraint: bool = True, *, verbose_name: _StrOrPromise | None = ..., name: str | None = ..., primary_key: bool = ..., max_length: int | None = ..., unique: bool = ..., blank: bool = ..., null: bool = ..., db_index: bool = ..., default: Any = ..., db_default: type[NOT_PROVIDED] | Expression | _ST = ..., editable: bool = ..., auto_created: bool = ..., serialize: bool = ..., unique_for_date: str | None = ..., unique_for_month: str | None = ..., unique_for_year: str | None = ..., choices: _Choices | None = ..., help_text: _StrOrPromise = ..., db_column: str | None = ..., db_tablespace: str | None = ..., validators: Iterable[validators._ValidatorCallable] = ..., error_messages: _ErrorMessagesMapping | None = ..., db_comment: str | None = ..., ) -> None: ... class OneToOneField(ForeignKey[_ST, _GT]): _pyi_private_set_type: Any | Combinable _pyi_private_get_type: Any remote_field: OneToOneRel rel_class: type[OneToOneRel] def __init__( self, to: type[Model] | str, on_delete: Any, to_field: str | None = None, *, related_name: str | None = ..., related_query_name: str | None = ..., limit_choices_to: _AllLimitChoicesTo | None = ..., parent_link: bool = ..., db_constraint: bool = ..., verbose_name: _StrOrPromise | None = ..., name: str | None = ..., primary_key: bool = ..., max_length: int | None = ..., unique: bool = ..., blank: bool = ..., null: bool = ..., db_index: bool = ..., default: Any = ..., db_default: type[NOT_PROVIDED] | Expression | _ST = ..., editable: bool = ..., auto_created: bool = ..., serialize: bool = ..., unique_for_date: str | None = ..., unique_for_month: str | None = ..., unique_for_year: str | None = ..., choices: _Choices | None = ..., help_text: _StrOrPromise = ..., db_column: str | None = ..., db_tablespace: str | None = ..., validators: Iterable[validators._ValidatorCallable] = ..., error_messages: _ErrorMessagesMapping | None = ..., db_comment: str | None = ..., ) -> None: ... # class access @overload def __get__(self, instance: None, owner: Any) -> ForwardOneToOneDescriptor[Self]: ... # Model instance access @overload def __get__(self, instance: Model, owner: Any) -> _GT: ... # non-Model instances @overload def __get__(self, instance: Any, owner: Any) -> Self: ... _Through = TypeVar("_Through", bound=Model) _To = TypeVar("_To", bound=Model) class ManyToManyField(RelatedField[Any, Any], Generic[_To, _Through]): description: _StrOrPromise has_null_arg: bool swappable: bool many_to_many: Literal[True] many_to_one: Literal[False] one_to_many: Literal[False] one_to_one: Literal[False] remote_field: ManyToManyRel rel_class: type[ManyToManyRel] def __init__( self, to: type[_To] | str, related_name: str | None = None, related_query_name: str | None = None, limit_choices_to: _AllLimitChoicesTo | None = None, symmetrical: bool | None = None, through: type[_Through] | str | None = None, through_fields: tuple[str, str] | None = None, db_constraint: bool = True, db_table: str | None = None, swappable: bool = True, *, verbose_name: _StrOrPromise | None = ..., name: str | None = ..., primary_key: bool = ..., max_length: int | None = ..., unique: bool = ..., blank: bool = ..., null: bool = ..., db_index: bool = ..., default: Any = ..., editable: bool = ..., auto_created: bool = ..., serialize: bool = ..., unique_for_date: str | None = ..., unique_for_month: str | None = ..., unique_for_year: str | None = ..., choices: _Choices | None = ..., help_text: _StrOrPromise = ..., db_column: str | None = ..., db_tablespace: str | None = ..., error_messages: _ErrorMessagesMapping | None = ..., db_comment: str | None = ..., ) -> None: ... # class access @overload def __get__(self, instance: None, owner: Any) -> ManyToManyDescriptor[_To, _Through]: ... # Model instance access @overload def __get__(self, instance: Model, owner: Any) -> ManyRelatedManager[_To, _Through]: ... # non-Model instances @overload def __get__(self, instance: Any, owner: Any) -> Self: ... def get_path_info(self, filtered_relation: FilteredRelation | None = None) -> list[PathInfo]: ... def get_reverse_path_info(self, filtered_relation: FilteredRelation | None = None) -> list[PathInfo]: ... def contribute_to_class(self, cls: type[Model], name: str, **kwargs: Any) -> None: ... # type: ignore[override] def contribute_to_related_class(self, cls: type[Model], related: RelatedField) -> None: ... def m2m_db_table(self) -> str: ... def m2m_column_name(self) -> str: ... def m2m_reverse_name(self) -> str: ... def m2m_field_name(self) -> str: ... def m2m_reverse_field_name(self) -> str: ... def m2m_target_field_name(self) -> str: ... def m2m_reverse_target_field_name(self) -> str: ... def create_many_to_many_intermediary_model(field: ManyToManyField, klass: type[Model]) -> type[Model]: ... django-stubs-5.2.9/django-stubs/db/models/fields/related_descriptors.pyi000066400000000000000000000216631513401051600264350ustar00rootroot00000000000000from collections.abc import Callable, Iterable, Mapping from typing import Any, Generic, NoReturn, TypeVar, overload, type_check_only from django.core.exceptions import ObjectDoesNotExist from django.db.models.base import Model from django.db.models.fields import Field from django.db.models.fields.related import ForeignKey, ManyToManyField, RelatedField from django.db.models.fields.reverse_related import ManyToManyRel, ManyToOneRel, OneToOneRel from django.db.models.manager import BaseManager, Manager from django.db.models.query import QuerySet from django.db.models.query_utils import DeferredAttribute from django.utils.functional import cached_property from typing_extensions import Self, deprecated _M = TypeVar("_M", bound=Model) _F = TypeVar("_F", bound=Field) _From = TypeVar("_From", bound=Model) _Through = TypeVar("_Through", bound=Model, default=Model) _To = TypeVar("_To", bound=Model) class ForeignKeyDeferredAttribute(DeferredAttribute): field: RelatedField class ForwardManyToOneDescriptor(Generic[_F]): field: _F def __init__(self, field_with_rel: _F) -> None: ... @cached_property def RelatedObjectDoesNotExist(self) -> type[ObjectDoesNotExist]: ... def is_cached(self, instance: Model) -> bool: ... def get_queryset(self, **hints: Any) -> QuerySet[Any]: ... @deprecated( "get_prefetch_queryset() is deprecated and will be removed in Django 6.0. Use get_prefetch_querysets() instead." ) def get_prefetch_queryset( self, instances: list[Model], queryset: QuerySet[Any] | None = None ) -> tuple[QuerySet[Any], Callable[..., Any], Callable[..., Any], bool, str, bool]: ... def get_prefetch_querysets( self, instances: list[Model], querysets: list[QuerySet[Any]] | None = None ) -> tuple[QuerySet[Any], Callable[..., Any], Callable[..., Any], bool, str, bool]: ... def get_object(self, instance: Model) -> Model: ... def __get__( self, instance: Model | None, cls: type[Model] | None = None ) -> Model | ForwardManyToOneDescriptor | None: ... def __set__(self, instance: Model, value: Model | None) -> None: ... def __reduce__(self) -> tuple[Callable[..., Any], tuple[type[Model], str]]: ... class ForwardOneToOneDescriptor(ForwardManyToOneDescriptor[_F]): def get_object(self, instance: Model) -> Model: ... class ReverseOneToOneDescriptor(Generic[_From, _To]): """ In the example:: class Restaurant(Model): place = OneToOneField(Place, related_name='restaurant') ``Place.restaurant`` is a ``ReverseOneToOneDescriptor`` instance. """ related: OneToOneRel def __init__(self, related: OneToOneRel) -> None: ... @cached_property def RelatedObjectDoesNotExist(self) -> type[ObjectDoesNotExist]: ... def is_cached(self, instance: _From) -> bool: ... def get_queryset(self, **hints: Any) -> QuerySet[_To]: ... @deprecated( "get_prefetch_queryset() is deprecated and will be removed in Django 6.0. Use get_prefetch_querysets() instead." ) def get_prefetch_queryset( self, instances: list[_From], queryset: QuerySet[_To] | None = None ) -> tuple[QuerySet[_To], Callable[..., Any], Callable[..., Any], bool, str, bool]: ... def get_prefetch_querysets( self, instances: list[_From], querysets: list[QuerySet[_To]] | None = None ) -> tuple[QuerySet[_To], Callable[..., Any], Callable[..., Any], bool, str, bool]: ... @overload def __get__(self, instance: None, cls: Any | None = None) -> ReverseOneToOneDescriptor[_From, _To]: ... @overload def __get__(self, instance: _From, cls: Any | None = None) -> _To: ... def __set__(self, instance: _From, value: _To | None) -> None: ... def __reduce__(self) -> tuple[Callable[..., Any], tuple[type[_To], str]]: ... class ReverseManyToOneDescriptor(Generic[_To]): """ In the example:: class Child(Model): parent = ForeignKey(Parent, related_name='children') ``Parent.children`` is a ``ReverseManyToOneDescriptor`` instance. """ rel: ManyToOneRel field: ForeignKey[_To, _To] def __init__(self, rel: ManyToOneRel) -> None: ... @cached_property def related_manager_cls(self) -> type[RelatedManager[_To]]: ... @overload def __get__(self, instance: None, cls: Any | None = None) -> Self: ... @overload def __get__(self, instance: Model, cls: Any | None = None) -> RelatedManager[_To]: ... def __set__(self, instance: Any, value: Any) -> NoReturn: ... # Fake class, Django defines 'RelatedManager' inside a function body @type_check_only class RelatedManager(Manager[_To], Generic[_To]): related_val: tuple[int, ...] def add(self, *objs: _To | int, bulk: bool = ...) -> None: ... async def aadd(self, *objs: _To | int, bulk: bool = ...) -> None: ... def remove(self, *objs: _To | int, bulk: bool = ...) -> None: ... async def aremove(self, *objs: _To | int, bulk: bool = ...) -> None: ... def clear(self, *, clear: bool = ...) -> None: ... async def aclear(self, *, clear: bool = ...) -> None: ... def set( self, objs: QuerySet[_To] | Iterable[_To | int], *, bulk: bool = ..., clear: bool = ..., ) -> None: ... async def aset( self, objs: QuerySet[_To] | Iterable[_To | int], *, bulk: bool = ..., clear: bool = ..., ) -> None: ... def __call__(self, *, manager: str) -> RelatedManager[_To]: ... def create_reverse_many_to_one_manager( superclass: type[BaseManager[_M]], rel: ManyToOneRel ) -> type[RelatedManager[_M]]: ... class ManyToManyDescriptor(ReverseManyToOneDescriptor, Generic[_To, _Through]): """ In the example:: class Pizza(Model): toppings = ManyToManyField(Topping, related_name='pizzas') ``Pizza.toppings`` and ``Topping.pizzas`` are ``ManyToManyDescriptor`` instances. """ # 'field' here is 'rel.field' rel: ManyToManyRel # type: ignore[assignment] field: ManyToManyField[_To, _Through] # type: ignore[assignment] reverse: bool def __init__(self, rel: ManyToManyRel, reverse: bool = False) -> None: ... @property def through(self) -> type[_Through]: ... @cached_property def related_manager_cls(self) -> type[ManyRelatedManager[_To, _Through]]: ... # type: ignore[override] @overload # type: ignore[override] def __get__(self, instance: None, cls: Any | None = None) -> Self: ... @overload def __get__(self, instance: Model, cls: Any | None = None) -> ManyRelatedManager[_To, _Through]: ... # Fake class, Django defines 'ManyRelatedManager' inside a function body @type_check_only class ManyRelatedManager(Manager[_To], Generic[_To, _Through]): related_val: tuple[int, ...] through: type[_Through] def add( self, *objs: _To | int, through_defaults: Mapping[str, Any] | None = ..., ) -> None: ... async def aadd( self, *objs: _To | int, through_defaults: Mapping[str, Any] | None = ..., ) -> None: ... def remove(self, *objs: _To | int) -> None: ... async def aremove(self, *objs: _To | int) -> None: ... def clear(self) -> None: ... async def aclear(self) -> None: ... def set( self, objs: QuerySet[_To] | Iterable[_To | int], *, clear: bool = ..., through_defaults: Mapping[str, Any] | None = ..., ) -> None: ... async def aset( self, objs: QuerySet[_To] | Iterable[_To | int], *, clear: bool = ..., through_defaults: Mapping[str, Any] | None = ..., ) -> None: ... def create( self, *, through_defaults: Mapping[str, Any] | None = ..., **kwargs: Any, ) -> _To: ... async def acreate( self, *, through_defaults: Mapping[str, Any] | None = ..., **kwargs: Any, ) -> _To: ... def get_or_create( self, defaults: Mapping[str, Any] | None = ..., through_defaults: Mapping[str, Any] | None = ..., **kwargs: Any, ) -> tuple[_To, bool]: ... async def aget_or_create( self, defaults: Mapping[str, Any] | None = ..., through_defaults: Mapping[str, Any] | None = ..., **kwargs: Any, ) -> tuple[_To, bool]: ... def update_or_create( self, defaults: Mapping[str, Any] | None = ..., create_defaults: Mapping[str, Any] | None = ..., through_defaults: Mapping[str, Any] | None = ..., **kwargs: Any, ) -> tuple[_To, bool]: ... async def aupdate_or_create( self, defaults: Mapping[str, Any] | None = ..., create_defaults: Mapping[str, Any] | None = ..., through_defaults: Mapping[str, Any] | None = ..., **kwargs: Any, ) -> tuple[_To, bool]: ... def __call__(self, *, manager: str) -> ManyRelatedManager[_To, _Through]: ... def create_forward_many_to_many_manager( superclass: type[BaseManager[_To]], rel: ManyToManyRel, reverse: bool ) -> type[ManyRelatedManager[_To, _Through]]: ... django-stubs-5.2.9/django-stubs/db/models/fields/related_lookups.pyi000066400000000000000000000015071513401051600255630ustar00rootroot00000000000000from collections.abc import Iterable from typing import Any from django.db.models.lookups import Exact, GreaterThan, GreaterThanOrEqual, In, IsNull, LessThan, LessThanOrEqual def get_normalized_value(value: Any, lhs: Any) -> tuple[Any, ...]: ... class RelatedIn(In): bilateral_transforms: list[Any] lhs: Any rhs: Any def get_prep_lookup(self) -> Iterable[Any]: ... class RelatedLookupMixin: rhs: Any def get_prep_lookup(self) -> Any: ... class RelatedExact(RelatedLookupMixin, Exact): ... class RelatedLessThan(RelatedLookupMixin, LessThan): ... class RelatedGreaterThan(RelatedLookupMixin, GreaterThan): ... class RelatedGreaterThanOrEqual(RelatedLookupMixin, GreaterThanOrEqual): ... class RelatedLessThanOrEqual(RelatedLookupMixin, LessThanOrEqual): ... class RelatedIsNull(RelatedLookupMixin, IsNull): ... django-stubs-5.2.9/django-stubs/db/models/fields/reverse_related.pyi000066400000000000000000000122231513401051600255370ustar00rootroot00000000000000from collections.abc import Callable, Sequence from typing import Any, Literal from django.db.models.base import Model from django.db.models.fields import AutoField, Field, _AllLimitChoicesTo, _ChoicesList, _LimitChoicesTo from django.db.models.fields.related import ForeignKey, ForeignObject, ManyToManyField, OneToOneField from django.db.models.lookups import Lookup, StartsWith, Transform from django.db.models.query_utils import FilteredRelation, PathInfo from django.db.models.sql.where import WhereNode from django.utils.functional import cached_property from typing_extensions import deprecated from .mixins import FieldCacheMixin # Common note: `model` and `through` can be of type `str` when passed to `__init__`. # When parent's `contribute_to_class` is called (during startup), # strings are resolved to real model classes. # Thus `str` is acceptable in __init__, but instance attribute `model` is always # `Type[Model]` class ForeignObjectRel(FieldCacheMixin): auto_created: bool concrete: Literal[False] editable: bool is_relation: bool null: bool field: ForeignObject model: type[Model] related_name: str | None related_query_name: str | None limit_choices_to: _AllLimitChoicesTo | None parent_link: bool on_delete: Callable symmetrical: bool multiple: bool field_name: str | None def __init__( self, field: ForeignObject, to: type[Model] | str, related_name: str | None = None, related_query_name: str | None = None, limit_choices_to: _AllLimitChoicesTo | None = None, parent_link: bool = False, on_delete: Callable | None = None, ) -> None: ... @cached_property def hidden(self) -> bool: ... @cached_property def name(self) -> str: ... @property def remote_field(self) -> ForeignObject: ... @property def target_field(self) -> AutoField: ... @cached_property def related_model(self) -> type[Model] | Literal["self"]: ... @cached_property def many_to_many(self) -> bool: ... @cached_property def many_to_one(self) -> bool: ... @cached_property def one_to_many(self) -> bool: ... @cached_property def one_to_one(self) -> bool: ... def get_lookup(self, lookup_name: str) -> type[Lookup] | None: ... def get_lookups(self) -> dict[str, Any]: ... def get_transform(self, name: str) -> type[Transform] | None: ... def get_internal_type(self) -> str: ... @property def db_type(self) -> Any: ... # Yes, seems that `get_choices` will fail if `limit_choices_to=None` # and `self.limit_choices_to` is callable. def get_choices( self, include_blank: bool = True, blank_choice: _ChoicesList = ..., limit_choices_to: _LimitChoicesTo | None = None, ordering: Sequence[str] = (), ) -> _ChoicesList: ... @deprecated( "get_joining_columns() is deprecated and will be removed in Django 6.0. Use get_joining_fields() instead." ) def get_joining_columns(self) -> tuple: ... def get_joining_fields(self) -> tuple[tuple[Field, Field], ...]: ... def get_extra_restriction( self, where_class: type[WhereNode], alias: str, related_alias: str ) -> StartsWith | WhereNode | None: ... def set_field_name(self) -> None: ... @cached_property def accessor_name(self) -> str | None: ... def get_accessor_name(self, model: type[Model] | None = None) -> str | None: ... def get_path_info(self, filtered_relation: FilteredRelation | None = None) -> list[PathInfo]: ... class ManyToOneRel(ForeignObjectRel): field: ForeignKey def __init__( self, field: ForeignKey, to: type[Model] | str, field_name: str, related_name: str | None = None, related_query_name: str | None = None, limit_choices_to: _AllLimitChoicesTo | None = None, parent_link: bool = False, on_delete: Callable | None = None, ) -> None: ... def get_related_field(self) -> Field: ... def get_accessor_name(self, model: type[Model] | None = None) -> str: ... class OneToOneRel(ManyToOneRel): field: OneToOneField def __init__( self, field: OneToOneField, to: type[Model] | str, field_name: str | None, related_name: str | None = None, related_query_name: str | None = None, limit_choices_to: _AllLimitChoicesTo | None = None, parent_link: bool = False, on_delete: Callable | None = None, ) -> None: ... class ManyToManyRel(ForeignObjectRel): field: ManyToManyField[Any, Any] # type: ignore[assignment] through: type[Model] | None through_fields: tuple[str, str] | None db_constraint: bool def __init__( self, field: ManyToManyField[Any, Any], to: type[Model] | str, related_name: str | None = None, related_query_name: str | None = None, limit_choices_to: _AllLimitChoicesTo | None = None, symmetrical: bool = True, through: type[Model] | str | None = None, through_fields: tuple[str, str] | None = None, db_constraint: bool = True, ) -> None: ... def get_related_field(self) -> Field: ... django-stubs-5.2.9/django-stubs/db/models/functions/000077500000000000000000000000001513401051600224035ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/db/models/functions/__init__.pyi000066400000000000000000000115001513401051600246620ustar00rootroot00000000000000from .comparison import Cast as Cast from .comparison import Coalesce as Coalesce from .comparison import Collate as Collate from .comparison import Greatest as Greatest from .comparison import Least as Least from .comparison import NullIf as NullIf from .datetime import Extract as Extract from .datetime import ExtractDay as ExtractDay from .datetime import ExtractHour as ExtractHour from .datetime import ExtractIsoWeekDay as ExtractIsoWeekDay from .datetime import ExtractIsoYear as ExtractIsoYear from .datetime import ExtractMinute as ExtractMinute from .datetime import ExtractMonth as ExtractMonth from .datetime import ExtractQuarter as ExtractQuarter from .datetime import ExtractSecond as ExtractSecond from .datetime import ExtractWeek as ExtractWeek from .datetime import ExtractWeekDay as ExtractWeekDay from .datetime import ExtractYear as ExtractYear from .datetime import Now as Now from .datetime import Trunc as Trunc from .datetime import TruncDate as TruncDate from .datetime import TruncDay as TruncDay from .datetime import TruncHour as TruncHour from .datetime import TruncMinute as TruncMinute from .datetime import TruncMonth as TruncMonth from .datetime import TruncQuarter as TruncQuarter from .datetime import TruncSecond as TruncSecond from .datetime import TruncTime as TruncTime from .datetime import TruncWeek as TruncWeek from .datetime import TruncYear as TruncYear from .json import JSONArray as JSONArray from .json import JSONObject as JSONObject from .math import Abs as Abs from .math import ACos as ACos from .math import ASin as ASin from .math import ATan as ATan from .math import ATan2 as ATan2 from .math import Ceil as Ceil from .math import Cos as Cos from .math import Cot as Cot from .math import Degrees as Degrees from .math import Exp as Exp from .math import Floor as Floor from .math import Ln as Ln from .math import Log as Log from .math import Mod as Mod from .math import Pi as Pi from .math import Power as Power from .math import Radians as Radians from .math import Random as Random from .math import Round as Round from .math import Sign as Sign from .math import Sin as Sin from .math import Sqrt as Sqrt from .math import Tan as Tan from .text import MD5 as MD5 from .text import SHA1 as SHA1 from .text import SHA224 as SHA224 from .text import SHA256 as SHA256 from .text import SHA384 as SHA384 from .text import SHA512 as SHA512 from .text import Chr as Chr from .text import Concat as Concat from .text import ConcatPair as ConcatPair from .text import Left as Left from .text import Length as Length from .text import Lower as Lower from .text import LPad as LPad from .text import LTrim as LTrim from .text import Ord as Ord from .text import Repeat as Repeat from .text import Replace as Replace from .text import Reverse as Reverse from .text import Right as Right from .text import RPad as RPad from .text import RTrim as RTrim from .text import StrIndex as StrIndex from .text import Substr as Substr from .text import Trim as Trim from .text import Upper as Upper from .window import CumeDist as CumeDist from .window import DenseRank as DenseRank from .window import FirstValue as FirstValue from .window import Lag as Lag from .window import LastValue as LastValue from .window import Lead as Lead from .window import NthValue as NthValue from .window import Ntile as Ntile from .window import PercentRank as PercentRank from .window import Rank as Rank from .window import RowNumber as RowNumber __all__ = [ # text "MD5", "SHA1", "SHA224", "SHA256", "SHA384", "SHA512", "ACos", "ASin", "ATan", "ATan2", # math "Abs", # comparison and conversion "Cast", "Ceil", "Chr", "Coalesce", "Collate", "Concat", "ConcatPair", "Cos", "Cot", # window "CumeDist", "Degrees", "DenseRank", "Exp", # datetime "Extract", "ExtractDay", "ExtractHour", "ExtractIsoWeekDay", "ExtractIsoYear", "ExtractMinute", "ExtractMonth", "ExtractQuarter", "ExtractSecond", "ExtractWeek", "ExtractWeekDay", "ExtractYear", "FirstValue", "Floor", "Greatest", # json "JSONArray", "JSONObject", "LPad", "LTrim", "Lag", "LastValue", "Lead", "Least", "Left", "Length", "Ln", "Log", "Lower", "Mod", "Now", "NthValue", "Ntile", "NullIf", "Ord", "PercentRank", "Pi", "Power", "RPad", "RTrim", "Radians", "Random", "Rank", "Repeat", "Replace", "Reverse", "Right", "Round", "RowNumber", "Sign", "Sin", "Sqrt", "StrIndex", "Substr", "Tan", "Trim", "Trunc", "TruncDate", "TruncDay", "TruncHour", "TruncMinute", "TruncMonth", "TruncQuarter", "TruncSecond", "TruncTime", "TruncWeek", "TruncYear", "Upper", ] django-stubs-5.2.9/django-stubs/db/models/functions/comparison.pyi000066400000000000000000000006751513401051600253100ustar00rootroot00000000000000from django.db.models import Func from django.db.models.expressions import Combinable from django.db.models.fields import Field class Cast(Func): def __init__(self, expression: Combinable | str, output_field: str | Field) -> None: ... class Coalesce(Func): ... class Collate(Func): def __init__(self, expression: Combinable | str, collation: str) -> None: ... class Greatest(Func): ... class Least(Func): ... class NullIf(Func): ... django-stubs-5.2.9/django-stubs/db/models/functions/datetime.pyi000066400000000000000000000043761513401051600247340ustar00rootroot00000000000000from datetime import tzinfo from typing import Any, ClassVar from django.db import models from django.db.backends.base.base import BaseDatabaseWrapper from django.db.models import Func, Transform from django.db.models.expressions import Combinable from django.db.models.fields import Field from django.db.models.sql.compiler import SQLCompiler, _AsSqlType class TimezoneMixin: tzinfo: Any def get_tzname(self) -> str | None: ... class Extract(TimezoneMixin, Transform): lookup_name: str output_field: ClassVar[models.IntegerField] def __init__( self, expression: Combinable | str, lookup_name: str | None = None, tzinfo: Any | None = None, **extra: Any ) -> None: ... class ExtractYear(Extract): ... class ExtractIsoYear(Extract): ... class ExtractMonth(Extract): ... class ExtractDay(Extract): ... class ExtractWeek(Extract): ... class ExtractWeekDay(Extract): ... class ExtractIsoWeekDay(Extract): ... class ExtractQuarter(Extract): ... class ExtractHour(Extract): ... class ExtractMinute(Extract): ... class ExtractSecond(Extract): ... class Now(Func): output_field: ClassVar[models.DateTimeField] def as_oracle(self, compiler: SQLCompiler, connection: BaseDatabaseWrapper, **extra_context: Any) -> _AsSqlType: ... class TruncBase(TimezoneMixin, Transform): kind: str tzinfo: Any def __init__( self, expression: Combinable | str, output_field: Field | None = None, tzinfo: tzinfo | None = None, **extra: Any, ) -> None: ... def as_sql(self, compiler: SQLCompiler, connection: BaseDatabaseWrapper) -> _AsSqlType: ... # type: ignore[override] class Trunc(TruncBase): def __init__( self, expression: Combinable | str, kind: str, output_field: Field | None = None, tzinfo: tzinfo | None = None, **extra: Any, ) -> None: ... class TruncYear(TruncBase): ... class TruncQuarter(TruncBase): ... class TruncMonth(TruncBase): ... class TruncWeek(TruncBase): ... class TruncDay(TruncBase): ... class TruncDate(TruncBase): output_field: ClassVar[models.DateField] class TruncTime(TruncBase): output_field: ClassVar[models.TimeField] class TruncHour(TruncBase): ... class TruncMinute(TruncBase): ... class TruncSecond(TruncBase): ... django-stubs-5.2.9/django-stubs/db/models/functions/json.pyi000066400000000000000000000031511513401051600240770ustar00rootroot00000000000000from collections.abc import Sequence from typing import Any, ClassVar from django.db.backends.base.base import BaseDatabaseWrapper from django.db.models.expressions import Func from django.db.models.fields.json import JSONField from django.db.models.sql.compiler import SQLCompiler, _AsSqlType class JSONArray(Func): output_field: ClassVar[JSONField] def as_sql(self, compiler: SQLCompiler, connection: BaseDatabaseWrapper, **extra_context: Any) -> _AsSqlType: ... # type: ignore [override] def as_native( self, compiler: SQLCompiler, connection: BaseDatabaseWrapper, *, returning: str, **extra_context: Any ) -> _AsSqlType: ... def as_postgresql( self, compiler: SQLCompiler, connection: BaseDatabaseWrapper, **extra_context: Any ) -> _AsSqlType: ... def as_oracle(self, compiler: SQLCompiler, connection: BaseDatabaseWrapper, **extra_context: Any) -> _AsSqlType: ... class JSONObject(Func): output_field: ClassVar[JSONField] def __init__(self, **fields: Any) -> None: ... def as_sql(self, compiler: SQLCompiler, connection: BaseDatabaseWrapper, **extra_context: Any) -> _AsSqlType: ... # type: ignore [override] def as_native( self, compiler: SQLCompiler, connection: BaseDatabaseWrapper, *, returning: str, **extra_context: Any ) -> _AsSqlType: ... def as_postgresql( self, compiler: SQLCompiler, connection: BaseDatabaseWrapper, **extra_context: Any ) -> _AsSqlType: ... def as_oracle(self, compiler: SQLCompiler, connection: BaseDatabaseWrapper, **extra_context: Any) -> _AsSqlType: ... def join(self, args: Sequence[Any]) -> str: ... django-stubs-5.2.9/django-stubs/db/models/functions/math.pyi000066400000000000000000000025751513401051600240700ustar00rootroot00000000000000from typing import Any from django.db.models.expressions import Combinable, Func from django.db.models.functions.mixins import FixDecimalInputMixin, NumericOutputFieldMixin from django.db.models.lookups import Transform class Abs(Transform): ... class ACos(NumericOutputFieldMixin, Transform): ... class ASin(NumericOutputFieldMixin, Transform): ... class ATan(NumericOutputFieldMixin, Transform): ... class ATan2(NumericOutputFieldMixin, Func): ... class Ceil(Transform): ... class Cos(NumericOutputFieldMixin, Transform): ... class Cot(NumericOutputFieldMixin, Transform): ... class Degrees(NumericOutputFieldMixin, Transform): ... class Exp(NumericOutputFieldMixin, Transform): ... class Floor(Transform): ... class Ln(NumericOutputFieldMixin, Transform): ... class Log(FixDecimalInputMixin, NumericOutputFieldMixin, Func): ... class Mod(FixDecimalInputMixin, NumericOutputFieldMixin, Func): ... class Pi(NumericOutputFieldMixin, Func): ... class Power(NumericOutputFieldMixin, Func): ... class Radians(NumericOutputFieldMixin, Transform): ... class Random(NumericOutputFieldMixin, Func): ... class Round(Transform): def __init__(self, expression: Combinable | str, precision: int = 0, **extra: Any) -> None: ... class Sin(NumericOutputFieldMixin, Transform): ... class Sqrt(NumericOutputFieldMixin, Transform): ... class Tan(NumericOutputFieldMixin, Transform): ... class Sign(Transform): ... django-stubs-5.2.9/django-stubs/db/models/functions/mixins.pyi000066400000000000000000000001441513401051600244340ustar00rootroot00000000000000class FixDecimalInputMixin: ... class FixDurationInputMixin: ... class NumericOutputFieldMixin: ... django-stubs-5.2.9/django-stubs/db/models/functions/text.pyi000066400000000000000000000113011513401051600241060ustar00rootroot00000000000000from typing import Any, ClassVar from django.db import models from django.db.backends.base.base import BaseDatabaseWrapper from django.db.models import Func, Transform from django.db.models.expressions import Combinable, Expression, Value from django.db.models.sql.compiler import SQLCompiler, _AsSqlType class MySQLSHA2Mixin: def as_mysql(self, compiler: SQLCompiler, connection: BaseDatabaseWrapper, **extra_context: Any) -> _AsSqlType: ... class OracleHashMixin: def as_oracle(self, compiler: SQLCompiler, connection: BaseDatabaseWrapper, **extra_context: Any) -> _AsSqlType: ... class PostgreSQLSHAMixin: def as_postgresql( self, compiler: SQLCompiler, connection: BaseDatabaseWrapper, **extra_context: Any ) -> _AsSqlType: ... class Chr(Transform): def as_mysql(self, compiler: SQLCompiler, connection: BaseDatabaseWrapper, **extra_context: Any) -> _AsSqlType: ... def as_oracle(self, compiler: SQLCompiler, connection: BaseDatabaseWrapper, **extra_context: Any) -> _AsSqlType: ... def as_sqlite(self, compiler: SQLCompiler, connection: BaseDatabaseWrapper, **extra_context: Any) -> _AsSqlType: ... class ConcatPair(Func): def coalesce(self) -> ConcatPair: ... def pipes_concat_sql( self, compiler: SQLCompiler, connection: BaseDatabaseWrapper, **extra_context: Any ) -> _AsSqlType: ... as_sqlite = pipes_concat_sql def as_mysql(self, compiler: SQLCompiler, connection: BaseDatabaseWrapper, **extra_context: Any) -> _AsSqlType: ... class Concat(Func): def __init__(self, *expressions: Any, **extra: Any) -> None: ... class Left(Func): output_field: ClassVar[models.CharField] def __init__(self, expression: Combinable | str, length: Expression | int, **extra: Any) -> None: ... def get_substr(self) -> Substr: ... def as_oracle(self, compiler: SQLCompiler, connection: BaseDatabaseWrapper, **extra_context: Any) -> _AsSqlType: ... def as_sqlite(self, compiler: SQLCompiler, connection: BaseDatabaseWrapper, **extra_context: Any) -> _AsSqlType: ... class Length(Transform): output_field: ClassVar[models.IntegerField] def as_mysql(self, compiler: SQLCompiler, connection: BaseDatabaseWrapper, **extra_context: Any) -> _AsSqlType: ... class Lower(Transform): ... class LPad(Func): output_field: ClassVar[models.CharField] def __init__( self, expression: Combinable | str, length: Expression | int | None, fill_text: Expression = ..., **extra: Any ) -> None: ... class LTrim(Transform): ... class MD5(OracleHashMixin, Transform): ... class Ord(Transform): output_field: ClassVar[models.IntegerField] def as_sqlite(self, compiler: SQLCompiler, connection: BaseDatabaseWrapper, **extra_context: Any) -> _AsSqlType: ... def as_mysql(self, compiler: SQLCompiler, connection: BaseDatabaseWrapper, **extra_context: Any) -> _AsSqlType: ... class Repeat(Func): output_field: ClassVar[models.CharField] def __init__(self, expression: Combinable | str, number: Expression | int | None, **extra: Any) -> None: ... def as_oracle(self, compiler: SQLCompiler, connection: BaseDatabaseWrapper, **extra_context: Any) -> _AsSqlType: ... class Replace(Func): def __init__(self, expression: Combinable | str, text: Value, replacement: Value = ..., **extra: Any) -> None: ... class Reverse(Transform): def as_oracle(self, compiler: SQLCompiler, connection: BaseDatabaseWrapper, **extra_context: Any) -> _AsSqlType: ... class Right(Left): def get_substr(self) -> Substr: ... class RPad(LPad): ... class RTrim(Transform): ... class SHA1(OracleHashMixin, PostgreSQLSHAMixin, Transform): ... class SHA224(MySQLSHA2Mixin, PostgreSQLSHAMixin, Transform): def as_oracle(self, compiler: SQLCompiler, connection: BaseDatabaseWrapper, **extra_context: Any) -> _AsSqlType: ... class SHA256(MySQLSHA2Mixin, OracleHashMixin, PostgreSQLSHAMixin, Transform): ... class SHA384(MySQLSHA2Mixin, OracleHashMixin, PostgreSQLSHAMixin, Transform): ... class SHA512(MySQLSHA2Mixin, OracleHashMixin, PostgreSQLSHAMixin, Transform): ... class StrIndex(Func): output_field: ClassVar[models.IntegerField] def as_postgresql( self, compiler: SQLCompiler, connection: BaseDatabaseWrapper, **extra_context: Any ) -> _AsSqlType: ... class Substr(Func): output_field: ClassVar[models.CharField] def __init__( self, expression: Combinable | str, pos: Expression | int, length: Expression | int | None = None, **extra: Any ) -> None: ... def as_sqlite(self, compiler: SQLCompiler, connection: BaseDatabaseWrapper, **extra_context: Any) -> _AsSqlType: ... def as_oracle(self, compiler: SQLCompiler, connection: BaseDatabaseWrapper, **extra_context: Any) -> _AsSqlType: ... class Trim(Transform): ... class Upper(Transform): ... django-stubs-5.2.9/django-stubs/db/models/functions/window.pyi000066400000000000000000000022161513401051600244360ustar00rootroot00000000000000from typing import Any, ClassVar from django.db import models from django.db.models.expressions import Func class CumeDist(Func): output_field: ClassVar[models.FloatField] class DenseRank(Func): output_field: ClassVar[models.IntegerField] class FirstValue(Func): ... class LagLeadFunction(Func): def __init__(self, expression: str | None, offset: int = 1, default: int | None = None, **extra: Any) -> None: ... class Lag(LagLeadFunction): ... class LastValue(Func): ... class Lead(LagLeadFunction): ... class NthValue(Func): def __init__(self, expression: str | None, nth: int = 1, **extra: Any) -> None: ... class Ntile(Func): def __init__(self, num_buckets: int = 1, **extra: Any) -> None: ... output_field: ClassVar[models.IntegerField] class PercentRank(Func): output_field: ClassVar[models.FloatField] class Rank(Func): output_field: ClassVar[models.IntegerField] class RowNumber(Func): output_field: ClassVar[models.IntegerField] __all__ = [ "CumeDist", "DenseRank", "FirstValue", "Lag", "LastValue", "Lead", "NthValue", "Ntile", "PercentRank", "Rank", "RowNumber", ] django-stubs-5.2.9/django-stubs/db/models/indexes.pyi000066400000000000000000000043701513401051600225610ustar00rootroot00000000000000from collections.abc import Sequence from typing import Any from django.db.backends.base.base import BaseDatabaseWrapper from django.db.backends.base.schema import BaseDatabaseSchemaEditor from django.db.backends.ddl_references import Statement from django.db.models.base import Model from django.db.models.expressions import BaseExpression, Combinable, Expression, Func from django.db.models.query_utils import Q from django.db.models.sql.compiler import SQLCompiler, _AsSqlType class Index: model: type[Model] suffix: str max_name_length: int fields: Sequence[str] fields_orders: Sequence[tuple[str, str]] name: str db_tablespace: str | None opclasses: Sequence[str] condition: Q | None expressions: Sequence[BaseExpression | Combinable] include: Sequence[str] def __init__( self, *expressions: BaseExpression | Combinable | str, fields: Sequence[str] = (), name: str | None = None, db_tablespace: str | None = None, opclasses: Sequence[str] = (), condition: Q | None = None, include: Sequence[str] | None = None, ) -> None: ... @property def contains_expressions(self) -> bool: ... def create_sql( self, model: type[Model], schema_editor: BaseDatabaseSchemaEditor, using: str = "", **kwargs: Any ) -> Statement: ... def remove_sql(self, model: type[Model], schema_editor: BaseDatabaseSchemaEditor, **kwargs: Any) -> str: ... def deconstruct(self) -> tuple[str, Sequence[Any], dict[str, Any]]: ... def clone(self) -> Index: ... def set_name_with_model(self, model: type[Model]) -> None: ... class IndexExpression(Func): template: str wrapper_classes: Sequence[Expression] def set_wrapper_classes(self, connection: Any | None = None) -> None: ... @classmethod def register_wrappers(cls, *wrapper_classes: Expression) -> None: ... def resolve_expression( self, query: Any | None = None, allow_joins: bool = True, reuse: set[str] | None = None, summarize: bool = False, for_save: bool = False, ) -> IndexExpression: ... def as_sqlite(self, compiler: SQLCompiler, connection: BaseDatabaseWrapper, **extra_context: Any) -> _AsSqlType: ... __all__ = ["Index"] django-stubs-5.2.9/django-stubs/db/models/lookups.pyi000066400000000000000000000143041513401051600226140ustar00rootroot00000000000000from collections.abc import Iterable, Sequence from typing import Any, Generic, Literal, TypeVar from django.db.backends.base.base import BaseDatabaseWrapper from django.db.models.expressions import Combinable, Expression, Func from django.db.models.fields import BooleanField from django.db.models.query_utils import RegisterLookupMixin from django.db.models.sql.compiler import SQLCompiler, _AsSqlType, _ParamT from django.utils.datastructures import OrderedSet from django.utils.functional import cached_property _T = TypeVar("_T") class Lookup(Expression, Generic[_T]): lookup_name: str prepare_rhs: bool can_use_none_as_rhs: bool lhs: Any rhs: Any bilateral_transforms: list[type[Transform]] def __init__(self, lhs: Any, rhs: Any) -> None: ... def apply_bilateral_transforms(self, value: Expression) -> Expression: ... def batch_process_rhs( self, compiler: SQLCompiler, connection: BaseDatabaseWrapper, rhs: OrderedSet | None = None ) -> tuple[list[str], list[str]]: ... def get_source_expressions(self) -> list[Expression]: ... def set_source_expressions(self, new_exprs: Sequence[Combinable | Expression]) -> None: ... def get_prep_lookup(self) -> Any: ... def get_db_prep_lookup(self, value: _ParamT, connection: BaseDatabaseWrapper) -> _AsSqlType: ... def process_lhs( self, compiler: SQLCompiler, connection: BaseDatabaseWrapper, lhs: Expression | None = None ) -> _AsSqlType: ... def process_rhs(self, compiler: SQLCompiler, connection: BaseDatabaseWrapper) -> _AsSqlType: ... def rhs_is_direct_value(self) -> bool: ... def as_sql(self, compiler: SQLCompiler, connection: BaseDatabaseWrapper) -> _AsSqlType: ... def as_oracle(self, compiler: SQLCompiler, connection: BaseDatabaseWrapper) -> _AsSqlType: ... @cached_property def output_field(self) -> BooleanField: ... @cached_property def contains_aggregate(self) -> bool: ... @cached_property def contains_over_clause(self) -> bool: ... @property def identity(self) -> tuple[type[Lookup], Any, Any]: ... class Transform(RegisterLookupMixin, Func): bilateral: bool @property def lhs(self) -> Expression: ... def get_bilateral_transforms(self) -> list[type[Transform]]: ... class BuiltinLookup(Lookup[_T]): def process_lhs( self, compiler: SQLCompiler, connection: BaseDatabaseWrapper, lhs: Expression | None = None ) -> _AsSqlType: ... def get_rhs_op(self, connection: BaseDatabaseWrapper, rhs: str) -> str: ... class FieldGetDbPrepValueMixin: get_db_prep_lookup_value_is_iterable: bool def get_db_prep_lookup(self, value: _ParamT, connection: BaseDatabaseWrapper) -> _AsSqlType: ... class FieldGetDbPrepValueIterableMixin(FieldGetDbPrepValueMixin): get_db_prep_lookup_value_is_iterable: Literal[True] def get_prep_lookup(self) -> Iterable[Any]: ... def resolve_expression_parameter( self, compiler: SQLCompiler, connection: BaseDatabaseWrapper, sql: str, param: Any ) -> _AsSqlType: ... class PostgresOperatorLookup(Lookup[_T]): postgres_operator: str | None def as_postgresql(self, compiler: SQLCompiler, connection: BaseDatabaseWrapper) -> _AsSqlType: ... class Exact(FieldGetDbPrepValueMixin, BuiltinLookup[_T]): ... class IExact(BuiltinLookup[_T]): ... class GreaterThan(FieldGetDbPrepValueMixin, BuiltinLookup[_T]): ... class GreaterThanOrEqual(FieldGetDbPrepValueMixin, BuiltinLookup[_T]): ... class LessThan(FieldGetDbPrepValueMixin, BuiltinLookup[_T]): ... class LessThanOrEqual(FieldGetDbPrepValueMixin, BuiltinLookup[_T]): ... class IntegerFieldOverflow: underflow_exception: type[Exception] overflow_exception: type[Exception] def process_rhs(self, compiler: SQLCompiler, connection: BaseDatabaseWrapper) -> _AsSqlType: ... class IntegerFieldFloatRounding: rhs: Any def get_prep_lookup(self) -> Any: ... class IntegerFieldExact(IntegerFieldOverflow, Exact[int | float]): ... class IntegerGreaterThan(IntegerFieldOverflow, GreaterThan[int | float]): ... class IntegerGreaterThanOrEqual(IntegerFieldOverflow, IntegerFieldFloatRounding, GreaterThanOrEqual[int | float]): ... class IntegerLessThan(IntegerFieldOverflow, IntegerFieldFloatRounding, LessThan[int | float]): ... class IntegerLessThanOrEqual(IntegerFieldOverflow, LessThanOrEqual[int | float]): ... class In(FieldGetDbPrepValueIterableMixin, BuiltinLookup[_T]): def split_parameter_list_as_sql(self, compiler: SQLCompiler, connection: BaseDatabaseWrapper) -> Any: ... class PatternLookup(BuiltinLookup[str]): param_pattern: str class Contains(PatternLookup): ... class IContains(Contains): ... class StartsWith(PatternLookup): ... class IStartsWith(StartsWith): ... class EndsWith(PatternLookup): ... class IEndsWith(EndsWith): ... class Range(FieldGetDbPrepValueIterableMixin, BuiltinLookup[_T]): ... class IsNull(BuiltinLookup[bool]): ... class Regex(BuiltinLookup[str]): ... class IRegex(Regex): ... class YearLookup(Lookup): def year_lookup_bounds(self, connection: BaseDatabaseWrapper, year: int) -> list[str]: ... def get_direct_rhs_sql(self, connection: BaseDatabaseWrapper, rhs: str) -> str: ... def get_bound_params(self, start: Any, finish: Any) -> Any: ... class YearExact(YearLookup, Exact[_T]): def get_bound_params(self, start: Any, finish: Any) -> tuple[Any, Any]: ... class YearGt(YearLookup, GreaterThan[_T]): def get_bound_params(self, start: Any, finish: Any) -> tuple[Any]: ... class YearGte(YearLookup, GreaterThanOrEqual[_T]): def get_bound_params(self, start: Any, finish: Any) -> tuple[Any]: ... class YearLt(YearLookup, LessThan[_T]): def get_bound_params(self, start: Any, finish: Any) -> tuple[Any]: ... class YearLte(YearLookup, LessThanOrEqual[_T]): def get_bound_params(self, start: Any, finish: Any) -> tuple[Any]: ... class UUIDTextMixin: rhs: Any def process_rhs(self, qn: Any, connection: BaseDatabaseWrapper) -> Any: ... class UUIDIExact(UUIDTextMixin, IExact[_T]): ... class UUIDContains(UUIDTextMixin, Contains): ... class UUIDIContains(UUIDTextMixin, IContains): ... class UUIDStartsWith(UUIDTextMixin, StartsWith): ... class UUIDIStartsWith(UUIDTextMixin, IStartsWith): ... class UUIDEndsWith(UUIDTextMixin, EndsWith): ... class UUIDIEndsWith(UUIDTextMixin, IEndsWith): ... django-stubs-5.2.9/django-stubs/db/models/manager.pyi000066400000000000000000000204651513401051600225370ustar00rootroot00000000000000import datetime from collections.abc import AsyncIterator, Collection, Iterable, Iterator, Mapping, Sequence from typing import Any, Generic, Literal, NoReturn, TypeVar, overload from django.core.checks.messages import CheckMessage from django.db.models.base import Model from django.db.models.expressions import Combinable, OrderBy from django.db.models.query import Prefetch, QuerySet, RawQuerySet, _LookupT, _PrefetchedQuerySetT, _ToAttrT from typing_extensions import Self _T = TypeVar("_T", bound=Model, covariant=True) class BaseManager(Generic[_T]): creation_counter: int auto_created: bool use_in_migrations: bool name: str model: type[_T] _db: str | None def __new__(cls, *args: Any, **kwargs: Any) -> Self: ... def __init__(self) -> None: ... def __class_getitem__(cls, *args: Any, **kwargs: Any) -> type[Self]: ... def deconstruct( self, ) -> tuple[bool, str | None, str | None, Sequence[Any] | None, dict[str, Any] | None]: ... def check(self, **kwargs: Any) -> list[CheckMessage]: ... @classmethod def from_queryset(cls, queryset_class: type[QuerySet[_T]], class_name: str | None = None) -> type[Self]: ... @classmethod def _get_queryset_methods(cls, queryset_class: type) -> dict[str, Any]: ... def contribute_to_class(self, cls: type[Model], name: str) -> None: ... def db_manager(self, using: str | None = None, hints: dict[str, Model] | None = None) -> Self: ... @property def db(self) -> str: ... def get_queryset(self) -> QuerySet[_T]: ... def all(self) -> QuerySet[_T]: ... class Manager(BaseManager[_T]): # NOTE: The following methods are in common with QuerySet, but note that the use of QuerySet as a return type # rather than a self-type (_QS), since Manager's QuerySet-like methods return QuerySets and not Managers. def iterator(self, chunk_size: int | None = ...) -> Iterator[_T]: ... def aiterator(self, chunk_size: int = ...) -> AsyncIterator[_T]: ... def aggregate(self, *args: Any, **kwargs: Any) -> dict[str, Any]: ... async def aaggregate(self, *args: Any, **kwargs: Any) -> dict[str, Any]: ... def get(self, *args: Any, **kwargs: Any) -> _T: ... async def aget(self, *args: Any, **kwargs: Any) -> _T: ... def create(self, **kwargs: Any) -> _T: ... async def acreate(self, **kwargs: Any) -> _T: ... def bulk_create( self, objs: Iterable[_T], batch_size: int | None = ..., ignore_conflicts: bool = ..., update_conflicts: bool = ..., update_fields: Collection[str] | None = ..., unique_fields: Collection[str] | None = ..., ) -> list[_T]: ... async def abulk_create( self, objs: Iterable[_T], batch_size: int | None = ..., ignore_conflicts: bool = ..., update_conflicts: bool = ..., update_fields: Collection[str] | None = ..., unique_fields: Collection[str] | None = ..., ) -> list[_T]: ... def bulk_update(self, objs: Iterable[_T], fields: Iterable[str], batch_size: int | None = ...) -> int: ... async def abulk_update(self, objs: Iterable[_T], fields: Iterable[str], batch_size: int | None = ...) -> int: ... def get_or_create(self, defaults: Mapping[str, Any] | None = ..., **kwargs: Any) -> tuple[_T, bool]: ... async def aget_or_create(self, defaults: Mapping[str, Any] | None = ..., **kwargs: Any) -> tuple[_T, bool]: ... def update_or_create( self, defaults: Mapping[str, Any] | None = ..., create_defaults: Mapping[str, Any] | None = ..., **kwargs: Any, ) -> tuple[_T, bool]: ... async def aupdate_or_create( self, defaults: Mapping[str, Any] | None = ..., create_defaults: Mapping[str, Any] | None = ..., **kwargs: Any, ) -> tuple[_T, bool]: ... def earliest(self, *fields: str | OrderBy) -> _T: ... async def aearliest(self, *fields: str | OrderBy) -> _T: ... def latest(self, *fields: str | OrderBy) -> _T: ... async def alatest(self, *fields: str | OrderBy) -> _T: ... def first(self) -> _T | None: ... async def afirst(self) -> _T | None: ... def last(self) -> _T | None: ... async def alast(self) -> _T | None: ... def in_bulk(self, id_list: Iterable[Any] | None = ..., *, field_name: str = ...) -> dict[Any, _T]: ... async def ain_bulk(self, id_list: Iterable[Any] | None = ..., *, field_name: str = ...) -> dict[Any, _T]: ... def update(self, **kwargs: Any) -> int: ... async def aupdate(self, **kwargs: Any) -> int: ... def exists(self) -> bool: ... async def aexists(self) -> bool: ... def explain(self, *, format: str | None = ..., **options: Any) -> str: ... async def aexplain(self, *, format: str | None = ..., **options: Any) -> str: ... def contains(self, obj: Model) -> bool: ... async def acontains(self, obj: Model) -> bool: ... def raw( self, raw_query: str, params: Any = ..., translations: dict[str, str] | None = ..., using: str | None = ..., ) -> RawQuerySet[_T]: ... # The type of values may be overridden to be more specific in the mypy plugin, depending on the fields param def values(self, *fields: str | Combinable, **expressions: Any) -> QuerySet[_T, dict[str, Any]]: ... # The type of values_list may be overridden to be more specific in the mypy plugin, depending on the fields param def values_list(self, *fields: str | Combinable, flat: bool = ..., named: bool = ...) -> QuerySet[_T, Any]: ... def dates( self, field_name: str, kind: Literal["year", "month", "week", "day"], order: Literal["ASC", "DESC"] = "ASC", ) -> QuerySet[_T, datetime.date]: ... def datetimes( self, field_name: str, kind: Literal["year", "month", "week", "day", "hour", "minute", "second"], order: Literal["ASC", "DESC"] = "ASC", tzinfo: datetime.tzinfo | None = None, ) -> QuerySet[_T, datetime.datetime]: ... def none(self) -> QuerySet[_T]: ... def filter(self, *args: Any, **kwargs: Any) -> QuerySet[_T]: ... def exclude(self, *args: Any, **kwargs: Any) -> QuerySet[_T]: ... def complex_filter(self, filter_obj: Any) -> QuerySet[_T]: ... def count(self) -> int: ... async def acount(self) -> int: ... def union(self, *other_qs: QuerySet[Model, Any], all: bool = ...) -> QuerySet[_T]: ... def intersection(self, *other_qs: QuerySet[Model, Any]) -> QuerySet[_T]: ... def difference(self, *other_qs: QuerySet[Model, Any]) -> QuerySet[_T]: ... def select_for_update( self, nowait: bool = ..., skip_locked: bool = ..., of: Sequence[str] = ..., no_key: bool = ... ) -> QuerySet[_T]: ... @overload def select_related(self, clear: None, /) -> QuerySet[_T]: ... @overload def select_related(self, *fields: str) -> QuerySet[_T]: ... @overload def prefetch_related(self, clear: None, /) -> QuerySet[_T]: ... @overload def prefetch_related(self, *lookups: str | Prefetch[_LookupT, _PrefetchedQuerySetT, _ToAttrT]) -> QuerySet[_T]: ... def annotate(self, *args: Any, **kwargs: Any) -> QuerySet[_T]: ... def alias(self, *args: Any, **kwargs: Any) -> QuerySet[_T]: ... def order_by(self, *field_names: str | Combinable) -> QuerySet[_T]: ... def distinct(self, *field_names: str) -> QuerySet[_T]: ... # extra() return type won't be supported any time soon def extra( self, select: dict[str, Any] | None = ..., where: list[str] | None = ..., params: list[Any] | None = ..., tables: list[str] | None = ..., order_by: Sequence[str] | None = ..., select_params: Sequence[Any] | None = ..., ) -> QuerySet[Any]: ... def reverse(self) -> QuerySet[_T]: ... @overload def defer(self, clear: None, /) -> QuerySet[_T]: ... @overload def defer(self, *fields: str) -> QuerySet[_T]: ... def only(self, *fields: str) -> QuerySet[_T]: ... def using(self, alias: str | None) -> QuerySet[_T]: ... class ManagerDescriptor: manager: BaseManager def __init__(self, manager: BaseManager) -> None: ... @overload def __get__(self, instance: None, cls: type[Model] | None = None) -> BaseManager: ... @overload def __get__(self, instance: Model, cls: type[Model] | None = None) -> NoReturn: ... class EmptyManager(Manager[_T]): def __init__(self, model: type[_T]) -> None: ... django-stubs-5.2.9/django-stubs/db/models/options.pyi000066400000000000000000000140421513401051600226120ustar00rootroot00000000000000from collections.abc import Iterable, Sequence from typing import Any, Generic, TypeAlias, TypeVar, overload from django.apps.config import AppConfig from django.apps.registry import Apps from django.contrib.contenttypes.fields import GenericForeignKey from django.db.backends.base.base import BaseDatabaseWrapper from django.db.models.base import Model from django.db.models.constraints import BaseConstraint, UniqueConstraint from django.db.models.fields import AutoField, Field from django.db.models.fields.related import ManyToManyField, OneToOneField from django.db.models.fields.reverse_related import ForeignObjectRel from django.db.models.manager import Manager from django.db.models.query_utils import PathInfo from django.utils.datastructures import ImmutableList, _ListOrTuple from django.utils.functional import _StrOrPromise, cached_property PROXY_PARENTS: object EMPTY_RELATION_TREE: Any IMMUTABLE_WARNING: str DEFAULT_NAMES: tuple[str, ...] _OptionTogetherT: TypeAlias = _ListOrTuple[_ListOrTuple[str] | str] | set[tuple[str, ...]] # noqa: PYI047 @overload def normalize_together(option_together: _ListOrTuple[_ListOrTuple[str] | str]) -> tuple[tuple[str, ...], ...]: ... # Any other value will be returned unchanged, but probably only set is semantically allowed @overload def normalize_together(option_together: set[tuple[str, ...]]) -> set[tuple[str, ...]]: ... _T = TypeVar("_T") def make_immutable_fields_list(name: str, data: Iterable[_T]) -> ImmutableList[_T]: ... _M = TypeVar("_M", bound=Model) class Options(Generic[_M]): constraints: _ListOrTuple[BaseConstraint] FORWARD_PROPERTIES: set[str] REVERSE_PROPERTIES: set[str] default_apps: Any local_fields: list[Field] local_many_to_many: list[ManyToManyField] private_fields: list[Any] local_managers: list[Manager] base_manager_name: str | None default_manager_name: str | None model_name: str | None verbose_name: _StrOrPromise | None verbose_name_plural: _StrOrPromise | None db_table: str db_table_comment: str ordering: Sequence[str] | None indexes: _ListOrTuple[Any] unique_together: Sequence[tuple[str, ...]] # Are always normalized index_together: Sequence[tuple[str, ...]] # Are always normalized select_on_save: bool default_permissions: Sequence[str] permissions: _ListOrTuple[Any] object_name: str | None app_label: str get_latest_by: Sequence[str] | None order_with_respect_to: str | None db_tablespace: str required_db_features: _ListOrTuple[str] required_db_vendor: str | None meta: type | None pk: Field auto_field: AutoField | None abstract: bool managed: bool proxy: bool proxy_for_model: type[Model] | None concrete_model: type[Model] | None swappable: str | None parents: dict[type[Model], GenericForeignKey | Field] auto_created: bool related_fkey_lookups: list[Any] apps: Apps default_related_name: str | None model: type[Model] original_attrs: dict[str, Any] def __init__(self, meta: type | None, app_label: str | None = None) -> None: ... @property def label(self) -> str: ... @property def label_lower(self) -> str: ... @property def app_config(self) -> AppConfig: ... def contribute_to_class(self, cls: type[Model], name: str) -> None: ... def add_manager(self, manager: Manager) -> None: ... def add_field(self, field: GenericForeignKey | Field[Any, Any], private: bool = False) -> None: ... # if GenericForeignKey is passed as argument, it has primary_key = True set before def setup_pk(self, field: GenericForeignKey | Field[Any, Any]) -> None: ... def setup_proxy(self, target: type[Model]) -> None: ... def can_migrate(self, connection: BaseDatabaseWrapper | str) -> bool: ... @cached_property def verbose_name_raw(self) -> str: ... @cached_property def swapped(self) -> str | None: ... def setting_changed(self, *, setting: str, **kwargs: Any) -> None: ... @cached_property def fields_map(self) -> dict[str, Field[Any, Any] | ForeignObjectRel]: ... @cached_property def managers(self) -> ImmutableList[Manager]: ... @cached_property def managers_map(self) -> dict[str, Manager]: ... @cached_property def base_manager(self) -> Manager: ... @cached_property def default_manager(self) -> Manager | None: ... @cached_property def fields(self) -> ImmutableList[Field[Any, Any]]: ... @cached_property def concrete_fields(self) -> ImmutableList[Field[Any, Any]]: ... @cached_property def many_to_many(self) -> ImmutableList[ManyToManyField[Any, Any]]: ... @cached_property def related_objects(self) -> ImmutableList[ForeignObjectRel]: ... @cached_property def local_concrete_fields(self) -> ImmutableList[Field[Any, Any]]: ... def get_field(self, field_name: str) -> Field | ForeignObjectRel | GenericForeignKey: ... def get_base_chain(self, model: type[Model]) -> list[type[Model]]: ... @cached_property def all_parents(self) -> tuple[type[Model]]: ... def get_parent_list(self) -> list[type[Model]]: ... def get_ancestor_link(self, ancestor: type[Model]) -> OneToOneField | None: ... def get_path_to_parent(self, parent: type[Model]) -> list[PathInfo]: ... def get_path_from_parent(self, parent: type[Model]) -> list[PathInfo]: ... def get_fields( self, include_parents: bool = True, include_hidden: bool = False ) -> list[Field[Any, Any] | ForeignObjectRel | GenericForeignKey]: ... def _get_fields( self, forward: bool = True, reverse: bool = True, include_parents: bool | object = True, include_hidden: bool = False, topmost_call: bool = True, ) -> list[Field[Any, Any] | ForeignObjectRel | GenericForeignKey]: ... @cached_property def total_unique_constraints(self) -> list[UniqueConstraint]: ... @cached_property def db_returning_fields(self) -> list[Field[Any, Any]]: ... @cached_property def pk_fields(self) -> list[Field[Any, Any]]: ... @property def is_composite_pk(self) -> bool: ... django-stubs-5.2.9/django-stubs/db/models/query.pyi000066400000000000000000000316221513401051600222670ustar00rootroot00000000000000import datetime from collections.abc import AsyncIterator, Collection, Iterable, Iterator, Mapping, Sequence, Sized from typing import Any, Generic, Literal, NamedTuple, TypeAlias, overload from django.db.backends.utils import _ExecuteQuery from django.db.models import Manager from django.db.models.base import Model from django.db.models.expressions import Combinable, OrderBy from django.db.models.sql.query import Query, RawQuery from django.utils.functional import cached_property from typing_extensions import Self, TypeVar, deprecated _T = TypeVar("_T", covariant=True) _Model = TypeVar("_Model", bound=Model, covariant=True) _Row = TypeVar("_Row", covariant=True, default=_Model) # ONLY use together with _Model _TupleT = TypeVar("_TupleT", bound=tuple[Any, ...], covariant=True) # The type of the lookup passed to Prefetch(...) # This will be specialized to a `LiteralString` in the plugin for further processing and validation _LookupT = TypeVar("_LookupT", bound=str, covariant=True) # The type of the queryset passed to Prefetch(...) _PrefetchedQuerySetT = TypeVar("_PrefetchedQuerySetT", bound=QuerySet[Model], covariant=True, default=QuerySet[Model]) # The attribute name to store the prefetched list[_PrefetchedQuerySetT] # This will be specialized to a `LiteralString` in the plugin for further processing and validation _ToAttrT = TypeVar("_ToAttrT", bound=str, covariant=True, default=str) _OrderByFieldName: TypeAlias = str | Combinable MAX_GET_RESULTS: int REPR_OUTPUT_SIZE: int PROHIBITED_FILTER_KWARGS: frozenset[str] class BaseIterable(Generic[_T]): queryset: QuerySet[Model] chunked_fetch: bool chunk_size: int def __init__(self, queryset: QuerySet[Model], chunked_fetch: bool = False, chunk_size: int = 100) -> None: ... def __aiter__(self) -> AsyncIterator[_T]: ... class ModelIterable(BaseIterable[_Model], Generic[_Model]): def __iter__(self) -> Iterator[_Model]: ... class RawModelIterable(BaseIterable[dict[str, Any]]): def __iter__(self) -> Iterator[dict[str, Any]]: ... class ValuesIterable(BaseIterable[dict[str, Any]]): def __iter__(self) -> Iterator[dict[str, Any]]: ... class ValuesListIterable(BaseIterable[_TupleT]): def __iter__(self) -> Iterator[_TupleT]: ... class NamedValuesListIterable(ValuesListIterable[NamedTuple]): def __iter__(self) -> Iterator[NamedTuple]: ... class FlatValuesListIterable(BaseIterable[_T]): def __iter__(self) -> Iterator[_T]: ... class QuerySet(Iterable[_Row], Sized, Generic[_Model, _Row]): model: type[_Model] query: Query _iterable_class: type[BaseIterable] _result_cache: list[_Row] | None def __init__( self, model: type[Model] | None = None, query: Query | None = None, using: str | None = None, hints: dict[str, Model] | None = None, ) -> None: ... @classmethod def as_manager(cls) -> Manager[_Model]: ... def __len__(self) -> int: ... def __bool__(self) -> bool: ... def __class_getitem__(cls, item: type[_Model]) -> Self: ... def __getstate__(self) -> dict[str, Any]: ... # Technically, the other QuerySet must be of the same type _T, but _T is covariant def __and__(self, other: QuerySet[_Model, _Row]) -> Self: ... def __or__(self, other: QuerySet[_Model, _Row]) -> Self: ... # IMPORTANT: When updating any of the following methods' signatures, please ALSO modify # the corresponding method in BaseManager. def iterator(self, chunk_size: int | None = None) -> Iterator[_Row]: ... def aiterator(self, chunk_size: int = 2000) -> AsyncIterator[_Row]: ... def aggregate(self, *args: Any, **kwargs: Any) -> dict[str, Any]: ... async def aaggregate(self, *args: Any, **kwargs: Any) -> dict[str, Any]: ... def get(self, *args: Any, **kwargs: Any) -> _Row: ... async def aget(self, *args: Any, **kwargs: Any) -> _Row: ... def create(self, **kwargs: Any) -> _Model: ... async def acreate(self, **kwargs: Any) -> _Model: ... def bulk_create( self, objs: Iterable[_Model], batch_size: int | None = None, ignore_conflicts: bool = False, update_conflicts: bool = False, update_fields: Collection[str] | None = None, unique_fields: Collection[str] | None = None, ) -> list[_Model]: ... async def abulk_create( self, objs: Iterable[_Model], batch_size: int | None = None, ignore_conflicts: bool = False, update_conflicts: bool = False, update_fields: Collection[str] | None = None, unique_fields: Collection[str] | None = None, ) -> list[_Model]: ... def bulk_update(self, objs: Iterable[_Model], fields: Iterable[str], batch_size: int | None = None) -> int: ... async def abulk_update( self, objs: Iterable[_Model], fields: Iterable[str], batch_size: int | None = None ) -> int: ... def get_or_create(self, defaults: Mapping[str, Any] | None = None, **kwargs: Any) -> tuple[_Model, bool]: ... async def aget_or_create(self, defaults: Mapping[str, Any] | None = None, **kwargs: Any) -> tuple[_Model, bool]: ... def update_or_create( self, defaults: Mapping[str, Any] | None = None, create_defaults: Mapping[str, Any] | None = None, **kwargs: Any, ) -> tuple[_Model, bool]: ... async def aupdate_or_create( self, defaults: Mapping[str, Any] | None = None, create_defaults: Mapping[str, Any] | None = None, **kwargs: Any, ) -> tuple[_Model, bool]: ... def earliest(self, *fields: str | OrderBy) -> _Row: ... async def aearliest(self, *fields: str | OrderBy) -> _Row: ... def latest(self, *fields: str | OrderBy) -> _Row: ... async def alatest(self, *fields: str | OrderBy) -> _Row: ... def first(self) -> _Row | None: ... async def afirst(self) -> _Row | None: ... def last(self) -> _Row | None: ... async def alast(self) -> _Row | None: ... def in_bulk(self, id_list: Iterable[Any] | None = None, *, field_name: str = "pk") -> dict[Any, _Model]: ... async def ain_bulk(self, id_list: Iterable[Any] | None = None, *, field_name: str = "pk") -> dict[Any, _Model]: ... def delete(self) -> tuple[int, dict[str, int]]: ... async def adelete(self) -> tuple[int, dict[str, int]]: ... def _raw_delete(self, using: str | None) -> int: ... def update(self, **kwargs: Any) -> int: ... async def aupdate(self, **kwargs: Any) -> int: ... def exists(self) -> bool: ... async def aexists(self) -> bool: ... def explain(self, *, format: str | None = None, **options: Any) -> str: ... async def aexplain(self, *, format: str | None = None, **options: Any) -> str: ... def contains(self, obj: Model) -> bool: ... async def acontains(self, obj: Model) -> bool: ... def raw( self, raw_query: _ExecuteQuery, params: Any = (), translations: dict[str, str] | None = None, using: str | None = None, ) -> RawQuerySet[_Model]: ... # The type of values may be overridden to be more specific in the mypy plugin, depending on the fields param def values(self, *fields: str | Combinable, **expressions: Any) -> QuerySet[_Model, dict[str, Any]]: ... # The type of values_list may be overridden to be more specific in the mypy plugin, depending on the fields param def values_list( self, *fields: str | Combinable, flat: bool = False, named: bool = False ) -> QuerySet[_Model, Any]: ... def dates( self, field_name: str, kind: Literal["year", "month", "week", "day"], order: Literal["ASC", "DESC"] = "ASC", ) -> QuerySet[_Model, datetime.date]: ... def datetimes( self, field_name: str, kind: Literal["year", "month", "week", "day", "hour", "minute", "second"], order: Literal["ASC", "DESC"] = "ASC", tzinfo: datetime.tzinfo | None = None, ) -> QuerySet[_Model, datetime.datetime]: ... def none(self) -> Self: ... def all(self) -> Self: ... def filter(self, *args: Any, **kwargs: Any) -> Self: ... def exclude(self, *args: Any, **kwargs: Any) -> Self: ... def complex_filter(self, filter_obj: Any) -> Self: ... def count(self) -> int: ... async def acount(self) -> int: ... def union(self, *other_qs: QuerySet[Model, Any], all: bool = False) -> Self: ... def intersection(self, *other_qs: QuerySet[Model, Any]) -> Self: ... def difference(self, *other_qs: QuerySet[Model, Any]) -> Self: ... def select_for_update( self, nowait: bool = False, skip_locked: bool = False, of: Sequence[str] = (), no_key: bool = False ) -> Self: ... @overload def select_related(self, clear: None, /) -> Self: ... @overload def select_related(self, *fields: str) -> Self: ... @overload def prefetch_related(self, clear: None, /) -> Self: ... @overload def prefetch_related(self, *lookups: str | Prefetch[_LookupT, _PrefetchedQuerySetT, _ToAttrT]) -> Self: ... def annotate(self, *args: Any, **kwargs: Any) -> Self: ... def alias(self, *args: Any, **kwargs: Any) -> Self: ... def order_by(self, *field_names: _OrderByFieldName) -> Self: ... def distinct(self, *field_names: str) -> Self: ... # extra() return type won't be supported any time soon def extra( self, select: dict[str, Any] | None = None, where: Sequence[str] | None = None, params: Sequence[Any] | None = None, tables: Sequence[str] | None = None, order_by: Sequence[_OrderByFieldName] | None = None, select_params: Sequence[Any] | None = None, ) -> QuerySet[Any, Any]: ... def reverse(self) -> Self: ... @overload def defer(self, clear: None, /) -> Self: ... @overload def defer(self, *fields: str) -> Self: ... def only(self, *fields: str) -> Self: ... def using(self, alias: str | None) -> Self: ... @property def ordered(self) -> bool: ... @property def db(self) -> str: ... def _fetch_all(self) -> None: ... def resolve_expression(self, *args: Any, **kwargs: Any) -> Any: ... def __iter__(self) -> Iterator[_Row]: ... def __aiter__(self) -> AsyncIterator[_Row]: ... @overload def __getitem__(self, i: int) -> _Row: ... @overload def __getitem__(self, s: slice) -> Self: ... class RawQuerySet(Iterable[_Model], Sized): raw_query: RawQuery | str model: type[_Model] | None query: RawQuery params: tuple[Any, ...] | None translations: dict[str, str] def __init__( self, raw_query: RawQuery | str, model: type[_Model] | None = None, query: Query | None = None, params: tuple[Any, ...] = (), translations: dict[str, str] | None = None, using: str | None = None, hints: dict[str, Model] | None = None, ) -> None: ... def __len__(self) -> int: ... def __iter__(self) -> Iterator[_Model]: ... def __bool__(self) -> bool: ... @overload def __getitem__(self, k: int) -> _Model: ... @overload def __getitem__(self, k: str) -> Any: ... @overload def __getitem__(self, k: slice) -> Self: ... @cached_property def columns(self) -> list[str]: ... @property def db(self) -> str: ... def iterator(self) -> Iterator[_Model]: ... @cached_property def model_fields(self) -> dict[str, str]: ... @overload def prefetch_related(self, clear: None, /) -> Self: ... @overload def prefetch_related(self, *lookups: str | Prefetch[_LookupT, _PrefetchedQuerySetT, _ToAttrT]) -> Self: ... def resolve_model_init_order(self) -> tuple[list[str], list[int], list[tuple[str, int]]]: ... def using(self, alias: str | None) -> Self: ... # Deprecated alias of QuerySet, for compatibility only. _QuerySet: TypeAlias = QuerySet # noqa: PYI047 class Prefetch(Generic[_LookupT, _PrefetchedQuerySetT, _ToAttrT]): prefetch_through: str prefetch_to: str queryset: _PrefetchedQuerySetT | None to_attr: _ToAttrT | None def __init__( self, lookup: _LookupT, queryset: _PrefetchedQuerySetT | None = None, to_attr: _ToAttrT | None = None ) -> None: ... def __getstate__(self) -> dict[str, Any]: ... def add_prefix(self, prefix: str) -> None: ... def get_current_prefetch_to(self, level: int) -> str: ... def get_current_to_attr(self, level: int) -> tuple[str, str]: ... @deprecated( "get_current_queryset() is deprecated and will be removed in Django 6.0. Use get_current_querysets() instead." ) def get_current_queryset(self, level: int) -> _PrefetchedQuerySetT | None: ... def get_current_querysets(self, level: int) -> list[_PrefetchedQuerySetT] | None: ... def prefetch_related_objects(model_instances: Sequence[_Model], *related_lookups: str | Prefetch) -> None: ... async def aprefetch_related_objects(model_instances: Sequence[_Model], *related_lookups: str | Prefetch) -> None: ... def get_prefetcher(instance: Model, through_attr: str, to_attr: str) -> tuple[Any, Any, bool, bool]: ... class InstanceCheckMeta(type): ... class EmptyQuerySet(metaclass=InstanceCheckMeta): ... django-stubs-5.2.9/django-stubs/db/models/query_utils.pyi000066400000000000000000000077551513401051600235210ustar00rootroot00000000000000from collections.abc import Collection, Iterable, Iterator, Mapping, Sequence from typing import Any, ClassVar, Literal, NamedTuple, TypeVar from _typeshed import Incomplete from django.db.backends.base.base import BaseDatabaseWrapper from django.db.models.base import Model from django.db.models.expressions import BaseExpression from django.db.models.fields import Field from django.db.models.fields.mixins import FieldCacheMixin from django.db.models.lookups import Lookup, Transform from django.db.models.options import Options from django.db.models.sql.compiler import SQLCompiler, _AsSqlType from django.db.models.sql.query import Query from django.db.models.sql.where import WhereNode from django.utils import tree from django.utils.functional import cached_property class PathInfo(NamedTuple): from_opts: Options to_opts: Options target_fields: tuple[Field, ...] join_field: Field m2m: bool direct: bool filtered_relation: FilteredRelation | None def subclasses(cls: type[RegisterLookupMixin]) -> Iterator[type[RegisterLookupMixin]]: ... class Q(tree.Node): AND: Literal["AND"] OR: Literal["OR"] XOR: Literal["XOR"] conditional: bool connectors: tuple[None, Literal["AND"], Literal["OR"], Literal["XOR"]] def __init__(self, *args: Any, **kwargs: Any) -> None: ... # Fake signature, the real is # def __init__(self, *args: Any, _connector: Any | None = ..., _negated: bool = ..., **kwargs: Any) -> None: ... def __or__(self, other: Q) -> Q: ... def __and__(self, other: Q) -> Q: ... def __xor__(self, other: Q) -> Q: ... def __invert__(self) -> Q: ... def resolve_expression( self, query: Query | None = None, allow_joins: bool = True, reuse: set[str] | None = None, summarize: bool = False, for_save: bool = False, ) -> WhereNode: ... def flatten(self) -> Iterator[Incomplete]: ... def check(self, against: dict[str, Any], using: str = "default") -> bool: ... def deconstruct(self) -> tuple[str, Sequence[Any], dict[str, Any]]: ... @cached_property def referenced_base_fields(self) -> set[str]: ... def replace_expressions(self, replacements: dict[tree.Node, tree.Node]) -> tree.Node: ... class DeferredAttribute: field: Field def __init__(self, field: Field) -> None: ... def __get__(self, instance: Model | None, cls: type[Model] | None = None) -> Any: ... _R = TypeVar("_R", bound=type) class RegisterLookupMixin: class_lookups: ClassVar[dict[str, Any]] lookup_name: str @classmethod def get_lookups(cls) -> dict[str, Any]: ... def get_lookup(self, lookup_name: str) -> type[Lookup] | None: ... def get_transform(self, lookup_name: str) -> type[Transform] | None: ... @staticmethod def merge_dicts(dicts: Iterable[dict[str, Any]]) -> dict[str, Any]: ... @classmethod def register_lookup(cls, lookup: _R, lookup_name: str | None = None) -> _R: ... @classmethod def _unregister_lookup(cls, lookup: type[Lookup], lookup_name: str | None = None) -> None: ... def select_related_descend( field: Field, restricted: bool, requested: Mapping[str, Any] | None, load_fields: Collection[str] | None, reverse: bool = False, ) -> bool: ... _E = TypeVar("_E", bound=BaseExpression) def refs_expression( lookup_parts: Sequence[str], annotations: Mapping[str, _E] ) -> tuple[Literal[False] | _E, Sequence[str]]: ... def check_rel_lookup_compatibility(model: type[Model], target_opts: Any, field: FieldCacheMixin) -> bool: ... class FilteredRelation: relation_name: str alias: str | None condition: Q def __init__(self, relation_name: str, *, condition: Q = ...) -> None: ... def clone(self) -> FilteredRelation: ... def relabeled_clone(self, change_map: dict[str, str]) -> FilteredRelation: ... def resolve_expression(self, query: Query, reuse: set[str], *args: Any, **kwargs: Any) -> FilteredRelation: ... def as_sql(self, compiler: SQLCompiler, connection: BaseDatabaseWrapper) -> _AsSqlType: ... django-stubs-5.2.9/django-stubs/db/models/signals.pyi000066400000000000000000000017321513401051600225610ustar00rootroot00000000000000from collections.abc import Callable from django.apps.registry import Apps from django.db.models.base import Model from django.dispatch import Signal from django.dispatch.dispatcher import _AnyHashable class_prepared: Signal class ModelSignal(Signal): def connect( # type: ignore[override] self, receiver: Callable, sender: type[Model] | str | None = None, weak: bool = True, dispatch_uid: _AnyHashable | None = None, apps: Apps | None = None, ) -> None: ... def disconnect( # type: ignore[override] self, receiver: Callable | None = None, sender: type[Model] | str | None = None, dispatch_uid: _AnyHashable | None = None, apps: Apps | None = None, ) -> bool | None: ... pre_init: ModelSignal post_init: ModelSignal pre_save: ModelSignal post_save: ModelSignal pre_delete: ModelSignal post_delete: ModelSignal m2m_changed: ModelSignal pre_migrate: Signal post_migrate: Signal django-stubs-5.2.9/django-stubs/db/models/sql/000077500000000000000000000000001513401051600211725ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/db/models/sql/__init__.pyi000066400000000000000000000006351513401051600234600ustar00rootroot00000000000000from .query import Query as Query from .query import RawQuery as RawQuery from .subqueries import AggregateQuery as AggregateQuery from .subqueries import DeleteQuery as DeleteQuery from .subqueries import InsertQuery as InsertQuery from .subqueries import UpdateQuery as UpdateQuery from .where import AND as AND from .where import OR as OR from .where import XOR as XOR __all__ = ["AND", "OR", "XOR", "Query"] django-stubs-5.2.9/django-stubs/db/models/sql/compiler.pyi000066400000000000000000000157761513401051600235470ustar00rootroot00000000000000from collections.abc import Callable, Iterable, Iterator, Sequence from datetime import date, datetime from decimal import Decimal from typing import Any, Literal, TypeAlias, overload from uuid import UUID from django.db.backends.base.base import BaseDatabaseWrapper from django.db.backends.utils import CursorWrapper from django.db.models import Field from django.db.models.base import Model from django.db.models.expressions import BaseExpression, Expression, Ref from django.db.models.sql.query import Query from django.db.models.sql.subqueries import AggregateQuery, DeleteQuery, InsertQuery, UpdateQuery from django.utils.datastructures import _ListOrTuple from django.utils.functional import cached_property _ParamT: TypeAlias = str | int _ParamsT: TypeAlias = _ListOrTuple[_ParamT] _AsSqlType: TypeAlias = tuple[str, _ParamsT] class PositionRef(Ref): def __init__(self, ordinal: str, refs: str, source: Expression) -> None: ... class SQLCompiler: query: Query connection: BaseDatabaseWrapper using: str | None quote_cache: Any select: Any annotation_col_map: Any klass_info: Any ordering_parts: Any def __init__(self, query: Query, connection: BaseDatabaseWrapper, using: str | None) -> None: ... col_count: int | None def setup_query(self, with_col_aliases: bool = False) -> None: ... has_extra_select: Any def pre_sql_setup( self, with_col_aliases: bool = False, ) -> tuple[ list[tuple[Expression, _AsSqlType, None]], list[tuple[Expression, tuple[str, _ParamsT, bool]]], list[_AsSqlType], ]: ... def get_group_by( self, select: list[tuple[BaseExpression, _AsSqlType, str | None]], order_by: list[tuple[Expression, tuple[str, _ParamsT, bool]]], ) -> list[_AsSqlType]: ... def collapse_group_by( self, expressions: list[Expression], having: list[Expression] | tuple ) -> list[Expression]: ... def get_select( self, with_col_aliases: bool = False, ) -> tuple[list[tuple[Expression, _AsSqlType, str | None]], dict[str, Any] | None, dict[str, int]]: ... def _order_by_pairs(self) -> None: ... def get_order_by(self) -> list[tuple[Expression, tuple[str, _ParamsT, bool]]]: ... def get_extra_select( self, order_by: list[tuple[Expression, tuple[str, _ParamsT, bool]]], select: list[tuple[Expression, _AsSqlType, str | None]], ) -> list[tuple[Expression, _AsSqlType, None]]: ... def quote_name_unless_alias(self, name: str) -> str: ... def compile(self, node: BaseExpression) -> _AsSqlType: ... def get_combinator_sql(self, combinator: str, all: bool) -> tuple[list[str], list[int] | list[str]]: ... def as_sql(self, with_limits: bool = True, with_col_aliases: bool = False) -> _AsSqlType: ... def get_default_columns( self, start_alias: str | None = None, opts: Any | None = None, from_parent: type[Model] | None = None ) -> list[Expression]: ... def get_distinct(self) -> tuple[list[Any], list[Any]]: ... def find_ordering_name( self, name: str, opts: Any, alias: str | None = None, default_order: str = "ASC", already_seen: set[tuple[tuple[tuple[str, str]] | None, tuple[tuple[str, str]]]] | None = None, ) -> list[tuple[Expression, bool]]: ... def get_from_clause(self) -> tuple[list[str], _ParamsT]: ... def get_related_selections( self, select: list[tuple[Expression, str | None]], opts: Any | None = None, root_alias: str | None = None, cur_depth: int = 1, requested: dict[str, dict[str, dict[str, dict[Any, Any]]]] | None = None, restricted: bool | None = None, ) -> list[dict[str, Any]]: ... def get_select_for_update_of_arguments(self) -> list[Any]: ... def get_converters(self, expressions: list[Expression]) -> dict[int, tuple[list[Callable], Expression]]: ... def apply_converters( self, rows: Iterable[Iterable[Any]], converters: dict[int, tuple[list[Callable], Expression]] ) -> Iterator[list[None | date | datetime | float | Decimal | UUID | bytes | str]]: ... def results_iter( self, results: Iterable[list[Sequence[Any]]] | None = None, tuple_expected: bool = False, chunked_fetch: bool = False, chunk_size: int = 100, ) -> Iterator[Sequence[Any]]: ... def has_results(self) -> bool: ... @overload def execute_sql( self, result_type: Literal["cursor"] = "cursor", chunked_fetch: bool = False, chunk_size: int = 100 ) -> CursorWrapper: ... @overload def execute_sql( self, result_type: Literal["no results"] | None = "no results", chunked_fetch: bool = False, chunk_size: int = 100, ) -> None: ... @overload def execute_sql( self, result_type: Literal["single"] = "single", chunked_fetch: bool = False, chunk_size: int = 100 ) -> Iterable[Sequence[Any]] | None: ... @overload def execute_sql( self, result_type: Literal["multi"] = "multi", chunked_fetch: bool = False, chunk_size: int = 100 ) -> Iterable[list[Sequence[Any]]] | None: ... def explain_query(self) -> Iterator[str]: ... def composite_fields_to_tuples( self, rows: Iterable[Any], expressions: Iterable[Expression] ) -> Iterator[list[tuple[Any, ...]]]: ... def has_composite_fields(self, expressions: Iterable[Expression]) -> bool: ... class SQLInsertCompiler(SQLCompiler): query: InsertQuery returning_fields: Sequence[Any] | None returning_params: Sequence[Any] def field_as_sql( self, field: Field[Any, Any] | None, get_placeholder: Callable[[Any, SQLInsertCompiler, BaseDatabaseWrapper], str], val: Any, ) -> _AsSqlType: ... def prepare_value(self, field: Any, value: Any) -> Any: ... def pre_save_val(self, field: Any, obj: Any) -> Any: ... def assemble_as_sql(self, fields: Any, value_rows: Any) -> tuple[list[list[str]], list[list[Any]]]: ... def as_sql(self) -> list[_AsSqlType]: ... # type: ignore[override] def execute_sql( # type: ignore[override] self, returning_fields: Sequence[str] | None = None ) -> list[tuple[Any]]: ... # 1-tuple class SQLDeleteCompiler(SQLCompiler): query: DeleteQuery @cached_property def single_alias(self) -> bool: ... @cached_property def contains_self_reference_subquery(self) -> bool: ... def as_sql(self) -> _AsSqlType: ... # type: ignore[override] class SQLUpdateCompiler(SQLCompiler): query: UpdateQuery def as_sql(self) -> _AsSqlType: ... # type: ignore[override] def execute_sql(self, result_type: Literal["cursor", "no results"]) -> int: ... # type: ignore[override] def pre_sql_setup(self) -> None: ... # type: ignore[override] class SQLAggregateCompiler(SQLCompiler): query: AggregateQuery col_count: int def as_sql(self) -> _AsSqlType: ... # type: ignore[override] def cursor_iter( cursor: CursorWrapper, sentinel: Any, col_count: int | None, itersize: int ) -> Iterator[list[Sequence[Any]]]: ... django-stubs-5.2.9/django-stubs/db/models/sql/constants.pyi000066400000000000000000000004761513401051600237400ustar00rootroot00000000000000from typing import Final, Literal GET_ITERATOR_CHUNK_SIZE: Final[int] MULTI: Literal["multi"] SINGLE: Literal["single"] NO_RESULTS: Literal["no results"] CURSOR: Literal["cursor"] ROW_COUNT: Literal["row count"] ORDER_DIR: dict[str, tuple[str, str]] INNER: Literal["INNER JOIN"] LOUTER: Literal["LEFT OUTER JOIN"] django-stubs-5.2.9/django-stubs/db/models/sql/datastructures.pyi000066400000000000000000000031321513401051600247710ustar00rootroot00000000000000from typing import Any from django.db.backends.base.base import BaseDatabaseWrapper from django.db.models.fields.mixins import FieldCacheMixin from django.db.models.query_utils import FilteredRelation, PathInfo from django.db.models.sql.compiler import SQLCompiler, _AsSqlType class MultiJoin(Exception): level: int names_with_path: list[tuple[str, list[PathInfo]]] def __init__(self, names_pos: int, path_with_names: list[tuple[str, list[PathInfo]]]) -> None: ... class Empty: ... class Join: table_name: str parent_alias: str table_alias: str | None join_type: str join_cols: tuple join_field: FieldCacheMixin nullable: bool filtered_relation: FilteredRelation | None def __init__( self, table_name: str, parent_alias: str, table_alias: str | None, join_type: str, join_field: FieldCacheMixin, nullable: bool, filtered_relation: FilteredRelation | None = None, ) -> None: ... def as_sql(self, compiler: SQLCompiler, connection: BaseDatabaseWrapper) -> _AsSqlType: ... def relabeled_clone(self, change_map: dict[str | None, str]) -> Join: ... def demote(self) -> Join: ... def promote(self) -> Join: ... class BaseTable: join_type: Any parent_alias: Any filtered_relation: Any table_name: str table_alias: str | None def __init__(self, table_name: str, alias: str | None) -> None: ... def as_sql(self, compiler: SQLCompiler, connection: BaseDatabaseWrapper) -> _AsSqlType: ... def relabeled_clone(self, change_map: dict[str | None, str]) -> BaseTable: ... django-stubs-5.2.9/django-stubs/db/models/sql/query.pyi000066400000000000000000000246171513401051600230740ustar00rootroot00000000000000import collections from collections.abc import Callable, Iterable, Iterator, Sequence from typing import Any, Literal, NamedTuple from django.db.backends.utils import CursorWrapper from django.db.models import Field, FilteredRelation, Model, Q from django.db.models.expressions import BaseExpression, Combinable, Expression from django.db.models.lookups import Lookup, Transform from django.db.models.options import Options from django.db.models.query import _OrderByFieldName from django.db.models.query_utils import PathInfo from django.db.models.sql.datastructures import BaseTable, Join from django.db.models.sql.where import WhereNode from django.utils.functional import cached_property class JoinInfo(NamedTuple): final_field: Field targets: tuple[Any, ...] opts: Any joins: list[str] path: list[Any] transform_function: Callable[[Field, str], Expression] class RawQuery: high_mark: int | None low_mark: int | None params: Any sql: str using: str extra_select: dict[Any, Any] annotation_select: dict[Any, Any] cursor: CursorWrapper | None def __init__(self, sql: str, using: str, params: Any = ()) -> None: ... def chain(self, using: str) -> RawQuery: ... def clone(self, using: str) -> RawQuery: ... def get_columns(self) -> list[str]: ... def __iter__(self) -> Iterator[Any]: ... @property def params_type(self) -> type[dict | tuple] | None: ... class Query(BaseExpression): related_ids: list[int] | None related_updates: dict[type[Model], list[tuple[Field, None, int | str]]] values: list[Any] alias_prefix: str subq_aliases: frozenset[Any] compiler: str base_table_class: type[BaseTable] model: type[Model] | None alias_refcount: dict[str, int] alias_map: dict[str, BaseTable | Join] external_aliases: dict[str, bool] table_map: dict[str, list[str]] default_cols: bool default_ordering: bool standard_ordering: bool used_aliases: set[str] where: WhereNode filter_is_sticky: bool subquery: bool group_by: None | Sequence[Combinable] | Sequence[str] | Literal[True] order_by: Sequence[_OrderByFieldName] distinct: bool distinct_fields: tuple[str, ...] select: Sequence[BaseExpression] select_for_update: bool select_for_update_nowait: bool select_for_update_skip_locked: bool select_for_update_of: tuple select_for_no_key_update: bool select_related: dict[str, Any] | bool max_depth: int join_class: type[Join] values_select: tuple selected: dict[str, int | str | Expression] | None annotation_select_mask: list[str] | None combinator: str | None combinator_all: bool combined_queries: tuple extra_select_mask: set[str] | None extra_tables: tuple extra_order_by: Sequence[_OrderByFieldName] deferred_loading: tuple[set[str] | frozenset[str], bool] explain_query: bool explain_format: str | None explain_options: dict[str, int] high_mark: int | None low_mark: int extra: dict[str, Any] annotations: dict[str, Expression] empty_result_set_value: Any | None explain_info: Any | None def __init__(self, model: type[Model] | None, alias_cols: bool = True) -> None: ... @property def output_field(self) -> Field: ... @property def has_select_fields(self) -> bool: ... @cached_property def base_table(self) -> str: ... def add_annotation(self, annotation: Any, alias: str, select: bool = True) -> None: ... def sql_with_params(self) -> tuple[str, tuple]: ... def __deepcopy__(self, memo: dict[int, Any]) -> Query: ... def get_compiler( self, using: str | None = None, connection: Any | None = None, elide_empty: bool = True ) -> Any: ... def join_parent_model(self, opts: Any, model: Any | None, alias: str, seen: dict[Any, str]) -> str: ... def names_to_path( self, names: list[str], opts: Any, allow_many: bool = True, fail_on_missing: bool = False ) -> tuple[list[Any], Any, tuple[Any, ...], list[str]]: ... def get_meta(self) -> Options: ... def clone(self) -> Query: ... def chain(self, klass: type[Query] | None = None) -> Query: ... def get_count(self, using: str) -> int: ... def get_group_by_cols(self, wrapper: Any | None = None) -> list[Any]: ... def has_filters(self) -> WhereNode: ... def get_external_cols(self) -> list[Any]: ... def exists(self, limit: bool = True) -> Any: ... def has_results(self, using: str) -> bool: ... def explain(self, using: str, format: str | None = None, **options: Any) -> str: ... def combine(self, rhs: Query, connector: str) -> None: ... def ref_alias(self, alias: str) -> None: ... def unref_alias(self, alias: str, amount: int = 1) -> None: ... def promote_joins(self, aliases: Iterable[str]) -> None: ... def demote_joins(self, aliases: Iterable[str]) -> None: ... def reset_refcounts(self, to_counts: dict[str, int]) -> None: ... def check_alias(self, alias: str) -> None: ... def check_related_objects(self, field: Any, value: Any, opts: Any) -> None: ... def check_query_object_type(self, value: Any, opts: Any, field: Any) -> None: ... def change_aliases(self, change_map: dict[str | None, str]) -> None: ... def bump_prefix(self, other_query: Query, exclude: Any | None = None) -> None: ... def get_initial_alias(self) -> str: ... def count_active_tables(self) -> int: ... def resolve_expression(self, query: Query, *args: Any, **kwargs: Any) -> Query: ... # type: ignore[override] def resolve_lookup_value( self, value: Any, can_reuse: set[str] | None, allow_joins: bool, summarize: bool = False ) -> Any: ... def solve_lookup_type( self, lookup: str, summarize: bool = False ) -> tuple[Sequence[str], Sequence[str], Expression | Literal[False]]: ... def table_alias( self, table_name: str, create: bool = False, filtered_relation: Any | None = None ) -> tuple[str, bool]: ... def get_aggregation(self, using: Any, aggregate_exprs: dict[str, Any]) -> dict[str, Any]: ... def build_filter( self, filter_expr: Q | Expression | dict[str, str] | tuple[str, Any], branch_negated: bool = False, current_negated: bool = False, can_reuse: set[str] | None = None, allow_joins: bool = True, split_subq: bool = True, check_filterable: bool = True, summarize: bool = False, update_join_types: bool = True, ) -> tuple[WhereNode, Iterable[str]]: ... def add_select_col(self, col: Any, name: str) -> None: ... def add_filter(self, filter_lhs: tuple[str, Any], filter_rhs: tuple[str, Any]) -> None: ... def add_q(self, q_object: Q, reuse_all: bool = False) -> None: ... def build_where(self, filter_expr: Q | Expression | dict[str, str] | tuple[str, Any]) -> WhereNode: ... def add_filtered_relation(self, filtered_relation: FilteredRelation, alias: str) -> None: ... def setup_joins( self, names: Sequence[str], opts: Any, alias: str, can_reuse: set[str] | None = None, allow_many: bool = True, ) -> JoinInfo: ... def trim_joins( self, targets: tuple[Field, ...], joins: list[str], path: list[PathInfo] ) -> tuple[tuple[Field, ...], str, list[str]]: ... def resolve_ref( self, name: str, allow_joins: bool = True, reuse: set[str] | None = None, summarize: bool = False ) -> Expression: ... def split_exclude( self, filter_expr: tuple[str, Any], can_reuse: set[str], names_with_path: list[tuple[str, list[PathInfo]]], ) -> tuple[WhereNode, Iterable[str]]: ... def set_empty(self) -> None: ... def is_empty(self) -> bool: ... def set_limits(self, low: int | None = None, high: int | None = None) -> None: ... def clear_limits(self) -> None: ... @property def is_sliced(self) -> bool: ... def has_limit_one(self) -> bool: ... def can_filter(self) -> bool: ... def clear_select_clause(self) -> None: ... def clear_select_fields(self) -> None: ... def set_select(self, cols: list[Expression]) -> None: ... def add_distinct_fields(self, *field_names: str) -> None: ... def add_fields(self, field_names: Iterable[str], allow_m2m: bool = True) -> None: ... def add_ordering(self, *ordering: _OrderByFieldName) -> None: ... def clear_where(self) -> None: ... def clear_ordering(self, force: bool = False, clear_default: bool = True) -> None: ... def set_group_by(self, allow_aliases: bool = True) -> None: ... def add_select_related(self, fields: Iterable[str]) -> None: ... def add_extra( self, select: dict[str, Any] | None, select_params: Iterable[Any] | None, where: Sequence[str] | None, params: Sequence[str] | None, tables: Sequence[str] | None, order_by: Sequence[_OrderByFieldName] | None, ) -> None: ... def clear_deferred_loading(self) -> None: ... def add_deferred_loading(self, field_names: Iterable[str]) -> None: ... def add_immediate_loading(self, field_names: Iterable[str]) -> None: ... def get_select_mask(self) -> dict[str, Any]: ... def set_annotation_mask(self, names: Iterable[str] | None) -> None: ... def append_annotation_mask(self, names: Iterable[str]) -> None: ... def set_extra_mask(self, names: Iterable[str] | None) -> None: ... def set_values(self, fields: Iterable[str] | None) -> None: ... @property def annotation_select(self) -> dict[str, Any]: ... @property def extra_select(self) -> dict[str, Any]: ... def trim_start(self, names_with_path: list[tuple[str, list[PathInfo]]]) -> tuple[str, bool]: ... def is_nullable(self, field: Field) -> bool: ... def check_filterable(self, expression: Any) -> None: ... def build_lookup(self, lookups: Sequence[str], lhs: Expression | Query, rhs: Any) -> Lookup: ... def try_transform(self, lhs: Expression | Query, name: str, lookups: Sequence[str] | None = ...) -> Transform: ... def join( self, join: BaseTable | Join, reuse: str | None = None, ) -> str: ... class JoinPromoter: connector: str negated: bool effective_connector: str num_children: int votes: collections.Counter def __init__(self, connector: str, num_children: int, negated: bool) -> None: ... def add_votes(self, votes: Iterable[str]) -> None: ... def update_join_types(self, query: Query) -> set[str]: ... __all__ = ["Query", "RawQuery"] django-stubs-5.2.9/django-stubs/db/models/sql/subqueries.pyi000066400000000000000000000032401513401051600241030ustar00rootroot00000000000000from collections.abc import Iterable from typing import Any from django.db.models.base import Model from django.db.models.expressions import Case from django.db.models.fields import Field from django.db.models.sql.query import Query from django.db.models.sql.where import WhereNode class DeleteQuery(Query): select: tuple where_class: type[WhereNode] where: WhereNode def do_query(self, table: str, where: WhereNode, using: str) -> int: ... def delete_batch(self, pk_list: list[int] | list[str], using: str) -> int: ... class UpdateQuery(Query): select: tuple where_class: type[WhereNode] def __init__(self, *args: Any, **kwargs: Any) -> None: ... where: WhereNode def update_batch(self, pk_list: list[int], values: dict[str, int | None], using: str) -> None: ... def add_update_values(self, values: dict[str, Any]) -> None: ... def add_update_fields(self, values_seq: list[tuple[Field, type[Model] | None, Case]]) -> None: ... def add_related_update(self, model: type[Model], field: Field, value: int | str) -> None: ... def get_related_updates(self) -> list[UpdateQuery]: ... class InsertQuery(Query): select: tuple where: WhereNode where_class: type[WhereNode] fields: Iterable[Field] objs: list[Model] raw: bool def __init__(self, *args: Any, ignore_conflicts: bool = ..., **kwargs: Any) -> None: ... def insert_values(self, fields: Iterable[Field], objs: list[Model], raw: bool = False) -> None: ... class AggregateQuery(Query): select: tuple sub_params: tuple where: WhereNode where_class: type[WhereNode] __all__ = ["AggregateQuery", "DeleteQuery", "InsertQuery", "UpdateQuery"] django-stubs-5.2.9/django-stubs/db/models/sql/where.pyi000066400000000000000000000040211513401051600230240ustar00rootroot00000000000000from collections.abc import Sequence from typing import Any, Final from django.db.backends.base.base import BaseDatabaseWrapper from django.db.models.expressions import Expression from django.db.models.fields import BooleanField from django.db.models.sql.compiler import SQLCompiler, _AsSqlType, _ParamsT from django.utils import tree from django.utils.functional import cached_property AND: Final = "AND" OR: Final = "OR" XOR: Final = "XOR" class WhereNode(tree.Node): connector: str negated: bool default: str resolved: bool conditional: bool def split_having(self, negated: bool = ...) -> tuple[WhereNode | None, WhereNode | None]: ... def as_sql(self, compiler: SQLCompiler, connection: BaseDatabaseWrapper) -> _AsSqlType: ... def get_group_by_cols(self, alias: str | None = ...) -> list[Expression]: ... def relabel_aliases(self, change_map: dict[str | None, str]) -> None: ... def clone(self) -> WhereNode: ... def relabeled_clone(self, change_map: dict[str | None, str]) -> WhereNode: ... def resolve_expression(self, *args: Any, **kwargs: Any) -> WhereNode: ... @cached_property def output_field(self) -> BooleanField: ... def get_refs(self) -> set[str]: ... @cached_property def contains_aggregate(self) -> bool: ... @cached_property def contains_over_clause(self) -> bool: ... @property def is_summary(self) -> bool: ... def select_format(self, compiler: SQLCompiler, sql: str, params: _ParamsT) -> _AsSqlType: ... class NothingNode: contains_aggregate: bool def as_sql( self, compiler: SQLCompiler | None = None, connection: BaseDatabaseWrapper | None = None ) -> _AsSqlType: ... class ExtraWhere: contains_aggregate: bool sqls: Sequence[str] params: Sequence[int] | Sequence[str] | None def __init__(self, sqls: Sequence[str], params: Sequence[int] | Sequence[str] | None) -> None: ... def as_sql( self, compiler: SQLCompiler | None = None, connection: BaseDatabaseWrapper | None = None ) -> _AsSqlType: ... django-stubs-5.2.9/django-stubs/db/models/utils.pyi000066400000000000000000000010311513401051600222510ustar00rootroot00000000000000from collections.abc import Iterable, Iterator, Mapping from typing import Any, NamedTuple from django.db.models.base import Model def make_model_tuple(model: type[Model] | str | tuple[str, str]) -> tuple[str, str]: ... def resolve_callables(mapping: Mapping[str, Any]) -> Iterator[tuple[str, Any]]: ... def unpickle_named_row(names: Iterable[str], values: Iterable[Any]) -> NamedTuple: ... def create_namedtuple_class(*names: str) -> type[NamedTuple]: ... class AltersData: def __init_subclass__(cls, **kwargs: Any) -> None: ... django-stubs-5.2.9/django-stubs/db/transaction.pyi000066400000000000000000000042221513401051600221600ustar00rootroot00000000000000from collections.abc import Callable from contextlib import AbstractContextManager from types import TracebackType from typing import Any, TypeVar, overload from django.db import ProgrammingError class TransactionManagementError(ProgrammingError): ... def get_connection(using: str | None = None) -> Any: ... def get_autocommit(using: str | None = None) -> bool: ... def set_autocommit(autocommit: bool, using: str | None = None) -> Any: ... def commit(using: str | None = None) -> None: ... def rollback(using: str | None = None) -> None: ... def savepoint(using: str | None = None) -> str: ... def savepoint_rollback(sid: str, using: str | None = None) -> None: ... def savepoint_commit(sid: str, using: str | None = None) -> None: ... def clean_savepoints(using: str | None = None) -> None: ... def get_rollback(using: str | None = None) -> bool: ... def set_rollback(rollback: bool, using: str | None = None) -> None: ... def mark_for_rollback_on_error(using: str | None = None) -> AbstractContextManager[None]: ... def on_commit(func: Callable[[], object], using: str | None = None, robust: bool = False) -> None: ... _C = TypeVar("_C", bound=Callable) # Any callable # Don't inherit from ContextDecorator, so we can provide a more specific signature for __call__ class Atomic: using: str | None savepoint: bool def __init__(self, using: str | None, savepoint: bool, durable: bool) -> None: ... # When decorating, return the decorated function as-is, rather than clobbering it as ContextDecorator does. def __call__(self, func: _C) -> _C: ... def __enter__(self) -> None: ... def __exit__( self, exc_type: type[BaseException] | None, exc_value: BaseException | None, exc_tb: TracebackType | None, ) -> None: ... # Bare decorator @overload def atomic(using: _C) -> _C: ... # Decorator or context-manager with parameters @overload def atomic(using: str | None = None, savepoint: bool = True, durable: bool = False) -> Atomic: ... # Bare decorator @overload def non_atomic_requests(using: _C) -> _C: ... # Decorator with arguments @overload def non_atomic_requests(using: str | None = None) -> Callable[[_C], _C]: ... django-stubs-5.2.9/django-stubs/db/utils.pyi000066400000000000000000000040611513401051600207740ustar00rootroot00000000000000from collections.abc import Iterable from types import TracebackType from typing import Any from django.apps import AppConfig from django.db.backends.base.base import BaseDatabaseWrapper from django.db.models import Model from django.utils.connection import BaseConnectionHandler from django.utils.functional import cached_property DEFAULT_DB_ALIAS: str DJANGO_VERSION_PICKLE_KEY: str class Error(Exception): ... class InterfaceError(Error): ... class DatabaseError(Error): ... class DataError(DatabaseError): ... class OperationalError(DatabaseError): ... class IntegrityError(DatabaseError): ... class InternalError(DatabaseError): ... class ProgrammingError(DatabaseError): ... class NotSupportedError(DatabaseError): ... class DatabaseErrorWrapper: def __init__(self, wrapper: Any) -> None: ... def __enter__(self) -> None: ... def __exit__( self, exc_type: type[BaseException] | None, exc_value: BaseException | None, exc_tb: TracebackType | None, ) -> None: ... def load_backend(backend_name: str) -> Any: ... class ConnectionHandler(BaseConnectionHandler[BaseDatabaseWrapper]): def configure_settings(self, databases: dict[str, Any] | None) -> dict[str, Any]: ... @property def databases(self) -> dict[str, dict[str, Any]]: ... def create_connection(self, alias: str) -> BaseDatabaseWrapper: ... def close_all(self) -> None: ... class ConnectionRouter: def __init__(self, routers: Iterable[Any] | None = None) -> None: ... @cached_property def routers(self) -> list[Any]: ... def db_for_read(self, model: type[Model], **hints: Any) -> str: ... def db_for_write(self, model: type[Model], **hints: Any) -> str: ... def allow_relation(self, obj1: Model, obj2: Model, **hints: Any) -> bool: ... def allow_migrate(self, db: str, app_label: str, **hints: Any) -> bool: ... def allow_migrate_model(self, db: str, model: type[Model]) -> bool: ... def get_migratable_models( self, app_config: AppConfig, db: str, include_auto_created: bool = False ) -> list[type[Model]]: ... django-stubs-5.2.9/django-stubs/dispatch/000077500000000000000000000000001513401051600203225ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/dispatch/__init__.pyi000066400000000000000000000001641513401051600226050ustar00rootroot00000000000000from django.dispatch.dispatcher import Signal as Signal from django.dispatch.dispatcher import receiver as receiver django-stubs-5.2.9/django-stubs/dispatch/dispatcher.pyi000066400000000000000000000031141513401051600231720ustar00rootroot00000000000000import threading from collections.abc import Callable, MutableMapping from logging import Logger from typing import Any, TypeAlias, TypeVar _AnyHashable: TypeAlias = Any NONE_ID: int NO_RECEIVERS: Any logger: Logger class Signal: receivers: list[Any] lock: threading.Lock use_caching: bool sender_receivers_cache: MutableMapping[Any, Any] def __init__(self, use_caching: bool = False) -> None: ... def connect( self, receiver: Callable, sender: object | None = None, weak: bool = True, dispatch_uid: _AnyHashable | None = None, ) -> None: ... def disconnect( self, receiver: Callable | None = None, sender: object | None = None, dispatch_uid: _AnyHashable | None = None ) -> bool: ... def has_listeners(self, sender: Any | None = None) -> bool: ... def send(self, sender: Any, **named: Any) -> list[tuple[Callable, str | None]]: ... async def asend(self, sender: Any, **named: Any) -> list[tuple[Callable, str | None]]: ... def send_robust(self, sender: Any, **named: Any) -> list[tuple[Callable, Exception | Any]]: ... async def asend_robust(self, sender: Any, **named: Any) -> list[tuple[Callable, Exception | Any]]: ... def _live_receivers(self, sender: Any) -> tuple[list[Callable[..., Any]], list[Callable[..., Any]]]: ... _F = TypeVar("_F", bound=Callable[..., Any]) def receiver( signal: list[Signal] | tuple[Signal, ...] | Signal, *, sender: object | None = ..., weak: bool = ..., dispatch_uid: _AnyHashable | None = ..., **named: Any, ) -> Callable[[_F], _F]: ... django-stubs-5.2.9/django-stubs/forms/000077500000000000000000000000001513401051600176515ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/forms/__init__.pyi000066400000000000000000000045231513401051600221370ustar00rootroot00000000000000from django.core.exceptions import ValidationError as ValidationError from .boundfield import BoundField as BoundField from .fields import BooleanField as BooleanField from .fields import CharField as CharField from .fields import ChoiceField as ChoiceField from .fields import ComboField as ComboField from .fields import DateField as DateField from .fields import DateTimeField as DateTimeField from .fields import DecimalField as DecimalField from .fields import DurationField as DurationField from .fields import EmailField as EmailField from .fields import Field as Field from .fields import FileField as FileField from .fields import FilePathField as FilePathField from .fields import FloatField as FloatField from .fields import GenericIPAddressField as GenericIPAddressField from .fields import ImageField as ImageField from .fields import IntegerField as IntegerField from .fields import JSONField as JSONField from .fields import MultipleChoiceField as MultipleChoiceField from .fields import MultiValueField as MultiValueField from .fields import NullBooleanField as NullBooleanField from .fields import RegexField as RegexField from .fields import SlugField as SlugField from .fields import SplitDateTimeField as SplitDateTimeField from .fields import TimeField as TimeField from .fields import TypedChoiceField as TypedChoiceField from .fields import TypedMultipleChoiceField as TypedMultipleChoiceField from .fields import URLField as URLField from .fields import UUIDField as UUIDField from .forms import BaseForm as BaseForm from .forms import Form as Form from .formsets import BaseFormSet as BaseFormSet from .formsets import all_valid as all_valid from .formsets import formset_factory as formset_factory from .models import BaseInlineFormSet as BaseInlineFormSet from .models import BaseModelForm as BaseModelForm from .models import BaseModelFormSet as BaseModelFormSet from .models import ModelChoiceField as ModelChoiceField from .models import ModelForm as ModelForm from .models import ModelMultipleChoiceField as ModelMultipleChoiceField from .models import fields_for_model as fields_for_model from .models import inlineformset_factory as inlineformset_factory from .models import model_to_dict as model_to_dict from .models import modelform_factory as modelform_factory from .models import modelformset_factory as modelformset_factory from .widgets import * django-stubs-5.2.9/django-stubs/forms/boundfield.pyi000066400000000000000000000061111513401051600225060ustar00rootroot00000000000000from collections.abc import Iterable, Iterator from typing import Any, TypeAlias, overload from django.forms.fields import Field from django.forms.forms import BaseForm from django.forms.renderers import BaseRenderer from django.forms.utils import ErrorList, RenderableFieldMixin from django.forms.widgets import Widget from django.utils.functional import _StrOrPromise, cached_property from django.utils.safestring import SafeString _AttrsT: TypeAlias = dict[str, str | bool] class BoundField(RenderableFieldMixin): form: BaseForm field: Field name: str html_name: str html_initial_name: str html_initial_id: str label: _StrOrPromise help_text: _StrOrPromise renderer: BaseRenderer def __init__(self, form: BaseForm, field: Field, name: str) -> None: ... @cached_property def subwidgets(self) -> list[BoundWidget]: ... def __bool__(self) -> bool: ... def __iter__(self) -> Iterator[BoundWidget]: ... def __len__(self) -> int: ... @overload def __getitem__(self, idx: int | str) -> BoundWidget: ... @overload def __getitem__(self, idx: slice) -> list[BoundWidget]: ... @property def errors(self) -> ErrorList: ... @property def template_name(self) -> str: ... def as_widget( self, widget: Widget | None = None, attrs: _AttrsT | None = None, only_initial: bool = False ) -> SafeString: ... def as_text(self, attrs: _AttrsT | None = None, **kwargs: Any) -> SafeString: ... def __html__(self) -> SafeString: ... def as_textarea(self, attrs: _AttrsT | None = None, **kwargs: Any) -> SafeString: ... def as_hidden(self, attrs: _AttrsT | None = None, **kwargs: Any) -> SafeString: ... @property def data(self) -> Any: ... def value(self) -> Any: ... def label_tag( self, contents: str | None = None, attrs: _AttrsT | None = None, label_suffix: str | None = None, tag: str | None = None, ) -> SafeString: ... def legend_tag( self, contents: str | None = None, attrs: _AttrsT | None = None, label_suffix: str | None = None ) -> SafeString: ... def css_classes(self, extra_classes: str | Iterable[str] | None = None) -> str: ... @property def is_hidden(self) -> bool: ... @property def auto_id(self) -> str: ... @property def id_for_label(self) -> str: ... @property def initial(self) -> Any: ... def build_widget_attrs(self, attrs: _AttrsT, widget: Widget | None = None) -> _AttrsT: ... @property def widget_type(self) -> str: ... @property def use_fieldset(self) -> bool: ... @property def aria_describedby(self) -> str | None: ... class BoundWidget: parent_widget: Widget data: dict[str, Any] renderer: BaseRenderer def __init__(self, parent_widget: Widget, data: dict[str, Any], renderer: BaseRenderer) -> None: ... def tag(self, wrap_label: bool = False) -> SafeString: ... @property def template_name(self) -> str: ... @property def id_for_label(self) -> str: ... @property def choice_label(self) -> str: ... __all__ = ("BoundField",) django-stubs-5.2.9/django-stubs/forms/fields.pyi000066400000000000000000000514321513401051600216470ustar00rootroot00000000000000import datetime from collections.abc import Collection, Iterator, Sequence from decimal import Decimal from re import Pattern from typing import Any, ClassVar, Protocol, TypeAlias, type_check_only from uuid import UUID from django.core.files import File from django.core.validators import _ValidatorCallable from django.db.models.fields import _ErrorMessagesDict, _ErrorMessagesMapping from django.forms.boundfield import BoundField from django.forms.forms import BaseForm from django.forms.widgets import Widget from django.utils.choices import CallableChoiceIterator, _ChoicesCallable, _ChoicesInput from django.utils.datastructures import _PropertyDescriptor from django.utils.functional import _StrOrPromise # Problem: attribute `widget` is always of type `Widget` after field instantiation. # However, on class level it can be set to `Type[Widget]` too. # If we annotate it as `Union[Widget, Type[Widget]]`, every code that uses field # instances will not typecheck. # If we annotate it as `Widget`, any widget subclasses that do e.g. # `widget = Select` will not typecheck. # `Any` gives too much freedom, but does not create false positives. _ClassLevelWidgetT: TypeAlias = Any class Field: initial: Any label: _StrOrPromise | None required: bool widget: _ClassLevelWidgetT hidden_widget: type[Widget] default_validators: list[_ValidatorCallable] default_error_messages: ClassVar[_ErrorMessagesDict] empty_values: Sequence[Any] show_hidden_initial: bool help_text: _StrOrPromise disabled: bool label_suffix: str | None localize: bool error_messages: _ErrorMessagesDict validators: list[_ValidatorCallable] bound_field_class: type[BoundField] | None def __init__( self, *, required: bool = True, widget: Widget | type[Widget] | None = None, label: _StrOrPromise | None = None, initial: Any | None = None, help_text: _StrOrPromise = "", error_messages: _ErrorMessagesMapping | None = None, show_hidden_initial: bool = False, validators: Sequence[_ValidatorCallable] = (), localize: bool = False, disabled: bool = False, label_suffix: str | None = None, template_name: str | None = None, bound_field_class: type[BoundField] | None = None, ) -> None: ... def prepare_value(self, value: Any) -> Any: ... def to_python(self, value: Any | None) -> Any | None: ... def validate(self, value: Any) -> None: ... def run_validators(self, value: Any) -> None: ... def clean(self, value: Any) -> Any: ... def bound_data(self, data: Any, initial: Any) -> Any: ... def widget_attrs(self, widget: Widget) -> dict[str, Any]: ... def has_changed(self, initial: Any | None, data: Any | None) -> bool: ... def get_bound_field(self, form: BaseForm, field_name: str) -> BoundField: ... class CharField(Field): max_length: int | None min_length: int | None strip: bool empty_value: str | None def __init__( self, *, max_length: int | None = None, min_length: int | None = None, strip: bool = True, empty_value: str | None = "", required: bool = ..., widget: Widget | type[Widget] | None = ..., label: _StrOrPromise | None = ..., initial: Any | None = ..., help_text: _StrOrPromise = ..., error_messages: _ErrorMessagesMapping | None = ..., show_hidden_initial: bool = ..., validators: Sequence[_ValidatorCallable] = ..., localize: bool = ..., disabled: bool = ..., label_suffix: str | None = ..., ) -> None: ... def to_python(self, value: Any | None) -> str | None: ... def widget_attrs(self, widget: Widget) -> dict[str, Any]: ... class IntegerField(Field): max_value: int | None min_value: int | None step_size: int | None re_decimal: Any def __init__( self, *, max_value: int | None = None, min_value: int | None = None, step_size: int | None = None, required: bool = ..., widget: Widget | type[Widget] | None = ..., label: _StrOrPromise | None = ..., initial: Any | None = ..., help_text: _StrOrPromise = ..., error_messages: _ErrorMessagesMapping | None = ..., show_hidden_initial: bool = ..., validators: Sequence[_ValidatorCallable] = ..., localize: bool = ..., disabled: bool = ..., label_suffix: str | None = ..., ) -> None: ... def to_python(self, value: Any | None) -> int | None: ... def widget_attrs(self, widget: Widget) -> dict[str, Any]: ... class FloatField(IntegerField): def __init__( self, *, max_value: int | float | None = None, min_value: int | float | None = None, step_size: int | float | None = None, required: bool = ..., widget: Widget | type[Widget] | None = ..., label: _StrOrPromise | None = ..., initial: Any | None = ..., help_text: _StrOrPromise = ..., error_messages: _ErrorMessagesMapping | None = ..., show_hidden_initial: bool = ..., validators: Sequence[_ValidatorCallable] = ..., localize: bool = ..., disabled: bool = ..., label_suffix: str | None = ..., ) -> None: ... def to_python(self, value: Any | None) -> float | None: ... # type: ignore[override] def validate(self, value: float) -> None: ... def widget_attrs(self, widget: Widget) -> dict[str, Any]: ... class DecimalField(IntegerField): decimal_places: int | None max_digits: int | None def __init__( self, *, max_value: Decimal | int | float | None = None, min_value: Decimal | int | float | None = None, max_digits: int | None = None, decimal_places: int | None = None, step_size: Decimal | int | float | None = ..., required: bool = ..., widget: Widget | type[Widget] | None = ..., label: _StrOrPromise | None = ..., initial: Any | None = ..., help_text: _StrOrPromise = ..., error_messages: _ErrorMessagesMapping | None = ..., show_hidden_initial: bool = ..., validators: Sequence[_ValidatorCallable] = ..., localize: bool = ..., disabled: bool = ..., label_suffix: str | None = ..., ) -> None: ... def to_python(self, value: Any | None) -> Decimal | None: ... # type: ignore[override] def validate(self, value: Decimal) -> None: ... def widget_attrs(self, widget: Widget) -> dict[str, Any]: ... class BaseTemporalField(Field): input_formats: Any def __init__( self, *, input_formats: Any | None = None, required: bool = ..., widget: Widget | type[Widget] | None = ..., label: _StrOrPromise | None = ..., initial: Any | None = ..., help_text: _StrOrPromise = ..., error_messages: _ErrorMessagesMapping | None = ..., show_hidden_initial: bool = ..., validators: Sequence[_ValidatorCallable] = ..., localize: bool = ..., disabled: bool = ..., label_suffix: str | None = ..., ) -> None: ... def to_python(self, value: str | None) -> Any | None: ... def strptime(self, value: str, format: str) -> Any: ... class DateField(BaseTemporalField): def to_python(self, value: None | str | datetime.datetime | datetime.date) -> datetime.date | None: ... def strptime(self, value: str, format: str) -> datetime.date: ... class TimeField(BaseTemporalField): def to_python(self, value: None | str | datetime.time) -> datetime.time | None: ... def strptime(self, value: str, format: str) -> datetime.time: ... class DateTimeFormatsIterator: def __iter__(self) -> Iterator[str]: ... class DateTimeField(BaseTemporalField): def to_python(self, value: None | str | datetime.datetime | datetime.date) -> datetime.datetime | None: ... def strptime(self, value: str, format: str) -> datetime.datetime: ... class DurationField(Field): def prepare_value(self, value: datetime.timedelta | str | None) -> str | None: ... def to_python(self, value: Any | None) -> datetime.timedelta | None: ... class RegexField(CharField): regex: _PropertyDescriptor[str | Pattern[str], Pattern[str]] def __init__( self, regex: str | Pattern[str], *, max_length: int | None = ..., min_length: int | None = ..., strip: bool = ..., empty_value: str | None = ..., required: bool = ..., widget: Widget | type[Widget] | None = ..., label: _StrOrPromise | None = ..., initial: Any | None = ..., help_text: _StrOrPromise = ..., error_messages: _ErrorMessagesMapping | None = ..., show_hidden_initial: bool = ..., validators: Sequence[_ValidatorCallable] = ..., localize: bool = ..., disabled: bool = ..., label_suffix: str | None = ..., ) -> None: ... class EmailField(CharField): def __init__( self, *, max_length: int | None = ..., min_length: int | None = ..., strip: bool = ..., empty_value: str | None = ..., required: bool = ..., widget: Widget | type[Widget] | None = ..., label: _StrOrPromise | None = ..., initial: Any | None = ..., help_text: _StrOrPromise = ..., error_messages: _ErrorMessagesMapping | None = ..., show_hidden_initial: bool = ..., validators: Sequence[_ValidatorCallable] = ..., localize: bool = ..., disabled: bool = ..., label_suffix: str | None = ..., ) -> None: ... class FileField(Field): allow_empty_file: bool max_length: int | None def __init__( self, *, max_length: int | None = None, allow_empty_file: bool = False, required: bool = ..., widget: Widget | type[Widget] | None = ..., label: _StrOrPromise | None = ..., initial: Any | None = ..., help_text: _StrOrPromise = ..., error_messages: _ErrorMessagesMapping | None = ..., show_hidden_initial: bool = ..., validators: Sequence[_ValidatorCallable] = ..., localize: bool = ..., disabled: bool = ..., label_suffix: str | None = ..., ) -> None: ... def clean(self, data: Any, initial: Any | None = None) -> Any: ... def to_python(self, data: File | None) -> File | None: ... def bound_data(self, data: Any | None, initial: Any) -> Any: ... def has_changed(self, initial: Any | None, data: Any | None) -> bool: ... class ImageField(FileField): def to_python(self, data: File | None) -> File | None: ... def widget_attrs(self, widget: Widget) -> dict[str, Any]: ... class URLField(CharField): def __init__( self, *, max_length: int | None = ..., min_length: int | None = ..., strip: bool = ..., empty_value: str | None = ..., required: bool = ..., widget: Widget | type[Widget] | None = ..., label: _StrOrPromise | None = ..., initial: Any | None = ..., help_text: _StrOrPromise = ..., error_messages: _ErrorMessagesMapping | None = ..., show_hidden_initial: bool = ..., validators: Sequence[_ValidatorCallable] = ..., localize: bool = ..., disabled: bool = ..., label_suffix: str | None = ..., assume_scheme: str | None = None, ) -> None: ... def to_python(self, value: Any | None) -> str | None: ... class BooleanField(Field): def to_python(self, value: Any | None) -> bool: ... def validate(self, value: Any) -> None: ... def has_changed(self, initial: Any | None, data: Any | None) -> bool: ... class NullBooleanField(BooleanField): def to_python(self, value: Any | None) -> bool | None: ... # type: ignore[override] def validate(self, value: Any) -> None: ... class ChoiceField(Field): choices: _PropertyDescriptor[ _ChoicesInput | _ChoicesCallable | CallableChoiceIterator, _ChoicesInput | CallableChoiceIterator, ] widget: _ClassLevelWidgetT def __init__( self, *, choices: _ChoicesInput | _ChoicesCallable = (), required: bool = ..., widget: Widget | type[Widget] | None = ..., label: _StrOrPromise | None = ..., initial: Any | None = ..., help_text: _StrOrPromise = ..., error_messages: _ErrorMessagesMapping | None = ..., show_hidden_initial: bool = ..., validators: Sequence[_ValidatorCallable] = ..., localize: bool = ..., disabled: bool = ..., label_suffix: str | None = ..., ) -> None: ... # Real return type of `to_python` is `str`, but it results in errors when # subclassing `ModelChoiceField`: `# type: ignore[override]` is not inherited def to_python(self, value: Any | None) -> Any: ... def validate(self, value: Any) -> None: ... def valid_value(self, value: Any) -> bool: ... @type_check_only class _CoerceCallable(Protocol): def __call__(self, value: Any, /) -> Any: ... class TypedChoiceField(ChoiceField): coerce: _CoerceCallable empty_value: str | None def __init__( self, *, coerce: _CoerceCallable = ..., empty_value: str | None = "", choices: _ChoicesInput | _ChoicesCallable = ..., required: bool = ..., widget: Widget | type[Widget] | None = ..., label: _StrOrPromise | None = ..., initial: Any | None = ..., help_text: _StrOrPromise = ..., error_messages: _ErrorMessagesMapping | None = ..., show_hidden_initial: bool = ..., validators: Sequence[_ValidatorCallable] = ..., localize: bool = ..., disabled: bool = ..., label_suffix: str | None = ..., ) -> None: ... def clean(self, value: Any) -> Any: ... class MultipleChoiceField(ChoiceField): def to_python(self, value: Any | None) -> list[str]: ... def validate(self, value: Any) -> None: ... def has_changed(self, initial: Collection[Any] | None, data: Collection[Any] | None) -> bool: ... class TypedMultipleChoiceField(MultipleChoiceField): coerce: _CoerceCallable empty_value: list[Any] | None def __init__( self, *, coerce: _CoerceCallable = ..., empty_value: list[Any] | None = ..., choices: _ChoicesInput | _ChoicesCallable = ..., required: bool = ..., widget: Widget | type[Widget] | None = ..., label: _StrOrPromise | None = ..., initial: Any | None = ..., help_text: _StrOrPromise = ..., error_messages: _ErrorMessagesMapping | None = ..., show_hidden_initial: bool = ..., validators: Sequence[_ValidatorCallable] = ..., localize: bool = ..., disabled: bool = ..., label_suffix: str | None = ..., ) -> None: ... def clean(self, value: Any) -> Any: ... def validate(self, value: Any) -> None: ... class ComboField(Field): fields: Sequence[Field] def __init__( self, fields: Sequence[Field], *, required: bool = ..., widget: Widget | type[Widget] | None = ..., label: _StrOrPromise | None = ..., initial: Any | None = ..., help_text: _StrOrPromise = ..., error_messages: _ErrorMessagesMapping | None = ..., show_hidden_initial: bool = ..., validators: Sequence[_ValidatorCallable] = ..., localize: bool = ..., disabled: bool = ..., label_suffix: str | None = ..., ) -> None: ... def clean(self, value: Any) -> Any: ... class MultiValueField(Field): require_all_fields: bool fields: Sequence[Field] def __init__( self, fields: Sequence[Field], *, require_all_fields: bool = True, required: bool = ..., widget: Widget | type[Widget] | None = ..., label: _StrOrPromise | None = ..., initial: Any | None = ..., help_text: _StrOrPromise = ..., error_messages: _ErrorMessagesMapping | None = ..., show_hidden_initial: bool = ..., validators: Sequence[_ValidatorCallable] = ..., localize: bool = ..., disabled: bool = ..., label_suffix: str | None = ..., ) -> None: ... def compress(self, data_list: Any) -> Any: ... def has_changed(self, initial: Any | None, data: Any | None) -> bool: ... def clean(self, value: Any) -> Any: ... def validate(self, value: Any) -> None: ... class FilePathField(ChoiceField): allow_files: bool allow_folders: bool match: str | None path: str recursive: bool match_re: Pattern[str] | None def __init__( self, path: str, *, match: str | None = None, recursive: bool = False, allow_files: bool = True, allow_folders: bool = False, choices: _ChoicesInput | _ChoicesCallable = ..., required: bool = ..., widget: Widget | type[Widget] | None = ..., label: _StrOrPromise | None = ..., initial: Any | None = ..., help_text: _StrOrPromise = ..., error_messages: _ErrorMessagesMapping | None = ..., show_hidden_initial: bool = ..., validators: Sequence[_ValidatorCallable] = ..., localize: bool = ..., disabled: bool = ..., label_suffix: str | None = ..., ) -> None: ... class SplitDateTimeField(MultiValueField): def __init__( self, *, input_date_formats: Any | None = None, input_time_formats: Any | None = None, fields: Sequence[Field] = ..., require_all_fields: bool = ..., required: bool = ..., widget: Widget | type[Widget] | None = ..., label: _StrOrPromise | None = ..., initial: Any | None = ..., help_text: _StrOrPromise = ..., error_messages: _ErrorMessagesMapping | None = ..., show_hidden_initial: bool = ..., validators: Sequence[_ValidatorCallable] = ..., localize: bool = ..., disabled: bool = ..., label_suffix: str | None = ..., ) -> None: ... def compress(self, data_list: tuple[datetime.date, datetime.time] | None) -> datetime.datetime | None: ... class GenericIPAddressField(CharField): unpack_ipv4: bool def __init__( self, *, protocol: str = "both", unpack_ipv4: bool = False, required: bool = ..., widget: Widget | type[Widget] | None = ..., label: _StrOrPromise | None = ..., initial: Any | None = ..., help_text: _StrOrPromise = ..., error_messages: _ErrorMessagesMapping | None = ..., show_hidden_initial: bool = ..., validators: Sequence[_ValidatorCallable] = ..., localize: bool = ..., disabled: bool = ..., label_suffix: str | None = ..., ) -> None: ... def to_python(self, value: Any) -> str: ... class SlugField(CharField): allow_unicode: bool def __init__( self, *, allow_unicode: bool = False, max_length: Any | None = ..., min_length: Any | None = ..., strip: bool = ..., empty_value: str | None = ..., required: bool = ..., widget: Widget | type[Widget] | None = ..., label: _StrOrPromise | None = ..., initial: Any | None = ..., help_text: _StrOrPromise = ..., error_messages: _ErrorMessagesMapping | None = ..., show_hidden_initial: bool = ..., validators: Sequence[_ValidatorCallable] = ..., localize: bool = ..., disabled: bool = ..., label_suffix: str | None = ..., ) -> None: ... class UUIDField(CharField): def prepare_value(self, value: Any | None) -> Any | None: ... def to_python(self, value: Any) -> UUID | None: ... # type: ignore[override] class InvalidJSONInput(str): ... class JSONString(str): ... class JSONField(CharField): default_error_messages: ClassVar[_ErrorMessagesDict] widget: _ClassLevelWidgetT encoder: Any decoder: Any def __init__(self, encoder: Any | None = None, decoder: Any | None = None, **kwargs: Any) -> None: ... def to_python(self, value: Any) -> Any: ... def bound_data(self, data: Any, initial: Any) -> Any: ... def prepare_value(self, value: Any) -> str: ... def has_changed(self, initial: Any | None, data: Any | None) -> bool: ... __all__ = ( "BooleanField", "CharField", "ChoiceField", "ComboField", "DateField", "DateTimeField", "DecimalField", "DurationField", "EmailField", "Field", "FileField", "FilePathField", "FloatField", "GenericIPAddressField", "ImageField", "IntegerField", "JSONField", "MultiValueField", "MultipleChoiceField", "NullBooleanField", "RegexField", "SlugField", "SplitDateTimeField", "TimeField", "TypedChoiceField", "TypedMultipleChoiceField", "URLField", "UUIDField", ) django-stubs-5.2.9/django-stubs/forms/forms.pyi000066400000000000000000000064431513401051600215310ustar00rootroot00000000000000from collections.abc import Iterable, Iterator, Mapping, MutableMapping, Sequence from typing import Any, ClassVar, overload from django.core.exceptions import ValidationError from django.forms.boundfield import BoundField from django.forms.fields import Field from django.forms.renderers import BaseRenderer from django.forms.utils import ErrorDict, ErrorList, RenderableFormMixin, _DataT, _FilesT from django.forms.widgets import Media, MediaDefiningClass from django.utils.functional import _StrOrPromise, cached_property class DeclarativeFieldsMetaclass(MediaDefiningClass): ... class BaseForm(RenderableFormMixin): default_renderer: BaseRenderer | type[BaseRenderer] | None field_order: Iterable[str] | None use_required_attribute: bool is_bound: bool data: _DataT files: _FilesT auto_id: bool | str initial: MutableMapping[str, Any] error_class: type[ErrorList] prefix: str | None label_suffix: str empty_permitted: bool fields: dict[str, Field] renderer: BaseRenderer cleaned_data: dict[str, Any] template_name_div: str template_name_p: str template_name_table: str template_name_ul: str template_name_label: str bound_field_class: type[BoundField] | None def __init__( self, data: _DataT | None = None, files: _FilesT | None = None, auto_id: bool | str = "id_%s", prefix: str | None = None, initial: MutableMapping[str, Any] | None = None, error_class: type[ErrorList] = ..., label_suffix: str | None = None, empty_permitted: bool = False, field_order: Iterable[str] | None = None, use_required_attribute: bool | None = None, renderer: BaseRenderer | None = None, ) -> None: ... def order_fields(self, field_order: Iterable[str] | None) -> None: ... def __iter__(self) -> Iterator[BoundField]: ... def __getitem__(self, name: str) -> BoundField: ... @property def errors(self) -> ErrorDict: ... def is_valid(self) -> bool: ... def add_prefix(self, field_name: str) -> str: ... def add_initial_prefix(self, field_name: str) -> str: ... @property def template_name(self) -> str: ... def non_field_errors(self) -> ErrorList: ... @overload def add_error( self, field: None, error: Mapping[str, ValidationError | _StrOrPromise | Sequence[ValidationError | _StrOrPromise]], ) -> None: ... @overload def add_error( self, field: str | None, error: ValidationError | _StrOrPromise | Sequence[ValidationError | _StrOrPromise] ) -> None: ... def has_error(self, field: str | None, code: str | None = None) -> bool: ... def full_clean(self) -> None: ... def clean(self) -> dict[str, Any] | None: ... def has_changed(self) -> bool: ... @cached_property def changed_data(self) -> list[str]: ... @property def media(self) -> Media: ... def is_multipart(self) -> bool: ... def hidden_fields(self) -> list[BoundField]: ... def visible_fields(self) -> list[BoundField]: ... def get_initial_for_field(self, field: Field, field_name: str) -> Any: ... class Form(BaseForm, metaclass=DeclarativeFieldsMetaclass): base_fields: ClassVar[dict[str, Field]] declared_fields: ClassVar[dict[str, Field]] __all__ = ("BaseForm", "Form") django-stubs-5.2.9/django-stubs/forms/formsets.pyi000066400000000000000000000101021513401051600222300ustar00rootroot00000000000000from collections.abc import Iterator, Mapping, Sequence, Sized from typing import Any, ClassVar, Generic, TypeVar from django.db.models.fields import _ErrorMessagesDict from django.forms.forms import BaseForm, Form from django.forms.renderers import BaseRenderer from django.forms.utils import ErrorList, RenderableFormMixin, _DataT, _FilesT from django.forms.widgets import Media, MediaDefiningClass, Widget from django.utils.functional import cached_property TOTAL_FORM_COUNT: str INITIAL_FORM_COUNT: str MIN_NUM_FORM_COUNT: str MAX_NUM_FORM_COUNT: str ORDERING_FIELD_NAME: str DELETION_FIELD_NAME: str DEFAULT_MIN_NUM: int DEFAULT_MAX_NUM: int _F = TypeVar("_F", bound=BaseForm) class ManagementForm(Form): cleaned_data: dict[str, int | None] def __init__(self, *args: Any, **kwargs: Any) -> None: ... def clean(self) -> dict[str, int | None]: ... class BaseFormSet(Sized, RenderableFormMixin, Generic[_F]): form: type[_F] extra: int can_order: bool can_delete: bool can_delete_extra: bool min_num: int max_num: int absolute_max: int validate_min: bool validate_max: bool is_bound: bool prefix: str | None auto_id: str data: _DataT files: _FilesT initial: Sequence[Mapping[str, Any]] | None form_kwargs: dict[str, Any] error_class: type[ErrorList] deletion_widget: MediaDefiningClass ordering_widget: MediaDefiningClass default_error_messages: ClassVar[_ErrorMessagesDict] template_name_div: str template_name_p: str template_name_table: str template_name_ul: str def __init__( self, data: _DataT | None = None, files: _FilesT | None = None, auto_id: str = "id_%s", prefix: str | None = None, initial: Sequence[Mapping[str, Any]] | None = None, error_class: type[ErrorList] = ..., form_kwargs: dict[str, Any] | None = None, error_messages: Mapping[str, str] | None = None, form_renderer: BaseRenderer = ..., renderer: BaseRenderer = ..., ) -> None: ... def __iter__(self) -> Iterator[_F]: ... def __getitem__(self, index: int) -> _F: ... def __len__(self) -> int: ... def __bool__(self) -> bool: ... @cached_property def management_form(self) -> ManagementForm: ... def total_form_count(self) -> int: ... def initial_form_count(self) -> int: ... @cached_property def forms(self) -> list[_F]: ... def get_form_kwargs(self, index: int | None) -> dict[str, Any]: ... @property def initial_forms(self) -> list[_F]: ... @property def extra_forms(self) -> list[_F]: ... @property def empty_form(self) -> _F: ... @property def cleaned_data(self) -> list[dict[str, Any]]: ... @property def deleted_forms(self) -> list[_F]: ... @property def ordered_forms(self) -> list[_F]: ... @classmethod def get_default_prefix(cls) -> str: ... @classmethod def get_deletion_widget(cls) -> type[Widget]: ... @classmethod def get_ordering_widget(cls) -> type[Widget]: ... def non_form_errors(self) -> ErrorList: ... @property def errors(self) -> list[ErrorList]: ... def total_error_count(self) -> int: ... def is_valid(self) -> bool: ... def full_clean(self) -> None: ... def clean(self) -> None: ... def has_changed(self) -> bool: ... def add_fields(self, form: _F, index: int | None) -> None: ... def add_prefix(self, index: int | str) -> str: ... def is_multipart(self) -> bool: ... @property def media(self) -> Media: ... @property def template_name(self) -> str: ... def formset_factory( form: type[_F], formset: type[BaseFormSet[_F]] = ..., extra: int = 1, can_order: bool = False, can_delete: bool = False, max_num: int | None = None, validate_max: bool = False, min_num: int | None = None, validate_min: bool = False, absolute_max: int | None = None, can_delete_extra: bool = True, ) -> type[BaseFormSet[_F]]: ... def all_valid(formsets: Sequence[BaseFormSet[_F]]) -> bool: ... __all__ = ("BaseFormSet", "all_valid", "formset_factory") django-stubs-5.2.9/django-stubs/forms/models.pyi000066400000000000000000000306351513401051600216660ustar00rootroot00000000000000from collections.abc import Callable, Collection, Container, Iterator, Mapping, MutableMapping, Sequence from typing import Any, ClassVar, Generic, Literal, TypeAlias, TypeVar, overload from uuid import UUID from django.db import models from django.db.models import ForeignKey from django.db.models.base import Model from django.db.models.fields import _AllLimitChoicesTo, _LimitChoicesTo from django.db.models.manager import Manager from django.db.models.query import QuerySet from django.forms.fields import ChoiceField, Field, _ClassLevelWidgetT from django.forms.forms import BaseForm, DeclarativeFieldsMetaclass from django.forms.formsets import BaseFormSet from django.forms.renderers import BaseRenderer from django.forms.utils import ErrorList, _DataT, _FilesT from django.forms.widgets import Widget from django.utils.choices import BaseChoiceIterator, CallableChoiceIterator, _ChoicesCallable, _ChoicesInput from django.utils.datastructures import _PropertyDescriptor from django.utils.functional import _StrOrPromise ALL_FIELDS: Literal["__all__"] _Fields: TypeAlias = Collection[str] | Literal["__all__"] _Widgets: TypeAlias = dict[str, type[Widget] | Widget] _Labels: TypeAlias = dict[str, str] _HelpTexts: TypeAlias = dict[str, str] _ErrorMessages: TypeAlias = dict[str, dict[str, str]] _FormFieldCallback: TypeAlias = Callable[[models.Field], Field] _M = TypeVar("_M", bound=Model) _ParentM = TypeVar("_ParentM", bound=Model) def construct_instance( form: BaseForm, instance: _M, fields: Container[str] | None = None, exclude: Container[str] | None = None ) -> _M: ... def model_to_dict(instance: Model, fields: _Fields | None = None, exclude: _Fields | None = None) -> dict[str, Any]: ... def apply_limit_choices_to_to_formfield(formfield: Field) -> None: ... def fields_for_model( model: type[Model], fields: _Fields | None = None, exclude: _Fields | None = None, widgets: _Widgets | None = None, formfield_callback: _FormFieldCallback | None = None, localized_fields: _Fields | None = None, labels: _Labels | None = None, help_texts: _HelpTexts | None = None, error_messages: _ErrorMessages | None = None, field_classes: Mapping[str, type[Field]] | None = None, *, apply_limit_choices_to: bool = True, form_declared_fields: _Fields | None = None, ) -> dict[str, Any]: ... class ModelFormOptions(Generic[_M]): model: type[_M] fields: _Fields | None exclude: _Fields | None widgets: _Widgets | None localized_fields: _Fields | None labels: _Labels | None help_texts: _HelpTexts | None error_messages: _ErrorMessages | None field_classes: dict[str, type[Field]] | None formfield_callback: _FormFieldCallback | None def __init__(self, options: type | None = None) -> None: ... class ModelFormMetaclass(DeclarativeFieldsMetaclass): ... class BaseModelForm(BaseForm, Generic[_M]): instance: _M _meta: ModelFormOptions[_M] def __init__( self, data: _DataT | None = None, files: _FilesT | None = None, auto_id: bool | str = "id_%s", prefix: str | None = None, initial: MutableMapping[str, Any] | None = None, error_class: type[ErrorList] = ..., label_suffix: str | None = None, empty_permitted: bool = False, instance: _M | None = None, use_required_attribute: bool | None = None, renderer: BaseRenderer | None = None, ) -> None: ... def validate_unique(self) -> None: ... def save(self, commit: bool = True) -> _M: ... def save_m2m(self) -> None: ... class ModelForm(BaseModelForm[_M], metaclass=ModelFormMetaclass): base_fields: ClassVar[dict[str, Field]] declared_fields: ClassVar[dict[str, Field]] def modelform_factory( model: type[_M], form: type[ModelForm[_M]] = ..., fields: _Fields | None = None, exclude: _Fields | None = None, formfield_callback: _FormFieldCallback | None = None, widgets: _Widgets | None = None, localized_fields: _Fields | None = None, labels: _Labels | None = None, help_texts: _HelpTexts | None = None, error_messages: _ErrorMessages | None = None, field_classes: Mapping[str, type[Field]] | None = None, ) -> type[ModelForm[_M]]: ... _ModelFormT = TypeVar("_ModelFormT", bound=ModelForm) class BaseModelFormSet(BaseFormSet[_ModelFormT], Generic[_M, _ModelFormT]): model: type[_M] edit_only: bool unique_fields: Collection[str] queryset: QuerySet[_M] | None initial_extra: Sequence[dict[str, Any]] | None def __init__( self, data: _DataT | None = None, files: _FilesT | None = None, auto_id: str = "id_%s", prefix: str | None = None, queryset: QuerySet[_M] | None = None, *, initial: Sequence[dict[str, Any]] | None = None, **kwargs: Any, ) -> None: ... def initial_form_count(self) -> int: ... def get_queryset(self) -> QuerySet[_M]: ... def save_new(self, form: _ModelFormT, commit: bool = True) -> _M: ... def save_existing(self, form: _ModelFormT, obj: _M, commit: bool = True) -> _M: ... def delete_existing(self, obj: _M, commit: bool = True) -> None: ... saved_forms: list[_ModelFormT] def save_m2m(self) -> None: ... def save(self, commit: bool = True) -> list[_M]: ... def clean(self) -> None: ... def validate_unique(self) -> None: ... def get_unique_error_message(self, unique_check: Sequence[str]) -> str: ... def get_date_error_message(self, date_check: tuple[str, Literal["date", "year", "month"], str, str]) -> str: ... def get_form_error(self) -> str: ... changed_objects: list[tuple[_M, list[str]]] deleted_objects: list[_M] def save_existing_objects(self, commit: bool = True) -> list[_M]: ... new_objects: list[_M] def save_new_objects(self, commit: bool = True) -> list[_M]: ... def add_fields(self, form: _ModelFormT, index: int | None) -> None: ... def modelformset_factory( model: type[_M], form: type[_ModelFormT] = ..., formfield_callback: _FormFieldCallback | None = None, formset: type[BaseModelFormSet] = ..., extra: int = 1, can_delete: bool = False, can_order: bool = False, max_num: int | None = None, fields: _Fields | None = None, exclude: _Fields | None = None, widgets: _Widgets | None = None, validate_max: bool = False, localized_fields: _Fields | None = None, labels: _Labels | None = None, help_texts: _HelpTexts | None = None, error_messages: _ErrorMessages | None = None, min_num: int | None = None, validate_min: bool = False, field_classes: Mapping[str, type[Field]] | None = None, absolute_max: int | None = None, can_delete_extra: bool = True, renderer: BaseRenderer | None = None, edit_only: bool = False, ) -> type[BaseModelFormSet[_M, _ModelFormT]]: ... class BaseInlineFormSet(BaseModelFormSet[_M, _ModelFormT], Generic[_M, _ParentM, _ModelFormT]): instance: _ParentM save_as_new: bool unique_fields: Collection[str] fk: ForeignKey # set by inlineformset_set def __init__( self, data: _DataT | None = None, files: _FilesT | None = None, instance: _ParentM | None = None, save_as_new: bool = False, prefix: str | None = None, queryset: QuerySet[_M] | None = None, **kwargs: Any, ) -> None: ... def initial_form_count(self) -> int: ... @classmethod def get_default_prefix(cls) -> str: ... def save_new(self, form: _ModelFormT, commit: bool = True) -> _M: ... def add_fields(self, form: _ModelFormT, index: int | None) -> None: ... def get_unique_error_message(self, unique_check: Sequence[str]) -> str: ... def inlineformset_factory( parent_model: type[_ParentM], model: type[_M], form: type[_ModelFormT] = ..., formset: type[BaseInlineFormSet] = ..., fk_name: str | None = None, fields: _Fields | None = None, exclude: _Fields | None = None, extra: int = 3, can_order: bool = False, can_delete: bool = True, max_num: int | None = None, formfield_callback: _FormFieldCallback | None = None, widgets: _Widgets | None = None, validate_max: bool = False, localized_fields: Sequence[str] | None = None, labels: _Labels | None = None, help_texts: _HelpTexts | None = None, error_messages: _ErrorMessages | None = None, min_num: int | None = None, validate_min: bool = False, field_classes: Mapping[str, type[Field]] | None = None, absolute_max: int | None = None, can_delete_extra: bool = True, renderer: BaseRenderer | None = None, edit_only: bool = False, ) -> type[BaseInlineFormSet[_M, _ParentM, _ModelFormT]]: ... class InlineForeignKeyField(Field): disabled: bool help_text: _StrOrPromise required: bool show_hidden_initial: bool widget: _ClassLevelWidgetT parent_instance: Model pk_field: bool to_field: str | None def __init__( self, parent_instance: Model, *args: Any, pk_field: bool = False, to_field: str | None = None, **kwargs: Any, ) -> None: ... def clean(self, value: Any) -> Model: ... def has_changed(self, initial: Any, data: Any) -> bool: ... class ModelChoiceIteratorValue: def __init__(self, value: Any, instance: Model) -> None: ... class ModelChoiceIterator(BaseChoiceIterator): field: ModelChoiceField queryset: QuerySet def __init__(self, field: ModelChoiceField) -> None: ... def __iter__(self) -> Iterator[tuple[ModelChoiceIteratorValue | str, str]]: ... def __len__(self) -> int: ... def __bool__(self) -> bool: ... def choice(self, obj: Model) -> tuple[ModelChoiceIteratorValue, str]: ... class ModelChoiceField(ChoiceField, Generic[_M]): disabled: bool help_text: _StrOrPromise required: bool show_hidden_initial: bool validators: list[Any] iterator: type[ModelChoiceIterator] empty_label: _StrOrPromise | None queryset: QuerySet[_M] | None limit_choices_to: _AllLimitChoicesTo | None to_field_name: str | None def __init__( self, queryset: Manager[_M] | QuerySet[_M] | None, *, empty_label: _StrOrPromise | None = "---------", required: bool = True, widget: Widget | type[Widget] | None = None, label: _StrOrPromise | None = None, initial: Any | None = None, help_text: _StrOrPromise = "", to_field_name: str | None = None, limit_choices_to: _AllLimitChoicesTo | None = None, blank: bool = False, **kwargs: Any, ) -> None: ... def validate_no_null_characters(self, value: Any) -> None: ... def get_limit_choices_to(self) -> _LimitChoicesTo: ... def label_from_instance(self, obj: _M) -> str: ... choices: _PropertyDescriptor[ _ChoicesInput | _ChoicesCallable | CallableChoiceIterator, _ChoicesInput | CallableChoiceIterator | ModelChoiceIterator, ] def prepare_value(self, value: Any) -> Any: ... def to_python(self, value: Any | None) -> _M | None: ... def validate(self, value: _M | None) -> None: ... def has_changed(self, initial: Model | int | str | UUID | None, data: int | str | None) -> bool: ... class ModelMultipleChoiceField(ModelChoiceField[_M]): disabled: bool empty_label: _StrOrPromise | None help_text: _StrOrPromise required: bool show_hidden_initial: bool widget: _ClassLevelWidgetT hidden_widget: type[Widget] def __init__(self, queryset: Manager[_M] | QuerySet[_M] | None, **kwargs: Any) -> None: ... def to_python(self, value: Any) -> list[_M]: ... # type: ignore[override] def clean(self, value: Any) -> QuerySet[_M]: ... def prepare_value(self, value: Any) -> Any: ... def has_changed(self, initial: Collection[Any] | None, data: Collection[Any] | None) -> bool: ... # type: ignore[override] def modelform_defines_fields(form_class: type[ModelForm]) -> bool: ... @overload def _get_foreign_key( parent_model: type[Model], model: type[Model], fk_name: str | None = None, can_fail: Literal[True] = True ) -> ForeignKey | None: ... @overload def _get_foreign_key( parent_model: type[Model], model: type[Model], fk_name: str | None = None, can_fail: Literal[False] = False ) -> ForeignKey: ... __all__ = ( "ALL_FIELDS", "BaseInlineFormSet", "BaseModelForm", "BaseModelFormSet", "ModelChoiceField", "ModelForm", "ModelMultipleChoiceField", "fields_for_model", "inlineformset_factory", "model_to_dict", "modelform_factory", "modelformset_factory", ) django-stubs-5.2.9/django-stubs/forms/renderers.pyi000066400000000000000000000027271513401051600223750ustar00rootroot00000000000000from typing import Any from django.forms.boundfield import BoundField from django.http import HttpRequest from django.template.backends.base import BaseEngine from django.template.backends.django import DjangoTemplates as DjangoTemplatesR from django.template.backends.jinja2 import Jinja2 as Jinja2R from django.template.base import Template from django.utils.functional import cached_property from typing_extensions import deprecated def get_default_renderer() -> BaseRenderer: ... class BaseRenderer: form_template_name: str formset_template_name: str field_template_name: str bound_field_class: type[BoundField] | None def get_template(self, template_name: str) -> Any: ... def render(self, template_name: str, context: dict[str, Any], request: HttpRequest | None = None) -> str: ... class EngineMixin: def get_template(self, template_name: str) -> Any: ... @cached_property def engine(self) -> BaseEngine: ... class DjangoTemplates(EngineMixin, BaseRenderer): backend: type[DjangoTemplatesR] class Jinja2(EngineMixin, BaseRenderer): @cached_property def backend(self) -> type[Jinja2R]: ... @deprecated( "Jinja2DivFormRenderer transitional form renderer is deprecated and will be removed in Django 6.0. Use Jinja2 instead." ) class Jinja2DivFormRenderer(Jinja2): form_template_name: str formset_template_name: str class TemplatesSetting(BaseRenderer): def get_template(self, template_name: str) -> Template | None: ... django-stubs-5.2.9/django-stubs/forms/utils.pyi000066400000000000000000000054611513401051600215420ustar00rootroot00000000000000from collections import UserList from collections.abc import Mapping, Sequence from datetime import datetime from typing import Any, TypeAlias from django.core.exceptions import ValidationError from django.core.files.uploadedfile import UploadedFile from django.forms.renderers import BaseRenderer from django.utils.datastructures import MultiValueDict from django.utils.functional import _StrOrPromise from django.utils.safestring import SafeString _DataT: TypeAlias = Mapping[str, Any] # noqa: PYI047 _FilesT: TypeAlias = MultiValueDict[str, UploadedFile] # noqa: PYI047 def pretty_name(name: str) -> str: ... def flatatt(attrs: dict[str, Any]) -> SafeString: ... class RenderableMixin: def get_context(self) -> dict[str, Any]: ... def render( self, template_name: str | None = None, context: dict[str, Any] | None = None, renderer: BaseRenderer | type[BaseRenderer] | None = None, ) -> SafeString: ... # This is a lie, but this is how it is supposed to be used, # in reallity it is `__str__ = __html__ = render`: def __str__(self) -> SafeString: ... def __html__(self) -> SafeString: ... class RenderableFieldMixin(RenderableMixin): def as_field_group(self) -> SafeString: ... def as_hidden(self) -> SafeString: ... def as_widget(self) -> SafeString: ... class RenderableFormMixin(RenderableMixin): def as_p(self) -> SafeString: ... def as_table(self) -> SafeString: ... def as_ul(self) -> SafeString: ... def as_div(self) -> SafeString: ... class RenderableErrorMixin(RenderableMixin): def as_json(self, escape_html: bool = False) -> str: ... def as_text(self) -> SafeString: ... def as_ul(self) -> SafeString: ... class ErrorDict(dict[str, ErrorList], RenderableErrorMixin): template_name: str template_name_text: str template_name_ul: str renderer: BaseRenderer def __init__(self, *args: Any, renderer: BaseRenderer | None = None, **kwargs: Any): ... def as_data(self) -> dict[str, list[ValidationError]]: ... def get_json_data(self, escape_html: bool = False) -> dict[str, Any]: ... class ErrorList(UserList[ValidationError | _StrOrPromise], RenderableErrorMixin): template_name: str template_name_text: str template_name_ul: str error_class: str renderer: BaseRenderer field_name: str | None def __init__( self, initlist: ErrorList | Sequence[str | Exception] | None = None, error_class: str | None = None, renderer: BaseRenderer | None = None, field_id: str | None = None, ) -> None: ... def as_data(self) -> list[ValidationError]: ... def get_json_data(self, escape_html: bool = False) -> list[dict[str, str]]: ... def from_current_timezone(value: datetime) -> datetime: ... def to_current_timezone(value: datetime) -> datetime: ... django-stubs-5.2.9/django-stubs/forms/widgets.pyi000066400000000000000000000274341513401051600220540ustar00rootroot00000000000000import datetime from collections.abc import Iterable, Iterator, Mapping, Sequence from typing import Any, Literal, Protocol, TypeAlias, type_check_only import _typeshed from django.core.files.base import File from django.forms.renderers import BaseRenderer from django.forms.utils import _DataT, _FilesT from django.utils.choices import _Choices from django.utils.datastructures import _ListOrTuple from django.utils.safestring import SafeString from typing_extensions import Self _OptAttrs: TypeAlias = dict[str, Any] class MediaOrderConflictWarning(RuntimeWarning): ... class MediaAsset: element_template: str def __init__(self, path: str, **attributes: Any) -> None: ... def __eq__(self, other: object) -> bool: ... def __hash__(self) -> int: ... def __html__(self) -> SafeString: ... @property def path(self) -> str: ... class Script(MediaAsset): element_template: str def __init__(self, src: str, **attributes: Any) -> None: ... class Media: def __init__( self, media: type | None = None, css: dict[str, Sequence[str]] | None = None, js: Sequence[str] | None = None, ) -> None: ... def render(self) -> SafeString: ... def render_js(self) -> list[SafeString]: ... def render_css(self) -> Iterable[SafeString]: ... def absolute_path(self, path: str) -> str: ... def __getitem__(self, name: str) -> Media: ... @staticmethod def merge(*lists: Iterable[Any]) -> list[Any]: ... def __add__(self, other: Media) -> Media: ... class MediaDefiningClass(type): def __new__( mcs: type[_typeshed.Self], # noqa: TID251 name: str, bases: tuple[type, ...], attrs: dict[str, Any], ) -> _typeshed.Self: ... # noqa: TID251 class Widget(metaclass=MediaDefiningClass): needs_multipart_form: bool is_localized: bool is_required: bool supports_microseconds: bool attrs: _OptAttrs template_name: str def __init__(self, attrs: _OptAttrs | None = None) -> None: ... def __deepcopy__(self, memo: dict[int, Any]) -> Self: ... @property def is_hidden(self) -> bool: ... @property def media(self) -> Media: ... def subwidgets(self, name: str, value: Any, attrs: _OptAttrs | None = None) -> Iterator[dict[str, Any]]: ... def format_value(self, value: Any) -> str | None: ... def get_context(self, name: str, value: Any, attrs: _OptAttrs | None) -> dict[str, Any]: ... def render( self, name: str, value: Any, attrs: _OptAttrs | None = None, renderer: BaseRenderer | None = None ) -> SafeString: ... def build_attrs(self, base_attrs: _OptAttrs, extra_attrs: _OptAttrs | None = None) -> dict[str, Any]: ... def value_from_datadict(self, data: _DataT, files: _FilesT, name: str) -> Any: ... def value_omitted_from_data(self, data: _DataT, files: _FilesT, name: str) -> bool: ... def id_for_label(self, id_: str) -> str: ... def use_required_attribute(self, initial: Any) -> bool: ... class Input(Widget): input_type: str template_name: str class TextInput(Input): input_type: str template_name: str class NumberInput(Input): input_type: str template_name: str class EmailInput(Input): input_type: str template_name: str class URLInput(Input): input_type: str template_name: str class ColorInput(Input): input_type: str template_name: str class SearchInput(Input): input_type: str template_name: str class TelInput(Input): input_type: str template_name: str class PasswordInput(Input): render_value: bool input_type: str template_name: str def __init__(self, attrs: _OptAttrs | None = None, render_value: bool = False) -> None: ... def get_context(self, name: str, value: Any, attrs: _OptAttrs | None) -> dict[str, Any]: ... class HiddenInput(Input): choices: _Choices input_type: str template_name: str class MultipleHiddenInput(HiddenInput): template_name: str class FileInput(Input): allow_multiple_selected: bool input_type: str template_name: str needs_multipart_form: bool def format_value(self, value: Any) -> None: ... def value_from_datadict(self, data: _DataT, files: _FilesT, name: str) -> Any: ... def value_omitted_from_data(self, data: _DataT, files: _FilesT, name: str) -> bool: ... def use_required_attribute(self, initial: Any) -> bool: ... FILE_INPUT_CONTRADICTION: object class ClearableFileInput(FileInput): clear_checkbox_label: str initial_text: str input_text: str template_name: str checked: bool def clear_checkbox_name(self, name: str) -> str: ... def clear_checkbox_id(self, name: str) -> str: ... def is_initial(self, value: File | str | None) -> bool: ... def get_context(self, name: str, value: Any, attrs: _OptAttrs | None) -> dict[str, Any]: ... def value_from_datadict(self, data: _DataT, files: _FilesT, name: str) -> Any: ... def value_omitted_from_data(self, data: _DataT, files: _FilesT, name: str) -> bool: ... class Textarea(Widget): template_name: str def __init__(self, attrs: _OptAttrs | None = None) -> None: ... class DateTimeBaseInput(TextInput): format_key: str format: str | None supports_microseconds: bool def __init__(self, attrs: _OptAttrs | None = None, format: str | None = None) -> None: ... class DateInput(DateTimeBaseInput): format_key: str template_name: str class DateTimeInput(DateTimeBaseInput): format_key: str template_name: str class TimeInput(DateTimeBaseInput): format_key: str template_name: str def boolean_check(v: Any) -> bool: ... @type_check_only class _CheckCallable(Protocol): def __call__(self, value: Any, /) -> bool: ... class CheckboxInput(Input): check_test: _CheckCallable input_type: str template_name: str def __init__(self, attrs: _OptAttrs | None = None, check_test: _CheckCallable | None = None) -> None: ... class ChoiceWidget(Widget): allow_multiple_selected: bool input_type: str | None template_name: str option_template_name: str | None add_id_index: bool checked_attribute: Any option_inherits_attrs: bool choices: _Choices def __init__(self, attrs: _OptAttrs | None = None, choices: _Choices = ()) -> None: ... def subwidgets(self, name: str, value: Any, attrs: _OptAttrs | None = None) -> Iterator[dict[str, Any]]: ... def options(self, name: str, value: list[str], attrs: _OptAttrs | None = None) -> Iterator[dict[str, Any]]: ... def optgroups( self, name: str, value: list[str], attrs: _OptAttrs | None = None ) -> list[tuple[str | None, list[dict[str, Any]], int | None]]: ... def get_context(self, name: str, value: Any, attrs: _OptAttrs | None) -> dict[str, Any]: ... def create_option( self, name: str, value: Any, label: int | str, selected: bool, index: int, subindex: int | None = None, attrs: _OptAttrs | None = None, ) -> dict[str, Any]: ... def id_for_label(self, id_: str, index: str = "0") -> str: ... def value_from_datadict(self, data: _DataT, files: _FilesT, name: str) -> Any: ... def format_value(self, value: Any) -> list[str]: ... # type: ignore[override] class Select(ChoiceWidget): input_type: str | None template_name: str option_template_name: str add_id_index: bool checked_attribute: Any option_inherits_attrs: bool def get_context(self, name: str, value: Any, attrs: _OptAttrs | None) -> dict[str, Any]: ... def use_required_attribute(self, initial: Any) -> bool: ... class NullBooleanSelect(Select): def __init__(self, attrs: _OptAttrs | None = None) -> None: ... def format_value(self, value: Any) -> str: ... # type: ignore[override] def value_from_datadict(self, data: _DataT, files: _FilesT, name: str) -> bool | None: ... class SelectMultiple(Select): allow_multiple_selected: bool def value_from_datadict(self, data: _DataT, files: _FilesT, name: str) -> Any: ... def value_omitted_from_data(self, data: _DataT, files: _FilesT, name: str) -> bool: ... class RadioSelect(ChoiceWidget): can_add_related: bool input_type: str template_name: str option_template_name: str class CheckboxSelectMultiple(ChoiceWidget): can_add_related: bool input_type: str template_name: str option_template_name: str def use_required_attribute(self, initial: Any) -> bool: ... def value_omitted_from_data(self, data: _DataT, files: _FilesT, name: str) -> bool: ... def id_for_label(self, id_: str, index: str | None = None) -> str: ... class MultiWidget(Widget): template_name: str widgets: Sequence[Widget] def __init__( self, widgets: dict[str, Widget | type[Widget]] | Sequence[Widget | type[Widget]], attrs: _OptAttrs | None = None, ) -> None: ... @property def is_hidden(self) -> bool: ... def get_context(self, name: str, value: Any, attrs: _OptAttrs | None) -> dict[str, Any]: ... def id_for_label(self, id_: str) -> str: ... def value_from_datadict(self, data: _DataT, files: _FilesT, name: str) -> list[Any]: ... def value_omitted_from_data(self, data: _DataT, files: _FilesT, name: str) -> bool: ... def decompress(self, value: Any) -> Any | None: ... @property def needs_multipart_form(self) -> bool: ... # type: ignore[override] class SplitDateTimeWidget(MultiWidget): supports_microseconds: bool template_name: str widgets: tuple[DateInput, TimeInput] def __init__( self, attrs: _OptAttrs | None = None, date_format: str | None = None, time_format: str | None = None, date_attrs: dict[str, str] | None = None, time_attrs: dict[str, str] | None = None, ) -> None: ... def decompress(self, value: Any) -> tuple[datetime.date | None, datetime.time | None]: ... class SplitHiddenDateTimeWidget(SplitDateTimeWidget): template_name: str def __init__( self, attrs: _OptAttrs | None = None, date_format: str | None = None, time_format: str | None = None, date_attrs: dict[str, str] | None = None, time_attrs: dict[str, str] | None = None, ) -> None: ... class SelectDateWidget(Widget): none_value: tuple[Literal[""], str] month_field: str day_field: str year_field: str template_name: str input_type: str select_widget: type[ChoiceWidget] date_re: Any years: Iterable[int | str] months: Mapping[int, str] year_none_value: tuple[Literal[""], str] month_none_value: tuple[Literal[""], str] day_none_value: tuple[Literal[""], str] def __init__( self, attrs: _OptAttrs | None = None, years: Iterable[int | str] | None = None, months: Mapping[int, str] | None = None, empty_label: str | _ListOrTuple[str] | None = None, ) -> None: ... def get_context(self, name: str, value: Any, attrs: _OptAttrs | None) -> dict[str, Any]: ... def format_value(self, value: Any) -> dict[str, str | int | None]: ... # type: ignore[override] def id_for_label(self, id_: str) -> str: ... def value_from_datadict(self, data: _DataT, files: _FilesT, name: str) -> str | None | Any: ... def value_omitted_from_data(self, data: _DataT, files: _FilesT, name: str) -> bool: ... __all__ = ( "CheckboxInput", "CheckboxSelectMultiple", "ClearableFileInput", "ColorInput", "DateInput", "DateTimeInput", "EmailInput", "FileInput", "HiddenInput", "Media", "MediaDefiningClass", "MultiWidget", "MultipleHiddenInput", "NullBooleanSelect", "NumberInput", "PasswordInput", "RadioSelect", "Script", "SearchInput", "Select", "SelectDateWidget", "SelectMultiple", "SplitDateTimeWidget", "SplitHiddenDateTimeWidget", "TelInput", "TextInput", "Textarea", "TimeInput", "URLInput", "Widget", ) django-stubs-5.2.9/django-stubs/http/000077500000000000000000000000001513401051600175025ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/http/__init__.pyi000066400000000000000000000036531513401051600217730ustar00rootroot00000000000000from .cookie import SimpleCookie as SimpleCookie from .cookie import parse_cookie as parse_cookie from .request import HttpHeaders as HttpHeaders from .request import HttpRequest as HttpRequest from .request import QueryDict as QueryDict from .request import RawPostDataException as RawPostDataException from .request import UnreadablePostError as UnreadablePostError from .response import BadHeaderError as BadHeaderError from .response import FileResponse as FileResponse from .response import Http404 as Http404 from .response import HttpResponse as HttpResponse from .response import HttpResponseBadRequest as HttpResponseBadRequest from .response import HttpResponseBase as HttpResponseBase from .response import HttpResponseForbidden as HttpResponseForbidden from .response import HttpResponseGone as HttpResponseGone from .response import HttpResponseNotAllowed as HttpResponseNotAllowed from .response import HttpResponseNotFound as HttpResponseNotFound from .response import HttpResponseNotModified as HttpResponseNotModified from .response import HttpResponsePermanentRedirect as HttpResponsePermanentRedirect from .response import HttpResponseRedirect as HttpResponseRedirect from .response import HttpResponseServerError as HttpResponseServerError from .response import JsonResponse as JsonResponse from .response import StreamingHttpResponse as StreamingHttpResponse __all__ = [ "BadHeaderError", "FileResponse", "Http404", "HttpHeaders", "HttpRequest", "HttpResponse", "HttpResponseBadRequest", "HttpResponseBase", "HttpResponseForbidden", "HttpResponseGone", "HttpResponseNotAllowed", "HttpResponseNotFound", "HttpResponseNotModified", "HttpResponsePermanentRedirect", "HttpResponseRedirect", "HttpResponseServerError", "JsonResponse", "QueryDict", "RawPostDataException", "SimpleCookie", "StreamingHttpResponse", "UnreadablePostError", "parse_cookie", ] django-stubs-5.2.9/django-stubs/http/cookie.pyi000066400000000000000000000001541513401051600214760ustar00rootroot00000000000000from http.cookies import SimpleCookie as SimpleCookie def parse_cookie(cookie: str) -> dict[str, str]: ... django-stubs-5.2.9/django-stubs/http/multipartparser.pyi000066400000000000000000000042421513401051600234650ustar00rootroot00000000000000import re from collections.abc import Iterator, Mapping from typing import IO, Any, ClassVar, Literal from django.http.request import QueryDict from django.utils.datastructures import ImmutableList, MultiValueDict class MultiPartParserError(Exception): ... class InputStreamExhausted(Exception): ... RAW: Literal["raw"] FILE: Literal["file"] FIELD: Literal["field"] FIELD_TYPES: frozenset[str] class MultiPartParser: boundary_re: ClassVar[re.Pattern[str]] def __init__( self, META: Mapping[str, Any], input_data: IO[bytes], upload_handlers: list[Any] | ImmutableList[Any], encoding: str | None = ..., ) -> None: ... def parse(self) -> tuple[QueryDict, MultiValueDict]: ... def handle_file_complete(self, old_field_name: str, counters: list[int]) -> None: ... def sanitize_file_name(self, file_name: str) -> str | None: ... def IE_sanitize(self, file_name: str) -> str | None: ... class LazyStream: length: int | None position: int def __init__(self, producer: BoundaryIter | ChunkIter, length: int | None = ...) -> None: ... def tell(self) -> int: ... def read(self, size: int | None = ...) -> bytes: ... def __next__(self) -> bytes: ... def close(self) -> None: ... def __iter__(self) -> LazyStream: ... def unget(self, bytes: bytes) -> None: ... class ChunkIter: flo: IO[bytes] chunk_size: int def __init__(self, flo: IO[bytes], chunk_size: int = ...) -> None: ... def __next__(self) -> bytes: ... def __iter__(self) -> ChunkIter: ... class InterBoundaryIter: def __init__(self, stream: LazyStream, boundary: bytes) -> None: ... def __iter__(self) -> InterBoundaryIter: ... def __next__(self) -> LazyStream: ... class BoundaryIter: def __init__(self, stream: LazyStream, boundary: bytes) -> None: ... def __iter__(self) -> BoundaryIter: ... def __next__(self) -> bytes: ... class Parser: def __init__(self, stream: LazyStream, boundary: bytes) -> None: ... def __iter__(self) -> Iterator[tuple[str, dict[str, tuple[str, dict[str, bytes | str]]], LazyStream]]: ... __all__ = ("InputStreamExhausted", "MultiPartParser", "MultiPartParserError") django-stubs-5.2.9/django-stubs/http/request.pyi000066400000000000000000000234001513401051600217140ustar00rootroot00000000000000import datetime from collections.abc import Awaitable, Callable, Iterable, Iterator, Mapping, Sequence from re import Pattern from typing import Any, BinaryIO, Literal, NoReturn, TypeAlias, TypeVar, overload, type_check_only from django.contrib.auth.models import _AnyUser from django.contrib.sessions.backends.base import SessionBase from django.contrib.sites.models import Site from django.core.files import uploadedfile, uploadhandler from django.urls import ResolverMatch from django.utils.datastructures import CaseInsensitiveMapping, ImmutableList, MultiValueDict from django.utils.functional import cached_property from typing_extensions import Self RAISE_ERROR: object host_validation_re: Pattern[str] class UnreadablePostError(OSError): ... class RawPostDataException(Exception): ... _UploadHandlerList: TypeAlias = list[uploadhandler.FileUploadHandler] | ImmutableList[uploadhandler.FileUploadHandler] class HttpHeaders(CaseInsensitiveMapping[str]): HTTP_PREFIX: str UNPREFIXED_HEADERS: set[str] def __init__(self, environ: Mapping[str, Any]) -> None: ... @classmethod def parse_header_name(cls, header: str) -> str | None: ... @classmethod def to_wsgi_name(cls, header: str) -> str: ... @classmethod def to_asgi_name(cls, header: str) -> str: ... @classmethod def to_wsgi_names(cls, headers: Mapping[str, Any]) -> dict[str, Any]: ... @classmethod def to_asgi_names(cls, headers: Mapping[str, Any]) -> dict[str, Any]: ... class HttpRequest: GET: _ImmutableQueryDict POST: _ImmutableQueryDict COOKIES: dict[str, str] META: dict[str, Any] FILES: MultiValueDict[str, uploadedfile.UploadedFile] path: str path_info: str method: str | None resolver_match: ResolverMatch | None content_type: str | None content_params: dict[str, str] | None _body: bytes _stream: BinaryIO # Attributes added by optional parts of Django # django.contrib.admin views: current_app: str # django.contrib.auth.middleware.AuthenticationMiddleware: user: _AnyUser # django.contrib.auth.middleware.AuthenticationMiddleware: auser: Callable[[], Awaitable[_AnyUser]] # django.middleware.locale.LocaleMiddleware: LANGUAGE_CODE: str # django.contrib.sites.middleware.CurrentSiteMiddleware site: Site # django.contrib.sessions.middleware.SessionMiddleware session: SessionBase # The magic. If we instantiate HttpRequest directly somewhere, it has # mutable GET and POST. However, both ASGIRequest and WSGIRequest have immutable, # so when we use HttpRequest to refer to any of them we want exactly this. # Case when some function creates *exactly* HttpRequest (not subclass) # remain uncovered, however it's probably the best solution we can afford. def __new__(cls) -> _MutableHttpRequest: ... # When both __init__ and __new__ are present, mypy will prefer __init__ # (see comments in mypy.checkmember.type_object_type) # def __init__(self) -> None: ... def get_host(self) -> str: ... def get_port(self) -> str: ... def get_full_path(self, force_append_slash: bool = ...) -> str: ... def get_full_path_info(self, force_append_slash: bool = ...) -> str: ... def get_signed_cookie( self, key: str, default: Any = ..., salt: str = ..., max_age: int | datetime.timedelta | None = ... ) -> str | None: ... def build_absolute_uri(self, location: str | None = ...) -> str: ... @property def scheme(self) -> str | None: ... def is_secure(self) -> bool: ... @property def encoding(self) -> str | None: ... @encoding.setter def encoding(self, val: str) -> None: ... @property def upload_handlers(self) -> _UploadHandlerList: ... @upload_handlers.setter def upload_handlers(self, upload_handlers: _UploadHandlerList) -> None: ... @cached_property def accepted_types(self) -> list[MediaType]: ... @cached_property def accepted_types_by_precedence(self) -> list[MediaType]: ... def accepted_type(self, media_type: str) -> MediaType | None: ... def get_preferred_type(self, media_types: Sequence[str]) -> str | None: ... def parse_file_upload( self, META: Mapping[str, Any], post_data: BinaryIO ) -> tuple[QueryDict, MultiValueDict[str, uploadedfile.UploadedFile]]: ... @cached_property def headers(self) -> HttpHeaders: ... @property def body(self) -> bytes: ... def _load_post_and_files(self) -> None: ... def accepts(self, media_type: str) -> bool: ... def close(self) -> None: ... # File-like and iterator interface, a minimal subset of BytesIO. def read(self, n: int | None = -1, /) -> bytes: ... def readline(self, limit: int | None = -1, /) -> bytes: ... def __iter__(self) -> Iterator[bytes]: ... def readlines(self) -> list[bytes]: ... @type_check_only class _MutableHttpRequest(HttpRequest): GET: QueryDict # type: ignore[assignment] POST: QueryDict # type: ignore[assignment] _Z = TypeVar("_Z") # mypy uses mro to pick between `__init__` and `__new__` for return types and will prefers `__init__` over `__new__` # in case of a tie. So to be able to specialize type via `__new__` (which is required for pyright to work), # we need to use an intermediary class for the `__init__` method. # See https://github.com/python/mypy/issues/17251 # https://github.com/python/mypy/blob/c724a6a806655f94d0c705a7121e3d671eced96d/mypy/typeops.py#L148-L149 class _QueryDictMixin: def __init__( self, query_string: str | bytes | None = ..., mutable: bool = ..., encoding: str | None = ..., ) -> None: ... class QueryDict(_QueryDictMixin, MultiValueDict[str, str]): _mutable: bool # We can make it mutable only by specifying `mutable=True`. # It can be done a) with kwarg and b) with pos. arg. `overload` has # some problems with args/kwargs + Literal, so two signatures are required. # ('querystring', True, [...]) @overload def __new__( cls, query_string: str | bytes | None, mutable: Literal[True], encoding: str | None = ..., ) -> QueryDict: ... # ([querystring='string',] mutable=True, [...]) @overload def __new__( cls, *, query_string: str | bytes | None = ..., mutable: Literal[True], encoding: str | None = ..., ) -> QueryDict: ... # Otherwise it's immutable @overload def __new__( cls, query_string: str | bytes | None = ..., mutable: Literal[False] = ..., encoding: str | None = ..., ) -> _ImmutableQueryDict: ... @classmethod def fromkeys( # type: ignore[override] cls, iterable: Iterable[bytes | str], value: str | bytes = ..., mutable: bool = ..., encoding: str | None = ..., ) -> Self: ... @property def encoding(self) -> str: ... @encoding.setter def encoding(self, value: str) -> None: ... def __setitem__(self, key: str | bytes, value: str | bytes) -> None: ... def __delitem__(self, key: str | bytes) -> None: ... def setlist(self, key: str | bytes, list_: Iterable[str | bytes]) -> None: ... def setlistdefault(self, key: str | bytes, default_list: list[str] | None = ...) -> list[str]: ... def appendlist(self, key: str | bytes, value: str | bytes) -> None: ... # Fake signature (because *args is used in source, but it fails with more that 1 argument) @overload # type:ignore[override] def pop(self, key: str | bytes, /) -> list[str]: ... @overload def pop(self, key: str | bytes, default: str | _Z = ..., /) -> list[str] | _Z: ... def popitem(self) -> tuple[str, list[str]]: ... # type:ignore[override] def clear(self) -> None: ... def setdefault(self, key: str | bytes, default: str | bytes | None = ...) -> str: ... def copy(self) -> QueryDict: ... def urlencode(self, safe: str | None = ...) -> str: ... @type_check_only class _ImmutableQueryDict(QueryDict): _mutable: Literal[False] def __setitem__(self, key: str | bytes, value: str | bytes) -> NoReturn: ... def __delitem__(self, key: str | bytes) -> NoReturn: ... def setlist(self, key: str | bytes, list_: Iterable[str | bytes]) -> NoReturn: ... def setlistdefault(self, key: str | bytes, default_list: list[str] | None = ...) -> NoReturn: ... def appendlist(self, key: str | bytes, value: str | bytes) -> NoReturn: ... # Fake signature (because *args is used in source, but it fails with more that 1 argument) @overload def pop(self, key: str | bytes, /) -> NoReturn: ... @overload def pop(self, key: str | bytes, default: str | _Z = ..., /) -> NoReturn: ... def popitem(self) -> NoReturn: ... def clear(self) -> NoReturn: ... def setdefault(self, key: str | bytes, default: str | bytes | None = ...) -> NoReturn: ... def copy(self) -> QueryDict: ... # type: ignore[override] def urlencode(self, safe: str | None = ...) -> str: ... # Fakes for convenience (for `request.GET` and `request.POST`). If dict # was created by Django, there is no chance to hit `List[object]` (empty list) # edge case. def __getitem__(self, key: str) -> str: ... def dict(self) -> dict[str, str]: ... # type: ignore[override] class MediaType: main_type: str sub_type: str params: dict[str, bytes] def __init__(self, media_type_raw_line: str) -> None: ... def match(self, other: str) -> bool: ... @cached_property def quality(self) -> float: ... @property def specificity(self) -> int: ... @cached_property def range_params(self) -> dict[str, bytes]: ... @overload def bytes_to_text(s: None, encoding: str) -> None: ... @overload def bytes_to_text(s: bytes | str, encoding: str) -> str: ... def split_domain_port(host: str) -> tuple[str, str]: ... def validate_host(host: str, allowed_hosts: Iterable[str]) -> bool: ... django-stubs-5.2.9/django-stubs/http/response.pyi000066400000000000000000000140601513401051600220640ustar00rootroot00000000000000import datetime from collections.abc import AsyncIterable, AsyncIterator, Iterable, Iterator from http.cookies import SimpleCookie from io import BytesIO from json import JSONEncoder from typing import Any, Literal, NoReturn, TypeVar, overload, type_check_only from django.utils.datastructures import CaseInsensitiveMapping, _PropertyDescriptor from django.utils.functional import _StrOrPromise, cached_property class BadHeaderError(ValueError): ... _Z = TypeVar("_Z") class ResponseHeaders(CaseInsensitiveMapping[str]): def __init__(self, data: dict[str, str]) -> None: ... def _convert_to_charset(self, value: bytes | str | int, charset: str, mime_encode: bool = ...) -> str: ... def __delitem__(self, key: str) -> None: ... def __setitem__(self, key: str, value: str | bytes | int) -> None: ... def pop(self, key: str, default: _Z = ...) -> _Z | tuple[str, str]: ... def setdefault(self, key: str, value: str | bytes | int) -> None: ... class HttpResponseBase: status_code: int streaming: bool cookies: SimpleCookie closed: bool headers: ResponseHeaders def __init__( self, content_type: str | None = ..., status: int | None = ..., reason: str | None = ..., charset: str | None = ..., headers: dict[str, str] | None = ..., ) -> None: ... @property def reason_phrase(self) -> str: ... @reason_phrase.setter def reason_phrase(self, value: str) -> None: ... @property def charset(self) -> str: ... @charset.setter def charset(self, value: str) -> None: ... def serialize_headers(self) -> bytes: ... __bytes__ = serialize_headers def __setitem__(self, header: str, value: str | bytes | int) -> None: ... def __delitem__(self, header: str) -> None: ... def __getitem__(self, header: str) -> str: ... def has_header(self, header: str) -> bool: ... def __contains__(self, header: str) -> bool: ... def items(self) -> Iterable[tuple[str, str]]: ... @overload def get(self, header: str, alternate: str) -> str: ... @overload def get(self, header: str, alternate: None = None) -> str | None: ... def set_cookie( self, key: str, value: str = ..., max_age: int | datetime.timedelta | None = ..., expires: str | datetime.datetime | None = ..., path: str = ..., domain: str | None = ..., secure: bool = ..., httponly: bool = ..., samesite: Literal["Lax", "Strict", "None", False] | None = ..., ) -> None: ... def setdefault(self, key: str, value: str) -> None: ... def set_signed_cookie(self, key: str, value: str, salt: str = ..., **kwargs: Any) -> None: ... def delete_cookie( self, key: str, path: str = ..., domain: str | None = ..., samesite: Literal["Lax", "Strict", "None", False] | None = ..., ) -> None: ... def make_bytes(self, value: object) -> bytes: ... def close(self) -> None: ... def write(self, content: str | bytes) -> None: ... def flush(self) -> None: ... def tell(self) -> int: ... def readable(self) -> bool: ... def seekable(self) -> bool: ... def writable(self) -> bool: ... def writelines(self, lines: Iterable[object]) -> None: ... # Fake methods that are implemented by all subclasses @type_check_only def __iter__(self) -> Iterator[bytes]: ... @type_check_only def getvalue(self) -> bytes: ... class HttpResponse(HttpResponseBase, Iterable[bytes]): content = _PropertyDescriptor[object, bytes]() csrf_cookie_set: bool sameorigin: bool test_server_port: str test_was_secure_request: bool xframe_options_exempt: bool def __init__(self, content: object = ..., *args: Any, **kwargs: Any) -> None: ... def serialize(self) -> bytes: ... __bytes__ = serialize def __iter__(self) -> Iterator[bytes]: ... def getvalue(self) -> bytes: ... @cached_property def text(self) -> str: ... class StreamingHttpResponse(HttpResponseBase, Iterable[bytes], AsyncIterable[bytes]): is_async: bool streaming_content = _PropertyDescriptor[ Iterable[object] | AsyncIterable[object], Iterator[bytes] | AsyncIterator[bytes] ]() def __init__( self, streaming_content: Iterable[object] | AsyncIterable[object] = ..., *args: Any, **kwargs: Any ) -> None: ... def __iter__(self) -> Iterator[bytes]: ... def __aiter__(self) -> AsyncIterator[bytes]: ... def getvalue(self) -> bytes: ... @property def content(self) -> NoReturn: ... @property def text(self) -> NoReturn: ... class FileResponse(StreamingHttpResponse): file_to_stream: BytesIO | None block_size: int as_attachment: bool filename: str def __init__(self, *args: Any, as_attachment: bool = ..., filename: str = ..., **kwargs: Any) -> None: ... def set_headers(self, filelike: BytesIO) -> None: ... class HttpResponseRedirectBase(HttpResponse): allowed_schemes: list[str] def __init__( self, redirect_to: _StrOrPromise, preserve_request: bool = False, *args: Any, **kwargs: Any ) -> None: ... @property def url(self) -> str: ... class HttpResponseRedirect(HttpResponseRedirectBase): status_code_preserve_request: int class HttpResponsePermanentRedirect(HttpResponseRedirectBase): status_code_preserve_request: int class HttpResponseNotModified(HttpResponse): def __init__(self, *args: Any, **kwargs: Any) -> None: ... class HttpResponseBadRequest(HttpResponse): ... class HttpResponseNotFound(HttpResponse): ... class HttpResponseForbidden(HttpResponse): ... class HttpResponseNotAllowed(HttpResponse): def __init__(self, permitted_methods: Iterable[str], *args: Any, **kwargs: Any) -> None: ... class HttpResponseGone(HttpResponse): ... class HttpResponseServerError(HttpResponse): ... class Http404(Exception): ... class JsonResponse(HttpResponse): def __init__( self, data: Any, encoder: type[JSONEncoder] = ..., safe: bool = ..., json_dumps_params: dict[str, Any] | None = ..., **kwargs: Any, ) -> None: ... django-stubs-5.2.9/django-stubs/middleware/000077500000000000000000000000001513401051600206405ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/middleware/__init__.pyi000066400000000000000000000000001513401051600231100ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/middleware/cache.pyi000066400000000000000000000021761513401051600224340ustar00rootroot00000000000000from typing import Any from django.core.cache import BaseCache from django.http.request import HttpRequest from django.http.response import HttpResponse, HttpResponseBase from django.utils.deprecation import MiddlewareMixin, _AsyncGetResponseCallable, _GetResponseCallable class UpdateCacheMiddleware(MiddlewareMixin): cache_timeout: float key_prefix: str cache_alias: str @property def cache(self) -> BaseCache: ... def process_response(self, request: HttpRequest, response: HttpResponseBase | str) -> HttpResponseBase | str: ... class FetchFromCacheMiddleware(MiddlewareMixin): key_prefix: str cache_alias: str @property def cache(self) -> BaseCache: ... def process_request(self, request: HttpRequest) -> HttpResponse | None: ... class CacheMiddleware(UpdateCacheMiddleware, FetchFromCacheMiddleware): key_prefix: str cache_alias: str cache_timeout: float def __init__( self, get_response: _GetResponseCallable | _AsyncGetResponseCallable, cache_timeout: float | None = ..., page_timeout: float | None = ..., **kwargs: Any, ) -> None: ... django-stubs-5.2.9/django-stubs/middleware/clickjacking.pyi000066400000000000000000000006031513401051600237760ustar00rootroot00000000000000from django.http.request import HttpRequest from django.http.response import HttpResponse from django.utils.deprecation import MiddlewareMixin class XFrameOptionsMiddleware(MiddlewareMixin): def process_response(self, request: HttpRequest, response: HttpResponse) -> HttpResponse: ... def get_xframe_options_value(self, request: HttpRequest, response: HttpResponse) -> str: ... django-stubs-5.2.9/django-stubs/middleware/common.pyi000066400000000000000000000020141513401051600226500ustar00rootroot00000000000000from typing import ClassVar from django.http.request import HttpRequest from django.http.response import HttpResponseBase, HttpResponsePermanentRedirect, HttpResponseRedirectBase from django.utils.deprecation import MiddlewareMixin class CommonMiddleware(MiddlewareMixin): response_redirect_class: ClassVar[type[HttpResponseRedirectBase]] def process_request(self, request: HttpRequest) -> HttpResponsePermanentRedirect | None: ... def should_redirect_with_slash(self, request: HttpRequest) -> bool: ... def get_full_path_with_slash(self, request: HttpRequest) -> str: ... def process_response(self, request: HttpRequest, response: HttpResponseBase) -> HttpResponseBase: ... class BrokenLinkEmailsMiddleware(MiddlewareMixin): def process_response(self, request: HttpRequest, response: HttpResponseBase) -> HttpResponseBase: ... def is_internal_request(self, domain: str, referer: str) -> bool: ... def is_ignorable_request(self, request: HttpRequest, uri: str, domain: str, referer: str) -> bool: ... django-stubs-5.2.9/django-stubs/middleware/csrf.pyi000066400000000000000000000034751513401051600223310ustar00rootroot00000000000000from collections import defaultdict from collections.abc import Callable from logging import Logger from re import Pattern from typing import Any from django.http.request import HttpRequest from django.http.response import HttpResponseBase, HttpResponseForbidden from django.utils.deprecation import MiddlewareMixin from django.utils.functional import cached_property logger: Logger invalid_token_chars_re: Pattern[str] REASON_BAD_ORIGIN: str REASON_NO_REFERER: str REASON_BAD_REFERER: str REASON_NO_CSRF_COOKIE: str REASON_CSRF_TOKEN_MISSING: str REASON_MALFORMED_REFERER: str REASON_INSECURE_REFERER: str REASON_INCORRECT_LENGTH: str REASON_INVALID_CHARACTERS: str CSRF_SECRET_LENGTH: int CSRF_TOKEN_LENGTH: Any CSRF_ALLOWED_CHARS: Any CSRF_SESSION_KEY: str def get_token(request: HttpRequest) -> str: ... def rotate_token(request: HttpRequest) -> None: ... class InvalidTokenFormat(Exception): reason: str def __init__(self, reason: str) -> None: ... class RejectRequest(Exception): reason: str def __init__(self, reason: str) -> None: ... class CsrfViewMiddleware(MiddlewareMixin): @cached_property def csrf_trusted_origins_hosts(self) -> list[str]: ... @cached_property def allowed_origins_exact(self) -> set[str]: ... @cached_property def allowed_origin_subdomains(self) -> defaultdict[str, list[str]]: ... def process_request(self, request: HttpRequest) -> None: ... def process_view( self, request: HttpRequest, callback: Callable[..., HttpResponseBase], callback_args: tuple[Any, ...], callback_kwargs: dict[str, Any], ) -> HttpResponseForbidden | None: ... def process_response(self, request: HttpRequest, response: HttpResponseBase) -> HttpResponseBase: ... def _get_new_csrf_string() -> str: ... def _get_new_csrf_token() -> str: ... django-stubs-5.2.9/django-stubs/middleware/gzip.pyi000066400000000000000000000006011513401051600223310ustar00rootroot00000000000000from typing import Any, ClassVar from django.http.request import HttpRequest from django.http.response import HttpResponseBase from django.utils.deprecation import MiddlewareMixin re_accepts_gzip: Any class GZipMiddleware(MiddlewareMixin): max_random_bytes: ClassVar[int] def process_response(self, request: HttpRequest, response: HttpResponseBase) -> HttpResponseBase: ... django-stubs-5.2.9/django-stubs/middleware/http.pyi000066400000000000000000000005611513401051600223440ustar00rootroot00000000000000from django.http.request import HttpRequest from django.http.response import HttpResponseBase from django.utils.deprecation import MiddlewareMixin class ConditionalGetMiddleware(MiddlewareMixin): def process_response(self, request: HttpRequest, response: HttpResponseBase) -> HttpResponseBase: ... def needs_etag(self, response: HttpResponseBase) -> bool: ... django-stubs-5.2.9/django-stubs/middleware/locale.pyi000066400000000000000000000007451513401051600226300ustar00rootroot00000000000000from typing import ClassVar from django.http.request import HttpRequest from django.http.response import HttpResponseBase, HttpResponseRedirectBase from django.utils.deprecation import MiddlewareMixin class LocaleMiddleware(MiddlewareMixin): response_redirect_class: ClassVar[type[HttpResponseRedirectBase]] def process_request(self, request: HttpRequest) -> None: ... def process_response(self, request: HttpRequest, response: HttpResponseBase) -> HttpResponseBase: ... django-stubs-5.2.9/django-stubs/middleware/security.pyi000066400000000000000000000012051513401051600232300ustar00rootroot00000000000000from typing import Any from django.http.request import HttpRequest from django.http.response import HttpResponse, HttpResponsePermanentRedirect from django.utils.deprecation import MiddlewareMixin class SecurityMiddleware(MiddlewareMixin): sts_seconds: int sts_include_subdomains: bool sts_preload: bool content_type_nosniff: bool xss_filter: bool redirect: bool redirect_host: str | None redirect_exempt: list[Any] def process_request(self, request: HttpRequest) -> HttpResponsePermanentRedirect | None: ... def process_response(self, request: HttpRequest, response: HttpResponse) -> HttpResponse: ... django-stubs-5.2.9/django-stubs/py.typed000066400000000000000000000000001513401051600202100ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/shortcuts.pyi000066400000000000000000000036571513401051600213170ustar00rootroot00000000000000from collections.abc import Callable, Mapping, Sequence from typing import Any, Literal, Protocol, TypeVar, overload, type_check_only from django.db.models import Manager, QuerySet from django.db.models.base import Model from django.http import HttpRequest from django.http.response import HttpResponse, HttpResponsePermanentRedirect, HttpResponseRedirect from django.utils.functional import _StrOrPromise def render( request: HttpRequest | None, template_name: str | Sequence[str], context: Mapping[str, Any] | None = ..., content_type: str | None = ..., status: int | None = ..., using: str | None = ..., ) -> HttpResponse: ... @type_check_only class SupportsGetAbsoluteUrl(Protocol): def get_absolute_url(self) -> str: ... @overload def redirect( to: Callable[..., Any] | str | SupportsGetAbsoluteUrl, *args: Any, permanent: Literal[True], preserve_request: bool = False, **kwargs: Any, ) -> HttpResponsePermanentRedirect: ... @overload def redirect( to: Callable[..., Any] | str | SupportsGetAbsoluteUrl, *args: Any, permanent: Literal[False] = False, preserve_request: bool = False, **kwargs: Any, ) -> HttpResponseRedirect: ... @overload def redirect( to: Callable[..., Any] | str | SupportsGetAbsoluteUrl, *args: Any, permanent: bool, **kwargs: Any ) -> HttpResponseRedirect | HttpResponsePermanentRedirect: ... _T = TypeVar("_T", bound=Model) def get_object_or_404(klass: type[_T] | Manager[_T] | QuerySet[_T], *args: Any, **kwargs: Any) -> _T: ... async def aget_object_or_404(klass: type[_T] | Manager[_T] | QuerySet[_T], *args: Any, **kwargs: Any) -> _T: ... def get_list_or_404(klass: type[_T] | Manager[_T] | QuerySet[_T], *args: Any, **kwargs: Any) -> list[_T]: ... async def aget_list_or_404(klass: type[_T] | Manager[_T] | QuerySet[_T], *args: Any, **kwargs: Any) -> list[_T]: ... def resolve_url(to: Callable | Model | _StrOrPromise, *args: Any, **kwargs: Any) -> str: ... django-stubs-5.2.9/django-stubs/template/000077500000000000000000000000001513401051600203365ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/template/__init__.pyi000066400000000000000000000014761513401051600226300ustar00rootroot00000000000000from . import defaultfilters as defaultfilters # Template parts from .base import Node as Node from .base import NodeList as NodeList from .base import Origin as Origin from .base import Template as Template from .base import Variable as Variable from .base import VariableDoesNotExist as VariableDoesNotExist from .context import Context as Context from .context import ContextPopException as ContextPopException from .context import RequestContext as RequestContext from .engine import Engine as Engine from .exceptions import TemplateDoesNotExist as TemplateDoesNotExist from .exceptions import TemplateSyntaxError as TemplateSyntaxError from .library import Library as Library from .utils import EngineHandler as EngineHandler engines: EngineHandler __all__ = ("Context", "Engine", "RequestContext", "Template", "engines") django-stubs-5.2.9/django-stubs/template/autoreload.pyi000066400000000000000000000004561513401051600232250ustar00rootroot00000000000000from pathlib import Path from typing import Any def get_template_directories() -> set[Path]: ... def reset_loaders() -> None: ... def watch_for_template_changes(sender: object, **kwargs: Any) -> None: ... def template_changed(sender: object | None, file_path: Path, **kwargs: Any) -> bool | None: ... django-stubs-5.2.9/django-stubs/template/backends/000077500000000000000000000000001513401051600221105ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/template/backends/__init__.pyi000066400000000000000000000000001513401051600243600ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/template/backends/base.pyi000066400000000000000000000017211513401051600235460ustar00rootroot00000000000000from collections.abc import Iterator, Mapping from typing import Any, Protocol, type_check_only from django.core.checks.messages import CheckMessage from django.http.request import HttpRequest from django.utils.functional import cached_property class BaseEngine: name: str dirs: list[str] app_dirs: bool def __init__(self, params: Mapping[str, Any]) -> None: ... def check(self, **kwargs: Any) -> list[CheckMessage]: ... @property def app_dirname(self) -> str: ... def from_string(self, template_code: str) -> _EngineTemplate: ... def get_template(self, template_name: str) -> _EngineTemplate: ... @cached_property def template_dirs(self) -> tuple[str, ...]: ... def iter_template_filenames(self, template_name: str) -> Iterator[str]: ... @type_check_only class _EngineTemplate(Protocol): def render( self, context: dict[str, Any] | None = ..., request: HttpRequest | None = ..., ) -> str: ... django-stubs-5.2.9/django-stubs/template/backends/django.pyi000066400000000000000000000022531513401051600240770ustar00rootroot00000000000000from collections.abc import Iterator from typing import Any, NoReturn from django.template.base import Origin from django.template.base import Template as _BaseTemplate from django.template.engine import Engine from django.template.exceptions import TemplateDoesNotExist from .base import BaseEngine, _EngineTemplate class DjangoTemplates(BaseEngine): engine: Engine def from_string(self, template_code: str) -> Template: ... def get_template(self, template_name: str) -> Template: ... def get_templatetag_libraries(self, custom_libraries: dict[str, str]) -> dict[str, str]: ... def copy_exception(exc: TemplateDoesNotExist, backend: DjangoTemplates | None = None) -> TemplateDoesNotExist: ... def reraise(exc: TemplateDoesNotExist, backend: DjangoTemplates) -> NoReturn: ... def get_template_tag_modules() -> Iterator[tuple[str, str]]: ... def get_installed_libraries() -> dict[str, str]: ... def get_package_libraries(pkg: Any) -> Iterator[str]: ... class Template(_EngineTemplate): template: _BaseTemplate backend: DjangoTemplates def __init__(self, template: _BaseTemplate, backend: BaseEngine) -> None: ... @property def origin(self) -> Origin: ... django-stubs-5.2.9/django-stubs/template/backends/dummy.pyi000066400000000000000000000010211513401051600237600ustar00rootroot00000000000000import string from typing import Any from django.http.request import HttpRequest from .base import BaseEngine class TemplateStrings(BaseEngine): def __init__(self, params: dict[str, dict[Any, Any] | list[Any] | bool | str]) -> None: ... def from_string(self, template_code: str) -> Template: ... def get_template(self, template_name: str) -> Template: ... class Template(string.Template): template: str def render(self, context: dict[str, Any] | None = ..., request: HttpRequest | None = ...) -> str: ... django-stubs-5.2.9/django-stubs/template/backends/jinja2.pyi000066400000000000000000000021141513401051600240060ustar00rootroot00000000000000from collections.abc import Callable from typing import Any from _typeshed import Incomplete from django.http.request import HttpRequest from django.template.exceptions import TemplateSyntaxError from django.utils.functional import cached_property from .base import BaseEngine class Jinja2(BaseEngine): env: Any context_processors: list[str] def __init__(self, params: dict[str, Any]) -> None: ... def from_string(self, template_code: str) -> Template: ... def get_template(self, template_name: str) -> Template: ... @cached_property def template_context_processors(self) -> list[Callable]: ... class Origin: name: str template_name: str | None def __init__(self, name: str, template_name: str | None) -> None: ... class Template: template: Incomplete backend: Jinja2 origin: Origin def __init__(self, template: Incomplete, backend: Jinja2) -> None: ... def render(self, context: dict[str, Any] | None = ..., request: HttpRequest | None = ...) -> str: ... def get_exception_info(exception: TemplateSyntaxError) -> dict[str, Any]: ... django-stubs-5.2.9/django-stubs/template/backends/utils.pyi000066400000000000000000000003271513401051600237750ustar00rootroot00000000000000from typing import Any from django.http.request import HttpRequest from django.utils.safestring import SafeString def csrf_input(request: HttpRequest) -> SafeString: ... csrf_input_lazy: Any csrf_token_lazy: Any django-stubs-5.2.9/django-stubs/template/base.pyi000066400000000000000000000126331513401051600220000ustar00rootroot00000000000000from collections.abc import Callable, Iterable, Iterator, Mapping, Sequence from enum import Enum from logging import Logger from re import Pattern from typing import Any, cast from django.template.context import Context from django.template.engine import Engine from django.template.library import Library from django.template.loaders.base import Loader from django.utils.safestring import SafeString FILTER_SEPARATOR: str FILTER_ARGUMENT_SEPARATOR: str VARIABLE_ATTRIBUTE_SEPARATOR: str BLOCK_TAG_START: str BLOCK_TAG_END: str VARIABLE_TAG_START: str VARIABLE_TAG_END: str COMMENT_TAG_START: str COMMENT_TAG_END: str SINGLE_BRACE_START: str SINGLE_BRACE_END: str UNKNOWN_SOURCE: str tag_re: Pattern[str] logger: Logger class TokenType(Enum): TEXT = cast(int, ...) VAR = cast(int, ...) BLOCK = cast(int, ...) COMMENT = cast(int, ...) class VariableDoesNotExist(Exception): msg: str params: tuple[dict[str, str] | str] def __init__(self, msg: str, params: tuple[dict[str, str] | str] = ...) -> None: ... class Origin: name: str template_name: bytes | str | None loader: Loader | None def __init__(self, name: str, template_name: bytes | str | None = None, loader: Loader | None = None) -> None: ... @property def loader_name(self) -> str | None: ... class Template: name: str | None origin: Origin engine: Engine source: str nodelist: NodeList def __init__( self, template_string: Template | str, origin: Origin | None = None, name: str | None = None, engine: Engine | None = None, ) -> None: ... def render(self, context: Context) -> SafeString: ... def compile_nodelist(self) -> NodeList: ... def get_exception_info(self, exception: Exception, token: Token) -> dict[str, Any]: ... def linebreak_iter(template_source: str) -> Iterator[int]: ... class Token: contents: str token_type: TokenType lineno: int | None position: tuple[int, int] | None def __init__( self, token_type: TokenType, contents: str, position: tuple[int, int] | None = None, lineno: int | None = None, ) -> None: ... def split_contents(self) -> list[str]: ... class Lexer: template_string: str verbatim: bool | str def __init__(self, template_string: str) -> None: ... def tokenize(self) -> list[Token]: ... def create_token(self, token_string: str, position: tuple[int, int] | None, lineno: int, in_tag: bool) -> Token: ... class DebugLexer(Lexer): template_string: str verbatim: bool | str def tokenize(self) -> list[Token]: ... class Parser: tokens: list[Token] | str tags: dict[str, Callable] filters: dict[str, Callable] command_stack: list[tuple[str, Token]] libraries: dict[str, Library] origin: Origin | None def __init__( self, tokens: list[Token] | str, libraries: dict[str, Library] | None = None, builtins: list[Library] | None = None, origin: Origin | None = None, ) -> None: ... def parse(self, parse_until: Iterable[str] | None = None) -> NodeList: ... def skip_past(self, endtag: str) -> None: ... def extend_nodelist(self, nodelist: NodeList, node: Node, token: Token) -> None: ... def error(self, token: Token, e: Exception | str) -> Exception: ... def invalid_block_tag(self, token: Token, command: str, parse_until: Iterable[str] | None = None) -> Any: ... def unclosed_block_tag(self, parse_until: Iterable[str]) -> Any: ... def next_token(self) -> Token: ... def prepend_token(self, token: Token) -> None: ... def delete_first_token(self) -> None: ... def add_library(self, lib: Library) -> None: ... def compile_filter(self, token: str) -> FilterExpression: ... def find_filter(self, filter_name: str) -> Callable: ... constant_string: str filter_raw_string: str filter_re: Pattern[str] class FilterExpression: token: str filters: list[Any] var: Any def __init__(self, token: str, parser: Parser) -> None: ... def resolve(self, context: Context, ignore_failures: bool = False) -> Any: ... @staticmethod def args_check(name: str, func: Callable, provided: list[tuple[bool, Any]]) -> bool: ... class Variable: var: dict[Any, Any] | str literal: SafeString | float | None lookups: tuple[str, ...] | None translate: bool message_context: str | None def __init__(self, var: dict[Any, Any] | str) -> None: ... def resolve(self, context: Mapping[str, Mapping[str, Any]] | Context | int | str) -> Any: ... class Node: must_be_first: bool child_nodelists: Any origin: Origin token: Token | None def render(self, context: Context) -> str: ... def render_annotated(self, context: Context) -> int | str: ... def get_nodes_by_type(self, nodetype: type[Node]) -> list[Node]: ... class NodeList(list[Node]): contains_nontext: bool def render(self, context: Context) -> SafeString: ... def get_nodes_by_type(self, nodetype: type[Node]) -> list[Node]: ... class TextNode(Node): s: str def __init__(self, s: str) -> None: ... def render_value_in_context(value: Any, context: Context) -> str: ... class VariableNode(Node): filter_expression: FilterExpression def __init__(self, filter_expression: FilterExpression) -> None: ... kwarg_re: Pattern[str] def token_kwargs(bits: Sequence[str], parser: Parser, support_legacy: bool = False) -> dict[str, FilterExpression]: ... django-stubs-5.2.9/django-stubs/template/context.pyi000066400000000000000000000065571513401051600225620ustar00rootroot00000000000000from collections.abc import Callable, Iterable, Iterator from contextlib import AbstractContextManager from types import TracebackType from typing import Any, TypeAlias from django.http.request import HttpRequest from django.template.base import Node, Origin, Template from django.template.loader_tags import IncludeNode from typing_extensions import Self _ContextKeys: TypeAlias = int | str | Node _ContextValues: TypeAlias = dict[str, Any] | Context class ContextPopException(Exception): ... class ContextDict(dict): context: BaseContext def __init__(self, context: BaseContext, *args: Any, **kwargs: Any) -> None: ... def __enter__(self) -> Self: ... def __exit__( self, exc_type: type[BaseException] | None, exc_value: BaseException | None, exc_tb: TracebackType | None, ) -> None: ... class BaseContext(Iterable[Any]): def __init__(self, dict_: Any | None = None) -> None: ... def __copy__(self) -> Self: ... def __iter__(self) -> Iterator[Any]: ... def push(self, *args: Any, **kwargs: Any) -> ContextDict: ... def pop(self) -> ContextDict: ... def __setitem__(self, key: _ContextKeys, value: Any) -> None: ... def set_upward(self, key: _ContextKeys, value: int | str) -> None: ... def __getitem__(self, key: _ContextKeys) -> Any: ... def __delitem__(self, key: _ContextKeys) -> None: ... def __contains__(self, key: _ContextKeys) -> bool: ... def get(self, key: _ContextKeys, otherwise: Any | None = None) -> Any | None: ... def setdefault(self, key: _ContextKeys, default: list[Origin] | int | None = None) -> list[Origin] | int | None: ... def new(self, values: _ContextValues | None = None) -> Context: ... def flatten(self) -> dict[_ContextKeys, dict[_ContextKeys, type[Any] | str] | int | str | None]: ... class Context(BaseContext): dicts: Any autoescape: bool use_l10n: bool | None use_tz: bool | None template_name: str | None render_context: RenderContext template: Template | None def __init__( self, dict_: Any | None = None, autoescape: bool = True, use_l10n: bool | None = None, use_tz: bool | None = None, ) -> None: ... def bind_template(self, template: Template) -> AbstractContextManager[None]: ... def update(self, other_dict: dict[str, Any] | Context) -> ContextDict: ... class RenderContext(BaseContext): dicts: list[dict[IncludeNode | str, str]] template: Template | None def push_state(self, template: Template, isolated_context: bool = True) -> AbstractContextManager[None]: ... class RequestContext(Context): autoescape: bool dicts: list[dict[str, str]] render_context: RenderContext template_name: str | None use_l10n: bool | None use_tz: bool | None request: HttpRequest def __init__( self, request: HttpRequest, dict_: dict[str, Any] | None = None, processors: list[Callable] | None = None, use_l10n: bool | None = None, use_tz: bool | None = None, autoescape: bool = True, ) -> None: ... template: Template | None def bind_template(self, template: Template) -> AbstractContextManager[None]: ... def new(self, values: _ContextValues | None = None) -> RequestContext: ... def make_context(context: dict[str, Any] | None, request: HttpRequest | None = None, **kwargs: Any) -> Context: ... django-stubs-5.2.9/django-stubs/template/context_processors.pyi000066400000000000000000000011671513401051600250340ustar00rootroot00000000000000from collections.abc import Callable from typing import TypeVar from django.http.request import HttpRequest from django.utils.functional import SimpleLazyObject _R = TypeVar("_R", bound=HttpRequest) def csrf(request: HttpRequest) -> dict[str, SimpleLazyObject]: ... def debug(request: HttpRequest) -> dict[str, Callable | bool]: ... def i18n(request: HttpRequest) -> dict[str, list[tuple[str, str]] | bool | str]: ... def tz(request: HttpRequest) -> dict[str, str]: ... def static(request: HttpRequest) -> dict[str, str]: ... def media(request: HttpRequest) -> dict[str, str]: ... def request(request: _R) -> dict[str, _R]: ... django-stubs-5.2.9/django-stubs/template/defaultfilters.pyi000066400000000000000000000066251513401051600241070ustar00rootroot00000000000000from collections.abc import Callable from datetime import date as _date from datetime import datetime from datetime import time as _time from typing import Any from django.utils.safestring import SafeString register: Any def stringfilter(func: Callable) -> Callable: ... def addslashes(value: str) -> str: ... def capfirst(value: str) -> str: ... def escapejs_filter(value: str) -> SafeString: ... def json_script(value: dict[str, str], element_id: SafeString) -> SafeString: ... def floatformat(text: Any | None, arg: int | str = -1) -> str: ... def iriencode(value: str) -> str: ... def linenumbers(value: str, autoescape: bool = True) -> SafeString: ... def lower(value: str) -> str: ... def make_list(value: str) -> list[str]: ... def slugify(value: str) -> SafeString: ... def stringformat(value: Any, arg: str) -> str: ... def title(value: str) -> str: ... def truncatechars(value: str, arg: SafeString | int) -> str: ... def truncatechars_html(value: str, arg: int | str) -> str: ... def truncatewords(value: str, arg: int | str) -> str: ... def truncatewords_html(value: str, arg: int | str) -> str: ... def upper(value: str) -> str: ... def urlencode(value: str, safe: SafeString | None = None) -> str: ... def urlize(value: str, autoescape: bool = True) -> SafeString: ... def urlizetrunc(value: str, limit: SafeString | int, autoescape: bool = True) -> SafeString: ... def wordcount(value: str) -> int: ... def wordwrap(value: str, arg: SafeString | int) -> str: ... def ljust(value: str, arg: SafeString | int) -> str: ... def rjust(value: str, arg: SafeString | int) -> str: ... def center(value: str, arg: SafeString | int) -> str: ... def cut(value: str, arg: str) -> str: ... def escape_filter(value: str) -> SafeString: ... def escapeseq(value: list[str]) -> list[SafeString]: ... def force_escape(value: str) -> SafeString: ... def linebreaks_filter(value: str, autoescape: bool = True) -> SafeString: ... def linebreaksbr(value: str, autoescape: bool = True) -> SafeString: ... def safe(value: str) -> SafeString: ... def safeseq(value: list[str]) -> list[SafeString]: ... def striptags(value: str) -> str: ... def dictsort(value: Any, arg: int | str) -> Any: ... def dictsortreversed(value: Any, arg: int | str) -> Any: ... def first(value: Any) -> Any: ... def join(value: Any, arg: str, autoescape: bool = True) -> Any: ... def last(value: list[str]) -> str: ... def length(value: Any) -> int: ... def random(value: list[str]) -> str: ... def slice_filter(value: Any, arg: str | int) -> Any: ... def unordered_list(value: Any, autoescape: bool = True) -> Any: ... def add(value: Any, arg: Any) -> Any: ... def get_digit(value: Any, arg: int) -> Any: ... def date(value: _date | datetime | str | None, arg: str | None = None) -> str: ... def time(value: datetime | _time | str | None, arg: str | None = None) -> str: ... def timesince_filter(value: _date | None, arg: _date | None = None) -> str: ... def timeuntil_filter(value: _date | None, arg: _date | None = None) -> str: ... def default(value: int | str | None, arg: int | str) -> int | str: ... def default_if_none(value: str | None, arg: int | str) -> int | str: ... def divisibleby(value: int, arg: int) -> bool: ... def yesno(value: int | None, arg: str | None = None) -> bool | str | None: ... def filesizeformat(bytes_: complex | int | str) -> str: ... def pluralize(value: Any, arg: str = "s") -> str: ... def phone2numeric_filter(value: str) -> str: ... def pprint(value: Any) -> str: ... django-stubs-5.2.9/django-stubs/template/defaulttags.pyi000066400000000000000000000143551513401051600233740ustar00rootroot00000000000000from collections.abc import Iterator, Sequence from datetime import date as real_date from typing import Any, NamedTuple from django.http.request import QueryDict from django.template.base import FilterExpression, Parser, Token from django.template.context import Context from django.utils.safestring import SafeString from .base import Node, NodeList from .library import Library from .smartif import IfParser, Literal register: Any class AutoEscapeControlNode(Node): nodelist: NodeList setting: bool def __init__(self, setting: bool, nodelist: NodeList) -> None: ... class CommentNode(Node): ... class CsrfTokenNode(Node): ... class CycleNode(Node): cyclevars: list[FilterExpression] variable_name: str | None silent: bool def __init__( self, cyclevars: list[FilterExpression], variable_name: str | None = None, silent: bool = False ) -> None: ... def reset(self, context: Context) -> None: ... class DebugNode(Node): ... class FilterNode(Node): filter_expr: FilterExpression nodelist: NodeList def __init__(self, filter_expr: FilterExpression, nodelist: NodeList) -> None: ... class FirstOfNode(Node): vars: list[FilterExpression] asvar: str | None def __init__(self, variables: list[FilterExpression], asvar: str | None = None) -> None: ... class ForNode(Node): loopvars: list[str] | str sequence: FilterExpression | str child_nodelists: Any is_reversed: bool nodelist_loop: list[str] | NodeList nodelist_empty: list[str] | NodeList def __init__( self, loopvars: list[str] | str, sequence: FilterExpression | str, is_reversed: bool, nodelist_loop: list[str] | NodeList, nodelist_empty: list[str] | NodeList | None = None, ) -> None: ... class IfChangedNode(Node): nodelist_false: NodeList nodelist_true: NodeList child_nodelists: Any def __init__(self, nodelist_true: NodeList, nodelist_false: NodeList, *varlist: Any) -> None: ... class IfNode(Node): conditions_nodelists: list[tuple[TemplateLiteral | None, NodeList]] def __init__(self, conditions_nodelists: list[tuple[TemplateLiteral | None, NodeList]]) -> None: ... def __iter__(self) -> Iterator[Node]: ... @property def nodelist(self) -> NodeList: ... class LoremNode(Node): common: bool count: FilterExpression method: str def __init__(self, count: FilterExpression, method: str, common: bool) -> None: ... class GroupedResult(NamedTuple): grouper: Any list: list[Any] class RegroupNode(Node): expression: FilterExpression target: FilterExpression var_name: str def __init__(self, target: FilterExpression, expression: FilterExpression, var_name: str) -> None: ... def resolve_expression(self, obj: dict[str, real_date], context: Context) -> int | str: ... class LoadNode(Node): ... class NowNode(Node): format_string: str asvar: str | None def __init__(self, format_string: str, asvar: str | None = None) -> None: ... class ResetCycleNode(Node): node: CycleNode def __init__(self, node: CycleNode) -> None: ... class SpacelessNode(Node): nodelist: NodeList def __init__(self, nodelist: NodeList) -> None: ... class TemplateTagNode(Node): mapping: Any tagtype: str def __init__(self, tagtype: str) -> None: ... class URLNode(Node): view_name: FilterExpression args: list[FilterExpression] kwargs: dict[str, FilterExpression] asvar: str | None def __init__( self, view_name: FilterExpression, args: list[FilterExpression], kwargs: dict[str, FilterExpression], asvar: str | None, ) -> None: ... class VerbatimNode(Node): content: SafeString def __init__(self, content: SafeString) -> None: ... class WidthRatioNode(Node): val_expr: FilterExpression max_expr: FilterExpression max_width: FilterExpression asvar: str | None def __init__( self, val_expr: FilterExpression, max_expr: FilterExpression, max_width: FilterExpression, asvar: str | None = None, ) -> None: ... class WithNode(Node): nodelist: NodeList extra_context: dict[str, Any] def __init__( self, var: str | None, name: str | None, nodelist: NodeList | Sequence[Node], extra_context: dict[str, Any] | None = None, ) -> None: ... def autoescape(parser: Parser, token: Token) -> AutoEscapeControlNode: ... def comment(parser: Parser, token: Token) -> CommentNode: ... def cycle(parser: Parser, token: Token) -> CycleNode: ... def csrf_token(parser: Parser, token: Token) -> CsrfTokenNode: ... def debug(parser: Parser, token: Token) -> DebugNode: ... def do_filter(parser: Parser, token: Token) -> FilterNode: ... def firstof(parser: Parser, token: Token) -> FirstOfNode: ... def do_for(parser: Parser, token: Token) -> ForNode: ... class TemplateLiteral(Literal): text: str def __init__(self, value: FilterExpression, text: str) -> None: ... def display(self) -> str: ... class TemplateIfParser(IfParser): current_token: TemplateLiteral pos: int tokens: list[TemplateLiteral] error_class: Any template_parser: Parser def __init__(self, parser: Parser, *args: Any, **kwargs: Any) -> None: ... def do_if(parser: Parser, token: Token) -> IfNode: ... def ifchanged(parser: Parser, token: Token) -> IfChangedNode: ... def find_library(parser: Parser, name: str) -> Library: ... def load_from_library(library: Library, label: str, names: list[str]) -> Library: ... def load(parser: Parser, token: Token) -> LoadNode: ... def lorem(parser: Parser, token: Token) -> LoremNode: ... def now(parser: Parser, token: Token) -> NowNode: ... def querystring(context: Context, query_dict: QueryDict | None = None, **kwargs: Any) -> str: ... def regroup(parser: Parser, token: Token) -> RegroupNode: ... def resetcycle(parser: Parser, token: Token) -> ResetCycleNode: ... def spaceless(parser: Parser, token: Token) -> SpacelessNode: ... def templatetag(parser: Parser, token: Token) -> TemplateTagNode: ... def url(parser: Parser, token: Token) -> URLNode: ... def verbatim(parser: Parser, token: Token) -> VerbatimNode: ... def widthratio(parser: Parser, token: Token) -> WidthRatioNode: ... def do_with(parser: Parser, token: Token) -> WithNode: ... django-stubs-5.2.9/django-stubs/template/engine.pyi000066400000000000000000000042551513401051600223340ustar00rootroot00000000000000from collections.abc import Callable, Sequence from typing import Any, TypeAlias from django.template.base import Origin from django.template.library import Library from django.template.loaders.base import Loader from django.utils.functional import cached_property from django.utils.safestring import SafeString from .base import Template _Loader: TypeAlias = Any class Engine: default_builtins: Any dirs: list[str] app_dirs: bool autoescape: bool context_processors: list[str] | tuple[str, ...] debug: bool loaders: Sequence[_Loader] string_if_invalid: str file_charset: str libraries: dict[str, str] template_libraries: dict[str, Library] builtins: list[str] template_builtins: list[Library] def __init__( self, dirs: list[str] | None = None, app_dirs: bool = False, context_processors: list[str] | tuple[str, ...] | None = None, debug: bool = False, loaders: Sequence[_Loader] | None = None, string_if_invalid: str = "", file_charset: str = "utf-8", libraries: dict[str, str] | None = None, builtins: list[str] | None = None, autoescape: bool = True, ) -> None: ... @staticmethod def get_default() -> Engine: ... @cached_property def template_context_processors(self) -> Sequence[Callable]: ... def get_template_builtins(self, builtins: list[str]) -> list[Library]: ... def get_template_libraries(self, libraries: dict[str, str]) -> dict[str, Library]: ... @cached_property def template_loaders(self) -> list[Loader]: ... def get_template_loaders(self, template_loaders: Sequence[_Loader]) -> list[Loader]: ... def find_template_loader(self, loader: _Loader) -> Loader: ... def find_template( self, name: str, dirs: None = None, skip: list[Origin] | None = None ) -> tuple[Template, Origin]: ... def from_string(self, template_code: str) -> Template: ... def get_template(self, template_name: str) -> Template: ... def render_to_string(self, template_name: str, context: dict[str, Any] | None = None) -> SafeString: ... def select_template(self, template_name_list: list[str]) -> Template: ... django-stubs-5.2.9/django-stubs/template/exceptions.pyi000066400000000000000000000010021513401051600232330ustar00rootroot00000000000000from django.template.backends.base import BaseEngine from django.template.base import Origin class TemplateDoesNotExist(Exception): backend: BaseEngine | None tried: list[tuple[Origin, str]] chain: list[TemplateDoesNotExist] def __init__( self, msg: Origin | str, tried: list[tuple[Origin, str]] | None = None, backend: BaseEngine | None = None, chain: list[TemplateDoesNotExist] | None = None, ) -> None: ... class TemplateSyntaxError(Exception): ... django-stubs-5.2.9/django-stubs/template/library.pyi000066400000000000000000000101051513401051600225220ustar00rootroot00000000000000from collections.abc import Callable, Collection, Iterable, Mapping, Sequence, Sized from typing import Any, TypeVar, overload from django.template.base import FilterExpression, Origin, Parser, Token from django.template.context import Context from django.utils.safestring import SafeString from .base import Node, NodeList, Template class InvalidTemplateLibrary(Exception): ... _C = TypeVar("_C", bound=Callable[..., Any]) class Library: filters: dict[str, Callable] tags: dict[str, Callable] def __init__(self) -> None: ... @overload def tag(self, name: _C) -> _C: ... @overload def tag(self, name: str, compile_function: _C) -> _C: ... @overload def tag(self, name: str | None = None, compile_function: None = None) -> Callable[[_C], _C]: ... def tag_function(self, func: _C) -> _C: ... @overload def filter(self, name: _C, filter_func: None = None, **flags: Any) -> _C: ... @overload def filter(self, name: str | None, filter_func: _C, **flags: Any) -> _C: ... @overload def filter(self, name: str | None = None, filter_func: None = None, **flags: Any) -> Callable[[_C], _C]: ... def filter_function(self, func: _C, **flags: Any) -> _C: ... @overload def simple_tag(self, func: _C, takes_context: bool | None = None, name: str | None = None) -> _C: ... @overload def simple_tag( self, func: None = None, takes_context: bool | None = None, name: str | None = None ) -> Callable[[_C], _C]: ... def inclusion_tag( self, filename: Template | str, func: Callable | None = None, takes_context: bool | None = None, name: str | None = None, ) -> Callable[[_C], _C]: ... @overload def simple_block_tag( self, func: _C, takes_context: bool | None = None, name: str | None = None, end_name: str | None = None, ) -> _C: ... @overload def simple_block_tag( self, func: None = None, takes_context: bool | None = None, name: str | None = None, end_name: str | None = None, ) -> Callable[[_C], _C]: ... class TagHelperNode(Node): func: Any takes_context: Any args: Any kwargs: Any def __init__( self, func: Callable, takes_context: bool | None, args: list[FilterExpression], kwargs: dict[str, FilterExpression], ) -> None: ... def get_resolved_arguments(self, context: Context) -> tuple[list[int], dict[str, SafeString | int]]: ... class SimpleNode(TagHelperNode): args: list[FilterExpression] func: Callable kwargs: dict[str, FilterExpression] origin: Origin takes_context: bool | None token: Token target_var: str | None def __init__( self, func: Callable, takes_context: bool | None, args: list[FilterExpression], kwargs: dict[str, FilterExpression], target_var: str | None, ) -> None: ... class SimpleBlockNode(SimpleNode): nodelist: NodeList def __init__( self, nodelist: NodeList, func: Callable, takes_context: bool | None, args: list[FilterExpression], kwargs: dict[str, FilterExpression], target_var: str | None, ) -> None: ... class InclusionNode(TagHelperNode): args: list[FilterExpression] func: Callable kwargs: dict[str, FilterExpression] origin: Origin takes_context: bool | None token: Token filename: Template | str def __init__( self, func: Callable, takes_context: bool | None, args: list[FilterExpression], kwargs: dict[str, FilterExpression], filename: Template | str | None, ) -> None: ... def parse_bits( parser: Parser, bits: Iterable[str], params: Sequence[str], varargs: str | None, varkw: str | None, defaults: Sized | None, kwonly: Collection[str], kwonly_defaults: Mapping[str, int] | None, takes_context: bool | None, name: str, ) -> tuple[list[FilterExpression], dict[str, FilterExpression]]: ... def import_library(name: str) -> Library: ... django-stubs-5.2.9/django-stubs/template/loader.pyi000066400000000000000000000012431513401051600223270ustar00rootroot00000000000000from collections.abc import Mapping, Sequence from typing import Any from django.http.request import HttpRequest from django.template.exceptions import TemplateDoesNotExist as TemplateDoesNotExist from django.utils.safestring import SafeString from .backends.base import _EngineTemplate def get_template(template_name: str, using: str | None = None) -> _EngineTemplate: ... def select_template(template_name_list: Sequence[str] | str, using: str | None = None) -> Any: ... def render_to_string( template_name: Sequence[str] | str, context: Mapping[str, Any] | None = None, request: HttpRequest | None = None, using: str | None = None, ) -> SafeString: ... django-stubs-5.2.9/django-stubs/template/loader_tags.pyi000066400000000000000000000044441513401051600233530ustar00rootroot00000000000000import collections from typing import Any from django.template.base import FilterExpression, NodeList, Origin, Parser, Token from django.template.context import Context from django.utils.safestring import SafeString from .base import Node, Template register: Any BLOCK_CONTEXT_KEY: str class BlockContext: blocks: collections.defaultdict[str, list[BlockNode]] def __init__(self) -> None: ... def add_blocks(self, blocks: dict[str, BlockNode]) -> None: ... def pop(self, name: str) -> BlockNode: ... def push(self, name: str, block: BlockNode) -> None: ... def get_block(self, name: str) -> BlockNode: ... class BlockNode(Node): context: Context name: str nodelist: NodeList origin: Origin parent: Node | None token: Token def __init__(self, name: str, nodelist: NodeList, parent: Node | None = None) -> None: ... def render(self, context: Context) -> SafeString: ... def super(self) -> SafeString: ... class ExtendsNode(Node): origin: Origin token: Token must_be_first: bool context_key: str nodelist: NodeList parent_name: FilterExpression | Node template_dirs: list[Any] | None blocks: dict[str, BlockNode] def __init__( self, nodelist: NodeList, parent_name: FilterExpression | Node, template_dirs: list[Any] | None = None ) -> None: ... def find_template(self, template_name: str, context: Context) -> Template: ... def get_parent(self, context: Context) -> Template: ... def render(self, context: Context) -> Any: ... class IncludeNode(Node): origin: Origin token: Token context_key: str template: FilterExpression extra_context: dict[str, FilterExpression] isolated_context: bool def __init__( self, template: FilterExpression, *args: Any, extra_context: Any | None = None, isolated_context: bool = False, **kwargs: Any, ) -> None: ... def render(self, context: Context) -> SafeString: ... def do_block(parser: Parser, token: Token) -> BlockNode: ... def construct_relative_path( current_template_name: str | None, relative_name: str, allow_recursion: bool = False, ) -> str: ... def do_extends(parser: Parser, token: Token) -> ExtendsNode: ... def do_include(parser: Parser, token: Token) -> IncludeNode: ... django-stubs-5.2.9/django-stubs/template/loaders/000077500000000000000000000000001513401051600217675ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/template/loaders/__init__.pyi000066400000000000000000000000001513401051600242370ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/template/loaders/app_directories.pyi000066400000000000000000000001301513401051600256600ustar00rootroot00000000000000from .filesystem import Loader as FilesystemLoader class Loader(FilesystemLoader): ... django-stubs-5.2.9/django-stubs/template/loaders/base.pyi000066400000000000000000000007511513401051600234270ustar00rootroot00000000000000from collections.abc import Iterable from typing import Any from django.template.base import Origin, Template from django.template.engine import Engine class Loader: engine: Engine get_template_cache: dict[str, Any] def __init__(self, engine: Engine) -> None: ... def get_template(self, template_name: str, skip: list[Origin] | None = None) -> Template: ... def get_template_sources(self, template_name: str) -> Iterable[Origin]: ... def reset(self) -> None: ... django-stubs-5.2.9/django-stubs/template/loaders/cached.pyi000066400000000000000000000010531513401051600237200ustar00rootroot00000000000000from collections.abc import Sequence from typing import Any from django.template.base import Origin from django.template.engine import Engine from .base import Loader as BaseLoader class Loader(BaseLoader): template_cache: dict[str, Any] loaders: list[BaseLoader] def __init__(self, engine: Engine, loaders: Sequence[Any]) -> None: ... def get_contents(self, origin: Origin) -> str: ... def cache_key(self, template_name: str, skip: list[Origin] | None = None) -> str: ... def generate_hash(self, values: list[str]) -> str: ... django-stubs-5.2.9/django-stubs/template/loaders/filesystem.pyi000066400000000000000000000010071513401051600246740ustar00rootroot00000000000000from collections.abc import Iterator from pathlib import Path from django.template.base import Origin from django.template.engine import Engine from .base import Loader as BaseLoader class Loader(BaseLoader): dirs: list[str | Path] | None def __init__(self, engine: Engine, dirs: list[str | Path] | None = None) -> None: ... def get_dirs(self) -> list[str | Path]: ... def get_contents(self, origin: Origin) -> str: ... def get_template_sources(self, template_name: str) -> Iterator[Origin]: ... django-stubs-5.2.9/django-stubs/template/loaders/locmem.pyi000066400000000000000000000005031513401051600237640ustar00rootroot00000000000000from django.template.base import Origin from django.template.engine import Engine from .base import Loader as BaseLoader class Loader(BaseLoader): templates_dict: dict[str, str] def __init__(self, engine: Engine, templates_dict: dict[str, str]) -> None: ... def get_contents(self, origin: Origin) -> str: ... django-stubs-5.2.9/django-stubs/template/response.pyi000066400000000000000000000045351513401051600227260ustar00rootroot00000000000000import functools from collections.abc import Callable, Iterator, Sequence from http.cookies import SimpleCookie from typing import Any, TypeAlias from django.core.handlers.wsgi import WSGIRequest from django.http import HttpResponse from django.http.request import HttpRequest from django.template.base import Template from django.template.context import RequestContext from django.test.client import Client from .backends.base import _EngineTemplate _TemplateForResponseT: TypeAlias = Sequence[str] | _EngineTemplate | str class ContentNotRenderedError(Exception): ... class SimpleTemplateResponse(HttpResponse): content: Any closed: bool cookies: SimpleCookie status_code: int rendering_attrs: Any template_name: _TemplateForResponseT context_data: dict[str, Any] | None using: str | None def __init__( self, template: _TemplateForResponseT, context: dict[str, Any] | None = ..., content_type: str | None = ..., status: int | None = ..., charset: str | None = ..., using: str | None = ..., headers: dict[str, Any] | None = ..., ) -> None: ... def resolve_template(self, template: _TemplateForResponseT) -> _EngineTemplate: ... def resolve_context(self, context: dict[str, Any] | None) -> dict[str, Any] | None: ... @property def rendered_content(self) -> str: ... def add_post_render_callback(self, callback: Callable) -> None: ... def render(self) -> SimpleTemplateResponse: ... @property def is_rendered(self) -> bool: ... def __iter__(self) -> Iterator[Any]: ... class TemplateResponse(SimpleTemplateResponse): client: Client closed: bool context: RequestContext context_data: dict[str, Any] | None cookies: SimpleCookie csrf_cookie_set: bool json: functools.partial _request: HttpRequest status_code: int template_name: _TemplateForResponseT templates: list[Template] using: str | None wsgi_request: WSGIRequest rendering_attrs: Any def __init__( self, request: HttpRequest, template: _TemplateForResponseT, context: dict[str, Any] | None = ..., content_type: str | None = ..., status: int | None = ..., charset: str | None = ..., using: str | None = ..., headers: dict[str, Any] | None = ..., ) -> None: ... django-stubs-5.2.9/django-stubs/template/smartif.pyi000066400000000000000000000022771513401051600225360ustar00rootroot00000000000000from typing import Any, TypeAlias from django.template.defaulttags import TemplateLiteral _Token: TypeAlias = list[int] | int | str class TokenBase: id: Any value: Any first: Any second: Any def nud(self, parser: Any) -> None: ... def led(self, left: Any, parser: Any) -> None: ... def display(self) -> Any: ... def infix(bp: Any, func: Any) -> type[TokenBase]: ... def prefix(bp: Any, func: Any) -> type[TokenBase]: ... OPERATORS: Any class Literal(TokenBase): id: str lbp: int value: _Token | None def __init__(self, value: _Token | None) -> None: ... def display(self) -> str: ... def eval(self, context: dict[Any, Any]) -> _Token | None: ... class EndToken(TokenBase): lbp: int def nud(self, parser: Any) -> None: ... class IfParser: error_class: Any tokens: Any pos: int current_token: Any def __init__(self, tokens: list[_Token | None]) -> None: ... def translate_token(self, token: _Token | None) -> Literal: ... def next_token(self) -> Literal: ... def parse(self) -> TemplateLiteral: ... def expression(self, rbp: int = 0) -> Literal: ... def create_var(self, value: _Token | None) -> Literal: ... django-stubs-5.2.9/django-stubs/template/utils.pyi000066400000000000000000000012641513401051600222240ustar00rootroot00000000000000from collections.abc import Iterator from pathlib import Path from typing import Any from django.core.exceptions import ImproperlyConfigured from django.template.backends.base import BaseEngine from django.utils.functional import cached_property class InvalidTemplateEngineError(ImproperlyConfigured): ... class EngineHandler: def __init__(self, templates: list[dict[str, Any]] | None = None) -> None: ... @cached_property def templates(self) -> dict[str, Any]: ... def __getitem__(self, alias: str) -> BaseEngine: ... def __iter__(self) -> Iterator[Any]: ... def all(self) -> list[BaseEngine]: ... def get_app_template_dirs(dirname: str) -> tuple[Path, ...]: ... django-stubs-5.2.9/django-stubs/templatetags/000077500000000000000000000000001513401051600212155ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/templatetags/__init__.pyi000066400000000000000000000000001513401051600234650ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/templatetags/cache.pyi000066400000000000000000000011651513401051600230060ustar00rootroot00000000000000from typing import Any from django.template import Node from django.template.base import FilterExpression, NodeList, Parser, Token register: Any class CacheNode(Node): nodelist: NodeList expire_time_var: FilterExpression fragment_name: str vary_on: list[FilterExpression] cache_name: FilterExpression | None def __init__( self, nodelist: NodeList, expire_time_var: FilterExpression, fragment_name: str, vary_on: list[FilterExpression], cache_name: FilterExpression | None, ) -> None: ... def do_cache(parser: Parser, token: Token) -> CacheNode: ... django-stubs-5.2.9/django-stubs/templatetags/i18n.pyi000066400000000000000000000067031513401051600225250ustar00rootroot00000000000000from typing import Any from django.template import Node from django.template.base import FilterExpression, NodeList, Parser, Token from django.template.context import Context register: Any class GetAvailableLanguagesNode(Node): variable: str def __init__(self, variable: str) -> None: ... def render(self, context: Context) -> str: ... class GetLanguageInfoNode(Node): lang_code: FilterExpression variable: str def __init__(self, lang_code: FilterExpression, variable: str) -> None: ... def render(self, context: Context) -> str: ... class GetLanguageInfoListNode(Node): languages: FilterExpression variable: str def __init__(self, languages: FilterExpression, variable: str) -> None: ... def get_language_info(self, language: Any) -> Any: ... def render(self, context: Context) -> str: ... class GetCurrentLanguageNode(Node): variable: str def __init__(self, variable: str) -> None: ... def render(self, context: Context) -> str: ... class GetCurrentLanguageBidiNode(Node): variable: str def __init__(self, variable: str) -> None: ... def render(self, context: Context) -> str: ... class TranslateNode(Node): noop: bool asvar: str | None message_context: FilterExpression | None filter_expression: FilterExpression def __init__( self, filter_expression: FilterExpression, noop: bool, asvar: str | None = None, message_context: FilterExpression | None = None, ) -> None: ... def render(self, context: Context) -> str: ... class BlockTranslateNode(Node): extra_context: dict[str, FilterExpression] singular: list[Token] plural: list[Token] countervar: str | None counter: FilterExpression | None message_context: FilterExpression | None trimmed: bool asvar: str | None def __init__( self, extra_context: dict[str, FilterExpression], singular: list[Token], plural: list[Token] | None = None, countervar: str | None = None, counter: FilterExpression | None = None, message_context: FilterExpression | None = None, trimmed: bool = False, asvar: str | None = None, tag_name: str = "blocktranslate", ) -> None: ... def render_token_list(self, tokens: list[Token]) -> tuple[str, list[str]]: ... def render(self, context: Context, nested: bool = False) -> str: ... class LanguageNode(Node): nodelist: NodeList language: FilterExpression def __init__(self, nodelist: NodeList, language: FilterExpression) -> None: ... def render(self, context: Context) -> str: ... def do_get_available_languages(parser: Parser, token: Token) -> GetAvailableLanguagesNode: ... def do_get_language_info(parser: Parser, token: Token) -> GetLanguageInfoNode: ... def do_get_language_info_list(parser: Parser, token: Token) -> GetLanguageInfoListNode: ... def language_name(lang_code: str) -> str: ... def language_name_translated(lang_code: str) -> str: ... def language_name_local(lang_code: str) -> str: ... def language_bidi(lang_code: str) -> bool: ... def do_get_current_language(parser: Parser, token: Token) -> GetCurrentLanguageNode: ... def do_get_current_language_bidi(parser: Parser, token: Token) -> GetCurrentLanguageBidiNode: ... def do_translate(parser: Parser, token: Token) -> TranslateNode: ... def do_block_translate(parser: Parser, token: Token) -> BlockTranslateNode: ... def language(parser: Parser, token: Token) -> LanguageNode: ... django-stubs-5.2.9/django-stubs/templatetags/l10n.pyi000066400000000000000000000006321513401051600225130ustar00rootroot00000000000000from typing import Any from django.template import Node from django.template.base import Parser, Token register: Any def localize(value: Any) -> str: ... def unlocalize(value: Any) -> str: ... class LocalizeNode(Node): nodelist: list[Node] use_l10n: bool def __init__(self, nodelist: list[Node], use_l10n: bool) -> None: ... def localize_tag(parser: Parser, token: Token) -> LocalizeNode: ... django-stubs-5.2.9/django-stubs/templatetags/static.pyi000066400000000000000000000021651513401051600232330ustar00rootroot00000000000000from typing import Any from django import template from django.template.base import FilterExpression, Parser, Token from django.template.context import Context register: Any class PrefixNode(template.Node): varname: str | None name: str def __init__(self, varname: str | None = None, name: str | None = None) -> None: ... @classmethod def handle_token(cls, parser: Parser, token: Token, name: str) -> PrefixNode: ... @classmethod def handle_simple(cls, name: str) -> str: ... def get_static_prefix(parser: Parser, token: Token) -> PrefixNode: ... def get_media_prefix(parser: Parser, token: Token) -> PrefixNode: ... class StaticNode(template.Node): path: FilterExpression varname: str | None def __init__(self, varname: str | None = None, path: FilterExpression | None = None) -> None: ... def url(self, context: Context) -> str: ... @classmethod def handle_simple(cls, path: str) -> str: ... @classmethod def handle_token(cls, parser: Parser, token: Token) -> StaticNode: ... def do_static(parser: Parser, token: Token) -> StaticNode: ... def static(path: str) -> str: ... django-stubs-5.2.9/django-stubs/templatetags/tz.pyi000066400000000000000000000020171513401051600223750ustar00rootroot00000000000000from datetime import datetime, tzinfo from typing import Any from django.template import Node from django.template.base import FilterExpression, NodeList, Parser, Token register: Any class datetimeobject(datetime): ... def localtime(value: datetime | str | None) -> Any: ... def utc(value: datetime | str | None) -> Any: ... def do_timezone(value: datetime | str | None, arg: tzinfo | str | None) -> Any: ... class LocalTimeNode(Node): nodelist: NodeList use_tz: bool def __init__(self, nodelist: NodeList, use_tz: bool) -> None: ... class TimezoneNode(Node): nodelist: NodeList tz: FilterExpression def __init__(self, nodelist: NodeList, tz: FilterExpression) -> None: ... class GetCurrentTimezoneNode(Node): variable: str def __init__(self, variable: str) -> None: ... def localtime_tag(parser: Parser, token: Token) -> LocalTimeNode: ... def timezone_tag(parser: Parser, token: Token) -> TimezoneNode: ... def get_current_timezone_tag(parser: Parser, token: Token) -> GetCurrentTimezoneNode: ... django-stubs-5.2.9/django-stubs/test/000077500000000000000000000000001513401051600175025ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/test/__init__.pyi000066400000000000000000000023661513401051600217730ustar00rootroot00000000000000from .client import AsyncClient as AsyncClient from .client import AsyncRequestFactory as AsyncRequestFactory from .client import Client as Client from .client import RequestFactory as RequestFactory from .testcases import LiveServerTestCase as LiveServerTestCase from .testcases import SimpleTestCase as SimpleTestCase from .testcases import TestCase as TestCase from .testcases import TransactionTestCase as TransactionTestCase from .testcases import skipIfDBFeature as skipIfDBFeature from .testcases import skipUnlessAnyDBFeature as skipUnlessAnyDBFeature from .testcases import skipUnlessDBFeature as skipUnlessDBFeature from .utils import ignore_warnings as ignore_warnings from .utils import modify_settings as modify_settings from .utils import override_settings as override_settings from .utils import override_system_checks as override_system_checks from .utils import tag as tag __all__ = [ "AsyncClient", "AsyncRequestFactory", "Client", "LiveServerTestCase", "RequestFactory", "SimpleTestCase", "TestCase", "TransactionTestCase", "ignore_warnings", "modify_settings", "override_settings", "override_system_checks", "skipIfDBFeature", "skipUnlessAnyDBFeature", "skipUnlessDBFeature", "tag", ] django-stubs-5.2.9/django-stubs/test/client.pyi000066400000000000000000000401021513401051600215000ustar00rootroot00000000000000from collections.abc import AsyncIterable, AsyncIterator, Awaitable, Callable, Iterable, Iterator, Mapping from http import HTTPStatus from http.cookies import SimpleCookie from io import BytesIO, IOBase from json import JSONEncoder from re import Pattern from types import TracebackType from typing import Any, Generic, Literal, NoReturn, TypeAlias, TypedDict, TypeVar, type_check_only from asgiref.typing import ASGIVersions from django.contrib.auth.models import _User from django.contrib.sessions.backends.base import SessionBase from django.core.handlers.asgi import ASGIRequest from django.core.handlers.base import BaseHandler from django.core.handlers.wsgi import WSGIRequest from django.http.request import HttpRequest from django.http.response import HttpResponseBase from django.template.base import Template from django.test.utils import ContextList from django.urls import ResolverMatch from django.utils.functional import _StrOrPromise, cached_property BOUNDARY: str MULTIPART_CONTENT: str CONTENT_TYPE_RE: Pattern[str] JSON_CONTENT_TYPE_RE: Pattern[str] REDIRECT_STATUS_CODES: frozenset[HTTPStatus] class RedirectCycleError(Exception): last_response: HttpResponseBase redirect_chain: list[tuple[str, int]] def __init__(self, message: str, last_response: HttpResponseBase) -> None: ... class FakePayload(IOBase): read_started: bool def __init__(self, initial_bytes: bytes | str | None = ...) -> None: ... def __len__(self) -> int: ... def read(self, size: int = ..., /) -> bytes: ... def readline(self, size: int | None = ..., /) -> bytes: ... def write(self, content: bytes | str, /) -> None: ... _T = TypeVar("_T") def closing_iterator_wrapper(iterable: Iterable[_T], close: Callable[[], Any]) -> Iterator[_T]: ... async def aclosing_iterator_wrapper(iterable: AsyncIterable[_T], close: Callable[[], Any]) -> AsyncIterator[_T]: ... def conditional_content_removal(request: HttpRequest, response: HttpResponseBase) -> HttpResponseBase: ... @type_check_only class _WSGIResponse(HttpResponseBase): wsgi_request: WSGIRequest @type_check_only class _ASGIResponse(HttpResponseBase): asgi_request: ASGIRequest class ClientHandler(BaseHandler): enforce_csrf_checks: bool def __init__(self, enforce_csrf_checks: bool = ..., *args: Any, **kwargs: Any) -> None: ... def __call__(self, environ: dict[str, Any]) -> _WSGIResponse: ... class AsyncClientHandler(BaseHandler): enforce_csrf_checks: bool def __init__(self, enforce_csrf_checks: bool = ..., *args: Any, **kwargs: Any) -> None: ... async def __call__(self, scope: dict[str, Any]) -> _ASGIResponse: ... def encode_multipart(boundary: str, data: dict[str, Any]) -> bytes: ... def encode_file(boundary: str, key: str, file: Any) -> list[bytes]: ... _GetDataType: TypeAlias = ( Mapping[str, str | bytes | int | Iterable[str | bytes | int]] | Iterable[tuple[str, str | bytes | int | Iterable[str | bytes | int]]] | None ) @type_check_only class _RequestFactory(Generic[_T]): json_encoder: type[JSONEncoder] defaults: dict[str, str] cookies: SimpleCookie errors: BytesIO def __init__( self, *, json_encoder: type[JSONEncoder] = ..., headers: Mapping[str, Any] | None = ..., query_params: Mapping[Any, Any] | None = ..., **defaults: Any, ) -> None: ... def request(self, **request: Any) -> _T: ... def get( self, path: _StrOrPromise, data: _GetDataType = ..., secure: bool = ..., *, headers: Mapping[str, Any] | None = ..., query_params: Mapping[Any, Any] | None = ..., **extra: Any, ) -> _T: ... def post( self, path: _StrOrPromise, data: Any = ..., content_type: str = ..., secure: bool = ..., *, headers: Mapping[str, Any] | None = ..., query_params: Mapping[Any, Any] | None = ..., **extra: Any, ) -> _T: ... def head( self, path: _StrOrPromise, data: Any = ..., secure: bool = ..., *, headers: Mapping[str, Any] | None = ..., query_params: Mapping[Any, Any] | None = ..., **extra: Any, ) -> _T: ... def trace( self, path: _StrOrPromise, secure: bool = ..., *, headers: Mapping[str, Any] | None = ..., query_params: Mapping[Any, Any] | None = ..., **extra: Any, ) -> _T: ... def options( self, path: _StrOrPromise, data: dict[str, str] | str = ..., content_type: str = ..., secure: bool = ..., *, headers: Mapping[str, Any] | None = ..., query_params: Mapping[Any, Any] | None = ..., **extra: Any, ) -> _T: ... def put( self, path: _StrOrPromise, data: Any = ..., content_type: str = ..., secure: bool = ..., *, headers: Mapping[str, Any] | None = ..., query_params: Mapping[Any, Any] | None = ..., **extra: Any, ) -> _T: ... def patch( self, path: _StrOrPromise, data: Any = ..., content_type: str = ..., secure: bool = ..., *, headers: Mapping[str, Any] | None = ..., query_params: Mapping[Any, Any] | None = ..., **extra: Any, ) -> _T: ... def delete( self, path: _StrOrPromise, data: Any = ..., content_type: str = ..., secure: bool = ..., *, headers: Mapping[str, Any] | None = ..., query_params: Mapping[Any, Any] | None = ..., **extra: Any, ) -> _T: ... def generic( self, method: str, path: _StrOrPromise, data: Any = ..., content_type: str | None = ..., secure: bool = ..., *, headers: Mapping[str, Any] | None = ..., query_params: Mapping[Any, Any] | None = ..., **extra: Any, ) -> _T: ... class RequestFactory(_RequestFactory[WSGIRequest]): ... # A non total duplication of `asgiref.typing.HTTPScope` @type_check_only class _HTTPScope(TypedDict, total=False): type: Literal["http"] asgi: ASGIVersions http_version: str method: str scheme: str path: str raw_path: bytes query_string: bytes root_path: str headers: Iterable[tuple[bytes, bytes]] client: tuple[str, int] | None server: tuple[str, int | None] | None state: dict[str, Any] extensions: dict[str, dict[object, object]] | None @type_check_only class _AsyncRequestFactory(_RequestFactory[_T]): defaults: _HTTPScope # type: ignore[assignment] class AsyncRequestFactory(_AsyncRequestFactory[ASGIRequest]): ... # fakes to distinguish WSGIRequest and ASGIRequest @type_check_only class _MonkeyPatchedWSGIResponse(_WSGIResponse): def json(self) -> Any: ... request: dict[str, Any] client: Client templates: list[Template] # `context` and `context_data` are populated based on whether you use the standard template # backend or a custom one respectively. # `context_data` only exists if the response was successful too as the return type changes. # `HTTPResponse` when API failed and `TemplateResponse` when successful. # https://docs.djangoproject.com/en/stable/topics/testing/tools/#django.test.Response.context context: ContextList | dict[str, Any] # Must match `django.template.response.SimpleTemplateResponse.context_data` context_data: dict[str, Any] | None content: bytes resolver_match: ResolverMatch redirect_chain: list[tuple[str, int]] @cached_property def text(self) -> str: ... @type_check_only class _MonkeyPatchedASGIResponse(_ASGIResponse): def json(self) -> Any: ... request: dict[str, Any] client: AsyncClient templates: list[Template] # `context` and `context_data` are populated based on whether you use the standard template # backend or a custom one respectively. # `context_data` only exists if the response was successful too as the return type changes. # `HTTPResponse` when API failed and `TemplateResponse` when successful. # https://docs.djangoproject.com/en/stable/topics/testing/tools/#django.test.Response.context context: ContextList | dict[str, Any] # Must match `django.template.response.SimpleTemplateResponse.context_data` context_data: dict[str, Any] | None content: bytes resolver_match: ResolverMatch redirect_chain: list[tuple[str, int]] class ClientMixin: def store_exc_info(self, **kwargs: Any) -> None: ... def check_exception(self, response: HttpResponseBase) -> NoReturn: ... @property def session(self) -> SessionBase: ... async def asession(self) -> SessionBase: ... def login(self, **credentials: Any) -> bool: ... async def alogin(self, **credentials: Any) -> bool: ... def force_login(self, user: _User, backend: str | None = ...) -> None: ... async def aforce_login(self, user: _User, backend: str | None = ...) -> None: ... def logout(self) -> None: ... async def alogout(self) -> None: ... class Client(ClientMixin, _RequestFactory[_MonkeyPatchedWSGIResponse]): handler: ClientHandler raise_request_exception: bool exc_info: tuple[type[BaseException], BaseException, TracebackType] | None extra: dict[str, Any] | None headers: dict[str, Any] def __init__( self, enforce_csrf_checks: bool = ..., raise_request_exception: bool = ..., *, headers: Mapping[str, Any] | None = ..., query_params: Mapping[Any, Any] | None = ..., **defaults: Any, ) -> None: ... def request(self, **request: Any) -> _MonkeyPatchedWSGIResponse: ... def get( # type: ignore[override] self, path: _StrOrPromise, data: _GetDataType = ..., follow: bool = ..., secure: bool = ..., *, headers: Mapping[str, Any] | None = ..., query_params: Mapping[Any, Any] | None = ..., **extra: Any, ) -> _MonkeyPatchedWSGIResponse: ... def post( # type: ignore[override] self, path: _StrOrPromise, data: Any = ..., content_type: str = ..., follow: bool = ..., secure: bool = ..., *, headers: Mapping[str, Any] | None = ..., query_params: Mapping[Any, Any] | None = ..., **extra: Any, ) -> _MonkeyPatchedWSGIResponse: ... def head( # type: ignore[override] self, path: _StrOrPromise, data: Any = ..., follow: bool = ..., secure: bool = ..., *, headers: Mapping[str, Any] | None = ..., query_params: Mapping[Any, Any] | None = ..., **extra: Any, ) -> _MonkeyPatchedWSGIResponse: ... def options( # type: ignore[override] self, path: _StrOrPromise, data: dict[str, str] | str = ..., content_type: str = ..., follow: bool = ..., secure: bool = ..., *, headers: Mapping[str, Any] | None = ..., query_params: Mapping[Any, Any] | None = ..., **extra: Any, ) -> _MonkeyPatchedWSGIResponse: ... def put( # type: ignore[override] self, path: _StrOrPromise, data: Any = ..., content_type: str = ..., follow: bool = ..., secure: bool = ..., *, headers: Mapping[str, Any] | None = ..., query_params: Mapping[Any, Any] | None = ..., **extra: Any, ) -> _MonkeyPatchedWSGIResponse: ... def patch( # type: ignore[override] self, path: _StrOrPromise, data: Any = ..., content_type: str = ..., follow: bool = ..., secure: bool = ..., *, headers: Mapping[str, Any] | None = ..., query_params: Mapping[Any, Any] | None = ..., **extra: Any, ) -> _MonkeyPatchedWSGIResponse: ... def delete( # type: ignore[override] self, path: _StrOrPromise, data: Any = ..., content_type: str = ..., follow: bool = ..., secure: bool = ..., *, headers: Mapping[str, Any] | None = ..., query_params: Mapping[Any, Any] | None = ..., **extra: Any, ) -> _MonkeyPatchedWSGIResponse: ... def trace( # type: ignore[override] self, path: _StrOrPromise, data: Any = ..., follow: bool = ..., secure: bool = ..., *, headers: Mapping[str, Any] | None = ..., query_params: Mapping[Any, Any] | None = ..., **extra: Any, ) -> _MonkeyPatchedWSGIResponse: ... class AsyncClient(ClientMixin, _AsyncRequestFactory[Awaitable[_MonkeyPatchedASGIResponse]]): handler: AsyncClientHandler raise_request_exception: bool exc_info: Any extra: dict[str, Any] | None headers: dict[str, Any] def __init__( self, enforce_csrf_checks: bool = ..., raise_request_exception: bool = ..., *, headers: Mapping[str, Any] | None = ..., query_params: Mapping[Any, Any] | None = ..., **defaults: Any, ) -> None: ... async def request(self, **request: Any) -> _MonkeyPatchedASGIResponse: ... async def get( # type: ignore[override] self, path: _StrOrPromise, data: _GetDataType = ..., follow: bool = ..., secure: bool = ..., *, headers: Mapping[str, Any] | None = ..., query_params: Mapping[Any, Any] | None = ..., **extra: Any, ) -> _MonkeyPatchedASGIResponse: ... async def post( # type: ignore[override] self, path: _StrOrPromise, data: Any = ..., content_type: str = ..., follow: bool = ..., secure: bool = ..., *, headers: Mapping[str, Any] | None = ..., query_params: Mapping[Any, Any] | None = ..., **extra: Any, ) -> _MonkeyPatchedASGIResponse: ... async def head( # type: ignore[override] self, path: _StrOrPromise, data: Any = ..., follow: bool = ..., secure: bool = ..., *, headers: Mapping[str, Any] | None = ..., query_params: Mapping[Any, Any] | None = ..., **extra: Any, ) -> _MonkeyPatchedASGIResponse: ... async def options( # type: ignore[override] self, path: _StrOrPromise, data: dict[str, str] | str = ..., content_type: str = ..., follow: bool = ..., secure: bool = ..., *, headers: Mapping[str, Any] | None = ..., query_params: Mapping[Any, Any] | None = ..., **extra: Any, ) -> _MonkeyPatchedASGIResponse: ... async def put( # type: ignore[override] self, path: _StrOrPromise, data: Any = ..., content_type: str = ..., follow: bool = ..., secure: bool = ..., *, headers: Mapping[str, Any] | None = ..., query_params: Mapping[Any, Any] | None = ..., **extra: Any, ) -> _MonkeyPatchedASGIResponse: ... async def patch( # type: ignore[override] self, path: _StrOrPromise, data: Any = ..., content_type: str = ..., follow: bool = ..., secure: bool = ..., *, headers: Mapping[str, Any] | None = ..., query_params: Mapping[Any, Any] | None = ..., **extra: Any, ) -> _MonkeyPatchedASGIResponse: ... async def delete( # type: ignore[override] self, path: _StrOrPromise, data: Any = ..., content_type: str = ..., follow: bool = ..., secure: bool = ..., *, headers: Mapping[str, Any] | None = ..., query_params: Mapping[Any, Any] | None = ..., **extra: Any, ) -> _MonkeyPatchedASGIResponse: ... async def trace( # type: ignore[override] self, path: _StrOrPromise, data: Any = ..., follow: bool = ..., secure: bool = ..., *, headers: Mapping[str, Any] | None = ..., query_params: Mapping[Any, Any] | None = ..., **extra: Any, ) -> _MonkeyPatchedASGIResponse: ... __all__ = ( "AsyncClient", "AsyncRequestFactory", "Client", "RedirectCycleError", "RequestFactory", "encode_file", "encode_multipart", ) django-stubs-5.2.9/django-stubs/test/html.pyi000066400000000000000000000024431513401051600211740ustar00rootroot00000000000000from collections.abc import Sequence from html.parser import HTMLParser from re import Pattern from typing import Any, TypeAlias ASCII_WHITESPACE: Pattern[str] BOOLEAN_ATTRIBUTES: set[str] def normalize_whitespace(string: str) -> str: ... def normalize_attributes(attributes: list[tuple[str, str | None]]) -> list[tuple[str, str | None]]: ... _ElementAttribute: TypeAlias = tuple[str, str | None] class Element: name: str | None attributes: list[_ElementAttribute] children: list[Any] def __init__(self, name: str | None, attributes: Sequence[_ElementAttribute]) -> None: ... def append(self, element: Element | str) -> None: ... def finalize(self) -> None: ... def __contains__(self, element: Element | str) -> bool: ... def count(self, element: Element | str) -> int: ... def __getitem__(self, key: int) -> Any: ... class RootElement(Element): def __init__(self) -> None: ... class HTMLParseError(Exception): ... class Parser(HTMLParser): root: Any open_tags: Any element_positions: Any def __init__(self) -> None: ... def error(self, msg: str) -> HTMLParseError: ... def format_position(self, position: Any = ..., element: Any = ...) -> str: ... @property def current(self) -> Element: ... def parse_html(html: str) -> Element: ... django-stubs-5.2.9/django-stubs/test/runner.pyi000066400000000000000000000151501513401051600215400ustar00rootroot00000000000000import logging from argparse import ArgumentParser from collections.abc import Sequence from contextlib import AbstractContextManager from io import StringIO from typing import Any, Literal from unittest import TestCase, TestLoader, TestSuite, TextTestResult, TextTestRunner from django.db.backends.base.base import BaseDatabaseWrapper from django.test.testcases import SimpleTestCase from django.test.utils import TimeKeeperProtocol from django.utils.datastructures import OrderedSet class DebugSQLTextTestResult(TextTestResult): buffer: bool descriptions: bool dots: bool expectedFailures: list[Any] failfast: bool shouldStop: bool showAll: bool skipped: list[Any] tb_locals: bool testsRun: int unexpectedSuccesses: list[Any] logger: logging.Logger # typeshed thinks it's TextIO, but unittest wraps it with _WritelnDecorator # adding `writeln` method # See https://github.com/python/cpython/blob/main/Lib/unittest/runner.py stream: Any def __init__(self, stream: Any, descriptions: bool, verbosity: int) -> None: ... debug_sql_stream: StringIO handler: logging.StreamHandler def startTest(self, test: TestCase) -> None: ... def stopTest(self, test: TestCase) -> None: ... def addError(self, test: Any, err: Any) -> None: ... def addFailure(self, test: Any, err: Any) -> None: ... class PDBDebugResult(TextTestResult): ... class RemoteTestResult: events: list[Any] failfast: bool shouldStop: bool testsRun: int def __init__(self, *args: Any, **kwargs: Any) -> None: ... @property def test_index(self) -> int: ... def check_picklable(self, test: Any, err: Any) -> None: ... def _confirm_picklable(self, obj: Any) -> None: ... def check_subtest_picklable(self, test: Any, subtest: Any) -> None: ... def stop(self) -> None: ... def startTestRun(self) -> None: ... def stopTestRun(self) -> None: ... def startTest(self, test: Any) -> None: ... def stopTest(self, test: Any) -> None: ... def addDuration(self, test: Any, elapsed: Any) -> None: ... def addError(self, test: Any, err: Any) -> None: ... def addFailure(self, test: Any, err: Any) -> None: ... def addSubTest(self, test: Any, subtest: Any, err: Any) -> None: ... def addSuccess(self, test: Any) -> None: ... def addSkip(self, test: Any, reason: Any) -> None: ... def addExpectedFailure(self, test: Any, err: Any) -> None: ... def addUnexpectedSuccess(self, test: Any) -> None: ... def wasSuccessful(self) -> bool: ... class RemoteTestRunner: resultclass: Any failfast: bool buffer: bool def __init__(self, failfast: bool = ..., resultclass: Any | None = ..., buffer: bool = ...) -> None: ... def run(self, test: Any) -> Any: ... def default_test_processes() -> int: ... class ParallelTestSuite(TestSuite): init_worker: Any run_subsuite: Any runner_class: Any subsuites: list[TestSuite] processes: int failfast: bool buffer: bool initial_settings: Any serialized_contents: Any used_aliases: set[str] | None def __init__( self, subsuites: list[TestSuite], processes: int, failfast: bool = ..., buffer: bool = ... ) -> None: ... def run(self, result: Any) -> Any: ... # type: ignore[override] def handle_event(self, result: Any, tests: list[TestSuite], event: Sequence[Any]) -> None: ... class DiscoverRunner: test_suite: type[TestSuite] parallel_test_suite: type[ParallelTestSuite] test_runner: type[TextTestRunner] test_loader: TestLoader reorder_by: tuple[SimpleTestCase, ...] pattern: str | None top_level: str | None verbosity: int interactive: bool failfast: bool keepdb: bool reverse: bool debug_mode: bool debug_sql: bool parallel: int tags: set[str] exclude_tags: set[str] pdb: bool buffer: bool test_name_patterns: set[str] | None time_keeper: TimeKeeperProtocol shuffle: int | Literal[False] logger: logging.Logger | None def __init__( self, pattern: str | None = ..., top_level: str | None = ..., verbosity: int = ..., interactive: bool = ..., failfast: bool = ..., keepdb: bool = ..., reverse: bool = ..., debug_mode: bool = ..., debug_sql: bool = ..., parallel: int = ..., tags: list[str] | None = ..., exclude_tags: list[str] | None = ..., test_name_patterns: list[str] | None = ..., pdb: bool = ..., buffer: bool = ..., enable_faulthandler: bool = ..., timing: bool = ..., shuffle: int | Literal[False] = ..., logger: logging.Logger | None = ..., durations: int | None = ..., **kwargs: Any, ) -> None: ... @classmethod def add_arguments(cls, parser: ArgumentParser) -> None: ... @property def shuffle_seed(self) -> int | None: ... def log(self, msg: str, level: int | None) -> None: ... def setup_test_environment(self, **kwargs: Any) -> None: ... def setup_shuffler(self) -> None: ... def load_with_patterns(self) -> AbstractContextManager[None]: ... def load_tests_for_label(self, label: str, discover_kwargs: dict[str, str]) -> TestSuite: ... def build_suite(self, test_labels: Sequence[str] | None = ..., **kwargs: Any) -> TestSuite: ... def setup_databases(self, **kwargs: Any) -> list[tuple[BaseDatabaseWrapper, str, bool]]: ... def get_resultclass(self) -> type[TextTestResult] | None: ... def get_test_runner_kwargs(self) -> dict[str, Any]: ... def run_checks(self, databases: set[str]) -> None: ... def run_suite(self, suite: TestSuite, **kwargs: Any) -> TextTestResult: ... def teardown_databases(self, old_config: list[tuple[BaseDatabaseWrapper, str, bool]], **kwargs: Any) -> None: ... def teardown_test_environment(self, **kwargs: Any) -> None: ... def suite_result(self, suite: TestSuite, result: TextTestResult, **kwargs: Any) -> int: ... def _get_databases(self, suite: TestSuite) -> set[str]: ... def get_databases(self, suite: TestSuite) -> set[str]: ... def run_tests(self, test_labels: list[str], **kwargs: Any) -> int: ... def is_discoverable(label: str) -> bool: ... def reorder_suite( suite: TestSuite, classes: tuple[type[TestCase], type[SimpleTestCase]], reverse: bool = ... ) -> TestSuite: ... def partition_suite_by_type( suite: TestSuite, classes: tuple[type[TestCase], type[SimpleTestCase]], bins: list[OrderedSet], reverse: bool = ... ) -> None: ... def partition_suite_by_case(suite: Any) -> list[Any]: ... def filter_tests_by_tags(suite: TestSuite, tags: set[str], exclude_tags: set[str]) -> TestSuite: ... django-stubs-5.2.9/django-stubs/test/selenium.pyi000066400000000000000000000031451513401051600220510ustar00rootroot00000000000000from collections.abc import Callable, Sequence from contextlib import AbstractContextManager from types import TracebackType from typing import Any, TypeVar from django.test import LiveServerTestCase from typing_extensions import Self _F = TypeVar("_F", bound=Callable[..., Any]) class SeleniumTestCaseBase: browsers: Any browser: Any @classmethod def import_webdriver(cls, browser: Any) -> type[Any]: ... # Type[WebDriver] def create_webdriver(self) -> Any: ... # WebDriver class ChangeWindowSize: def __init__(self, width: int, height: int, selenium: Any) -> None: ... def __enter__(self) -> Self: ... def __exit__( self, exc_type: type[BaseException] | None, exc_value: BaseException | None, traceback: TracebackType | None, ) -> None: ... class SeleniumTestCase(LiveServerTestCase): implicit_wait: int screenshots: bool = False selenium: Any def desktop_size(self) -> AbstractContextManager[None]: ... def small_screen_size(self) -> AbstractContextManager[None]: ... def mobile_size(self) -> AbstractContextManager[None]: ... def rtl(self) -> AbstractContextManager[None]: ... def dark(self) -> AbstractContextManager[None]: ... def set_emulated_media(self, *, media: str | None = None, features: list[dict[str, str]] | None = None) -> None: ... def high_contrast(self) -> AbstractContextManager[None]: ... def take_screenshot(self, name: str) -> None: ... def disable_implicit_wait(self) -> AbstractContextManager[None]: ... def screenshot_cases(method_names: str | Sequence[str]) -> Callable[[_F], _F]: ... django-stubs-5.2.9/django-stubs/test/signals.pyi000066400000000000000000000024341513401051600216700ustar00rootroot00000000000000from typing import Any from django.core.signals import setting_changed as setting_changed template_rendered: Any COMPLEX_OVERRIDE_SETTINGS: Any def clear_cache_handlers(*, setting: str, **kwargs: Any) -> None: ... def update_installed_apps(*, setting: str, **kwargs: Any) -> None: ... def update_connections_time_zone(*, setting: str, **kwargs: Any) -> None: ... def clear_routers_cache(*, setting: str, **kwargs: Any) -> None: ... def reset_template_engines(*, setting: str, **kwargs: Any) -> None: ... def storages_changed(*, setting: str, **kwargs: Any) -> None: ... def clear_serializers_cache(*, setting: str, **kwargs: Any) -> None: ... def language_changed(*, setting: str, **kwargs: Any) -> None: ... def localize_settings_changed(*, setting: str, **kwargs: Any) -> None: ... def complex_setting_changed(*, setting: str, enter: bool, **kwargs: Any) -> None: ... def root_urlconf_changed(*, setting: str, **kwargs: Any) -> None: ... def static_storage_changed(*, setting: str, **kwargs: Any) -> None: ... def static_finders_changed(*, setting: str, **kwargs: Any) -> None: ... def form_renderer_changed(*, setting: str, **kwargs: Any) -> None: ... def auth_password_validators_changed(*, setting: str, **kwargs: Any) -> None: ... def user_model_swapped(*, setting: str, **kwargs: Any) -> None: ... django-stubs-5.2.9/django-stubs/test/testcases.pyi000066400000000000000000000217241513401051600222310ustar00rootroot00000000000000import threading import unittest from collections.abc import Callable, Collection, Iterable, Iterator, Mapping, Sequence from contextlib import AbstractContextManager from types import TracebackType from typing import Any, overload from django.core.exceptions import ImproperlyConfigured from django.core.handlers.wsgi import WSGIHandler from django.core.servers.basehttp import ThreadedWSGIServer, WSGIRequestHandler from django.db import connections as connections from django.db.backends.base.base import BaseDatabaseWrapper from django.db.models.base import Model from django.db.models.query import QuerySet, RawQuerySet from django.forms import BaseForm, BaseFormSet from django.forms.fields import EmailField from django.http import HttpRequest from django.http.response import FileResponse, HttpResponseBase from django.template.base import Template from django.test.client import AsyncClient, Client from django.test.html import Element from django.test.utils import CaptureQueriesContext, ContextList from django.utils.functional import _StrOrPromise, classproperty from typing_extensions import Self def to_list(value: Any) -> list[Any]: ... def assert_and_parse_html(self: Any, html: str, user_msg: str, msg: str) -> Element: ... class _AssertNumQueriesContext(CaptureQueriesContext): test_case: SimpleTestCase num: int def __init__(self, test_case: Any, num: Any, connection: BaseDatabaseWrapper) -> None: ... class _AssertTemplateUsedContext: test_case: SimpleTestCase template_name: str rendered_templates: list[Template] context: ContextList def __init__(self, test_case: Any, template_name: Any) -> None: ... def on_template_render(self, sender: Any, signal: Any, template: Any, context: Any, **kwargs: Any) -> None: ... def test(self) -> None: ... def __enter__(self) -> Self: ... def __exit__( self, exc_type: type[BaseException] | None, exc_value: BaseException | None, exc_tb: TracebackType | None, ) -> None: ... class _AssertTemplateNotUsedContext(_AssertTemplateUsedContext): ... class _DatabaseFailure: wrapped: Any message: str def __init__(self, wrapped: Any, message: str) -> None: ... def __call__(self) -> None: ... class SimpleTestCase(unittest.TestCase): client_class: type[Client] client: Client async_client_class: type[AsyncClient] async_client: AsyncClient # TODO: str -> Literal['__all__'] databases: set[str] | str @classmethod def ensure_connection_patch_method(cls) -> None: ... def __call__(self, result: unittest.TestResult | None = ...) -> None: ... def settings(self, **kwargs: Any) -> Any: ... def modify_settings(self, **kwargs: Any) -> Any: ... def assertRedirects( self, response: HttpResponseBase, expected_url: str, status_code: int = ..., target_status_code: int = ..., msg_prefix: str = ..., fetch_redirect_response: bool = ..., ) -> None: ... def assertURLEqual( self, url1: _StrOrPromise, url2: _StrOrPromise, msg_prefix: str = ..., ) -> None: ... def assertContains( self, response: HttpResponseBase, text: bytes | int | _StrOrPromise, count: int | None = ..., status_code: int = ..., msg_prefix: str = ..., html: bool = ..., ) -> None: ... def assertNotContains( self, response: HttpResponseBase, text: bytes | int | _StrOrPromise, status_code: int = ..., msg_prefix: str = ..., html: bool = ..., ) -> None: ... def assertFormError( self, form: BaseForm, field: str | None, errors: list[str] | str, msg_prefix: str = ..., ) -> None: ... def assertFormSetError( self, formset: BaseFormSet, form_index: int | None, field: str | None, errors: list[str] | str, msg_prefix: str = ..., ) -> None: ... def assertTemplateUsed( self, response: HttpResponseBase | str | None = ..., template_name: str | None = ..., msg_prefix: str = ..., count: int | None = ..., ) -> _AssertTemplateUsedContext | None: ... def assertTemplateNotUsed( self, response: HttpResponseBase | str | None = ..., template_name: str | None = ..., msg_prefix: str = ... ) -> _AssertTemplateNotUsedContext | None: ... def assertRaisesMessage( self, expected_exception: type[Exception], expected_message: str, *args: Any, **kwargs: Any ) -> Any: ... def assertWarnsMessage( self, expected_warning: type[Exception], expected_message: str, *args: Any, **kwargs: Any ) -> Any: ... def assertFieldOutput( self, fieldclass: type[EmailField], valid: dict[str, str], invalid: dict[str, list[str]], field_args: Iterable[Any] | None = ..., field_kwargs: Mapping[str, Any] | None = ..., empty_value: str = ..., ) -> Any: ... def assertHTMLEqual(self, html1: str, html2: str, msg: str | None = ...) -> None: ... def assertHTMLNotEqual(self, html1: str, html2: str, msg: str | None = ...) -> None: ... def assertInHTML(self, needle: str, haystack: str, count: int | None = ..., msg_prefix: str = ...) -> None: ... def assertNotInHTML(self, needle: str, haystack: str, msg_prefix: str = ...) -> None: ... def assertJSONEqual( self, raw: str | bytes | bytearray, expected_data: dict[str, Any] | list[Any] | str | int | float | bool | None, msg: str | None = ..., ) -> None: ... def assertJSONNotEqual( self, raw: str | bytes | bytearray, expected_data: dict[str, Any] | list[Any] | str | int | float | bool | None, msg: str | None = ..., ) -> None: ... def assertXMLEqual(self, xml1: str, xml2: str, msg: str | None = ...) -> None: ... def assertXMLNotEqual(self, xml1: str, xml2: str, msg: str | None = ...) -> None: ... class TransactionTestCase(SimpleTestCase): reset_sequences: bool available_apps: Any fixtures: Any multi_db: bool serialized_rollback: bool def assertQuerySetEqual( self, qs: Iterator[Any] | list[Model] | QuerySet | RawQuerySet, values: Collection[Any], transform: Callable[[Model], Any] | type[str] | None = ..., ordered: bool = ..., msg: str | None = ..., ) -> None: ... @overload def assertNumQueries(self, num: int, func: None = None, *, using: str = ...) -> _AssertNumQueriesContext: ... @overload def assertNumQueries( self, num: int, func: Callable[..., Any], *args: Any, using: str = ..., **kwargs: Any ) -> None: ... class TestCase(TransactionTestCase): @classmethod def setUpTestData(cls) -> None: ... @classmethod def captureOnCommitCallbacks( cls, *, using: str = ..., execute: bool = ... ) -> AbstractContextManager[list[Callable[[], Any]]]: ... class CheckCondition: conditions: Sequence[tuple[Callable, str]] def __init__(self, *conditions: tuple[Callable, str]) -> None: ... def add_condition(self, condition: Callable, reason: str) -> CheckCondition: ... def __get__(self, instance: None, cls: type[TransactionTestCase] | None = ...) -> bool: ... def skipIfDBFeature(*features: Any) -> Callable: ... def skipUnlessDBFeature(*features: Any) -> Callable: ... def skipUnlessAnyDBFeature(*features: Any) -> Callable: ... class QuietWSGIRequestHandler(WSGIRequestHandler): ... class FSFilesHandler(WSGIHandler): application: Any base_url: Any def __init__(self, application: Any) -> None: ... def file_path(self, url: Any) -> str: ... def serve(self, request: HttpRequest) -> FileResponse: ... class _StaticFilesHandler(FSFilesHandler): def get_base_dir(self) -> str: ... def get_base_url(self) -> str: ... class _MediaFilesHandler(FSFilesHandler): def get_base_dir(self) -> str: ... def get_base_url(self) -> str: ... class LiveServerThread(threading.Thread): host: str port: int is_ready: threading.Event error: ImproperlyConfigured | None static_handler: type[WSGIHandler] connections_override: dict[str, BaseDatabaseWrapper] def __init__( self, host: str, static_handler: type[WSGIHandler], connections_override: dict[str, BaseDatabaseWrapper] = ..., port: int = ..., ) -> None: ... httpd: ThreadedWSGIServer def terminate(self) -> None: ... class LiveServerTestCase(TransactionTestCase): host: str port: int server_thread_class: type[Any] server_thread: Any static_handler: Any @classproperty def live_server_url(cls: Any) -> str: ... @classproperty def allowed_host(cls: Any) -> str: ... class SerializeMixin: lockfile: Any @classmethod def setUpClass(cls) -> None: ... def connections_support_transactions(aliases: Iterable[str] | None = ...) -> bool: ... __all__ = ("SimpleTestCase", "TestCase", "TransactionTestCase", "skipIfDBFeature", "skipUnlessDBFeature") django-stubs-5.2.9/django-stubs/test/utils.pyi000066400000000000000000000152551513401051600213750ustar00rootroot00000000000000import decimal from collections.abc import Callable, Iterable, Iterator, Mapping from contextlib import AbstractContextManager from decimal import Decimal from io import StringIO from logging import Logger from types import TracebackType from typing import Any, Protocol, SupportsIndex, TypeAlias, TypeVar, type_check_only from django.apps.registry import Apps from django.conf import LazySettings, Settings from django.core.checks.registry import CheckRegistry from django.db.backends.base.base import BaseDatabaseWrapper from django.db.models.lookups import Lookup, Transform from django.db.models.query_utils import RegisterLookupMixin from django.test.runner import DiscoverRunner from django.test.testcases import SimpleTestCase from typing_extensions import Self _TestClass: TypeAlias = type[SimpleTestCase] _DecoratedTest: TypeAlias = Callable | _TestClass _DT = TypeVar("_DT", bound=_DecoratedTest) _C = TypeVar("_C", bound=Callable) # Any callable TZ_SUPPORT: bool class Approximate: val: decimal.Decimal | float places: int def __init__(self, val: Decimal | float, places: int = ...) -> None: ... class ContextList(list[dict[str, Any]]): def __getitem__(self, key: str | SupportsIndex | slice) -> Any: ... def get(self, key: str, default: Any | None = ...) -> Any: ... def __contains__(self, key: object) -> bool: ... def keys(self) -> set[str]: ... class _TestState: ... def setup_test_environment(debug: bool | None = ...) -> None: ... def teardown_test_environment() -> None: ... def get_runner(settings: LazySettings, test_runner_class: str | None = ...) -> type[DiscoverRunner]: ... class TestContextDecorator: attr_name: str | None kwarg_name: str | None def __init__(self, attr_name: str | None = ..., kwarg_name: str | None = ...) -> None: ... def enable(self) -> Any: ... def disable(self) -> None: ... def __enter__(self) -> Apps | None: ... def __exit__( self, exc_type: type[BaseException] | None, exc_value: BaseException | None, exc_tb: TracebackType | None, ) -> None: ... def decorate_class(self, cls: _TestClass) -> _TestClass: ... def decorate_callable(self, func: _C) -> _C: ... def __call__(self, decorated: _DT) -> _DT: ... class override_settings(TestContextDecorator): enable_exception: Exception | None options: dict[str, Any] def __init__(self, **kwargs: Any) -> None: ... wrapped: Settings def save_options(self, test_func: _DecoratedTest) -> None: ... def decorate_class(self, cls: type) -> type: ... class modify_settings(override_settings): wrapped: Settings operations: list[tuple[str, dict[str, list[str] | str]]] def __init__(self, *args: Any, **kwargs: Any) -> None: ... def save_options(self, test_func: _DecoratedTest) -> None: ... options: dict[str, list[tuple[str, str] | str]] class override_system_checks(TestContextDecorator): registry: CheckRegistry new_checks: list[Callable] deployment_checks: list[Callable] | None def __init__(self, new_checks: list[Callable], deployment_checks: list[Callable] | None = ...) -> None: ... old_checks: set[Callable] old_deployment_checks: set[Callable] class CaptureQueriesContext: connection: BaseDatabaseWrapper force_debug_cursor: bool initial_queries: int final_queries: int | None def __init__(self, connection: BaseDatabaseWrapper) -> None: ... def __iter__(self) -> Iterator[dict[str, str]]: ... def __getitem__(self, index: int) -> dict[str, str]: ... def __len__(self) -> int: ... @property def captured_queries(self) -> list[dict[str, str]]: ... def __enter__(self) -> Self: ... def __exit__( self, exc_type: type[BaseException] | None, exc_value: BaseException | None, exc_tb: TracebackType | None, ) -> None: ... class ignore_warnings(TestContextDecorator): ignore_kwargs: dict[str, Any] filter_func: Callable def __init__(self, **kwargs: Any) -> None: ... catch_warnings: AbstractContextManager[list | None] requires_tz_support: Any def isolate_lru_cache(lru_cache_object: Callable) -> AbstractContextManager[None]: ... class override_script_prefix(TestContextDecorator): prefix: str def __init__(self, prefix: str) -> None: ... old_prefix: str class LoggingCaptureMixin: logger: Logger old_stream: Any logger_output: Any def setUp(self) -> None: ... def tearDown(self) -> None: ... class isolate_apps(TestContextDecorator): installed_apps: tuple[str, ...] def __init__(self, *installed_apps: Any, **kwargs: Any) -> None: ... old_apps: Apps def extend_sys_path(*paths: str) -> AbstractContextManager[None]: ... def captured_output(stream_name: str) -> AbstractContextManager[StringIO]: ... def captured_stdin() -> AbstractContextManager[StringIO]: ... def captured_stdout() -> AbstractContextManager[StringIO]: ... def captured_stderr() -> AbstractContextManager[StringIO]: ... def freeze_time(t: float) -> AbstractContextManager[None]: ... def tag(*tags: str) -> Callable[[_C], _C]: ... _Signature: TypeAlias = str _TestDatabase: TypeAlias = tuple[str, list[str]] @type_check_only class TimeKeeperProtocol(Protocol): def timed(self, name: Any) -> AbstractContextManager[None]: ... def print_results(self) -> None: ... def dependency_ordered( test_databases: Iterable[tuple[_Signature, _TestDatabase]], dependencies: Mapping[str, list[str]] ) -> list[tuple[_Signature, _TestDatabase]]: ... def get_unique_databases_and_mirrors( aliases: set[str] | None = ..., ) -> tuple[dict[_Signature, _TestDatabase], dict[str, Any]]: ... def setup_databases( verbosity: int, interactive: bool, *, time_keeper: TimeKeeperProtocol | None = ..., keepdb: bool = ..., debug_sql: bool = ..., parallel: int = ..., aliases: Mapping[str, Any] | None = ..., serialized_aliases: Iterable[str] | None = ..., **kwargs: Any, ) -> list[tuple[BaseDatabaseWrapper, str, bool]]: ... def teardown_databases( old_config: Iterable[tuple[Any, str, bool]], verbosity: int, parallel: int = ..., keepdb: bool = ... ) -> None: ... def require_jinja2(test_func: _C) -> _C: ... def register_lookup( field: type[RegisterLookupMixin], *lookups: type[Lookup | Transform], lookup_name: str | None = ... ) -> AbstractContextManager[None]: ... def garbage_collect() -> None: ... __all__ = ( "Approximate", "CaptureQueriesContext", "ContextList", "garbage_collect", "get_runner", "ignore_warnings", "isolate_apps", "isolate_lru_cache", "modify_settings", "override_settings", "override_system_checks", "requires_tz_support", "setup_databases", "setup_test_environment", "tag", "teardown_test_environment", ) django-stubs-5.2.9/django-stubs/urls/000077500000000000000000000000001513401051600175105ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/urls/__init__.pyi000066400000000000000000000040521513401051600217730ustar00rootroot00000000000000from typing import TypeAlias # noinspection PyUnresolvedReferences from .base import clear_script_prefix as clear_script_prefix from .base import clear_url_caches as clear_url_caches from .base import get_script_prefix as get_script_prefix from .base import get_urlconf as get_urlconf from .base import is_valid_path as is_valid_path from .base import resolve as resolve from .base import reverse as reverse from .base import reverse_lazy as reverse_lazy from .base import set_script_prefix as set_script_prefix from .base import set_urlconf as set_urlconf from .base import translate_url as translate_url # noinspection PyUnresolvedReferences from .conf import include as include from .conf import path as path from .conf import re_path as re_path # noinspection PyUnresolvedReferences from .converters import register_converter as register_converter # noinspection PyUnresolvedReferences from .exceptions import NoReverseMatch as NoReverseMatch from .exceptions import Resolver404 as Resolver404 # noinspection PyUnresolvedReferences from .resolvers import LocalePrefixPattern as LocalePrefixPattern from .resolvers import ResolverMatch as ResolverMatch from .resolvers import URLPattern as URLPattern from .resolvers import URLResolver as URLResolver from .resolvers import get_ns_resolver as get_ns_resolver from .resolvers import get_resolver as get_resolver # noinspection PyUnresolvedReferences from .utils import get_callable as get_callable from .utils import get_mod_func as get_mod_func _AnyURL: TypeAlias = URLPattern | URLResolver # noqa: PYI047 __all__ = [ "LocalePrefixPattern", "NoReverseMatch", "Resolver404", "ResolverMatch", "URLPattern", "URLResolver", "clear_script_prefix", "clear_url_caches", "get_callable", "get_mod_func", "get_ns_resolver", "get_resolver", "get_script_prefix", "get_urlconf", "include", "is_valid_path", "path", "re_path", "register_converter", "resolve", "reverse", "reverse_lazy", "set_script_prefix", "set_urlconf", "translate_url", ] django-stubs-5.2.9/django-stubs/urls/base.pyi000066400000000000000000000034061513401051600211500ustar00rootroot00000000000000from collections.abc import Callable, Mapping, Sequence from typing import Any, Literal, TypeAlias from django.http.request import QueryDict from django.http.response import HttpResponseBase from django.urls.resolvers import ResolverMatch from django.utils.functional import _StrPromise # https://github.com/python/typeshed/blob/87f599dc8312ac67b941b5f2b47274534a1a2d3a/stdlib/urllib/parse.pyi#L136-L138 _QueryType: TypeAlias = ( Mapping[Any, Any] | Mapping[Any, Sequence[Any]] | Sequence[tuple[Any, Any]] | Sequence[tuple[Any, Sequence[Any]]] ) def resolve(path: str | _StrPromise, urlconf: str | None = ...) -> ResolverMatch: ... # NOTE: make sure `reverse` and `reverse_lazy` objects are in sync: def reverse( viewname: Callable[..., HttpResponseBase] | str | None, urlconf: str | None = None, args: Sequence[Any] | None = None, kwargs: dict[str, Any] | None = None, current_app: str | None = None, *, query: QueryDict | _QueryType | None = None, fragment: str | None = None, ) -> str: ... def reverse_lazy( viewname: Callable[..., HttpResponseBase] | str | None, urlconf: str | None = None, args: Sequence[Any] | None = None, kwargs: dict[str, Any] | None = None, current_app: str | None = None, *, query: QueryDict | _QueryType | None = None, fragment: str | None = None, ) -> _StrPromise: ... def clear_url_caches() -> None: ... def set_script_prefix(prefix: str) -> None: ... def get_script_prefix() -> str: ... def clear_script_prefix() -> None: ... def set_urlconf(urlconf_name: str | None) -> None: ... def get_urlconf(default: str | None = ...) -> str | None: ... def is_valid_path(path: str, urlconf: str | None = ...) -> Literal[False] | ResolverMatch: ... def translate_url(url: str, lang_code: str) -> str: ... django-stubs-5.2.9/django-stubs/urls/conf.pyi000066400000000000000000000034471513401051600211700ustar00rootroot00000000000000from collections.abc import Callable, Coroutine, Sequence from types import ModuleType from typing import Any, TypeAlias, overload from django.urls import URLPattern, URLResolver, _AnyURL from django.utils.functional import _StrOrPromise from ..http.response import HttpResponseBase _URLConf: TypeAlias = str | ModuleType | Sequence[_AnyURL] _IncludedURLConf: TypeAlias = tuple[Sequence[URLResolver | URLPattern], str | None, str | None] def include(arg: _URLConf | tuple[_URLConf, str], namespace: str | None = ...) -> _IncludedURLConf: ... # path() @overload def path( route: _StrOrPromise, view: Callable[..., HttpResponseBase], kwargs: dict[str, Any] = ..., name: str = ... ) -> URLPattern: ... @overload def path( route: _StrOrPromise, view: Callable[..., Coroutine[Any, Any, HttpResponseBase]], kwargs: dict[str, Any] = ..., name: str = ..., ) -> URLPattern: ... @overload def path( route: _StrOrPromise, view: _IncludedURLConf, kwargs: dict[str, Any] = ..., name: str = ... ) -> URLResolver: ... @overload def path( route: _StrOrPromise, view: Sequence[URLResolver | str], kwargs: dict[str, Any] = ..., name: str = ... ) -> URLResolver: ... # re_path() @overload def re_path( route: _StrOrPromise, view: Callable[..., HttpResponseBase], kwargs: dict[str, Any] = ..., name: str = ... ) -> URLPattern: ... @overload def re_path( route: _StrOrPromise, view: Callable[..., Coroutine[Any, Any, HttpResponseBase]], kwargs: dict[str, Any] = ..., name: str = ..., ) -> URLPattern: ... @overload def re_path( route: _StrOrPromise, view: _IncludedURLConf, kwargs: dict[str, Any] = ..., name: str = ... ) -> URLResolver: ... @overload def re_path( route: _StrOrPromise, view: Sequence[URLResolver | str], kwargs: dict[str, Any] = ..., name: str = ... ) -> URLResolver: ... django-stubs-5.2.9/django-stubs/urls/converters.pyi000066400000000000000000000016531513401051600224320ustar00rootroot00000000000000from typing import Any, Protocol from uuid import UUID class _Converter(Protocol): regex: str def __init__(self) -> None: ... def to_python(self, value: str) -> Any: ... def to_url(self, value: Any) -> str: ... class IntConverter: regex: str def to_python(self, value: str) -> int: ... def to_url(self, value: str | int) -> str: ... class StringConverter: regex: str def to_python(self, value: str) -> str: ... def to_url(self, value: str) -> str: ... class UUIDConverter: regex: str def to_python(self, value: str) -> UUID: ... def to_url(self, value: str | UUID) -> str: ... class SlugConverter(StringConverter): ... class PathConverter(StringConverter): ... DEFAULT_CONVERTERS: dict[str, _Converter] REGISTERED_CONVERTERS: dict[str, _Converter] def register_converter(converter: type[_Converter], type_name: str) -> None: ... def get_converters() -> dict[str, _Converter]: ... django-stubs-5.2.9/django-stubs/urls/exceptions.pyi000066400000000000000000000001461513401051600224150ustar00rootroot00000000000000from django.http import Http404 class Resolver404(Http404): ... class NoReverseMatch(Exception): ... django-stubs-5.2.9/django-stubs/urls/resolvers.pyi000066400000000000000000000113601513401051600222600ustar00rootroot00000000000000from collections.abc import Callable, Iterator, Sequence from re import Pattern from types import ModuleType from typing import Any, TypeAlias, overload from django.core.checks.messages import CheckMessage from django.http import HttpRequest, HttpResponse from django.urls import _AnyURL from django.utils.datastructures import MultiValueDict from django.utils.functional import cached_property class ResolverMatch: func: Callable args: tuple[Any, ...] kwargs: dict[str, Any] url_name: str | None app_names: list[str] app_name: str namespaces: list[str] namespace: str view_name: str route: str tried: Any | None _func_path: str def __init__( self, func: Callable, args: tuple[Any, ...], kwargs: dict[str, Any], url_name: str | None = ..., app_names: list[str | None] | None = ..., namespaces: list[str | None] | None = ..., route: str | None = ..., tried: Any | None = ..., captured_kwargs: dict[str, Any] | None = ..., extra_kwargs: dict[str, Any] | None = ..., ) -> None: ... def __getitem__(self, index: int) -> Any: ... # for tuple unpacking -- python/mypy#2220 def __iter__(self) -> Iterator[Any]: ... def get_resolver(urlconf: str | None = ...) -> URLResolver: ... def get_ns_resolver(ns_pattern: str, resolver: URLResolver, converters: tuple) -> URLResolver: ... _Pattern: TypeAlias = RegexPattern | RoutePattern | LocalePrefixPattern class LocaleRegexDescriptor: @overload def __get__(self, instance: None, cls: type[_Pattern] = ...) -> LocaleRegexDescriptor: ... @overload def __get__(self, instance: _Pattern, cls: type[_Pattern] = ...) -> Pattern[str]: ... class CheckURLMixin: def describe(self) -> str: ... class RegexPattern(CheckURLMixin): regex: LocaleRegexDescriptor name: str | None converters: dict[str, Any] def __init__(self, regex: str, name: str | None = ..., is_endpoint: bool = ...) -> None: ... def match(self, path: str) -> tuple[str, tuple, dict[str, str]] | None: ... def check(self) -> list[CheckMessage]: ... whitespace_set: frozenset[str] class LocaleRegexRouteDescriptor: def __get__(self, instance: RoutePattern | None, cls: type | None = None) -> Pattern[str]: ... class RoutePattern(CheckURLMixin): regex: LocaleRegexRouteDescriptor name: str | None converters: dict[str, Any] def __init__(self, route: str, name: str | None = ..., is_endpoint: bool = ...) -> None: ... def match(self, path: str) -> tuple[str, tuple, dict[str, int | str]] | None: ... def check(self) -> list[CheckMessage]: ... class LocalePrefixPattern: prefix_default_language: bool converters: dict[str, Any] def __init__(self, prefix_default_language: bool = ...) -> None: ... @property def regex(self) -> Pattern[str]: ... @property def language_prefix(self) -> str: ... def match(self, path: str) -> tuple[str, tuple, dict[str, Any]] | None: ... def check(self) -> list[CheckMessage]: ... def describe(self) -> str: ... class URLPattern: pattern: _Pattern callback: Callable default_args: dict[str, Any] name: str | None def __init__( self, pattern: _Pattern, callback: Callable, default_args: dict[str, Any] | None = ..., name: str | None = ..., ) -> None: ... def check(self) -> list[CheckMessage]: ... def resolve(self, path: str) -> ResolverMatch | None: ... @cached_property def lookup_str(self) -> str: ... class URLResolver: pattern: _Pattern urlconf_name: str | Sequence[_AnyURL] | ModuleType callback: None default_kwargs: dict[str, Any] namespace: str | None app_name: str | None _local: Any _reverse_dict: MultiValueDict def __init__( self, pattern: _Pattern, urlconf_name: str | Sequence[_AnyURL] | ModuleType, default_kwargs: dict[str, Any] | None = ..., app_name: str | None = ..., namespace: str | None = ..., ) -> None: ... @property def reverse_dict(self) -> MultiValueDict: ... @property def namespace_dict(self) -> dict[str, tuple[str, URLResolver]]: ... @property def app_dict(self) -> dict[str, list[str]]: ... @cached_property def urlconf_module(self) -> ModuleType | None | Sequence[_AnyURL]: ... @cached_property def url_patterns(self) -> list[_AnyURL]: ... def resolve(self, path: str) -> ResolverMatch: ... def resolve_error_handler(self, view_type: int) -> Callable[[HttpRequest], HttpResponse]: ... def reverse(self, lookup_view: str, *args: Any, **kwargs: Any) -> str: ... def _is_callback(self, name: str) -> bool: ... def _populate(self) -> None: ... def check(self) -> list[CheckMessage]: ... django-stubs-5.2.9/django-stubs/urls/utils.pyi000066400000000000000000000002351513401051600213730ustar00rootroot00000000000000from collections.abc import Callable def get_callable(lookup_view: Callable | str) -> Callable: ... def get_mod_func(callback: str) -> tuple[str, str]: ... django-stubs-5.2.9/django-stubs/utils/000077500000000000000000000000001513401051600176635ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/utils/__init__.pyi000066400000000000000000000000001513401051600221330ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/utils/_os.pyi000066400000000000000000000004221513401051600211640ustar00rootroot00000000000000import os from pathlib import Path from typing import TypeAlias _PathCompatible: TypeAlias = str | os.PathLike[str] def safe_join(base: _PathCompatible, *paths: _PathCompatible) -> str: ... def symlinks_supported() -> bool: ... def to_path(value: Path | str) -> Path: ... django-stubs-5.2.9/django-stubs/utils/archive.pyi000066400000000000000000000027171513401051600220360ustar00rootroot00000000000000from collections.abc import Iterable, Sequence from types import TracebackType from typing import Any from typing_extensions import Self class ArchiveException(Exception): ... class UnrecognizedArchiveFormat(ArchiveException): ... def extract(path: str, to_path: str) -> None: ... class Archive: def __init__(self, file: str) -> None: ... def __enter__(self) -> Self: ... def __exit__( self, exc_type: type[BaseException] | None, exc_value: BaseException | None, traceback: TracebackType | None, ) -> None: ... def extract(self, to_path: str) -> None: ... def list(self) -> None: ... def close(self) -> None: ... class BaseArchive: def split_leading_dir(self, path: str) -> Sequence[str]: ... def has_leading_dir(self, paths: Iterable[str]) -> bool: ... def target_filename(self, to_path: str, name: str) -> str: ... def extract(self, to_path: str) -> None: ... def list(self, *args: Any, **kwargs: Any) -> None: ... class TarArchive(BaseArchive): def __init__(self, file: str) -> None: ... def list(self, *args: Any, **kwargs: Any) -> None: ... def close(self) -> None: ... def extract(self, to_path: str) -> None: ... class ZipArchive(BaseArchive): def __init__(self, file: str) -> None: ... def list(self, *args: Any, **kwargs: Any) -> None: ... def extract(self, to_path: str) -> None: ... def close(self) -> None: ... extension_map: dict[str, type[BaseArchive]] django-stubs-5.2.9/django-stubs/utils/asyncio.pyi000066400000000000000000000003461513401051600220560ustar00rootroot00000000000000from collections.abc import Callable from typing import TypeVar, overload _C = TypeVar("_C", bound=Callable) @overload def async_unsafe(message: str) -> Callable[[_C], _C]: ... @overload def async_unsafe(message: _C) -> _C: ... django-stubs-5.2.9/django-stubs/utils/autoreload.pyi000066400000000000000000000054721513401051600225550ustar00rootroot00000000000000import threading import types from collections.abc import Callable, Iterable, Iterator from logging import Logger from pathlib import Path from typing import Any from django.apps.registry import Apps from django.dispatch import Signal from django.utils._os import _PathCompatible from typing_extensions import ParamSpec _P = ParamSpec("_P") logger: Logger autoreload_started: Signal file_changed: Signal DJANGO_AUTORELOAD_ENV: str def is_django_module(module: types.ModuleType) -> bool: ... def is_django_path(path: _PathCompatible) -> bool: ... def check_errors(fn: Callable[_P, Any]) -> Callable[_P, None]: ... def raise_last_exception() -> None: ... def ensure_echo_on() -> None: ... def iter_all_python_module_files() -> set[Path]: ... def iter_modules_and_files( modules: Iterable[types.ModuleType], extra_files: Iterable[_PathCompatible] ) -> frozenset[Path]: ... def common_roots(paths: Iterable[Path]) -> Iterable[Path]: ... def sys_path_directories() -> Iterator[Path]: ... def get_child_arguments() -> list[str]: ... def trigger_reload(filename: str) -> None: ... def restart_with_reloader() -> int: ... class BaseReloader: extra_files: set[Path] directory_globs: dict[Path, set[str]] def __init__(self) -> None: ... def watch_dir(self, path: _PathCompatible, glob: str) -> None: ... def watched_files(self, include_globs: bool = True) -> Iterator[Path]: ... def wait_for_apps_ready(self, app_reg: Apps, django_main_thread: threading.Thread) -> bool: ... def run(self, django_main_thread: threading.Thread) -> None: ... def run_loop(self) -> None: ... def tick(self) -> Iterator[None]: ... @classmethod def check_availability(cls) -> bool | None: ... def notify_file_changed(self, path: _PathCompatible) -> None: ... @property def should_stop(self) -> bool: ... def stop(self) -> None: ... class StatReloader(BaseReloader): SLEEP_TIME: int def snapshot_files(self) -> Iterator[tuple[Path, float]]: ... @classmethod def check_availability(cls) -> bool: ... class WatchmanUnavailable(RuntimeError): ... class WatchmanReloader(BaseReloader): processed_request: threading.Event client_timeout: int def __init__(self) -> None: ... @property def client(self) -> Any: ... def watched_roots(self, watched_files: Iterable[Path]) -> frozenset[Path]: ... def update_watches(self) -> None: ... def request_processed(self, **kwargs: Any) -> None: ... def check_server_status(self, inner_ex: BaseException | None = None) -> bool: ... @classmethod def check_availability(cls) -> None: ... def stop(self) -> None: ... def get_reloader() -> BaseReloader: ... def start_django(reloader: BaseReloader, main_func: Callable, *args: Any, **kwargs: Any) -> None: ... def run_with_reloader(main_func: Callable, *args: Any, **kwargs: Any) -> None: ... django-stubs-5.2.9/django-stubs/utils/cache.pyi000066400000000000000000000024731513401051600214570ustar00rootroot00000000000000from collections.abc import Iterable from typing import Any from django.core.cache.backends.base import BaseCache from django.http.request import HttpRequest from django.http.response import HttpResponse, HttpResponseBase cc_delim_re: Any def patch_cache_control(response: HttpResponseBase, **kwargs: Any) -> None: ... def get_max_age(response: HttpResponseBase) -> int | None: ... def set_response_etag(response: HttpResponseBase) -> HttpResponseBase: ... def get_conditional_response( request: HttpRequest, etag: str | None = ..., last_modified: int | None = ..., response: HttpResponse | None = ..., ) -> HttpResponse | None: ... def patch_response_headers(response: HttpResponseBase, cache_timeout: int | None = ...) -> None: ... def add_never_cache_headers(response: HttpResponseBase) -> None: ... def patch_vary_headers(response: HttpResponseBase, newheaders: Iterable[str]) -> None: ... def has_vary_header(response: HttpResponseBase, header_query: str) -> bool: ... def get_cache_key( request: HttpRequest, key_prefix: str | None = ..., method: str = ..., cache: BaseCache | None = ... ) -> str | None: ... def learn_cache_key( request: HttpRequest, response: HttpResponseBase, cache_timeout: float | None = ..., key_prefix: str | None = ..., cache: BaseCache | None = ..., ) -> str: ... django-stubs-5.2.9/django-stubs/utils/choices.pyi000066400000000000000000000026501513401051600220260ustar00rootroot00000000000000from collections.abc import Callable, Iterable, Iterator, Mapping from typing import Any, Protocol, TypeAlias, TypeVar, type_check_only from django.db.models import Choices _Choice: TypeAlias = tuple[Any, Any] _ChoiceNamedGroup: TypeAlias = tuple[str, Iterable[_Choice]] _Choices: TypeAlias = Iterable[_Choice | _ChoiceNamedGroup] _ChoicesMapping: TypeAlias = Mapping[Any, Any] _ChoicesInput: TypeAlias = _Choices | _ChoicesMapping | type[Choices] | Callable[[], _Choices | _ChoicesMapping] # noqa: PYI047 @type_check_only class _ChoicesCallable(Protocol): def __call__(self) -> _Choices: ... class BaseChoiceIterator: def __getitem__(self, index: int) -> _Choice | _ChoiceNamedGroup: ... def __iter__(self) -> Iterator[_Choice | _ChoiceNamedGroup]: ... class BlankChoiceIterator(BaseChoiceIterator): choices: _Choices blank_choice: _Choices def __init__(self, choices: _Choices, blank_choice: _Choices) -> None: ... class CallableChoiceIterator(BaseChoiceIterator): func: _ChoicesCallable def __init__(self, func: _ChoicesCallable) -> None: ... _V = TypeVar("_V") _L = TypeVar("_L") def flatten_choices(choices: Iterable[tuple[_V, _L | Iterable[tuple[_V, _L]]]]) -> Iterator[tuple[_V, _L]]: ... def normalize_choices(value: Any, *, depth: int = 0) -> Any: ... __all__ = [ "BaseChoiceIterator", "BlankChoiceIterator", "CallableChoiceIterator", "flatten_choices", "normalize_choices", ] django-stubs-5.2.9/django-stubs/utils/connection.pyi000066400000000000000000000024431513401051600225500ustar00rootroot00000000000000from collections.abc import Iterator, Sequence from typing import Any, Generic, TypeVar from django.utils.functional import cached_property _T = TypeVar("_T") class ConnectionProxy(Generic[_T]): def __init__(self, connections: BaseConnectionHandler[_T], alias: str) -> None: ... def __getattr__(self, item: str) -> Any: ... def __setattr__(self, name: str, value: Any) -> None: ... def __delattr__(self, name: str) -> None: ... def __contains__(self, key: str) -> bool: ... def __eq__(self, other: object) -> bool: ... class ConnectionDoesNotExist(Exception): ... class BaseConnectionHandler(Generic[_T]): settings_name: str | None exception_class: type[Exception] thread_critical: bool @cached_property def settings(self) -> dict[str, Any]: ... def __init__(self, settings: Any | None = None) -> None: ... def configure_settings(self, settings: dict[str, Any] | None) -> dict[str, Any]: ... def create_connection(self, alias: str) -> _T: ... def __getitem__(self, alias: str) -> _T: ... def __setitem__(self, key: str, value: _T) -> None: ... def __delitem__(self, key: str) -> None: ... def __iter__(self) -> Iterator[str]: ... def all(self, initialized_only: bool = False) -> Sequence[_T]: ... def close_all(self) -> None: ... django-stubs-5.2.9/django-stubs/utils/crypto.pyi000066400000000000000000000010751513401051600217310ustar00rootroot00000000000000from collections.abc import Callable from hmac import HMAC RANDOM_STRING_CHARS: str class InvalidAlgorithm(ValueError): ... def salted_hmac( key_salt: bytes | str, value: bytes | str, secret: bytes | str | None = None, *, algorithm: str = "sha1" ) -> HMAC: ... def get_random_string(length: int, allowed_chars: str = ...) -> str: ... def constant_time_compare(val1: bytes | str, val2: bytes | str) -> bool: ... def pbkdf2( password: bytes | str, salt: bytes | str, iterations: int, dklen: int = 0, digest: Callable | None = None, ) -> bytes: ... django-stubs-5.2.9/django-stubs/utils/datastructures.pyi000066400000000000000000000114151513401051600234650ustar00rootroot00000000000000from collections.abc import Collection, Iterable, Iterator, Mapping, MutableMapping, MutableSet from typing import Any, Generic, NoReturn, Protocol, TypeAlias, TypeVar, overload, type_check_only from _typeshed import Incomplete from typing_extensions import Self _K = TypeVar("_K") _V = TypeVar("_V") _Z = TypeVar("_Z") _I = TypeVar("_I", covariant=True) # Unfortunately, there's often check `if isinstance(var, (list, tuple))` in django # codebase. So we need sometimes to declare exactly list or tuple. _ListOrTuple: TypeAlias = list[_K] | tuple[_K, ...] | tuple[()] # noqa: PYI047 @type_check_only class _PropertyDescriptor(Generic[_K, _V]): """ This helper property descriptor allows defining asynmetric getter/setters which mypy currently doesn't support with either: class HttpResponse: @property def content(...): ... @property.setter def content(...): ... or: class HttpResponse: def _get_content(...): ... def _set_content(...): ... content = property(_get_content, _set_content) """ def __get__(self, instance: Any, owner: Any | None) -> _V: ... def __set__(self, instance: Any, value: _K) -> None: ... @type_check_only class _IndexableCollection(Protocol[_I], Collection[_I]): # noqa: PYI046 @overload def __getitem__(self, index: int) -> _I: ... @overload def __getitem__(self, index: slice) -> Self: ... class OrderedSet(MutableSet[_K]): dict: dict[_K, None] def __init__(self, iterable: Iterable[_K] | None = None) -> None: ... def __contains__(self, item: object) -> bool: ... def __iter__(self) -> Iterator[_K]: ... def __reversed__(self) -> Iterator[_K]: ... def __bool__(self) -> bool: ... def __len__(self) -> int: ... def add(self, item: _K) -> None: ... def remove(self, item: _K) -> None: ... def discard(self, item: _K) -> None: ... class MultiValueDictKeyError(KeyError): ... class MultiValueDict(dict[_K, _V]): @overload def __init__(self, key_to_list_mapping: Mapping[_K, list[_V] | None]) -> None: ... @overload def __init__(self, key_to_list_mapping: Iterable[tuple[_K, list[_V]]] = ()) -> None: ... @overload def get(self, key: _K, default: None = None) -> _V | None: ... @overload def get(self, key: _K, default: _V) -> _V: ... @overload def get(self, key: _K, default: _Z) -> _V | _Z: ... def getlist(self, key: _K, default: _Z | None = None) -> list[_V] | _Z: ... def setlist(self, key: _K, list_: list[_V]) -> None: ... @overload def setdefault(self: MultiValueDict[_K, _V | None], key: _K, default: None = None) -> _V | None: ... @overload def setdefault(self, key: _K, default: _V) -> _V: ... def setlistdefault(self, key: _K, default_list: list[_V] | None = None) -> list[_V]: ... def appendlist(self, key: _K, value: _V) -> None: ... def items(self) -> Iterator[tuple[_K, _V | list[object]]]: ... # type: ignore[override] def lists(self) -> Iterable[tuple[_K, list[_V]]]: ... def dict(self) -> dict[_K, _V | list[object]]: ... def copy(self) -> Self: ... def __getitem__(self, key: _K) -> _V | list[object]: ... # type: ignore[override] def __setitem__(self, key: _K, value: _V) -> None: ... # These overrides are needed to convince mypy that this isn't an abstract class def __delitem__(self, item: _K) -> None: ... def __len__(self) -> int: ... def __iter__(self) -> Iterator[_K]: ... # Fake to make `values` work properly def values(self) -> Iterator[_V | list[object]]: ... # type: ignore[override] def __copy__(self) -> Self: ... def __deepcopy__(self, memo: MutableMapping[int, Incomplete]) -> Self: ... class ImmutableList(tuple[_V, ...]): warning: str def __new__(cls, *args: Any, warning: str = "ImmutableList object is immutable.", **kwargs: Any) -> Self: ... def complain(self, *args: Any, **kwargs: Any) -> NoReturn: ... @type_check_only class _ItemCallable(Protocol[_V]): """Don't mess with arguments when assigning in class body in stub""" def __call__(self, value: _V, /) -> _V: ... class DictWrapper(dict[str, _V]): func: _ItemCallable[_V] prefix: str @overload def __init__(self, data: Mapping[str, _V], func: _ItemCallable[_V], prefix: str) -> None: ... @overload def __init__(self, data: Iterable[tuple[str, _V]], func: _ItemCallable[_V], prefix: str) -> None: ... def __getitem__(self, key: str) -> _V: ... class CaseInsensitiveMapping(Mapping[str, _V]): _store: dict[str, tuple[str, _V]] def __init__(self, data: Mapping[str, _V] | Iterable[tuple[str, _V]]) -> None: ... def __getitem__(self, key: str) -> _V: ... def __len__(self) -> int: ... def __iter__(self) -> Iterator[str]: ... def copy(self) -> Self: ... django-stubs-5.2.9/django-stubs/utils/dateformat.pyi000066400000000000000000000037251513401051600225430ustar00rootroot00000000000000from datetime import date, tzinfo from datetime import datetime as builtin_datetime from datetime import time as builtin_time from re import Pattern from typing import Any, Literal re_formatchars: Pattern[str] re_escaped: Pattern[str] class Formatter: def format(self, formatstr: str) -> str: ... class TimeFormat(Formatter): data: builtin_datetime | builtin_time timezone: tzinfo | None def __init__(self, obj: builtin_datetime | builtin_time) -> None: ... def a(self) -> str: ... def A(self) -> str: ... def e(self) -> str: ... def f(self) -> int | str: ... def g(self) -> int: ... def G(self) -> int: ... def h(self) -> str: ... def H(self) -> str: ... def i(self) -> str: ... def O(self) -> str: ... def P(self) -> str: ... def s(self) -> str: ... def T(self) -> str: ... def u(self) -> str: ... def Z(self) -> int | Literal[""]: ... class DateFormat(TimeFormat): data: builtin_datetime | date | builtin_time # type: ignore[assignment] timezone: tzinfo | None year_days: Any def __init__(self, obj: builtin_datetime | builtin_time | date) -> None: ... def b(self) -> str: ... def c(self) -> str: ... def d(self) -> str: ... def D(self) -> str: ... def E(self) -> str: ... def F(self) -> str: ... def I(self) -> str: ... def j(self) -> int: ... def l(self) -> str: ... def L(self) -> bool: ... def m(self) -> str: ... def M(self) -> str: ... def n(self) -> int: ... def N(self) -> str: ... def o(self) -> int: ... def r(self) -> str: ... def S(self) -> str: ... def t(self) -> str: ... def U(self) -> int: ... def w(self) -> int: ... def W(self) -> int: ... def y(self) -> str: ... def Y(self) -> int: ... def z(self) -> int: ... def format(value: builtin_datetime | date | builtin_time, format_string: str) -> str: ... def time_format(value: builtin_datetime | builtin_time, format_string: str) -> str: ... django-stubs-5.2.9/django-stubs/utils/dateparse.pyi000066400000000000000000000007711513401051600223630ustar00rootroot00000000000000from datetime import date, time, timedelta from datetime import datetime as builtin_datetime from re import Pattern date_re: Pattern[str] time_re: Pattern[str] datetime_re: Pattern[str] standard_duration_re: Pattern[str] iso8601_duration_re: Pattern[str] postgres_interval_re: Pattern[str] def parse_date(value: str) -> date | None: ... def parse_time(value: str) -> time | None: ... def parse_datetime(value: str) -> builtin_datetime | None: ... def parse_duration(value: str) -> timedelta | None: ... django-stubs-5.2.9/django-stubs/utils/dates.pyi000066400000000000000000000002341513401051600215050ustar00rootroot00000000000000WEEKDAYS: dict[int, str] WEEKDAYS_ABBR: dict[int, str] MONTHS: dict[int, str] MONTHS_3: dict[int, str] MONTHS_AP: dict[int, str] MONTHS_ALT: dict[int, str] django-stubs-5.2.9/django-stubs/utils/deconstruct.pyi000066400000000000000000000012011513401051600227350ustar00rootroot00000000000000from collections.abc import Callable, Sequence from typing import Any, TypeVar, overload, type_check_only from typing_extensions import Self # Contains additions from a class being decorated with '@deconstructible' @type_check_only class _Deconstructible: def __new__(cls, *args: Any, **kwargs: Any) -> Self: ... def deconstruct(obj) -> tuple[str, Sequence[Any], dict[str, Any]]: ... _T = TypeVar("_T") _TCallable = TypeVar("_TCallable", bound=Callable[..., Any]) @overload def deconstructible(_type: type[_T]) -> type[_T]: ... @overload def deconstructible(*, path: str | None = None) -> Callable[[_TCallable], _TCallable]: ... django-stubs-5.2.9/django-stubs/utils/decorators.pyi000066400000000000000000000021451513401051600225550ustar00rootroot00000000000000from collections.abc import Callable, Iterable from typing import Any, TypeAlias, TypeVar from django.http.response import HttpResponseBase from django.utils.deprecation import MiddlewareMixin from django.views.generic.base import View _ViewType = TypeVar("_ViewType", bound=View | Callable[..., Any]) # Any callable _CallableType = TypeVar("_CallableType", bound=Callable[..., Any]) _DECORATOR: TypeAlias = Callable[..., Callable[..., HttpResponseBase] | Callable[..., Callable[..., HttpResponseBase]]] classonlymethod = classmethod def method_decorator( decorator: _DECORATOR | Iterable[_DECORATOR], name: str = "" ) -> Callable[[_ViewType], _ViewType]: ... def decorator_from_middleware_with_args(middleware_class: type) -> _DECORATOR: ... def decorator_from_middleware(middleware_class: type) -> _DECORATOR: ... def make_middleware_decorator(middleware_class: type[MiddlewareMixin]) -> _DECORATOR: ... def sync_and_async_middleware(func: _CallableType) -> _CallableType: ... def sync_only_middleware(func: _CallableType) -> _CallableType: ... def async_only_middleware(func: _CallableType) -> _CallableType: ... django-stubs-5.2.9/django-stubs/utils/deprecation.pyi000066400000000000000000000032071513401051600227050ustar00rootroot00000000000000from collections.abc import Awaitable, Callable from typing import Any, ClassVar, Protocol, TypeAlias, type_check_only from django.http.request import HttpRequest from django.http.response import HttpResponseBase class RemovedInDjango60Warning(DeprecationWarning): ... class RemovedInDjango61Warning(PendingDeprecationWarning): ... RemovedInNextVersionWarning: TypeAlias = RemovedInDjango60Warning RemovedAfterNextVersionWarning: TypeAlias = RemovedInDjango61Warning class warn_about_renamed_method: class_name: str old_method_name: str new_method_name: str deprecation_warning: type[DeprecationWarning] def __init__( self, class_name: str, old_method_name: str, new_method_name: str, deprecation_warning: type[DeprecationWarning] ) -> None: ... def __call__(self, f: Callable) -> Callable: ... class RenameMethodsBase(type): renamed_methods: Any def __new__(cls, name: Any, bases: Any, attrs: Any) -> type: ... @type_check_only class _GetResponseCallable(Protocol): def __call__(self, request: HttpRequest, /) -> HttpResponseBase: ... @type_check_only class _AsyncGetResponseCallable(Protocol): def __call__(self, request: HttpRequest, /) -> Awaitable[HttpResponseBase]: ... class MiddlewareMixin: sync_capable: ClassVar[bool] async_capable: ClassVar[bool] get_response: _GetResponseCallable | _AsyncGetResponseCallable def __init__(self, get_response: _GetResponseCallable | _AsyncGetResponseCallable) -> None: ... def __call__(self, request: HttpRequest) -> HttpResponseBase | Awaitable[HttpResponseBase]: ... async def __acall__(self, request: HttpRequest) -> HttpResponseBase: ... django-stubs-5.2.9/django-stubs/utils/duration.pyi000066400000000000000000000003061513401051600222320ustar00rootroot00000000000000from datetime import timedelta def duration_string(duration: timedelta) -> str: ... def duration_iso_string(duration: timedelta) -> str: ... def duration_microseconds(delta: timedelta) -> int: ... django-stubs-5.2.9/django-stubs/utils/encoding.pyi000066400000000000000000000064041513401051600222000ustar00rootroot00000000000000import datetime from decimal import Decimal from typing import Any, Literal, TypeGuard, TypeVar, overload from django.utils.functional import Promise class DjangoUnicodeDecodeError(UnicodeDecodeError): obj: bytes def __init__(self, obj: bytes, *args: Any) -> None: ... _P = TypeVar("_P", bound=Promise) _S = TypeVar("_S", bound=str) _B = TypeVar("_B", bound=bytes) _PT = TypeVar("_PT", None, int, float, Decimal, datetime.datetime, datetime.date, datetime.time) @overload def smart_str(s: _P, encoding: str = "utf-8", strings_only: bool = False, errors: str = "strict") -> _P: ... @overload def smart_str(s: _S, encoding: str = "utf-8", *, errors: str = "strict") -> _S: ... @overload def smart_str(s: Any, encoding: str = "utf-8", *, errors: str = "strict") -> str: ... @overload def smart_str(s: _PT, encoding: str = "utf-8", strings_only: Literal[True] = True, errors: str = "strict") -> _PT: ... @overload def smart_str(s: _S, encoding: str = "utf-8", strings_only: bool = False, errors: str = "strict") -> _S: ... @overload def smart_str(s: Any, encoding: str = "utf-8", strings_only: bool = False, errors: str = "strict") -> str: ... def is_protected_type(obj: Any) -> TypeGuard[_PT]: ... @overload def force_str(s: _S, encoding: str = "utf-8", *, errors: str = "strict") -> _S: ... @overload def force_str(s: Any, encoding: str = "utf-8", *, errors: str = "strict") -> str: ... @overload def force_str(s: _PT, encoding: str = "utf-8", strings_only: Literal[True] = True, errors: str = "strict") -> _PT: ... @overload def force_str(s: _S, encoding: str = "utf-8", strings_only: bool = False, errors: str = "strict") -> _S: ... @overload def force_str(s: Any, encoding: str = "utf-8", strings_only: bool = False, errors: str = "strict") -> str: ... @overload def smart_bytes(s: _P, encoding: str = "utf-8", strings_only: bool = False, errors: str = "strict") -> _P: ... @overload def smart_bytes(s: _B, encoding: Literal["utf-8"] = "utf-8", *, errors: str = "strict") -> _B: ... @overload def smart_bytes(s: Any, encoding: str = "utf-8", *, errors: str = "strict") -> bytes: ... @overload def smart_bytes(s: _PT, encoding: str = "utf-8", strings_only: Literal[True] = True, errors: str = "strict") -> _PT: ... @overload def smart_bytes(s: Any, encoding: str = "utf-8", strings_only: bool = False, errors: str = "strict") -> bytes: ... @overload def force_bytes(s: _B, encoding: Literal["utf-8"] = "utf-8", *, errors: str = "strict") -> _B: ... @overload def force_bytes(s: Any, encoding: str = "utf-8", *, errors: str = "strict") -> bytes: ... @overload def force_bytes(s: _PT, encoding: str = "utf-8", strings_only: Literal[True] = True, errors: str = "strict") -> _PT: ... @overload def force_bytes(s: Any, encoding: str = "utf-8", strings_only: bool = False, errors: str = "strict") -> bytes: ... @overload def iri_to_uri(iri: None) -> None: ... @overload def iri_to_uri(iri: str | Promise) -> str: ... @overload def uri_to_iri(uri: None) -> None: ... @overload def uri_to_iri(uri: Any) -> str: ... def escape_uri_path(path: str) -> str: ... def punycode(domain: str) -> str: ... def repercent_broken_unicode(path: bytes) -> bytes: ... @overload def filepath_to_uri(path: None) -> None: ... @overload def filepath_to_uri(path: str) -> str: ... def get_system_encoding() -> str: ... DEFAULT_LOCALE_ENCODING: str django-stubs-5.2.9/django-stubs/utils/feedgenerator.pyi000066400000000000000000000060771513401051600232320ustar00rootroot00000000000000import datetime from collections.abc import Sequence from typing import Any, TypeAlias from django.utils.xmlutils import SimplerXMLGenerator def rfc2822_date(date: datetime.date) -> str: ... def rfc3339_date(date: datetime.date) -> str: ... def get_tag_uri(url: str, date: datetime.date | None) -> str: ... class Stylesheet: def __init__( self, url: str, mimetype: str = ..., media: str = ..., ) -> None: ... @property def url(self) -> str: ... @property def mimetype(self) -> str: ... class SyndicationFeed: feed: dict[str, Any] items: list[dict[str, Any]] def __init__( self, title: str, link: str, description: str | None, language: str | None = ..., author_email: str | None = ..., author_name: str | None = ..., author_link: str | None = ..., subtitle: str | None = ..., categories: tuple[str, str] | None = ..., feed_url: str | None = ..., feed_copyright: str | None = ..., feed_guid: str | None = ..., ttl: int | None = ..., stylesheets: list[Stylesheet] | None = ..., **kwargs: Any, ) -> None: ... def add_item( self, title: str, link: str, description: str, author_email: str | None = ..., author_name: str | None = ..., author_link: str | None = ..., pubdate: datetime.datetime | None = ..., comments: str | None = ..., unique_id: str | None = ..., unique_id_is_permalink: bool | None = ..., categories: Sequence[str | None] | None = ..., item_copyright: str | None = ..., ttl: int | None = ..., updateddate: datetime.datetime | None = ..., enclosures: list[Enclosure] | None = ..., **kwargs: Any, ) -> None: ... def num_items(self) -> int: ... def root_attributes(self) -> dict[Any, Any]: ... def add_root_elements(self, handler: SimplerXMLGenerator) -> None: ... def add_stylesheets(self, handler: SimplerXMLGenerator) -> None: ... def item_attributes(self, item: dict[str, Any]) -> dict[Any, Any]: ... def add_item_elements( self, handler: SimplerXMLGenerator, item: dict[str, Any], ) -> None: ... def write(self, outfile: Any, encoding: Any) -> None: ... def writeString(self, encoding: str) -> str: ... def latest_post_date(self) -> datetime.datetime: ... class Enclosure: length: Any mime_type: str url: str def __init__(self, url: str, length: int | str, mime_type: str) -> None: ... class RssFeed(SyndicationFeed): content_type: str def rss_attributes(self) -> dict[str, str]: ... def write_items(self, handler: SimplerXMLGenerator) -> None: ... def endChannelElement(self, handler: SimplerXMLGenerator) -> None: ... class RssUserland091Feed(RssFeed): ... class Rss201rev2Feed(RssFeed): ... class Atom1Feed(SyndicationFeed): content_type: str ns: str def write_items(self, handler: SimplerXMLGenerator) -> None: ... DefaultFeed: TypeAlias = Rss201rev2Feed django-stubs-5.2.9/django-stubs/utils/formats.pyi000066400000000000000000000034141513401051600220630ustar00rootroot00000000000000import types from collections.abc import Iterator from datetime import date, time from datetime import datetime as builtin_datetime from decimal import Decimal from typing import Any, TypeVar, overload ISO_INPUT_FORMATS: dict[str, list[str]] FORMAT_SETTINGS: frozenset[str] def reset_format_cache() -> None: ... def iter_format_modules(lang: str, format_module_path: list[str] | str | None = None) -> Iterator[types.ModuleType]: ... def get_format_modules(lang: str | None = None) -> list[types.ModuleType]: ... def get_format(format_type: str, lang: str | None = None, use_l10n: bool | None = None) -> Any: ... get_format_lazy: Any def date_format( value: date | builtin_datetime | str, format: str | None = None, use_l10n: bool | None = None ) -> str: ... def time_format( value: time | builtin_datetime | str, format: str | None = None, use_l10n: bool | None = None ) -> str: ... def number_format( value: Decimal | float | str, decimal_pos: int | None = None, use_l10n: bool | None = None, force_grouping: bool = False, ) -> str: ... _T = TypeVar("_T") # Mypy considers this invalid (overlapping signatures), but thanks to implementation # details it works as expected (all values from Union are `localize`d to str, # while type of others is preserved) @overload def localize(value: builtin_datetime | date | time | Decimal | float | str, use_l10n: bool | None = None) -> str: ... @overload def localize(value: _T, use_l10n: bool | None = None) -> _T: ... @overload def localize_input( value: builtin_datetime | date | time | Decimal | float | str, default: str | None = None ) -> str: ... @overload def localize_input(value: _T, default: str | None = None) -> _T: ... def sanitize_separators(value: _T) -> _T: ... def sanitize_strftime_format(fmt: str) -> str: ... django-stubs-5.2.9/django-stubs/utils/functional.pyi000066400000000000000000000102351513401051600225510ustar00rootroot00000000000000from collections.abc import Callable, Iterable # Mypy has special handling for functools.cached_property, reuse typeshed's definition instead of defining our own from functools import cached_property as cached_property from typing import Any, Generic, Protocol, SupportsIndex, TypeAlias, TypeVar, overload, type_check_only from django.db.models.base import Model from typing_extensions import Self _T = TypeVar("_T") # Promise is only subclassed by a proxy class defined in the lazy function # so it makes sense for it to have all the methods available in that proxy class class Promise: def __init__(self, args: Any, kw: Any) -> None: ... def __reduce__(self) -> tuple[Any, tuple[Any]]: ... def __lt__(self, other: Any) -> bool: ... def __mod__(self, rhs: Any) -> Any: ... def __add__(self, other: Any) -> Any: ... def __radd__(self, other: Any) -> Any: ... def __deepcopy__(self, memo: Any) -> Self: ... @type_check_only class _StrPromise(Promise): def __add__(self, s: str, /) -> str: ... def __contains__(self, o: str, /) -> bool: ... def __ge__(self, x: str, /) -> bool: ... def __getitem__(self, i: SupportsIndex | slice, /) -> str: ... def __gt__(self, x: str, /) -> bool: ... def __le__(self, x: str, /) -> bool: ... # __len__ needed here because it defined abstract in Sequence[str] def __len__(self) -> int: ... def __lt__(self, x: str, /) -> bool: ... def __mod__(self, x: Any, /) -> str: ... def __mul__(self, n: SupportsIndex, /) -> str: ... def __rmul__(self, n: SupportsIndex, /) -> str: ... # Mypy requires this for the attribute hook to take effect def __getattribute__(self, name: str, /) -> Any: ... _StrOrPromise: TypeAlias = str | _StrPromise # noqa: PYI047 _C = TypeVar("_C", bound=Callable) def lazy(func: _C, *resultclasses: Any) -> _C: ... def lazystr(text: Any) -> _StrPromise: ... def keep_lazy(*resultclasses: Any) -> Callable: ... def keep_lazy_text(func: Callable) -> Callable: ... empty: object def new_method_proxy(func: Callable[..., _T]) -> Callable[..., _T]: ... class LazyObject: def __init__(self) -> None: ... __getattr__: Callable def __setattr__(self, name: str, value: Any) -> None: ... def __delattr__(self, name: str) -> None: ... def __reduce__(self) -> tuple[Callable, tuple[Model]]: ... def __copy__(self) -> LazyObject: ... # TODO: Deepcopy can return a LazyObject or a wrapped object, but we'll need to make LazyObject generic first def __deepcopy__(self, memo: dict[int, Any]) -> Any: ... __bytes__: Callable __bool__: Callable __dir__: Callable __ne__: Callable __hash__: Callable __getitem__: Callable __setitem__: Callable __delitem__: Callable __iter__: Callable __len__: Callable __contains__: Callable __gt__: Callable __lt__: Callable __add__: Callable __str__: Callable[..., str] def unpickle_lazyobject(wrapped: Model) -> Model: ... class SimpleLazyObject(LazyObject): def __init__(self, func: Callable[[], Any]) -> None: ... def __copy__(self) -> SimpleLazyObject: ... __radd__: Callable _PartitionMember = TypeVar("_PartitionMember") def partition( predicate: Callable[[_PartitionMember], int | bool], values: Iterable[_PartitionMember] ) -> tuple[list[_PartitionMember], list[_PartitionMember]]: ... _Get = TypeVar("_Get", covariant=True) class classproperty(Generic[_Get]): fget: Callable[[Any], _Get] | None def __init__(self, method: Callable[[Any], _Get] | None = None) -> None: ... def __get__(self, instance: Any | None, cls: type[Any] | None = None) -> _Get: ... def getter(self, method: Callable[[Any], _Get]) -> classproperty[_Get]: ... @type_check_only class _Getter(Protocol[_Get]): # noqa: PYI046 """ Type fake to declare some read-only properties (until `property` builtin is generic). We can use something like `Union[_Getter[str], str]` in base class to avoid errors when redefining attribute with property or property with attribute. """ @overload def __get__(self, instance: None, typeobj: type[Any] | None, /) -> Self: ... @overload def __get__(self, instance: Any, typeobj: type[Any] | None, /) -> _Get: ... django-stubs-5.2.9/django-stubs/utils/hashable.pyi000066400000000000000000000001021513401051600221460ustar00rootroot00000000000000from typing import Any def make_hashable(value: Any) -> Any: ... django-stubs-5.2.9/django-stubs/utils/html.pyi000066400000000000000000000063721513401051600213620ustar00rootroot00000000000000from collections.abc import Iterable from functools import cached_property from html.parser import HTMLParser from json import JSONEncoder from re import Pattern from typing import Any, overload from _typeshed import Incomplete from django.utils.functional import SimpleLazyObject, _StrOrPromise from django.utils.safestring import SafeData, SafeString from typing_extensions import deprecated VOID_ELEMENTS: frozenset[str] MAX_URL_LENGTH: int MAX_STRIP_TAGS_DEPTH: int long_open_tag_without_closing_re: SimpleLazyObject def escape(text: Any) -> SafeString: ... def escapejs(value: Any) -> SafeString: ... def json_script(value: Any, element_id: str | None = None, encoder: type[JSONEncoder] | None = None) -> SafeString: ... # conditional_escape could use a protocol to be more precise, see https://github.com/typeddjango/django-stubs/issues/1474 def conditional_escape(text: _StrOrPromise | SafeData) -> SafeString: ... @overload @deprecated("Calling format_html() without passing args or kwargs is deprecated.") def format_html(format_string: str) -> SafeString: ... @overload def format_html(format_string: str, *args: Any, **kwargs: Any) -> SafeString: ... def format_html_join(sep: str, format_string: str, args_generator: Iterable[Iterable[Any]]) -> SafeString: ... def linebreaks(value: Any, autoescape: bool = False) -> str: ... class MLStripper(HTMLParser): fed: Any def __init__(self) -> None: ... def handle_data(self, d: str) -> None: ... def handle_entityref(self, name: str) -> None: ... def handle_charref(self, name: str) -> None: ... def get_data(self) -> str: ... def strip_tags(value: str) -> str: ... def strip_spaces_between_tags(value: str) -> str: ... def smart_urlquote(url: str) -> str: ... def urlize(text: str, trim_url_limit: int | None = None, nofollow: bool = False, autoescape: bool = False) -> str: ... def avoid_wrapping(value: str) -> str: ... def html_safe(klass: type) -> type: ... class CountsDict(dict[str, Any]): def __init__(self, *args: Any, word: str, **kwargs: Any) -> None: ... def __missing__(self, key: str) -> Any: ... class Urlizer: trailing_punctuation_chars: str wrapping_punctuation: Incomplete word_split_re: Pattern[str] | SimpleLazyObject simple_url_re: Pattern[str] | SimpleLazyObject simple_url_2_re: Pattern[str] | SimpleLazyObject mailto_template: str url_template: str def __call__( self, text: Incomplete, trim_url_limit: Incomplete | None = None, nofollow: bool = False, autoescape: bool = False, ) -> Incomplete: ... def handle_word( self, word: Incomplete, *, safe_input: Incomplete, trim_url_limit: Incomplete | None = None, nofollow: bool = False, autoescape: bool = False, ) -> Incomplete: ... def trim_url(self, x: str, *, limit: int | None) -> Incomplete: ... def trim_punctuation(self, word: str) -> tuple[str, str, str]: ... @staticmethod def is_email_simple(value: str) -> bool: ... @cached_property def wrapping_punctuation_openings(self) -> str: ... @cached_property def trailing_punctuation_chars_no_semicolon(self) -> str: ... @cached_property def trailing_punctuation_chars_has_semicolon(self) -> bool: ... urlizer: Urlizer django-stubs-5.2.9/django-stubs/utils/http.pyi000066400000000000000000000025211513401051600213650ustar00rootroot00000000000000from collections.abc import Iterable, Mapping from re import Pattern ETAG_MATCH: Pattern[str] MONTHS: list[str] RFC1123_DATE: Pattern[str] RFC850_DATE: Pattern[str] ASCTIME_DATE: Pattern[str] RFC3986_GENDELIMS: str RFC3986_SUBDELIMS: str MAX_URL_LENGTH: int MAX_URL_REDIRECT_LENGTH: int def urlencode( query: ( Mapping[str, str | bytes | int | Iterable[str | bytes | int]] | Iterable[tuple[str, str | bytes | int | Iterable[str | bytes | int]]] | None ), doseq: bool = False, ) -> str: ... def http_date(epoch_seconds: float | None = None) -> str: ... def parse_http_date(date: str) -> int: ... def parse_http_date_safe(date: str) -> int | None: ... def base36_to_int(s: str) -> int: ... def int_to_base36(i: int) -> str: ... def urlsafe_base64_encode(s: bytes) -> str: ... def urlsafe_base64_decode(s: str) -> bytes: ... def parse_etags(etag_str: str) -> list[str]: ... def quote_etag(etag_str: str) -> str: ... def is_same_domain(host: str, pattern: str) -> bool: ... def url_has_allowed_host_and_scheme( url: str | None, allowed_hosts: str | Iterable[str] | None, require_https: bool = False ) -> bool: ... def escape_leading_slashes(url: str) -> str: ... def content_disposition_header(as_attachment: bool, filename: str) -> str | None: ... def parse_header_parameters(line: str) -> tuple[str, dict[str, str]]: ... django-stubs-5.2.9/django-stubs/utils/inspect.pyi000066400000000000000000000012261513401051600220540ustar00rootroot00000000000000from collections.abc import Callable from contextlib import AbstractContextManager from inspect import _ParameterKind from typing import Any ARG_KINDS: frozenset[_ParameterKind] def get_func_args(func: Callable[..., Any]) -> list[str]: ... def get_func_full_args(func: Callable[..., Any]) -> list[tuple[str, str] | tuple[str]]: ... def func_accepts_kwargs(func: Callable[..., Any]) -> bool: ... def func_accepts_var_args(func: Callable[..., Any]) -> bool: ... def method_has_no_args(meth: Callable[..., Any]) -> bool: ... def func_supports_parameter(func: Callable[..., Any], name: str) -> bool: ... def lazy_annotations() -> AbstractContextManager[None]: ... django-stubs-5.2.9/django-stubs/utils/ipv6.pyi000066400000000000000000000004341513401051600212730ustar00rootroot00000000000000from ipaddress import IPv6Address from typing import Any MAX_IPV6_ADDRESS_LENGTH: int def clean_ipv6_address( ip_str: Any, unpack_ipv4: bool = False, error_message: str = ..., max_length: int = 39 ) -> str: ... def is_valid_ipv6_address(ip_addr: str | IPv6Address) -> bool: ... django-stubs-5.2.9/django-stubs/utils/itercompat.pyi000066400000000000000000000004121513401051600225520ustar00rootroot00000000000000from typing import Any from typing_extensions import deprecated @deprecated( "django.utils.itercompat.is_iterable() is deprecated and will be removed in Django 6.0. Use isinstance(..., collections.abc.Iterable) instead." ) def is_iterable(x: Any) -> bool: ... django-stubs-5.2.9/django-stubs/utils/log.pyi000066400000000000000000000033261513401051600211730ustar00rootroot00000000000000import logging.config from collections.abc import Callable from logging import Logger, LogRecord from typing import Any from django.core.management.color import Style from django.http import HttpRequest, HttpResponse from django.utils.functional import _StrOrPromise request_logger: Logger DEFAULT_LOGGING: Any def configure_logging(logging_config: str, logging_settings: dict[str, Any]) -> None: ... class AdminEmailHandler(logging.Handler): include_html: bool email_backend: str | None def __init__( self, include_html: bool = False, email_backend: str | None = None, reporter_class: str | None = None, ) -> None: ... def send_mail(self, subject: _StrOrPromise, message: _StrOrPromise, *args: Any, **kwargs: Any) -> None: ... def connection(self) -> Any: ... def format_subject(self, subject: str) -> str: ... class CallbackFilter(logging.Filter): callback: Callable[[str | LogRecord], bool] def __init__(self, callback: Callable[[str | LogRecord], bool]) -> None: ... def filter(self, record: str | LogRecord) -> bool: ... class RequireDebugFalse(logging.Filter): def filter(self, record: str | LogRecord) -> bool: ... class RequireDebugTrue(logging.Filter): def filter(self, record: str | LogRecord) -> bool: ... class ServerFormatter(logging.Formatter): default_time_format: str style: Style def __init__(self, *args: Any, **kwargs: Any) -> None: ... def uses_server_time(self) -> bool: ... def log_response( message: str, *args: Any, response: HttpResponse | None = None, request: HttpRequest | None = None, logger: Logger = ..., level: str | None = None, exception: BaseException | None = None, ) -> None: ... django-stubs-5.2.9/django-stubs/utils/lorem_ipsum.pyi000066400000000000000000000003641513401051600227440ustar00rootroot00000000000000from typing import Any COMMON_P: str WORDS: Any COMMON_WORDS: Any def sentence() -> str: ... def paragraph() -> str: ... def paragraphs(count: int, common: bool = True) -> list[str]: ... def words(count: int, common: bool = True) -> str: ... django-stubs-5.2.9/django-stubs/utils/module_loading.pyi000066400000000000000000000004701513401051600233710ustar00rootroot00000000000000from typing import Any def cached_import(module_path: str, class_name: str) -> Any: ... def import_string(dotted_path: str) -> Any: ... def autodiscover_modules(*args: Any, **kwargs: Any) -> None: ... def module_has_submodule(package: Any, module_name: str) -> bool: ... def module_dir(module: Any) -> str: ... django-stubs-5.2.9/django-stubs/utils/numberformat.pyi000066400000000000000000000005001513401051600231020ustar00rootroot00000000000000from collections.abc import Iterable from decimal import Decimal def format( number: Decimal | float | str, decimal_sep: str, decimal_pos: int | None = None, grouping: int | Iterable[int] = 0, thousand_sep: str = "", force_grouping: bool = False, use_l10n: bool | None = None, ) -> str: ... django-stubs-5.2.9/django-stubs/utils/regex_helper.pyi000066400000000000000000000016231513401051600230610ustar00rootroot00000000000000from collections.abc import Iterator, Mapping from re import Pattern from typing import TypeVar ESCAPE_MAPPINGS: Mapping[str, str | None] class Choice(list): ... class Group(list): ... class NonCapture(list): ... def normalize(pattern: str) -> list[tuple[str, list[str]]]: ... def next_char(input_iter: Iterator[str]) -> Iterator[tuple[str, bool]]: ... def walk_to_end(ch: str, input_iter: Iterator[tuple[str, bool]]) -> None: ... def get_quantifier(ch: str, input_iter: Iterator[tuple[str, bool]]) -> tuple[int, str | None]: ... def contains(source: Group | NonCapture | str, inst: type[Group]) -> bool: ... def flatten_result( source: list[Choice | Group | str] | Group | NonCapture | None, ) -> tuple[list[str], list[list[str]]]: ... # Returns SimpleLazyObject, but we can safely ignore it _P = TypeVar("_P", str, bytes) def _lazy_re_compile(regex: _P | Pattern[_P], flags: int = 0) -> Pattern[_P]: ... django-stubs-5.2.9/django-stubs/utils/safestring.pyi000066400000000000000000000011151513401051600225510ustar00rootroot00000000000000from collections.abc import Callable from typing import Any, TypeAlias, TypeVar, overload from typing_extensions import Self _SD = TypeVar("_SD", bound=SafeData) class SafeData: def __html__(self) -> Self: ... class SafeString(str, SafeData): @overload def __add__(self, rhs: SafeString) -> SafeString: ... @overload def __add__(self, rhs: str) -> str: ... SafeText: TypeAlias = SafeString _C = TypeVar("_C", bound=Callable) @overload def mark_safe(s: _SD) -> _SD: ... @overload def mark_safe(s: _C) -> _C: ... @overload def mark_safe(s: Any) -> SafeString: ... django-stubs-5.2.9/django-stubs/utils/termcolors.pyi000066400000000000000000000011601513401051600225750ustar00rootroot00000000000000from collections.abc import Callable, Sequence from typing import Any, Literal color_names: tuple[str, ...] foreground: dict[str, str] background: dict[str, str] RESET: Literal["0"] opt_dict: dict[str, str] def colorize(text: str | None = "", opts: Sequence[str] = (), *, fg: str = ..., bg: str = ...) -> str: ... def make_style(opts: Sequence[str] = (), *, fg: str = ..., bg: str = ...) -> Callable[[str | None], str]: ... NOCOLOR_PALETTE: str DARK_PALETTE: str LIGHT_PALETTE: str PALETTES: Any DEFAULT_PALETTE: str def parse_color_setting(config_string: str) -> dict[str, dict[str, tuple[str, ...] | str]] | None: ... django-stubs-5.2.9/django-stubs/utils/text.pyi000066400000000000000000000051171513401051600213760ustar00rootroot00000000000000from collections.abc import Callable, Iterable, Iterator from html.parser import HTMLParser from io import BytesIO from re import Pattern from typing import ClassVar, TypeVar, overload from django.db.models.base import Model from django.utils.functional import SimpleLazyObject, _StrOrPromise, cached_property _StrOrPromiseT = TypeVar("_StrOrPromiseT", bound=_StrOrPromise) _StrOrPromiseOrNoneT = TypeVar("_StrOrPromiseOrNoneT", bound=_StrOrPromise | None) def capfirst(x: _StrOrPromiseOrNoneT) -> _StrOrPromiseOrNoneT: ... re_newlines: Pattern[str] re_camel_case: Pattern[str] def wrap(text: _StrOrPromiseT, width: int) -> _StrOrPromiseT: ... def add_truncation_text(text: str, truncate: str | None = None) -> str: ... def calculate_truncate_chars_length(length: int, replacement: str | None) -> int: ... class TruncateHTMLParser(HTMLParser): TruncationCompleted: ClassVar[type[Exception]] def __init__(self, *, length: int, replacement: str | None, convert_charrefs: bool = True) -> None: ... @cached_property def void_elements(self) -> frozenset[str]: ... class TruncateCharsHTMLParser(TruncateHTMLParser): def process(self, data: str) -> tuple[str, str]: ... class TruncateWordsHTMLParser(TruncateHTMLParser): def process(self, data: str) -> tuple[str, str]: ... class Truncator(SimpleLazyObject): MAX_LENGTH_HTML: ClassVar[int] def __init__(self, text: Model | str) -> None: ... def chars(self, num: int, truncate: str | None = None, html: bool = False) -> str: ... def words(self, num: int, truncate: str | None = None, html: bool = False) -> str: ... def get_valid_filename(name: _StrOrPromiseT) -> _StrOrPromiseT: ... @overload def get_text_list(list_: list[str], last_word: str = ...) -> str: ... @overload def get_text_list(list_: list[_StrOrPromise], last_word: _StrOrPromise = ...) -> _StrOrPromise: ... def normalize_newlines(text: _StrOrPromiseT) -> _StrOrPromiseT: ... def phone2numeric(phone: _StrOrPromiseT) -> _StrOrPromiseT: ... def compress_string(s: bytes, *, max_random_bytes: int | None = None) -> bytes: ... class StreamingBuffer(BytesIO): vals: list[bytes] def read(self) -> bytes: ... # type: ignore[override] def compress_sequence(sequence: Iterable[bytes], *, max_random_bytes: int | None = None) -> Iterator[bytes]: ... smart_split_re: Pattern[str] def smart_split(text: str) -> Iterator[str]: ... def unescape_string_literal(s: _StrOrPromiseT) -> _StrOrPromiseT: ... def slugify(value: _StrOrPromiseT, allow_unicode: bool = False) -> _StrOrPromiseT: ... def camel_case_to_spaces(value: str) -> str: ... format_lazy: Callable[..., _StrOrPromise] django-stubs-5.2.9/django-stubs/utils/timesince.pyi000066400000000000000000000006511513401051600223700ustar00rootroot00000000000000from datetime import date TIME_STRINGS: dict[str, str] TIME_STRINGS_KEYS: list[str] TIME_CHUNKS: list[int] MONTHS_DAYS: tuple[int, ...] def timesince( d: date, now: date | None = None, reversed: bool = False, time_strings: dict[str, str] | None = None, depth: int = 2, ) -> str: ... def timeuntil(d: date, now: date | None = None, time_strings: dict[str, str] | None = None, depth: int = 2) -> str: ... django-stubs-5.2.9/django-stubs/utils/timezone.pyi000066400000000000000000000034601513401051600222430ustar00rootroot00000000000000import zoneinfo from contextlib import ContextDecorator from datetime import date, datetime, time, timedelta, timezone, tzinfo from types import TracebackType from typing import Literal, overload def get_fixed_timezone(offset: timedelta | int) -> timezone: ... def get_default_timezone() -> zoneinfo.ZoneInfo: ... def get_default_timezone_name() -> str: ... def get_current_timezone() -> zoneinfo.ZoneInfo: ... def get_current_timezone_name() -> str: ... def activate(timezone: tzinfo | str) -> None: ... def deactivate() -> None: ... class override(ContextDecorator): timezone: str | tzinfo | None old_timezone: tzinfo | None def __init__(self, timezone: str | tzinfo | None) -> None: ... def __enter__(self) -> None: ... def __exit__( self, exc_type: type[BaseException] | None, exc_value: BaseException | None, exc_tb: TracebackType | None, ) -> None: ... def localtime(value: datetime | None = None, timezone: tzinfo | None = None) -> datetime: ... def localdate(value: datetime | None = None, timezone: tzinfo | None = None) -> date: ... def now() -> datetime: ... @overload def is_aware(value: time) -> Literal[False]: ... @overload def is_aware(value: datetime) -> bool: ... @overload def is_naive(value: time) -> Literal[True]: ... @overload def is_naive(value: datetime) -> bool: ... def make_aware(value: datetime, timezone: tzinfo | None = None) -> datetime: ... def make_naive(value: datetime, timezone: tzinfo | None = None) -> datetime: ... __all__ = [ "activate", "deactivate", "get_current_timezone", "get_current_timezone_name", "get_default_timezone", "get_default_timezone_name", "get_fixed_timezone", "is_aware", "is_naive", "localdate", "localtime", "make_aware", "make_naive", "now", "override", ] django-stubs-5.2.9/django-stubs/utils/translation/000077500000000000000000000000001513401051600222215ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/utils/translation/__init__.pyi000066400000000000000000000046571513401051600245170ustar00rootroot00000000000000from contextlib import ContextDecorator from types import TracebackType from typing import Any from django.http.request import HttpRequest from django.utils.functional import _StrPromise class TranslatorCommentWarning(SyntaxWarning): ... def gettext_noop(message: str) -> str: ... def gettext(message: str) -> str: ... def ngettext(singular: str, plural: str, number: float) -> str: ... def pgettext(context: str, message: str) -> str: ... def npgettext(context: str, singular: str, plural: str, number: int) -> str: ... # lazy evaluated translation functions def gettext_lazy(message: str) -> _StrPromise: ... def pgettext_lazy(context: str, message: str) -> _StrPromise: ... def ngettext_lazy(singular: str, plural: str, number: int | str | None = None) -> _StrPromise: ... def npgettext_lazy(context: str, singular: str, plural: str, number: int | str | None = None) -> _StrPromise: ... def activate(language: str) -> None: ... def deactivate() -> None: ... class override(ContextDecorator): language: str | None deactivate: bool def __init__(self, language: str | None, deactivate: bool = False) -> None: ... old_language: str | None def __enter__(self) -> None: ... def __exit__( self, exc_type: type[BaseException] | None, exc_value: BaseException | None, exc_tb: TracebackType | None, ) -> None: ... def get_language() -> str: ... def get_language_from_path(path: str) -> str | None: ... def get_language_bidi() -> bool: ... def check_for_language(lang_code: str | None) -> bool: ... def to_language(locale: str) -> str: ... def to_locale(language: str) -> str: ... def get_language_from_request(request: HttpRequest, check_path: bool = False) -> str: ... def templatize(src: str, **kwargs: Any) -> str: ... def deactivate_all() -> None: ... def get_supported_language_variant(lang_code: str, *, strict: bool = False) -> str: ... def get_language_info(lang_code: str) -> Any: ... def trim_whitespace(s: str) -> str: ... def round_away_from_one(value: int) -> int: ... __all__ = [ "activate", "check_for_language", "deactivate", "deactivate_all", "get_language", "get_language_bidi", "get_language_from_request", "get_language_info", "gettext", "gettext_lazy", "gettext_noop", "ngettext", "ngettext_lazy", "npgettext", "npgettext_lazy", "override", "pgettext", "pgettext_lazy", "templatize", "to_language", "to_locale", ] django-stubs-5.2.9/django-stubs/utils/translation/reloader.pyi000066400000000000000000000004361513401051600245440ustar00rootroot00000000000000from pathlib import Path from typing import Any from django.utils.autoreload import BaseReloader def watch_for_translation_changes(sender: BaseReloader, **kwargs: Any) -> None: ... def translation_file_changed(sender: BaseReloader | None, file_path: Path, **kwargs: Any) -> bool: ... django-stubs-5.2.9/django-stubs/utils/translation/template.pyi000066400000000000000000000005201513401051600245540ustar00rootroot00000000000000from re import Pattern TRANSLATOR_COMMENT_MARK: str dot_re: Pattern[str] def blankout(src: str, char: str) -> str: ... context_re: Pattern[str] inline_re: Pattern[str] block_re: Pattern[str] endblock_re: Pattern[str] plural_re: Pattern[str] constant_re: Pattern[str] def templatize(src: str, origin: str | None = None) -> str: ... django-stubs-5.2.9/django-stubs/utils/translation/trans_null.pyi000066400000000000000000000014451513401051600251310ustar00rootroot00000000000000from django.http.request import HttpRequest def gettext(message: str) -> str: ... gettext_noop = gettext gettext_lazy = gettext _ = gettext def ngettext(singular: str, plural: str, number: int) -> str: ... ngettext_lazy = ngettext def pgettext(context: str, message: str) -> str: ... def npgettext(context: str, singular: str, plural: str, number: int) -> str: ... def activate(x: str) -> None: ... def deactivate() -> None: ... deactivate_all = deactivate def get_language() -> str: ... def get_language_bidi() -> bool: ... def check_for_language(x: str) -> bool: ... def get_language_from_request(request: HttpRequest, check_path: bool = False) -> str: ... def get_language_from_path(request: str) -> None: ... def get_supported_language_variant(lang_code: str, strict: bool = False) -> str: ... django-stubs-5.2.9/django-stubs/utils/translation/trans_real.pyi000066400000000000000000000056431513401051600251060ustar00rootroot00000000000000import gettext as gettext_module from collections.abc import Iterator from gettext import NullTranslations from re import Pattern # switch to tuple once https://github.com/python/mypy/issues/11098 is fixed from typing import Any, Literal, Protocol, TypeAlias, TypeVar, type_check_only from django.http.request import HttpRequest CONTEXT_SEPARATOR: Literal["\x04"] LANGUAGE_CODE_MAX_LENGTH: int accept_language_re: Pattern[str] language_code_re: Pattern[str] language_code_prefix_re: Pattern[str] @type_check_only class _PluralCallable(Protocol): def __call__(self, n: int, /) -> int: ... def reset_cache(*, setting: str, **kwargs: Any) -> None: ... # switch to tuple once https://github.com/python/mypy/issues/11098 is fixed _KeyT: TypeAlias = str | tuple[str, int] _Z = TypeVar("_Z") class TranslationCatalog: _catalogs: list[dict[_KeyT, str]] def __init__(self, trans: gettext_module.NullTranslations | None = None) -> None: ... def __getitem__(self, key: _KeyT) -> str: ... def __setitem__(self, key: _KeyT, value: str) -> None: ... def __contains__(self, key: _KeyT) -> bool: ... def items(self) -> Iterator[tuple[_KeyT, str]]: ... def keys(self) -> Iterator[_KeyT]: ... def update(self, trans: gettext_module.NullTranslations) -> None: ... def get(self, key: _KeyT, default: _Z | None = None) -> str | _Z: ... def plural(self, msgid: str, num: int) -> str: ... class DjangoTranslation(gettext_module.GNUTranslations): domain: str plural: _PluralCallable def __init__(self, language: str, domain: str | None = None, localedirs: list[str] | None = None) -> None: ... def merge(self, other: NullTranslations) -> None: ... def language(self) -> str: ... def to_language(self) -> str: ... def ngettext(self, msgid1: str, msgid2: str, n: int) -> str: ... def translation(language: str) -> DjangoTranslation: ... def activate(language: str) -> None: ... def deactivate() -> None: ... def deactivate_all() -> None: ... def get_language() -> str: ... def get_language_bidi() -> bool: ... def catalog() -> DjangoTranslation: ... def gettext(message: str) -> str: ... def pgettext(context: str, message: str) -> str: ... def gettext_noop(message: str) -> str: ... def do_ntranslate(singular: str, plural: str, number: float, translation_function: str) -> str: ... def ngettext(singular: str, plural: str, number: float) -> str: ... def npgettext(context: str, singular: str, plural: str, number: int) -> str: ... def all_locale_paths() -> list[str]: ... def check_for_language(lang_code: str | None) -> bool: ... def get_languages() -> dict[str, str]: ... def get_supported_language_variant(lang_code: str | None, strict: bool = False) -> str: ... def get_language_from_path(path: str, strict: bool = False) -> str | None: ... def get_language_from_request(request: HttpRequest, check_path: bool = False) -> str: ... def parse_accept_lang_header(lang_string: str) -> tuple[tuple[str, float], ...]: ... django-stubs-5.2.9/django-stubs/utils/tree.pyi000066400000000000000000000017231513401051600213500ustar00rootroot00000000000000from collections.abc import Sequence from typing import Any, TypeAlias from django.db.models.sql.where import NothingNode _NodeChildren: TypeAlias = list[Node | NothingNode | Sequence[Any]] class Node: children: _NodeChildren default: str connector: str negated: bool def __init__( self, children: _NodeChildren | None = None, connector: str | None = None, negated: bool = False ) -> None: ... @classmethod def create( cls, children: _NodeChildren | None = None, connector: str | None = None, negated: bool = False ) -> Node: ... def copy(self) -> Node: ... def __copy__(self) -> Node: ... def __deepcopy__(self, memodict: dict[Any, Any]) -> Node: ... def __len__(self) -> int: ... def __bool__(self) -> bool: ... def __contains__(self, other: tuple[str, int]) -> bool: ... def __hash__(self) -> int: ... def add(self, data: Any, conn_type: str) -> Any: ... def negate(self) -> None: ... django-stubs-5.2.9/django-stubs/utils/version.pyi000066400000000000000000000010151513401051600220700ustar00rootroot00000000000000from typing import TypeAlias PYPY: bool PY38: bool PY39: bool PY310: bool PY311: bool PY312: bool PY313: bool PY314: bool _VT: TypeAlias = tuple[int, int, int, str, int] def get_version(version: _VT | None = None) -> str: ... def get_main_version(version: _VT | None = None) -> str: ... def get_complete_version(version: _VT | None = None) -> _VT: ... def get_docs_version(version: _VT | None = None) -> str: ... def get_git_changeset() -> str | None: ... def get_version_tuple(version: str) -> tuple[int, int, int]: ... django-stubs-5.2.9/django-stubs/utils/xmlutils.pyi000066400000000000000000000006501513401051600222700ustar00rootroot00000000000000from xml.sax.saxutils import XMLGenerator from xml.sax.xmlreader import AttributesImpl class UnserializableContentError(ValueError): ... class SimplerXMLGenerator(XMLGenerator): def addQuickElement(self, name: str, contents: str | None = ..., attrs: dict[str, str] | None = ...) -> None: ... def characters(self, content: str) -> None: ... def startElement(self, name: str, attrs: AttributesImpl) -> None: ... django-stubs-5.2.9/django-stubs/views/000077500000000000000000000000001513401051600176605ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/views/__init__.pyi000066400000000000000000000000731513401051600221420ustar00rootroot00000000000000from .generic.base import View as View __all__ = ["View"] django-stubs-5.2.9/django-stubs/views/csrf.pyi000066400000000000000000000005031513401051600213360ustar00rootroot00000000000000from pathlib import Path from django.http.request import HttpRequest from django.http.response import HttpResponseForbidden CSRF_FAILURE_TEMPLATE_NAME: str def builtin_template_path(name: str) -> Path: ... def csrf_failure(request: HttpRequest, reason: str = ..., template_name: str = ...) -> HttpResponseForbidden: ... django-stubs-5.2.9/django-stubs/views/debug.pyi000066400000000000000000000060651513401051600215000ustar00rootroot00000000000000import re from collections.abc import Callable, ItemsView, Iterator from pathlib import Path from types import TracebackType from typing import Any from django.http.request import HttpRequest, QueryDict from django.http.response import Http404, HttpResponse from django.template import Engine from django.utils.safestring import SafeString DEBUG_ENGINE: Engine class CallableSettingWrapper: def __init__(self, callable_setting: Callable | type[Any]) -> None: ... class ExceptionCycleWarning(UserWarning): ... def technical_500_response( request: HttpRequest, exc_type: type[BaseException] | None, exc_value: BaseException | None, tb: TracebackType | None, status_code: int = ..., ) -> HttpResponse: ... def get_default_exception_reporter_filter() -> SafeExceptionReporterFilter: ... def get_exception_reporter_filter(request: HttpRequest | None) -> SafeExceptionReporterFilter: ... class SafeExceptionReporterFilter: cleansed_substitute: str hidden_settings: re.Pattern[str] def cleanse_setting(self, key: int | str, value: Any) -> Any: ... def get_safe_settings(self) -> dict[str, Any]: ... def get_safe_request_meta(self, request: HttpRequest) -> dict[str, Any]: ... def get_safe_cookies(self, request: HttpRequest) -> dict[str, Any]: ... def is_active(self, request: HttpRequest | None) -> bool: ... def get_cleansed_multivaluedict(self, request: HttpRequest, multivaluedict: QueryDict) -> QueryDict: ... def get_post_parameters(self, request: HttpRequest | None) -> dict[str, Any]: ... def cleanse_special_types(self, request: HttpRequest | None, value: Any) -> Any: ... def get_traceback_frame_variables(self, request: Any, tb_frame: Any) -> ItemsView[str, Any]: ... class ExceptionReporter: request: HttpRequest | None filter: SafeExceptionReporterFilter exc_type: type[BaseException] | None exc_value: BaseException | None tb: TracebackType | None is_email: bool template_info: Any | None template_does_not_exist: bool postmortem: Any | None @property def html_template_path(self) -> Path: ... @property def text_template_path(self) -> Path: ... def __init__( self, request: HttpRequest | None, exc_type: type[BaseException] | None, exc_value: BaseException | None, tb: TracebackType | None, is_email: bool = ..., ) -> None: ... def get_traceback_data(self) -> dict[str, Any]: ... def get_traceback_html(self) -> SafeString: ... def get_traceback_text(self) -> SafeString: ... def get_traceback_frames(self) -> list[Any]: ... def get_exception_traceback_frames( self, exc_value: BaseException | None, tb: TracebackType | None ) -> Iterator[dict[str, Any]]: ... def technical_404_response(request: HttpRequest, exception: Http404) -> HttpResponse: ... def default_urlconf(request: HttpResponse | None) -> HttpResponse: ... def builtin_template_path(name: str) -> Path: ... def get_caller(request: HttpRequest) -> str: ... def get_exception_reporter_class(request: HttpRequest) -> ExceptionReporter: ... django-stubs-5.2.9/django-stubs/views/decorators/000077500000000000000000000000001513401051600220255ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/views/decorators/__init__.pyi000066400000000000000000000000001513401051600242750ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/views/decorators/cache.pyi000066400000000000000000000005331513401051600236140ustar00rootroot00000000000000from collections.abc import Callable from typing import Any, TypeVar _F = TypeVar("_F", bound=Callable[..., Any]) def cache_page( timeout: float | None, *, cache: Any | None = ..., key_prefix: Any | None = ... ) -> Callable[[_F], _F]: ... def cache_control(**kwargs: Any) -> Callable[[_F], _F]: ... def never_cache(view_func: _F) -> _F: ... django-stubs-5.2.9/django-stubs/views/decorators/clickjacking.pyi000066400000000000000000000004221513401051600251620ustar00rootroot00000000000000from collections.abc import Callable from typing import Any, TypeVar _F = TypeVar("_F", bound=Callable[..., Any]) def xframe_options_deny(view_func: _F) -> _F: ... def xframe_options_sameorigin(view_func: _F) -> _F: ... def xframe_options_exempt(view_func: _F) -> _F: ... django-stubs-5.2.9/django-stubs/views/decorators/common.pyi000066400000000000000000000002421513401051600240360ustar00rootroot00000000000000from collections.abc import Callable from typing import Any, TypeVar _C = TypeVar("_C", bound=Callable[..., Any]) def no_append_slash(view_func: _C) -> _C: ... django-stubs-5.2.9/django-stubs/views/decorators/csrf.pyi000066400000000000000000000006531513401051600235110ustar00rootroot00000000000000from collections.abc import Callable from typing import Any, TypeVar from django.middleware.csrf import CsrfViewMiddleware csrf_protect: Callable[[_F], _F] class _EnsureCsrfToken(CsrfViewMiddleware): ... requires_csrf_token: Callable[[_F], _F] class _EnsureCsrfCookie(CsrfViewMiddleware): ... ensure_csrf_cookie: Callable[[_F], _F] _F = TypeVar("_F", bound=Callable[..., Any]) def csrf_exempt(view_func: _F) -> _F: ... django-stubs-5.2.9/django-stubs/views/decorators/debug.pyi000066400000000000000000000005511513401051600236370ustar00rootroot00000000000000from collections.abc import Callable from typing import Any, Literal, TypeVar _F = TypeVar("_F", bound=Callable[..., Any]) coroutine_functions_to_sensitive_variables: dict[int, Literal["__ALL__"] | tuple[str, ...]] def sensitive_variables(*variables: str) -> Callable[[_F], _F]: ... def sensitive_post_parameters(*parameters: str) -> Callable[[_F], _F]: ... django-stubs-5.2.9/django-stubs/views/decorators/gzip.pyi000066400000000000000000000002221513401051600235150ustar00rootroot00000000000000from collections.abc import Callable from typing import Any, TypeVar _C = TypeVar("_C", bound=Callable[..., Any]) gzip_page: Callable[[_C], _C] django-stubs-5.2.9/django-stubs/views/decorators/http.pyi000066400000000000000000000013161513401051600235300ustar00rootroot00000000000000from collections.abc import Callable, Container from datetime import datetime from typing import Any, TypeVar _F = TypeVar("_F", bound=Callable[..., Any]) conditional_page: Callable[[_F], _F] def require_http_methods(request_method_list: Container[str]) -> Callable[[_F], _F]: ... require_GET: Callable[[_F], _F] require_POST: Callable[[_F], _F] require_safe: Callable[[_F], _F] def condition( etag_func: Callable[..., str | None] | None = ..., last_modified_func: Callable[..., datetime | None] | None = ... ) -> Callable[[_F], _F]: ... def etag(etag_func: Callable[..., str | None]) -> Callable[[_F], _F]: ... def last_modified(last_modified_func: Callable[..., datetime | None]) -> Callable[[_F], _F]: ... django-stubs-5.2.9/django-stubs/views/decorators/vary.pyi000066400000000000000000000003321513401051600235270ustar00rootroot00000000000000from collections.abc import Callable from typing import Any, TypeVar _F = TypeVar("_F", bound=Callable[..., Any]) def vary_on_headers(*headers: str) -> Callable[[_F], _F]: ... def vary_on_cookie(func: _F) -> _F: ... django-stubs-5.2.9/django-stubs/views/defaults.pyi000066400000000000000000000014471513401051600222200ustar00rootroot00000000000000from django.http.request import HttpRequest from django.http.response import ( HttpResponseBadRequest, HttpResponseForbidden, HttpResponseNotFound, HttpResponseServerError, ) ERROR_404_TEMPLATE_NAME: str ERROR_403_TEMPLATE_NAME: str ERROR_400_TEMPLATE_NAME: str ERROR_500_TEMPLATE_NAME: str ERROR_PAGE_TEMPLATE: str def page_not_found( request: HttpRequest, exception: Exception | None, template_name: str = ... ) -> HttpResponseNotFound: ... def server_error(request: HttpRequest, template_name: str = ...) -> HttpResponseServerError: ... def bad_request(request: HttpRequest, exception: Exception, template_name: str = ...) -> HttpResponseBadRequest: ... def permission_denied( request: HttpRequest, exception: Exception, template_name: str = ... ) -> HttpResponseForbidden: ... django-stubs-5.2.9/django-stubs/views/generic/000077500000000000000000000000001513401051600212745ustar00rootroot00000000000000django-stubs-5.2.9/django-stubs/views/generic/__init__.pyi000066400000000000000000000022021513401051600235520ustar00rootroot00000000000000from .base import RedirectView as RedirectView from .base import TemplateView as TemplateView from .base import View as View from .dates import ArchiveIndexView as ArchiveIndexView from .dates import DateDetailView as DateDetailView from .dates import DayArchiveView as DayArchiveView from .dates import MonthArchiveView as MonthArchiveView from .dates import TodayArchiveView as TodayArchiveView from .dates import WeekArchiveView as WeekArchiveView from .dates import YearArchiveView as YearArchiveView from .detail import DetailView as DetailView from .edit import CreateView as CreateView from .edit import DeleteView as DeleteView from .edit import FormView as FormView from .edit import UpdateView as UpdateView from .list import ListView as ListView class GenericViewError(Exception): ... __all__ = [ "ArchiveIndexView", "CreateView", "DateDetailView", "DayArchiveView", "DeleteView", "DetailView", "FormView", "GenericViewError", "ListView", "MonthArchiveView", "RedirectView", "TemplateView", "TodayArchiveView", "UpdateView", "View", "WeekArchiveView", "YearArchiveView", ] django-stubs-5.2.9/django-stubs/views/generic/base.pyi000066400000000000000000000045741513401051600227430ustar00rootroot00000000000000import logging from collections.abc import Callable, Mapping, Sequence from typing import Any from django.http.request import HttpRequest from django.http.response import HttpResponse, HttpResponseBase from django.utils.functional import _Getter logger: logging.Logger class ContextMixin: extra_context: Mapping[str, Any] | None def get_context_data(self, **kwargs: Any) -> dict[str, Any]: ... class View: http_method_names: Sequence[str] request: HttpRequest args: Any kwargs: Any def __init__(self, **kwargs: Any) -> None: ... view_is_async: _Getter[bool] | bool @classmethod def as_view(cls: Any, **initkwargs: Any) -> Callable[..., HttpResponseBase]: ... def setup(self, request: HttpRequest, *args: Any, **kwargs: Any) -> None: ... def dispatch(self, request: HttpRequest, *args: Any, **kwargs: Any) -> HttpResponseBase: ... def http_method_not_allowed(self, request: HttpRequest, *args: Any, **kwargs: Any) -> HttpResponse: ... def options(self, request: HttpRequest, *args: Any, **kwargs: Any) -> HttpResponseBase: ... class TemplateResponseMixin: template_name: str | None template_engine: str | None response_class: type[HttpResponse] content_type: str | None request: HttpRequest def render_to_response(self, context: dict[str, Any], **response_kwargs: Any) -> HttpResponse: ... def get_template_names(self) -> list[str]: ... class TemplateView(TemplateResponseMixin, ContextMixin, View): def get(self, request: HttpRequest, *args: Any, **kwargs: Any) -> HttpResponse: ... class RedirectView(View): permanent: bool url: str | None pattern_name: str | None query_string: bool def get_redirect_url(self, *args: Any, **kwargs: Any) -> str | None: ... def get(self, request: HttpRequest, *args: Any, **kwargs: Any) -> HttpResponseBase: ... def head(self, request: HttpRequest, *args: Any, **kwargs: Any) -> HttpResponseBase: ... def post(self, request: HttpRequest, *args: Any, **kwargs: Any) -> HttpResponseBase: ... def options(self, request: HttpRequest, *args: Any, **kwargs: Any) -> HttpResponseBase: ... def delete(self, request: HttpRequest, *args: Any, **kwargs: Any) -> HttpResponseBase: ... def put(self, request: HttpRequest, *args: Any, **kwargs: Any) -> HttpResponseBase: ... def patch(self, request: HttpRequest, *args: Any, **kwargs: Any) -> HttpResponseBase: ... django-stubs-5.2.9/django-stubs/views/generic/dates.pyi000066400000000000000000000106641513401051600231260ustar00rootroot00000000000000import datetime from collections.abc import Sequence from typing import Any, TypeAlias, TypeVar from django.db import models from django.db.models.query import QuerySet from django.http import HttpRequest, HttpResponse from django.utils.datastructures import _IndexableCollection from django.utils.functional import _Getter from django.views.generic.base import View from django.views.generic.detail import BaseDetailView, SingleObjectTemplateResponseMixin from django.views.generic.list import MultipleObjectMixin, MultipleObjectTemplateResponseMixin _M = TypeVar("_M", bound=models.Model) _DatedItems: TypeAlias = tuple[_IndexableCollection[datetime.date] | None, _IndexableCollection[_M], dict[str, Any]] class YearMixin: year_format: str year: str | None def get_year_format(self) -> str: ... def get_year(self) -> str: ... def get_next_year(self, date: datetime.date) -> datetime.date | None: ... def get_previous_year(self, date: datetime.date) -> datetime.date | None: ... class MonthMixin: month_format: str month: str | None def get_month_format(self) -> str: ... def get_month(self) -> str: ... def get_next_month(self, date: datetime.date) -> datetime.date | None: ... def get_previous_month(self, date: datetime.date) -> datetime.date | None: ... class DayMixin: day_format: str day: str | None def get_day_format(self) -> str: ... def get_day(self) -> str: ... def get_next_day(self, date: datetime.date) -> datetime.date | None: ... def get_previous_day(self, date: datetime.date) -> datetime.date | None: ... class WeekMixin: week_format: str week: str | None def get_week_format(self) -> str: ... def get_week(self) -> str: ... def get_next_week(self, date: datetime.date) -> datetime.date | None: ... def get_previous_week(self, date: datetime.date) -> datetime.date | None: ... class DateMixin: date_field: str | None allow_future: bool def get_date_field(self) -> str: ... def get_allow_future(self) -> bool: ... uses_datetime_field: _Getter[bool] | bool class BaseDateListView(MultipleObjectMixin[_M], DateMixin, View): date_list_period: str def get(self, request: HttpRequest, *args: Any, **kwargs: Any) -> HttpResponse: ... def get_dated_items(self) -> _DatedItems: ... def get_ordering(self) -> str | Sequence[str]: ... def get_dated_queryset(self, **lookup: Any) -> models.query.QuerySet[_M]: ... def get_date_list_period(self) -> str: ... def get_date_list( self, queryset: models.query.QuerySet, date_type: str | None = ..., ordering: str = ... ) -> models.query.QuerySet: ... class BaseArchiveIndexView(BaseDateListView[_M]): context_object_name: str def get_dated_items(self) -> _DatedItems[_M]: ... class ArchiveIndexView(MultipleObjectTemplateResponseMixin, BaseArchiveIndexView): template_name_suffix: str class BaseYearArchiveView(YearMixin, BaseDateListView[_M]): date_list_period: str make_object_list: bool def get_dated_items(self) -> _DatedItems[_M]: ... def get_make_object_list(self) -> bool: ... class YearArchiveView(MultipleObjectTemplateResponseMixin, BaseYearArchiveView): template_name_suffix: str class BaseMonthArchiveView(YearMixin, MonthMixin, BaseDateListView[_M]): date_list_period: str def get_dated_items(self) -> _DatedItems[_M]: ... class MonthArchiveView(MultipleObjectTemplateResponseMixin, BaseMonthArchiveView): template_name_suffix: str class BaseWeekArchiveView(YearMixin, WeekMixin, BaseDateListView[_M]): def get_dated_items(self) -> _DatedItems[_M]: ... class WeekArchiveView(MultipleObjectTemplateResponseMixin, BaseWeekArchiveView): template_name_suffix: str class BaseDayArchiveView(YearMixin, MonthMixin, DayMixin, BaseDateListView[_M]): def get_dated_items(self) -> _DatedItems[_M]: ... class DayArchiveView(MultipleObjectTemplateResponseMixin, BaseDayArchiveView): template_name_suffix: str class BaseTodayArchiveView(BaseDayArchiveView[_M]): def get_dated_items(self) -> _DatedItems[_M]: ... class TodayArchiveView(MultipleObjectTemplateResponseMixin, BaseTodayArchiveView): template_name_suffix: str class BaseDateDetailView(YearMixin, MonthMixin, DayMixin, DateMixin, BaseDetailView[_M]): def get_object(self, queryset: QuerySet[_M] | None = ...) -> _M: ... class DateDetailView(SingleObjectTemplateResponseMixin, BaseDateDetailView): template_name_suffix: str def timezone_today() -> datetime.date: ... django-stubs-5.2.9/django-stubs/views/generic/detail.pyi000066400000000000000000000022671513401051600232700ustar00rootroot00000000000000from typing import Any, Generic, TypeVar, overload from django.db import models from django.http import HttpRequest, HttpResponse from django.views.generic.base import ContextMixin, TemplateResponseMixin, View _M = TypeVar("_M", bound=models.Model) class SingleObjectMixin(ContextMixin, Generic[_M]): model: type[_M] queryset: models.query.QuerySet[_M] | None slug_field: str context_object_name: str | None slug_url_kwarg: str pk_url_kwarg: str query_pk_and_slug: bool def get_object(self, queryset: models.query.QuerySet[_M] | None = ...) -> _M: ... def get_queryset(self) -> models.query.QuerySet[_M]: ... def get_slug_field(self) -> str: ... @overload def get_context_object_name(self, obj: _M) -> str: ... @overload def get_context_object_name(self, obj: Any) -> str | None: ... class BaseDetailView(SingleObjectMixin[_M], View): object: _M def get(self, request: HttpRequest, *args: Any, **kwargs: Any) -> HttpResponse: ... class SingleObjectTemplateResponseMixin(TemplateResponseMixin): template_name_field: str | None template_name_suffix: str class DetailView(SingleObjectTemplateResponseMixin, BaseDetailView[_M]): ... django-stubs-5.2.9/django-stubs/views/generic/edit.pyi000066400000000000000000000066251513401051600227550ustar00rootroot00000000000000from typing import Any, Generic, Literal, TypeVar from django.db import models from django.forms.forms import BaseForm from django.forms.models import BaseModelForm from django.http import HttpRequest, HttpResponse from django.utils.datastructures import _ListOrTuple from django.utils.functional import _StrOrPromise from django.views.generic.base import ContextMixin, TemplateResponseMixin, View from django.views.generic.detail import BaseDetailView, SingleObjectMixin, SingleObjectTemplateResponseMixin _FormT = TypeVar("_FormT", bound=BaseForm) _ModelFormT = TypeVar("_ModelFormT", bound=BaseModelForm) _M = TypeVar("_M", bound=models.Model) class FormMixin(ContextMixin, Generic[_FormT]): initial: dict[str, Any] form_class: type[_FormT] | None success_url: _StrOrPromise | None = None prefix: str | None def get_initial(self) -> dict[str, Any]: ... def get_prefix(self) -> str | None: ... def get_form_class(self) -> type[_FormT]: ... def get_form(self, form_class: type[_FormT] | None = ...) -> _FormT: ... def get_form_kwargs(self) -> dict[str, Any]: ... def get_success_url(self) -> str: ... def form_valid(self, form: _FormT) -> HttpResponse: ... def form_invalid(self, form: _FormT) -> HttpResponse: ... def get_context_data(self, **kwargs: Any) -> dict[str, Any]: ... class ModelFormMixin(FormMixin[_ModelFormT], SingleObjectMixin[_M], Generic[_M, _ModelFormT]): fields: _ListOrTuple[str] | Literal["__all__"] | None def get_form_class(self) -> type[_ModelFormT]: ... def get_form_kwargs(self) -> dict[str, Any]: ... def get_success_url(self) -> str: ... def form_valid(self, form: _ModelFormT) -> HttpResponse: ... class ProcessFormView(View): def get(self, request: HttpRequest, *args: Any, **kwargs: Any) -> HttpResponse: ... def post(self, request: HttpRequest, *args: Any, **kwargs: Any) -> HttpResponse: ... def put(self, *args: Any, **kwargs: Any) -> HttpResponse: ... class BaseFormView(FormMixin[_FormT], ProcessFormView): ... class FormView(TemplateResponseMixin, BaseFormView[_FormT]): ... class BaseCreateView(ModelFormMixin[_M, _ModelFormT], ProcessFormView): object: _M | None def get(self, request: HttpRequest, *args: Any, **kwargs: Any) -> HttpResponse: ... def post(self, request: HttpRequest, *args: Any, **kwargs: Any) -> HttpResponse: ... class CreateView(SingleObjectTemplateResponseMixin, BaseCreateView[_M, _ModelFormT]): template_name_suffix: str class BaseUpdateView(ModelFormMixin[_M, _ModelFormT], ProcessFormView): object: _M def get(self, request: HttpRequest, *args: Any, **kwargs: Any) -> HttpResponse: ... def post(self, request: HttpRequest, *args: Any, **kwargs: Any) -> HttpResponse: ... class UpdateView(SingleObjectTemplateResponseMixin, BaseUpdateView[_M, _ModelFormT]): template_name_suffix: str class DeletionMixin(Generic[_M]): success_url: _StrOrPromise | None = None object: _M def post(self, request: HttpRequest, *args: Any, **kwargs: Any) -> HttpResponse: ... def delete(self, request: HttpRequest, *args: Any, **kwargs: Any) -> HttpResponse: ... def get_success_url(self) -> str: ... class BaseDeleteView(DeletionMixin[_M], FormMixin[_ModelFormT], BaseDetailView[_M], Generic[_M, _ModelFormT]): object: _M class DeleteView(SingleObjectTemplateResponseMixin, BaseDeleteView[_M, _ModelFormT], Generic[_M, _ModelFormT]): object: _M template_name_suffix: str django-stubs-5.2.9/django-stubs/views/generic/list.pyi000066400000000000000000000041361513401051600227760ustar00rootroot00000000000000from collections.abc import Sequence from typing import Any, Generic, Protocol, TypeVar, overload, type_check_only from django.core.paginator import Page, Paginator, _SupportsPagination from django.db.models import Model, QuerySet from django.http import HttpRequest, HttpResponse from django.views.generic.base import ContextMixin, TemplateResponseMixin, View _M = TypeVar("_M", bound=Model) @type_check_only class _HasModel(Protocol): @property def model(self) -> type[Model]: ... class MultipleObjectMixin(ContextMixin, Generic[_M]): allow_empty: bool queryset: QuerySet[_M] | None model: type[_M] | None paginate_by: int | None paginate_orphans: int context_object_name: str | None paginator_class: type[Paginator] page_kwarg: str ordering: str | Sequence[str] | None def get_queryset(self) -> QuerySet[_M]: ... def get_ordering(self) -> str | Sequence[str] | None: ... def paginate_queryset( self, queryset: _SupportsPagination[_M], page_size: int ) -> tuple[Paginator, Page, _SupportsPagination[_M], bool]: ... def get_paginate_by(self, queryset: QuerySet[_M]) -> int | None: ... def get_paginator( self, queryset: _SupportsPagination[_M], per_page: int, orphans: int = ..., allow_empty_first_page: bool = ..., **kwargs: Any, ) -> Paginator: ... def get_paginate_orphans(self) -> int: ... def get_allow_empty(self) -> bool: ... @overload def get_context_object_name(self, object_list: _HasModel) -> str: ... @overload def get_context_object_name(self, object_list: Any) -> str | None: ... def get_context_data( self, *, object_list: _SupportsPagination[_M] | None = ..., **kwargs: Any ) -> dict[str, Any]: ... class BaseListView(MultipleObjectMixin[_M], View): object_list: _SupportsPagination[_M] def get(self, request: HttpRequest, *args: Any, **kwargs: Any) -> HttpResponse: ... class MultipleObjectTemplateResponseMixin(TemplateResponseMixin): template_name_suffix: str class ListView(MultipleObjectTemplateResponseMixin, BaseListView[_M]): ... django-stubs-5.2.9/django-stubs/views/i18n.pyi000066400000000000000000000021031513401051600211560ustar00rootroot00000000000000from collections.abc import Callable from pathlib import Path from typing import Any from django.http.request import HttpRequest from django.http.response import HttpResponse from django.utils.translation.trans_real import DjangoTranslation from django.views.generic import View LANGUAGE_QUERY_PARAMETER: str def builtin_template_path(name: str) -> Path: ... def set_language(request: HttpRequest) -> HttpResponse: ... def get_formats() -> dict[str, list[str] | int | str]: ... class JavaScriptCatalog(View): head: Callable domain: str packages: list[str] | None translation: DjangoTranslation def get(self, request: HttpRequest, *args: Any, **kwargs: Any) -> HttpResponse: ... def get_paths(self, packages: list[str]) -> list[str]: ... def get_plural(self) -> list[str] | None: ... def get_catalog(self) -> dict[str, list[str] | str]: ... def get_context_data(self, **kwargs: Any) -> dict[str, Any]: ... def render_to_response(self, context: dict[str, Any], **response_kwargs: Any) -> HttpResponse: ... class JSONCatalog(JavaScriptCatalog): ... django-stubs-5.2.9/django-stubs/views/static.pyi000066400000000000000000000007661513401051600217030ustar00rootroot00000000000000from pathlib import Path from typing import Any from django.http import FileResponse, HttpResponse from django.http.request import HttpRequest def builtin_template_path(name: str) -> Path: ... def serve( request: HttpRequest, path: str, document_root: str | None = ..., show_indexes: bool = ... ) -> FileResponse: ... template_translatable: Any def directory_index(path: Any, fullpath: Any) -> HttpResponse: ... def was_modified_since(header: str | None = ..., mtime: float = ...) -> bool: ... django-stubs-5.2.9/ext/000077500000000000000000000000001513401051600147235ustar00rootroot00000000000000django-stubs-5.2.9/ext/LICENSE.md000066400000000000000000000020631513401051600163300ustar00rootroot00000000000000Copyright (c) Maxim Kurnikov. All rights reserved. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. django-stubs-5.2.9/ext/README.md000066400000000000000000000045731513401051600162130ustar00rootroot00000000000000# Extensions and monkey-patching for django-stubs [![test](https://github.com/typeddjango/django-stubs/actions/workflows/test.yml/badge.svg?branch=master&event=push)](https://github.com/typeddjango/django-stubs/actions/workflows/test.yml) [![Checked with mypy](http://www.mypy-lang.org/static/mypy_badge.svg)](http://mypy-lang.org/) [![StackOverflow](https://shields.io/badge/ask-stackoverflow-orange?logo=stackoverflow)](https://stackoverflow.com/questions/tagged/django-stubs?tab=Active) This package contains extensions and monkey-patching functions for the [django-stubs](https://github.com/typeddjango/django-stubs) package. Certain features of django-stubs (i.e. generic django classes that don't define the `__class_getitem__` method) require runtime monkey-patching, which can't be done with type stubs. These extensions were split into a separate package so library consumers don't need `mypy` as a runtime dependency ([#526](https://github.com/typeddjango/django-stubs/pull/526#pullrequestreview-525798031)). ## Installation ```bash pip install django-stubs-ext ``` ## Usage In your Django application, use the following code: ```py import django_stubs_ext django_stubs_ext.monkeypatch() ``` This only needs to be called once, so the call to `monkeypatch` should be placed in your top-level settings. Real-life example [can be found here](https://github.com/wemake-services/wemake-django-template/blob/5bf1569e2710e11befc6991893f94419136d74bd/%7B%7Bcookiecutter.project_name%7D%7D/server/settings/__init__.py#L14-L19). ## Version compatibility Since django-stubs supports multiple Django versions, this package takes care to only monkey-patch the features needed by your django version, and decides which features to patch at runtime. This is completely safe, as (currently) we only add a `__class_getitem__` method that does nothing: ```py @classmethod def __class_getitem__(cls, *args, **kwargs): return cls ``` ## To get help For help with django-stubs, please view the main repository at ## Contributing The django-stubs-ext package is part of the [django-stubs](https://github.com/typeddjango/django-stubs) monorepo. If you would like to contribute, please view the django-stubs [contribution guide](https://github.com/typeddjango/django-stubs/blob/master/CONTRIBUTING.md). You can always also reach out in gitter to discuss your contributions! django-stubs-5.2.9/ext/django_stubs_ext/000077500000000000000000000000001513401051600202655ustar00rootroot00000000000000django-stubs-5.2.9/ext/django_stubs_ext/__init__.py000066400000000000000000000010271513401051600223760ustar00rootroot00000000000000from .aliases import QuerySetAny as QuerySetAny from .aliases import StrOrPromise, StrPromise from .aliases import ValuesQuerySet as ValuesQuerySet from .annotations import Annotations as Annotations from .annotations import WithAnnotations as WithAnnotations from .patch import monkeypatch as monkeypatch from .types import AnyAttrAllowed as AnyAttrAllowed __all__ = [ "Annotations", "AnyAttrAllowed", "QuerySetAny", "StrOrPromise", "StrPromise", "ValuesQuerySet", "WithAnnotations", "monkeypatch", ] django-stubs-5.2.9/ext/django_stubs_ext/aliases.py000066400000000000000000000013121513401051600222550ustar00rootroot00000000000000import typing if typing.TYPE_CHECKING: from django.db.models.query import _QuerySet from django.utils.functional import _StrOrPromise as StrOrPromise from django.utils.functional import _StrPromise as StrPromise # Deprecated type aliases. Use the QuerySet class directly instead. QuerySetAny = _QuerySet ValuesQuerySet = _QuerySet else: from django.db.models.query import QuerySet from django.utils.functional import Promise as StrPromise StrOrPromise = str | StrPromise # Deprecated type aliases. Use the QuerySet class directly instead. QuerySetAny = QuerySet ValuesQuerySet = QuerySet __all__ = ["QuerySetAny", "StrOrPromise", "StrPromise", "ValuesQuerySet"] django-stubs-5.2.9/ext/django_stubs_ext/annotations.py000066400000000000000000000011741513401051600231770ustar00rootroot00000000000000from collections.abc import Mapping from typing import Annotated, Any, Generic, TypeVar from django.db.models.base import Model # Really, we would like to use TypedDict as a bound, but it's not possible _Annotations = TypeVar("_Annotations", covariant=True, bound=Mapping[str, Any]) class Annotations(Generic[_Annotations]): """Use as `Annotations[MyTypedDict]`""" pass _T = TypeVar("_T", bound=Model) WithAnnotations = Annotated[_T, Annotations[_Annotations]] """Alias to make it easy to annotate the model `_T` as having annotations `_Annotations` (a `TypedDict`). Use as `WithAnnotations[MyModel, MyTypedDict]`. """ django-stubs-5.2.9/ext/django_stubs_ext/db/000077500000000000000000000000001513401051600206525ustar00rootroot00000000000000django-stubs-5.2.9/ext/django_stubs_ext/db/__init__.py000066400000000000000000000000001513401051600227510ustar00rootroot00000000000000django-stubs-5.2.9/ext/django_stubs_ext/db/models/000077500000000000000000000000001513401051600221355ustar00rootroot00000000000000django-stubs-5.2.9/ext/django_stubs_ext/db/models/__init__.py000066400000000000000000000035641513401051600242560ustar00rootroot00000000000000from typing import TYPE_CHECKING if TYPE_CHECKING: from collections.abc import Sequence from typing import ClassVar from django.db.models import BaseConstraint, Index, OrderBy from django.utils.datastructures import _ListOrTuple from django_stubs_ext import StrOrPromise class TypedModelMeta: """ Typed base class for Django Model `class Meta:` inner class. At runtime this is just an alias to `object`. Most attributes are the same as `django.db.models.options.Options`. Options has some additional attributes and some values are normalized by Django. """ abstract: ClassVar[bool] # default: False app_label: ClassVar[str] base_manager_name: ClassVar[str] db_table: ClassVar[str] db_table_comment: ClassVar[str] db_tablespace: ClassVar[str] default_manager_name: ClassVar[str] default_related_name: ClassVar[str] get_latest_by: ClassVar[str | Sequence[str]] managed: ClassVar[bool] # default: True order_with_respect_to: ClassVar[str] ordering: ClassVar[Sequence[str | OrderBy]] permissions: ClassVar[_ListOrTuple[tuple[str, StrOrPromise]]] default_permissions: ClassVar[Sequence[str]] # default: ("add", "change", "delete", "view") proxy: ClassVar[bool] # default: False required_db_features: ClassVar[_ListOrTuple[str]] required_db_vendor: ClassVar[str] select_on_save: ClassVar[bool] # default: False indexes: ClassVar[_ListOrTuple[Index]] unique_together: ClassVar[Sequence[Sequence[str]]] index_together: ClassVar[Sequence[Sequence[str]]] # Deprecated in Django 4.2 constraints: ClassVar[_ListOrTuple[BaseConstraint]] verbose_name: ClassVar[StrOrPromise] verbose_name_plural: ClassVar[StrOrPromise] else: TypedModelMeta = object django-stubs-5.2.9/ext/django_stubs_ext/db/models/manager.py000066400000000000000000000014561513401051600241270ustar00rootroot00000000000000from typing import TYPE_CHECKING # Re-export stubs-only classes RelatedManger and ManyRelatedManager. # These are fake, Django defines these inside function body. if TYPE_CHECKING: # noinspection PyUnresolvedReferences from django.db.models.fields.related_descriptors import ManyRelatedManager as ManyRelatedManager # noinspection PyUnresolvedReferences from django.db.models.fields.related_descriptors import RelatedManager as RelatedManager else: from typing import Protocol, TypeVar _T = TypeVar("_T") _Through = TypeVar("_Through") # Define as `Protocol` to prevent them being used with `isinstance()`. # These actually inherit from `BaseManager`. class RelatedManager(Protocol[_T]): pass class ManyRelatedManager(Protocol[_T, _Through]): pass django-stubs-5.2.9/ext/django_stubs_ext/db/router.py000066400000000000000000000016031513401051600225440ustar00rootroot00000000000000from typing import TYPE_CHECKING if TYPE_CHECKING: from typing import Any from django.db.models import Model class TypedDatabaseRouter: """ Typed base class for Django's DATABASE_ROUTERS setting. At runtime this is just an alias to `object`. All methods are optional. Django documentation: https://docs.djangoproject.com/en/stable/topics/db/multi-db/#automatic-database-routing """ def db_for_read(self, model: type[Model], **hints: Any) -> str | None: ... def db_for_write(self, model: type[Model], **hints: Any) -> str | None: ... def allow_relation(self, obj1: type[Model], obj2: type[Model], **hints: Any) -> bool | None: ... def allow_migrate( self, db: str, app_label: str, model_name: str | None = None, **hints: Any ) -> bool | None: ... else: TypedDatabaseRouter = object django-stubs-5.2.9/ext/django_stubs_ext/patch.py000066400000000000000000000112001513401051600217300ustar00rootroot00000000000000import builtins import logging from collections.abc import Iterable from typing import Any, Generic, TypeVar from django import VERSION from django.contrib.admin import ModelAdmin from django.contrib.admin.options import BaseModelAdmin from django.contrib.messages.views import SuccessMessageMixin from django.contrib.sessions.backends.db import SessionStore from django.contrib.sitemaps import Sitemap from django.contrib.syndication.views import Feed from django.core.files.utils import FileProxyMixin from django.core.paginator import Paginator from django.db.models.expressions import ExpressionWrapper from django.db.models.fields import Field from django.db.models.fields.related import ForeignKey from django.db.models.fields.related_descriptors import ( ForwardManyToOneDescriptor, ReverseManyToOneDescriptor, ReverseOneToOneDescriptor, ) from django.db.models.lookups import Lookup from django.db.models.manager import BaseManager from django.db.models.options import Options from django.db.models.query import BaseIterable, ModelIterable, Prefetch, QuerySet, RawQuerySet from django.forms.formsets import BaseFormSet from django.forms.models import BaseModelForm, BaseModelFormSet, ModelChoiceField, ModelFormOptions from django.utils.connection import BaseConnectionHandler, ConnectionProxy from django.utils.functional import classproperty from django.views.generic.detail import SingleObjectMixin from django.views.generic.edit import DeletionMixin, FormMixin from django.views.generic.list import MultipleObjectMixin __all__ = ["monkeypatch"] logger = logging.getLogger(__name__) _T = TypeVar("_T") _VersionSpec = tuple[int, int] class MPGeneric(Generic[_T]): """Create a data class to hold metadata about the generic classes needing monkeypatching. The `version` param is optional, and a value of `None` means that the monkeypatch is version-independent. This is slightly overkill for our purposes, but useful for future-proofing against any possible issues we may run into with this method. """ def __init__(self, cls: type[_T], version: _VersionSpec | None = None) -> None: """Set the data fields, basic constructor.""" self.version = version self.cls = cls def __repr__(self) -> str: """Better representation in tests and debug.""" return "".format(self.cls, self.version or "all") # certain django classes need to be generic, but lack the __class_getitem__ dunder needed to # annotate them: https://github.com/typeddjango/django-stubs/issues/507 # this list stores them so `monkeypatch` can fix them when called _need_generic: list[MPGeneric[Any]] = [ MPGeneric(ModelAdmin), MPGeneric(SingleObjectMixin), MPGeneric(FormMixin), MPGeneric(DeletionMixin), MPGeneric(MultipleObjectMixin), MPGeneric(BaseModelAdmin), MPGeneric(Field), MPGeneric(Paginator), MPGeneric(BaseFormSet), MPGeneric(BaseModelForm), MPGeneric(BaseModelFormSet), MPGeneric(ModelChoiceField), MPGeneric(Feed), MPGeneric(Sitemap), MPGeneric(SuccessMessageMixin), MPGeneric(FileProxyMixin), MPGeneric(Lookup), MPGeneric(BaseConnectionHandler), MPGeneric(ExpressionWrapper), MPGeneric(ReverseManyToOneDescriptor), MPGeneric(ModelIterable), # These types do have native `__class_getitem__` method since django 3.1: MPGeneric(QuerySet, (3, 1)), MPGeneric(BaseManager, (3, 1)), # These types do have native `__class_getitem__` method since django 4.1: MPGeneric(ForeignKey, (4, 1)), MPGeneric(RawQuerySet), MPGeneric(classproperty), MPGeneric(ConnectionProxy), MPGeneric(ModelFormOptions), MPGeneric(Options), MPGeneric(BaseIterable), MPGeneric(ForwardManyToOneDescriptor), MPGeneric(ReverseOneToOneDescriptor), MPGeneric(Prefetch), MPGeneric(SessionStore), ] def monkeypatch(extra_classes: Iterable[type] | None = None, include_builtins: bool = True) -> None: """Monkey patch django as necessary to work properly with mypy.""" # Add the __class_getitem__ dunder. suited_for_this_version = filter( lambda spec: spec.version is None or VERSION[:2] <= spec.version, _need_generic, ) for el in suited_for_this_version: el.cls.__class_getitem__ = classmethod(lambda cls, *args, **kwargs: cls) if extra_classes: for cls in extra_classes: cls.__class_getitem__ = classmethod(lambda cls, *args, **kwargs: cls) # type: ignore[attr-defined] # Add `reveal_type` and `reveal_locals` helpers if needed: if include_builtins: builtins.reveal_type = lambda obj, /: obj builtins.reveal_locals = lambda: None django-stubs-5.2.9/ext/django_stubs_ext/py.typed000066400000000000000000000000001513401051600217520ustar00rootroot00000000000000django-stubs-5.2.9/ext/django_stubs_ext/settings.py000066400000000000000000000006541513401051600225040ustar00rootroot00000000000000from pathlib import Path from typing import Any, TypedDict, type_check_only from typing_extensions import NotRequired @type_check_only class TemplatesSetting(TypedDict): """Typing helper if you want to type `TEMPLATE` setting.""" BACKEND: str NAME: NotRequired[str] DIRS: NotRequired[list[str | Path]] APP_DIRS: NotRequired[bool] OPTIONS: NotRequired[dict[str, Any]] __all__ = ["TemplatesSetting"] django-stubs-5.2.9/ext/django_stubs_ext/types.py000066400000000000000000000003341513401051600220030ustar00rootroot00000000000000from typing import Any, Protocol # Used internally by mypy_django_plugin. class AnyAttrAllowed(Protocol): def __getattr__(self, item: str) -> Any: ... def __setattr__(self, item: str, value: Any) -> None: ... django-stubs-5.2.9/ext/pyproject.toml000066400000000000000000000027251513401051600176450ustar00rootroot00000000000000[project] name = "django-stubs-ext" # NB! For clarity, keep version major.minor.patch in sync with django-stubs. # It's fine to skip django-stubs-ext releases, but when doing a release, update this to newest django-stubs version. version = "5.2.9" description = "Monkey-patching and extensions for django-stubs" readme = "README.md" license = "MIT" license-files = ["LICENSE.md"] maintainers = [ { name = "Marti Raudsepp", email = "marti@juffo.org" }, { name = "Nikita Sobolev", email = "mail@sobolevn.me" }, { name = "Petter Friberg", email = "petter_friberg@hotmail.com" }, { name = "Adam Johnson", email = "me@adamj.eu" }, ] authors = [ { name = "Simula Proxy" }, ] requires-python = ">=3.10" classifiers = [ "Operating System :: OS Independent", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", "Typing :: Typed", "Framework :: Django", "Framework :: Django :: 5.0", "Framework :: Django :: 5.1", "Framework :: Django :: 5.2", ] dependencies = [ "django", "typing-extensions", ] [project.urls] Homepage = "https://github.com/typeddjango/django-stubs" Funding = "https://github.com/sponsors/typeddjango" "Release notes" = "https://github.com/typeddjango/django-stubs/releases" [build-system] requires = ["uv_build>=0.9.9,<0.10.0"] build-backend = "uv_build" [tool.uv.build-backend] module-name = ["django_stubs_ext"] module-root = "" django-stubs-5.2.9/ext/tests/000077500000000000000000000000001513401051600160655ustar00rootroot00000000000000django-stubs-5.2.9/ext/tests/test_aliases.py000066400000000000000000000002511513401051600211150ustar00rootroot00000000000000from typing import Any from django_stubs_ext import ValuesQuerySet def test_extends_values_queryset() -> None: class MyQS(ValuesQuerySet[Any, Any]): pass django-stubs-5.2.9/ext/tests/test_monkeypatching.py000066400000000000000000000075271513401051600225310ustar00rootroot00000000000000import builtins from collections.abc import Iterable from contextlib import suppress from typing import Protocol import pytest from _pytest.fixtures import FixtureRequest from _pytest.monkeypatch import MonkeyPatch from django.db.models import Model from django.forms.models import ModelForm import django_stubs_ext from django_stubs_ext import patch from django_stubs_ext.patch import _need_generic, _VersionSpec class _MakeGenericClasses(Protocol): """Used to represent a type of ``make_generic_classes`` fixture.""" def __call__( self, django_version: _VersionSpec | None = None, extra_classes: Iterable[type] | None = None, include_builtins: bool = True, ) -> None: ... @pytest.fixture(scope="function") def make_generic_classes( request: FixtureRequest, monkeypatch: MonkeyPatch, ) -> _MakeGenericClasses: _extra_classes: list[type] = [] def fin() -> None: for el in _need_generic: with suppress(AttributeError): delattr(el.cls, "__class_getitem__") for cls in _extra_classes: with suppress(AttributeError): delattr(cls, "__class_getitem__") _extra_classes.clear() with suppress(AttributeError): del builtins.reveal_type with suppress(AttributeError): del builtins.reveal_locals def factory( django_version: _VersionSpec | None = None, extra_classes: Iterable[type] | None = None, include_builtins: bool = True, ) -> None: if extra_classes: _extra_classes.extend(extra_classes) if django_version is not None: monkeypatch.setattr(patch, "VERSION", django_version) django_stubs_ext.monkeypatch(extra_classes=extra_classes, include_builtins=include_builtins) request.addfinalizer(fin) return factory def test_patched_generics(make_generic_classes: _MakeGenericClasses) -> None: """Test that the generics actually get patched.""" make_generic_classes() for el in _need_generic: if el.version is None: assert el.cls[type] is el.cls # `type` is arbitrary class TestForm(ModelForm[Model]): pass def test_patched_extra_classes_generics(make_generic_classes: _MakeGenericClasses) -> None: """Test that the generics actually get patched for extra classes.""" class _NotGeneric: pass extra_classes = [_NotGeneric] make_generic_classes(django_version=None, extra_classes=extra_classes) for cls in extra_classes: assert cls[type] is cls # type: ignore[misc] class _TestGeneric(_NotGeneric[Model]): # type: ignore[type-arg] pass @pytest.mark.parametrize( "django_version", [ (2, 2), (3, 0), (3, 1), (3, 2), (4, 0), (4, 1), ], ) def test_patched_version_specific( django_version: _VersionSpec, make_generic_classes: _MakeGenericClasses, ) -> None: """Test version specific types.""" make_generic_classes(django_version) for el in _need_generic: if el.version is not None and django_version <= el.version: assert el.cls[int] is el.cls def test_mypy_builtins_not_patched_globally( make_generic_classes: _MakeGenericClasses, ) -> None: """Ensures that builtins are not patched with `mypy` specific helpers. This should only happen during `django.setup()` (https://github.com/typeddjango/django-stubs/issues/609). """ make_generic_classes(include_builtins=False) assert not hasattr(builtins, "reveal_type") assert not hasattr(builtins, "reveal_locals") def test_mypy_builtins_patched( make_generic_classes: _MakeGenericClasses, ) -> None: """Ensures that builtins are patched by default.""" make_generic_classes() assert hasattr(builtins, "reveal_type") assert hasattr(builtins, "reveal_locals") django-stubs-5.2.9/ext/tests/typecheck/000077500000000000000000000000001513401051600200445ustar00rootroot00000000000000django-stubs-5.2.9/ext/tests/typecheck/test_aliases.yml000066400000000000000000000007121513401051600232470ustar00rootroot00000000000000- case: alias_values_query_set main: | from django_stubs_ext import ValuesQuerySet from myapp.models import Blog a: ValuesQuerySet[Blog, Blog] installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class Blog(models.Model): created_at = models.DateTimeField() django-stubs-5.2.9/ext/tests/typecheck/test_patching.yml000066400000000000000000000011231513401051600234200ustar00rootroot00000000000000- case: patch_reveal_type_during_django_setup main: | # `main` is empty on purpose, because we test the `django.setup()` step. # It executes the `myapp/models.py` file and should not produce anything, # because `reveal_type` and `reveal_locals` are patched. monkeypatch: true installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | # Will be executed during `django.setup()`: a = 1 reveal_type(a) reveal_locals() django-stubs-5.2.9/logo.svg000066400000000000000000000312421513401051600156060ustar00rootroot00000000000000 django-stubs-5.2.9/mypy.ini000066400000000000000000000014751513401051600156310ustar00rootroot00000000000000# Regular configuration file (can be used as base in other projects, runs in CI) [mypy] # Modified in `tests.yml` incremental = true # Strictness: # TODO: add type args to all generics disallow_any_generics = false # TODO: fix `Any` subclassing in `typeshed/builtins.pyi` disallow_subclassing_any = false strict = true local_partial_types = true warn_unreachable = true disable_error_code = empty-body enable_error_code = deprecated, exhaustive-match, ignore-without-code, possibly-undefined, redundant-expr, redundant-self, truthy-bool, truthy-iterable, unimported-reveal, unused-awaitable, show_traceback = true plugins = mypy_django_plugin.main, mypy.plugins.proper_plugin # Our settings: [mypy.plugins.django-stubs] django_settings_module = scripts.django_tests_settings django-stubs-5.2.9/mypy_django_plugin/000077500000000000000000000000001513401051600200215ustar00rootroot00000000000000django-stubs-5.2.9/mypy_django_plugin/__init__.py000066400000000000000000000000001513401051600221200ustar00rootroot00000000000000django-stubs-5.2.9/mypy_django_plugin/config.py000066400000000000000000000127741513401051600216530ustar00rootroot00000000000000import configparser import os import sys import textwrap from functools import partial from pathlib import Path from typing import TYPE_CHECKING, Any, NoReturn if TYPE_CHECKING: from collections.abc import Callable if sys.version_info[:2] >= (3, 11): import tomllib else: import tomli as tomllib INI_USAGE = """ (config) ... [mypy.plugins.django-stubs] django_settings_module = str (default: `os.getenv("DJANGO_SETTINGS_MODULE")`) strict_settings = bool (default: true) strict_model_abstract_attrs = bool (default: true) ... """ TOML_USAGE = """ (config) ... [tool.django-stubs] django_settings_module = str (default: `os.getenv("DJANGO_SETTINGS_MODULE")`) strict_settings = bool (default: true) strict_model_abstract_attrs = bool (default: true) ... """ INVALID_FILE = "mypy config file is not specified or found" COULD_NOT_LOAD_FILE = "could not load configuration file" MISSING_SECTION = "no section [{section}] found" DJANGO_SETTINGS_ENV_VAR = "DJANGO_SETTINGS_MODULE" MISSING_DJANGO_SETTINGS = ( "missing required 'django_settings_module' config.\n" f"Either specify this config or set your `{DJANGO_SETTINGS_ENV_VAR}` env var" ) INVALID_BOOL_SETTING = "invalid {key!r}: the setting must be a boolean" def exit_with_error(msg: str, is_toml: bool = False) -> NoReturn: """Using mypy's argument parser, raise `SystemExit` to fail hard if validation fails. Considering that the plugin's startup duration is around double as long as mypy's, this aims to import and construct objects only when that's required - which happens once and terminates the run. Considering that most of the runs are successful, there's no need for this to linger in the global scope. """ from mypy.main import CapturableArgumentParser handler = CapturableArgumentParser( prog="(django-stubs) mypy", usage=textwrap.dedent(TOML_USAGE if is_toml else INI_USAGE) ) handler.error(msg) class DjangoPluginConfig: __slots__ = ("django_settings_module", "strict_model_abstract_attrs", "strict_settings") django_settings_module: str strict_settings: bool def __init__(self, config_file: str | None) -> None: if not config_file: exit_with_error(INVALID_FILE) filepath = Path(config_file) if not filepath.is_file(): exit_with_error(INVALID_FILE) if filepath.suffix.lower() == ".toml": self.parse_toml_file(filepath) else: self.parse_ini_file(filepath) def parse_toml_file(self, filepath: Path) -> None: toml_exit: Callable[[str], NoReturn] = partial(exit_with_error, is_toml=True) try: with filepath.open(mode="rb") as f: data = tomllib.load(f) except (tomllib.TOMLDecodeError, OSError): toml_exit(COULD_NOT_LOAD_FILE) try: config: dict[str, Any] = data["tool"]["django-stubs"] except KeyError: toml_exit(MISSING_SECTION.format(section="tool.django-stubs")) django_settings_module = config.get("django_settings_module") or os.getenv(DJANGO_SETTINGS_ENV_VAR) if not django_settings_module: toml_exit(MISSING_DJANGO_SETTINGS) self.django_settings_module = django_settings_module if not isinstance(self.django_settings_module, str): toml_exit("invalid 'django_settings_module': the setting must be a string") self.strict_settings = config.get("strict_settings", True) if not isinstance(self.strict_settings, bool): toml_exit(INVALID_BOOL_SETTING.format(key="strict_settings")) self.strict_model_abstract_attrs = config.get("strict_model_abstract_attrs", True) if not isinstance(self.strict_model_abstract_attrs, bool): toml_exit(INVALID_BOOL_SETTING.format(key="strict_model_abstract_attrs")) def parse_ini_file(self, filepath: Path) -> None: parser = configparser.ConfigParser() try: with filepath.open(encoding="utf-8") as f: parser.read_file(f, source=str(filepath)) except OSError: exit_with_error(COULD_NOT_LOAD_FILE) section = "mypy.plugins.django-stubs" if not parser.has_section(section): exit_with_error(MISSING_SECTION.format(section=section)) if parser.has_option(section, "django_settings_module"): django_settings_module = parser.get(section, "django_settings_module").strip("'\"") else: django_settings_module = os.getenv(DJANGO_SETTINGS_ENV_VAR, "") if not django_settings_module: exit_with_error(MISSING_DJANGO_SETTINGS) self.django_settings_module = django_settings_module try: self.strict_settings = parser.getboolean(section, "strict_settings", fallback=True) except ValueError: exit_with_error(INVALID_BOOL_SETTING.format(key="strict_settings")) try: self.strict_model_abstract_attrs = parser.getboolean(section, "strict_model_abstract_attrs", fallback=True) except ValueError: exit_with_error(INVALID_BOOL_SETTING.format(key="strict_model_abstract_attrs")) def to_json(self, extra_data: dict[str, Any]) -> dict[str, Any]: """We use this method to reset mypy cache via `report_config_data` hook.""" return { "django_settings_module": self.django_settings_module, "strict_settings": self.strict_settings, "strict_model_abstract_attrs": self.strict_model_abstract_attrs, **dict(sorted(extra_data.items())), } django-stubs-5.2.9/mypy_django_plugin/django/000077500000000000000000000000001513401051600212635ustar00rootroot00000000000000django-stubs-5.2.9/mypy_django_plugin/django/__init__.py000066400000000000000000000000001513401051600233620ustar00rootroot00000000000000django-stubs-5.2.9/mypy_django_plugin/django/context.py000066400000000000000000000552431513401051600233320ustar00rootroot00000000000000import os import sys from collections import defaultdict from collections.abc import Iterable, Iterator, Mapping, Sequence from contextlib import contextmanager from functools import cached_property from typing import TYPE_CHECKING, Any, Literal, Union from django.core.exceptions import FieldDoesNotExist, FieldError from django.db import models from django.db.models.base import Model from django.db.models.expressions import Expression from django.db.models.fields import AutoField, CharField, Field from django.db.models.fields.related import ForeignKey, RelatedField from django.db.models.fields.reverse_related import ForeignObjectRel from django.db.models.lookups import Exact from django.db.models.sql.query import Query from mypy.checker import TypeChecker from mypy.nodes import TypeInfo from mypy.plugin import MethodContext from mypy.typeanal import make_optional_type from mypy.types import AnyType, Instance, ProperType, TypeOfAny, UnionType, get_proper_type from mypy.types import Type as MypyType from mypy_django_plugin.exceptions import UnregisteredModelError from mypy_django_plugin.lib import fullnames, helpers # This import fails when `psycopg2` is not installed, avoid crashing the plugin. try: from django.contrib.postgres.fields import ArrayField except ImportError: class ArrayField: # type: ignore[no-redef] pass if TYPE_CHECKING: from django.apps.registry import Apps from django.conf import LazySettings from django.contrib.contenttypes.fields import GenericForeignKey @contextmanager def temp_environ() -> Iterator[None]: """Allow the ability to set os.environ temporarily""" environ = dict(os.environ) try: yield finally: os.environ.clear() os.environ.update(environ) def initialize_django(settings_module: str) -> tuple["Apps", "LazySettings"]: with temp_environ(): os.environ["DJANGO_SETTINGS_MODULE"] = settings_module # add current directory to sys.path sys.path.append(os.getcwd()) from django.apps import apps from django.conf import settings apps.get_swappable_settings_name.cache_clear() # type: ignore[attr-defined] apps.clear_cache() if not settings.configured: settings._setup() # type: ignore[misc] apps.populate(settings.INSTALLED_APPS) assert apps.apps_ready, "Apps are not ready" assert settings.configured, "Settings are not configured" return apps, settings class LookupsAreUnsupported(Exception): pass def get_field_type_from_model_type_info(info: TypeInfo | None, field_name: str) -> Instance | None: if info is None: return None field_node = info.get(field_name) if field_node is None: return None field_type = get_proper_type(field_node.type) if not isinstance(field_type, Instance): return None # Field declares a set and a get type arg. Fallback to `None` when we can't find any args if len(field_type.args) != 2: return None return field_type def _get_field_set_type_from_model_type_info(info: TypeInfo | None, field_name: str) -> MypyType | None: field_type = get_field_type_from_model_type_info(info, field_name) if field_type is not None: return field_type.args[0] return None def _get_field_get_type_from_model_type_info(info: TypeInfo | None, field_name: str) -> MypyType | None: field_type = get_field_type_from_model_type_info(info, field_name) if field_type is not None: return field_type.args[1] return None class DjangoContext: def __init__(self, django_settings_module: str) -> None: self.django_settings_module = django_settings_module apps, settings = initialize_django(self.django_settings_module) self.apps_registry = apps self.settings = settings @cached_property def model_modules(self) -> dict[str, dict[str, type[Model]]]: """All modules that contain Django models.""" modules: dict[str, dict[str, type[Model]]] = defaultdict(dict) for concrete_model_cls in self.apps_registry.get_models(include_auto_created=True, include_swapped=True): modules[concrete_model_cls.__module__][concrete_model_cls.__name__] = concrete_model_cls # collect abstract=True models for model_cls in concrete_model_cls.mro()[1:]: if issubclass(model_cls, Model) and hasattr(model_cls, "_meta") and model_cls._meta.abstract: modules[model_cls.__module__][model_cls.__name__] = model_cls return modules def get_model_class_by_fullname(self, fullname: str) -> type[Model] | None: """Returns None if Model is abstract""" module, _, model_cls_name = fullname.rpartition(".") return self.model_modules.get(module, {}).get(model_cls_name) def get_model_fields(self, model_cls: type[Model]) -> Iterator["Field[Any, Any]"]: for field in model_cls._meta.get_fields(): if isinstance(field, Field): yield field def get_model_foreign_keys(self, model_cls: type[Model]) -> Iterator["ForeignKey[Any, Any]"]: for field in model_cls._meta.get_fields(): if isinstance(field, ForeignKey): yield field def get_model_related_fields(self, model_cls: type[Model]) -> Iterator["RelatedField[Any, Any]"]: """Get model forward relations""" for field in model_cls._meta.get_fields(): if isinstance(field, RelatedField): yield field def get_model_relations(self, model_cls: type[Model]) -> Iterator[ForeignObjectRel]: """Get model reverse relations""" for field in model_cls._meta.get_fields(): if isinstance(field, ForeignObjectRel): yield field def get_field_lookup_exact_type( self, api: TypeChecker, field: Union["Field[Any, Any]", ForeignObjectRel] ) -> MypyType: if isinstance(field, RelatedField | ForeignObjectRel): related_model_cls = self.get_field_related_model_cls(field) rel_model_info = helpers.lookup_class_typeinfo(api, related_model_cls) if rel_model_info is None: return AnyType(TypeOfAny.explicit) primary_key_field = self.get_primary_key_field(related_model_cls) primary_key_type = self.get_field_get_type(api, rel_model_info, primary_key_field, method="init") model_and_primary_key_type = UnionType.make_union([Instance(rel_model_info, []), primary_key_type]) return make_optional_type(model_and_primary_key_type) field_info = helpers.lookup_class_typeinfo(api, field.__class__) if field_info is None: return AnyType(TypeOfAny.explicit) return helpers.get_private_descriptor_type(field_info, "_pyi_lookup_exact_type", is_nullable=field.null) def get_related_target_field( self, related_model_cls: type[Model], field: "ForeignKey[Any, Any]" ) -> "Field[Any, Any] | None": # ForeignKey only supports one `to_fields` item (ForeignObject supports many) assert len(field.to_fields) == 1 to_field_name = field.to_fields[0] if to_field_name: rel_field = related_model_cls._meta.get_field(to_field_name) if not isinstance(rel_field, Field): return None # Not supported return rel_field return self.get_primary_key_field(related_model_cls) def get_primary_key_field(self, model_cls: type[Model]) -> "Field[Any, Any]": for field in model_cls._meta.get_fields(): if isinstance(field, Field): if field.primary_key: return field raise ValueError("No primary key defined") def get_expected_types(self, api: TypeChecker, model_cls: type[Model], *, method: str) -> dict[str, MypyType]: contenttypes_in_apps = self.apps_registry.is_installed("django.contrib.contenttypes") expected_types = {} # add pk if not abstract=True if not model_cls._meta.abstract: primary_key_field = self.get_primary_key_field(model_cls) field_set_type = self.get_field_set_type(api, primary_key_field, method=method) expected_types["pk"] = field_set_type model_info = helpers.lookup_class_typeinfo(api, model_cls) for field in model_cls._meta.get_fields(): if isinstance(field, Field): field_name = field.attname # Can not determine target_field for recursive relationship when model is abstract if field.related_model == "self" and model_cls._meta.abstract: continue # Try to retrieve set type from a model's TypeInfo object and fallback to retrieving it manually # from django-stubs own declaration. This is to align with the setter types declared for # assignment. field_set_type = _get_field_set_type_from_model_type_info( model_info, field_name ) or self.get_field_set_type(api, field, method=method) expected_types[field_name] = field_set_type if isinstance(field, ForeignKey): field_name = field.name foreign_key_info = helpers.lookup_class_typeinfo(api, field.__class__) if foreign_key_info is None: # maybe there's no type annotation for the field expected_types[field_name] = AnyType(TypeOfAny.unannotated) continue try: related_model = self.get_field_related_model_cls(field) except UnregisteredModelError: # Recognise the field but don't say anything about its type.. expected_types[field_name] = AnyType(TypeOfAny.from_error) continue if related_model._meta.proxy_for_model is not None: related_model = related_model._meta.proxy_for_model related_model_info = helpers.lookup_class_typeinfo(api, related_model) if related_model_info is None: expected_types[field_name] = AnyType(TypeOfAny.unannotated) continue is_nullable = self.get_field_nullability(field, method) foreign_key_set_type = helpers.get_private_descriptor_type( foreign_key_info, "_pyi_private_set_type", is_nullable=is_nullable ) model_set_type = helpers.convert_any_to_type(foreign_key_set_type, Instance(related_model_info, [])) expected_types[field_name] = model_set_type elif contenttypes_in_apps: from django.contrib.contenttypes.fields import GenericForeignKey if isinstance(field, GenericForeignKey): # it's generic, so cannot set specific model field_name = field.name gfk_info = helpers.lookup_class_typeinfo(api, field.__class__) if gfk_info is None: gfk_set_type: MypyType = AnyType(TypeOfAny.unannotated) else: gfk_set_type = helpers.get_private_descriptor_type( gfk_info, "_pyi_private_set_type", is_nullable=True ) expected_types[field_name] = gfk_set_type return expected_types @cached_property def all_registered_model_classes(self) -> set[type[models.Model]]: model_classes = self.apps_registry.get_models() all_model_bases = set() for model_cls in model_classes: for base_cls in model_cls.mro(): if issubclass(base_cls, models.Model): all_model_bases.add(base_cls) return all_model_bases @cached_property def model_class_fullnames_by_label(self) -> Mapping[str, str]: return { klass._meta.label: helpers.get_class_fullname(klass) for klass in self.all_registered_model_classes if klass is not models.Model } def get_field_nullability(self, field: Union["Field[Any, Any]", ForeignObjectRel], method: str | None) -> bool: if method in ("values", "values_list"): return field.null nullable = field.null if not nullable and isinstance(field, CharField) and field.blank: return True if method == "__init__": if (isinstance(field, Field) and field.primary_key) or isinstance(field, ForeignKey): return True if method == "create": if isinstance(field, AutoField): return True if isinstance(field, Field) and field.has_default(): return True return nullable def get_field_set_type( self, api: TypeChecker, field: Union["Field[Any, Any]", ForeignObjectRel], *, method: str ) -> MypyType: """Get a type of __set__ for this specific Django field.""" target_field = field if isinstance(field, ForeignKey): try: # We gotta be careful for exceptions when we're triggering '__get__'. # Related model could very well be unresolvable target_field = field.target_field except ValueError: return AnyType(TypeOfAny.from_error) field_info = helpers.lookup_class_typeinfo(api, target_field.__class__) if field_info is None: return AnyType(TypeOfAny.from_error) field_set_type = helpers.get_private_descriptor_type( field_info, "_pyi_private_set_type", is_nullable=self.get_field_nullability(field, method) ) if isinstance(target_field, ArrayField): argument_field_type = self.get_field_set_type(api, target_field.base_field, method=method) field_set_type = helpers.convert_any_to_type(field_set_type, argument_field_type) return field_set_type def get_field_get_type( self, api: TypeChecker, model_info: TypeInfo | None, field: Union["Field[Any, Any]", ForeignObjectRel], *, method: str, ) -> MypyType: """Get a type of __get__ for this specific Django field.""" if isinstance(field, Field): get_type = _get_field_get_type_from_model_type_info(model_info, field.attname) if get_type is not None: return get_type field_info = helpers.lookup_class_typeinfo(api, field.__class__) if field_info is None: return AnyType(TypeOfAny.unannotated) is_nullable = self.get_field_nullability(field, method) if isinstance(field, RelatedField): related_model_cls = self.get_field_related_model_cls(field) rel_model_info = helpers.lookup_class_typeinfo(api, related_model_cls) if method in ("values", "values_list"): primary_key_field = self.get_primary_key_field(related_model_cls) return self.get_field_get_type(api, rel_model_info, primary_key_field, method=method) model_info = helpers.lookup_class_typeinfo(api, related_model_cls) if model_info is None: return AnyType(TypeOfAny.unannotated) return Instance(model_info, []) return helpers.get_private_descriptor_type(field_info, "_pyi_private_get_type", is_nullable=is_nullable) def get_field_related_model_cls(self, field: Union["RelatedField[Any, Any]", ForeignObjectRel]) -> type[Model]: if isinstance(field, RelatedField): related_model_cls = field.remote_field.model else: related_model_cls = field.field.model if related_model_cls is None: raise UnregisteredModelError if isinstance(related_model_cls, str): if related_model_cls == "self": # type: ignore[unreachable] # same model related_model_cls = field.model elif "." not in related_model_cls: # same file model related_model_fullname = f"{field.model.__module__}.{related_model_cls}" related_model_cls = self.get_model_class_by_fullname(related_model_fullname) if related_model_cls is None: raise UnregisteredModelError else: try: related_model_cls = self.apps_registry.get_model(related_model_cls) except LookupError as e: raise UnregisteredModelError from e return related_model_cls def _resolve_field_from_parts( self, field_parts: Iterable[str], model_cls: type[Model] ) -> tuple[Union["Field[Any, Any]", ForeignObjectRel], type[Model]]: currently_observed_model = model_cls field: Field[Any, Any] | ForeignObjectRel | GenericForeignKey | None = None for field_part in field_parts: if field_part == "pk": field = self.get_primary_key_field(currently_observed_model) continue field = currently_observed_model._meta.get_field(field_part) if isinstance(field, RelatedField): currently_observed_model = self.get_field_related_model_cls(field) model_name = currently_observed_model._meta.model_name if model_name is not None and field_part == (model_name + "_id"): field = self.get_primary_key_field(currently_observed_model) if isinstance(field, ForeignObjectRel): currently_observed_model = self.get_field_related_model_cls(field) # Guaranteed by `query.solve_lookup_type` before. assert isinstance(field, Field | ForeignObjectRel) return field, currently_observed_model def solve_lookup_type( self, model_cls: type[Model], lookup: str ) -> tuple[Sequence[str], Sequence[str], Expression | Literal[False]] | None: query = Query(model_cls) if (lookup == "pk" or lookup.startswith("pk__")) and query.get_meta().pk is None: # Primary key lookup when no primary key field is found, model is presumably # abstract and we can't say anything about 'pk'. return None try: return query.solve_lookup_type(lookup) # This occurs when the following conditions are met: # - model_cls._meta.abstract = True # - part of the lookup is a foreign key defined on model_cls where the 'to' argument is a string # On abstract models the 'to' parameter is only coalesced into the actual class whenever a subclass of it is # instantiated, therefore it is never swapped out for abstract base classes. except AttributeError: pass query_parts = lookup.split("__") try: field = query.get_meta().get_field(query_parts[0]) except FieldDoesNotExist: return None if len(query_parts) == 1: return [], [query_parts[0]], False if not isinstance(field, RelatedField | ForeignObjectRel): return None related_model = self.get_field_related_model_cls(field) sub_query = Query(related_model).solve_lookup_type("__".join(query_parts[1:])) entire_query_parts = [query_parts[0], *sub_query[1]] return sub_query[0], entire_query_parts, sub_query[2] def resolve_lookup_into_field( self, model_cls: type[Model], lookup: str ) -> tuple[Union["Field[Any, Any]", ForeignObjectRel, None], type[Model]]: solved_lookup = self.solve_lookup_type(model_cls, lookup) if solved_lookup is None: return None, model_cls lookup_parts, field_parts, _ = solved_lookup if lookup_parts: raise LookupsAreUnsupported() return self._resolve_field_from_parts(field_parts, model_cls) def resolve_lookup_expected_type( self, ctx: MethodContext, model_cls: type[Model], lookup: str, model_instance: Instance ) -> MypyType: try: solved_lookup = self.solve_lookup_type(model_cls, lookup) except FieldError as exc: if helpers.is_annotated_model(model_instance.type) and model_instance.extra_attrs: # If the field comes from .annotate(), we assume Any for it # and allow chaining any lookups. lookup_base_field, *_ = lookup.split("__") if lookup_base_field in model_instance.extra_attrs.attrs: return model_instance.extra_attrs.attrs[lookup_base_field] msg = exc.args[0] if model_instance.extra_attrs: msg = ", ".join((msg, *model_instance.extra_attrs.attrs.keys())) ctx.api.fail(msg, ctx.context) return AnyType(TypeOfAny.from_error) if solved_lookup is None: return AnyType(TypeOfAny.implementation_artifact) lookup_parts, field_parts, is_expression = solved_lookup if is_expression: return AnyType(TypeOfAny.explicit) field, _ = self._resolve_field_from_parts(field_parts, model_cls) lookup_cls = None if lookup_parts: lookup = lookup_parts[-1] lookup_cls = field.get_lookup(lookup) if lookup_cls is None: # unknown lookup return AnyType(TypeOfAny.explicit) if lookup_cls is None or isinstance(lookup_cls, Exact): return self.get_field_lookup_exact_type(helpers.get_typechecker_api(ctx), field) assert lookup_cls is not None lookup_info = helpers.lookup_class_typeinfo(helpers.get_typechecker_api(ctx), lookup_cls) if lookup_info is None: return AnyType(TypeOfAny.explicit) for lookup_base in helpers.iter_bases(lookup_info): if lookup_base.args and isinstance((lookup_type := get_proper_type(lookup_base.args[0])), Instance): # if it's Field, consider lookup_type a __get__ of current field if lookup_type.type.fullname == fullnames.FIELD_FULLNAME: field_info = helpers.lookup_class_typeinfo(helpers.get_typechecker_api(ctx), field.__class__) if field_info is None: return AnyType(TypeOfAny.explicit) lookup_type = get_proper_type( helpers.get_private_descriptor_type(field_info, "_pyi_private_get_type", is_nullable=field.null) ) return lookup_type return AnyType(TypeOfAny.explicit) def resolve_f_expression_type(self, f_expression_type: Instance) -> ProperType: return AnyType(TypeOfAny.explicit) @cached_property def is_contrib_auth_installed(self) -> bool: return "django.contrib.auth" in self.settings.INSTALLED_APPS django-stubs-5.2.9/mypy_django_plugin/errorcodes.py000066400000000000000000000002151513401051600225400ustar00rootroot00000000000000from mypy.errorcodes import ErrorCode MANAGER_MISSING = ErrorCode("django-manager-missing", "Couldn't resolve manager for model", "Django") django-stubs-5.2.9/mypy_django_plugin/exceptions.py000066400000000000000000000001311513401051600225470ustar00rootroot00000000000000class UnregisteredModelError(Exception): """The requested model is not registered""" django-stubs-5.2.9/mypy_django_plugin/lib/000077500000000000000000000000001513401051600205675ustar00rootroot00000000000000django-stubs-5.2.9/mypy_django_plugin/lib/__init__.py000066400000000000000000000000001513401051600226660ustar00rootroot00000000000000django-stubs-5.2.9/mypy_django_plugin/lib/fullnames.py000066400000000000000000000064011513401051600231300ustar00rootroot00000000000000ABSTRACT_BASE_USER_MODEL_FULLNAME = "django.contrib.auth.base_user.AbstractBaseUser" ABSTRACT_USER_MODEL_FULLNAME = "django.contrib.auth.models.AbstractUser" PERMISSION_MIXIN_CLASS_FULLNAME = "django.contrib.auth.models.PermissionsMixin" MODEL_METACLASS_FULLNAME = "django.db.models.base.ModelBase" MODEL_CLASS_FULLNAME = "django.db.models.base.Model" FIELD_FULLNAME = "django.db.models.fields.Field" ARRAY_FIELD_FULLNAME = "django.contrib.postgres.fields.array.ArrayField" FOREIGN_OBJECT_FULLNAME = "django.db.models.fields.related.ForeignObject" FOREIGN_KEY_FULLNAME = "django.db.models.fields.related.ForeignKey" ONETOONE_FIELD_FULLNAME = "django.db.models.fields.related.OneToOneField" MANYTOMANY_FIELD_FULLNAME = "django.db.models.fields.related.ManyToManyField" DUMMY_SETTINGS_BASE_CLASS = "django.conf._DjangoConfLazyObject" AUTH_USER_MODEL_FULLNAME = "django.conf.settings.AUTH_USER_MODEL" QUERYSET_CLASS_FULLNAME = "django.db.models.query.QuerySet" BASE_MANAGER_CLASS_FULLNAME = "django.db.models.manager.BaseManager" MANAGER_CLASS_FULLNAME = "django.db.models.manager.Manager" RELATED_MANAGER_CLASS = "django.db.models.fields.related_descriptors.RelatedManager" PREFETCH_CLASS_FULLNAME = "django.db.models.query.Prefetch" GENERIC_PREFETCH_CLASS_FULLNAME = "django.contrib.contenttypes.prefetch.GenericPrefetch" CHOICES_CLASS_FULLNAME = "django.db.models.enums.Choices" CHOICES_TYPE_METACLASS_FULLNAME = "django.db.models.enums.ChoicesType" WITH_ANNOTATIONS_FULLNAME = "django_stubs_ext.annotations.WithAnnotations" ANNOTATIONS_FULLNAME = "django_stubs_ext.annotations.Annotations" ANNOTATED_TYPES_FULLNAMES = { "typing.Annotated", "typing_extensions.Annotated", WITH_ANNOTATIONS_FULLNAME, } BASEFORM_CLASS_FULLNAME = "django.forms.forms.BaseForm" FORM_CLASS_FULLNAME = "django.forms.forms.Form" MODELFORM_CLASS_FULLNAME = "django.forms.models.ModelForm" FORM_MIXIN_CLASS_FULLNAME = "django.views.generic.edit.FormMixin" REVERSE_ONE_TO_ONE_DESCRIPTOR = "django.db.models.fields.related_descriptors.ReverseOneToOneDescriptor" REVERSE_MANY_TO_ONE_DESCRIPTOR = "django.db.models.fields.related_descriptors.ReverseManyToOneDescriptor" MANY_TO_MANY_DESCRIPTOR = "django.db.models.fields.related_descriptors.ManyToManyDescriptor" MANY_RELATED_MANAGER = "django.db.models.fields.related_descriptors.ManyRelatedManager" RELATED_FIELDS_CLASSES = frozenset( ( FOREIGN_OBJECT_FULLNAME, FOREIGN_KEY_FULLNAME, ONETOONE_FIELD_FULLNAME, ) ) OPTIONS_CLASS_FULLNAME = "django.db.models.options.Options" QUERYDICT_CLASS_FULLNAME = "django.http.request.QueryDict" COMBINABLE_EXPRESSION_FULLNAME = "django.db.models.expressions.Combinable" F_EXPRESSION_FULLNAME = "django.db.models.expressions.F" ANY_ATTR_ALLOWED_CLASS_FULLNAME = "django_stubs_ext.AnyAttrAllowed" TYPED_MODEL_META_FULLNAME = "django_stubs_ext.db.models.TypedModelMeta" STR_PROMISE_FULLNAME = "django.utils.functional._StrPromise" OBJECT_DOES_NOT_EXIST = "django.core.exceptions.ObjectDoesNotExist" MULTIPLE_OBJECTS_RETURNED = "django.core.exceptions.MultipleObjectsReturned" DJANGO_ABSTRACT_MODELS = frozenset( ( ABSTRACT_BASE_USER_MODEL_FULLNAME, ABSTRACT_USER_MODEL_FULLNAME, PERMISSION_MIXIN_CLASS_FULLNAME, "django.contrib.sessions.base_session.AbstractBaseSession", ) ) django-stubs-5.2.9/mypy_django_plugin/lib/helpers.py000066400000000000000000000613331513401051600226110ustar00rootroot00000000000000from collections.abc import Iterable, Iterator from typing import TYPE_CHECKING, Any, Literal, NamedTuple, TypedDict, cast from django.db.models.base import Model from django.db.models.fields.related import RelatedField from django.db.models.fields.reverse_related import ForeignObjectRel from mypy import checker from mypy.checker import TypeChecker from mypy.mro import calculate_mro from mypy.nodes import ( GDEF, MDEF, ArgKind, AssignmentStmt, Block, CallExpr, ClassDef, Context, Expression, MemberExpr, MypyFile, NameExpr, Node, RefExpr, StrExpr, SymbolNode, SymbolTable, SymbolTableNode, TypeInfo, Var, ) from mypy.plugin import ( AttributeContext, CheckerPluginInterface, ClassDefContext, DynamicClassDefContext, FunctionContext, MethodContext, ) from mypy.semanal import SemanticAnalyzer from mypy.typeanal import make_optional_type from mypy.types import ( AnyType, CallableType, ExtraAttrs, Instance, LiteralType, NoneTyp, TupleType, Type, TypedDictType, TypeOfAny, UnionType, get_proper_type, ) from mypy.types import Type as MypyType from typing_extensions import Self from mypy_django_plugin.lib import fullnames if TYPE_CHECKING: from django.db.models.fields import Field from mypy_django_plugin.django.context import DjangoContext class DjangoTypeMetadata(TypedDict, total=False): is_abstract_model: bool is_annotated_model: bool from_queryset_manager: str reverse_managers: dict[str, str] baseform_bases: dict[str, int] m2m_throughs: dict[str, str] m2m_managers: dict[str, str] manager_to_model: str def get_django_metadata(model_info: TypeInfo) -> DjangoTypeMetadata: return cast("DjangoTypeMetadata", model_info.metadata.setdefault("django", {})) def get_django_metadata_bases(model_info: TypeInfo, key: Literal["baseform_bases"]) -> dict[str, int]: return get_django_metadata(model_info).setdefault(key, cast("dict[str, int]", {})) def get_reverse_manager_info( api: TypeChecker | SemanticAnalyzer, model_info: TypeInfo, derived_from: str ) -> TypeInfo | None: manager_fullname = get_django_metadata(model_info).get("reverse_managers", {}).get(derived_from) if not manager_fullname: return None return lookup_fully_qualified_typeinfo(api, manager_fullname) def set_reverse_manager_info(model_info: TypeInfo, derived_from: str, fullname: str) -> None: get_django_metadata(model_info).setdefault("reverse_managers", {})[derived_from] = fullname def get_many_to_many_manager_info( api: TypeChecker | SemanticAnalyzer, *, to: TypeInfo, derived_from: str ) -> TypeInfo | None: manager_fullname = get_django_metadata(to).get("m2m_managers", {}).get(derived_from) if not manager_fullname: return None return lookup_fully_qualified_typeinfo(api, manager_fullname) def set_many_to_many_manager_info(to: TypeInfo, derived_from: str, manager_info: TypeInfo) -> None: get_django_metadata(to).setdefault("m2m_managers", {})[derived_from] = manager_info.fullname def mark_as_annotated_model(model: TypeInfo) -> None: get_django_metadata(model)["is_annotated_model"] = True def is_annotated_model(model: TypeInfo) -> bool: return get_django_metadata(model).get("is_annotated_model", False) class IncompleteDefnException(Exception): pass def lookup_fully_qualified_sym(fullname: str, all_modules: dict[str, MypyFile]) -> SymbolTableNode | None: if "." not in fullname: return None if "[" in fullname and "]" in fullname: # We sometimes generate fake fullnames like a.b.C[x.y.Z] to provide a better representation to users # Make sure that we handle lookups of those types of names correctly if the part inside [] contains "." bracket_start = fullname.index("[") fullname_without_bracket = fullname[:bracket_start] module, cls_name = fullname_without_bracket.rsplit(".", 1) cls_name += fullname[bracket_start:] else: module, cls_name = fullname.rsplit(".", 1) parent_classes: list[str] = [] while True: module_file = all_modules.get(module) if module_file: break if "." not in module: return None module, parent_cls = module.rsplit(".", 1) parent_classes.insert(0, parent_cls) scope: MypyFile | TypeInfo = module_file for parent_cls in parent_classes: sym = scope.names.get(parent_cls) if sym is None: return None if isinstance(sym.node, TypeInfo): scope = sym.node else: return None sym = scope.names.get(cls_name) if sym is None: return None return sym def lookup_fully_qualified_generic(name: str, all_modules: dict[str, MypyFile]) -> SymbolNode | None: sym = lookup_fully_qualified_sym(name, all_modules) if sym is None: return None return sym.node def lookup_fully_qualified_typeinfo(api: TypeChecker | SemanticAnalyzer, fullname: str) -> TypeInfo | None: node = lookup_fully_qualified_generic(fullname, api.modules) if not isinstance(node, TypeInfo): return None return node def lookup_class_typeinfo(api: TypeChecker, klass: type | None) -> TypeInfo | None: if klass is None: return None fullname = get_class_fullname(klass) return lookup_fully_qualified_typeinfo(api, fullname) def get_class_fullname(klass: type) -> str: return klass.__module__ + "." + klass.__qualname__ def get_min_argument_count(ctx: MethodContext | FunctionContext) -> int: """ Return the number of non-star arguments passed to the function. Excludes *args and **kwargs since their count is indeterminate. """ return sum(not kind.is_star() for kinds in ctx.arg_kinds for kind in kinds) class DjangoModel(NamedTuple): """A small wrapper around a django model runtime object and associated mypy type info""" # The Django model at runtime cls: type[Model] # The associated Mypy Instance typ: Instance # Is an annotated variant of a model ie `MyModel@AnnotatedWith`. See `AddAnnotateUtilities` is_annotated: bool @property def info(self) -> TypeInfo: return self.typ.type @classmethod def from_model_type(cls, model_type: Instance, django_context: "DjangoContext") -> Self | None: model_info = model_type.type is_annotated = is_annotated_model(model_info) model_cls = ( django_context.get_model_class_by_fullname(model_info.bases[0].type.fullname) if is_annotated else django_context.get_model_class_by_fullname(model_info.fullname) ) if model_cls is None: return None return cls(cls=model_cls, typ=model_type, is_annotated=is_annotated) def extract_model_type_from_queryset(queryset_type: Instance, api: TypeChecker) -> Instance | None: """Extract the django model `Instance` associated to a queryset `Instance`""" for base_type in [queryset_type, *queryset_type.type.bases]: if ( # Queryset/Manager subclasses providing the model type as a type param # Ex: # class MyQuerySet(models.QuerySet[MyModel]): # ... not len(base_type.args) # Manager generated by `ProcessManyToManyFields.create_many_related_manager` # type param is the Through model, not the model associated with the queryset. # We need to skip in that case to get it from the parent `ManyRelatedManager` Instance. or base_type.type.has_base(fullnames.MANY_RELATED_MANAGER) ): continue model = get_proper_type(base_type.args[0]) if isinstance(model, Instance) and is_model_type(model.type): return model return None def get_model_info_from_qs_ctx( ctx: MethodContext, django_context: "DjangoContext", ) -> DjangoModel | None: """ Extract DjangoModel details from a queryset/manager `MethodContext` """ api = get_typechecker_api(ctx) if not (isinstance(ctx.type, Instance) and (model_type := extract_model_type_from_queryset(ctx.type, api))): return None return DjangoModel.from_model_type(model_type, django_context) def _get_class_init_type(call: CallExpr) -> CallableType | None: callee_node: Node | None = call.callee if isinstance(callee_node, RefExpr): callee_node = callee_node.node if ( isinstance(callee_node, TypeInfo) and (init_sym := callee_node.get("__init__")) and isinstance((init_type := get_proper_type(init_sym.type)), CallableType) ): return init_type return None def get_class_init_argument_by_name(call: CallExpr, name: str) -> Expression | None: """Adaptation of `mypy.plugins.common._get_argument` for class initializers""" callee_type = _get_class_init_type(call) if not callee_type: return None argument = callee_type.argument_by_name(name) if not argument: return None assert argument.name for i, (attr_name, attr_value) in enumerate( zip(call.arg_names, call.args, strict=False), start=1, # Start at one to skip first `self` arg ): if argument.pos is not None and not attr_name and i == argument.pos: return attr_value if attr_name == argument.name: return attr_value return None def get_call_argument_by_name(ctx: FunctionContext | MethodContext, name: str) -> Expression | None: """ Return the expression for the specific argument. This helper supports named and positional arguments and should only be used with non-star arguments. Ex: Given `def my_func(a: int, b: str), `get_call_argument_by_name(ctx, "b")` works for` - `my_func(1, b="x")` - `my_func(1, "x")` """ # try and pull the named argument from the caller first for kinds, argnames, args in zip(ctx.arg_kinds, ctx.arg_names, ctx.args, strict=False): for kind, argname, arg in zip(kinds, argnames, args, strict=False): if kind == ArgKind.ARG_NAMED and argname == name: return arg if name not in ctx.callee_arg_names: return None idx = ctx.callee_arg_names.index(name) args = ctx.args[idx] if len(args) != 1: # Either an error or no value passed. return None return args[0] def get_bool_call_argument_by_name(ctx: FunctionContext | MethodContext, name: str, *, default: bool) -> bool: """ Return the boolean value for an argument or the default if it's not found. """ arg_value = get_call_argument_by_name(ctx, name) if arg_value is not None: parsed_value = parse_bool(arg_value) if parsed_value is not None: return parsed_value return default def get_call_argument_type_by_name(ctx: FunctionContext | MethodContext, name: str) -> MypyType | None: """Return the type for the specific argument. This helper should only be used with non-star arguments. """ if name not in ctx.callee_arg_names: return None idx = ctx.callee_arg_names.index(name) arg_types = ctx.arg_types[idx] if len(arg_types) != 1: # Either an error or no value passed. return None return arg_types[0] def is_optional(typ: MypyType) -> bool: typ = get_proper_type(typ) return isinstance(typ, UnionType) and any(isinstance(get_proper_type(item), NoneTyp) for item in typ.items) # Duplicating mypy.semanal_shared.parse_bool because importing it directly caused ImportError (#1784) def parse_bool(expr: Expression) -> bool | None: if isinstance(expr, NameExpr): if expr.fullname == "builtins.True": return True if expr.fullname == "builtins.False": return False return None def get_literal_str_type(typ: Type) -> str | None: """Extract the str value of a string like type if possible""" typ = get_proper_type(typ) if (isinstance(typ, LiteralType) and isinstance((literal_value := typ.value), str)) or ( isinstance(typ, Instance) and isinstance(typ.last_known_value, LiteralType) and isinstance((literal_value := typ.last_known_value.value), str) ): return literal_value return None def has_any_of_bases(info: TypeInfo, bases: Iterable[str]) -> bool: for base_fullname in bases: if info.has_base(base_fullname): return True return False def iter_bases(info: TypeInfo) -> Iterator[Instance]: for base in info.bases: yield base yield from iter_bases(base.type) def get_private_descriptor_type(type_info: TypeInfo, private_field_name: str, is_nullable: bool) -> MypyType: """Return declared type of type_info's private_field_name (used for private Field attributes)""" sym = type_info.get(private_field_name) if sym is None: return AnyType(TypeOfAny.explicit) node = sym.node if isinstance(node, Var): descriptor_type = node.type if descriptor_type is None: return AnyType(TypeOfAny.explicit) if is_nullable: descriptor_type = make_optional_type(descriptor_type) return descriptor_type return AnyType(TypeOfAny.explicit) def get_field_lookup_exact_type(api: TypeChecker, field: "Field[Any, Any]") -> MypyType: if isinstance(field, RelatedField | ForeignObjectRel): # Not using field.related_model because that may have str value "self" lookup_type_class = field.remote_field.model rel_model_info = lookup_class_typeinfo(api, lookup_type_class) if rel_model_info is None: return AnyType(TypeOfAny.from_error) return make_optional_type(Instance(rel_model_info, [])) field_info = lookup_class_typeinfo(api, field.__class__) if field_info is None: return AnyType(TypeOfAny.explicit) return get_private_descriptor_type(field_info, "_pyi_lookup_exact_type", is_nullable=field.null) def get_nested_meta_node_for_current_class(info: TypeInfo) -> TypeInfo | None: metaclass_sym = info.names.get("Meta") if metaclass_sym is not None and isinstance(metaclass_sym.node, TypeInfo): return metaclass_sym.node return None def create_type_info(name: str, module: str, bases: list[Instance]) -> TypeInfo: # make new class expression classdef = ClassDef(name, Block([])) classdef.fullname = module + "." + name # make new TypeInfo new_typeinfo = TypeInfo(SymbolTable(), classdef, module) new_typeinfo.bases = bases calculate_mro(new_typeinfo) new_typeinfo.metaclass_type = new_typeinfo.calculate_metaclass_type() classdef.info = new_typeinfo return new_typeinfo def add_new_class_for_module( module: MypyFile, name: str, bases: list[Instance], fields: dict[str, MypyType] | None = None, no_serialize: bool = False, ) -> TypeInfo: new_class_unique_name = checker.gen_unique_name(name, module.names) new_typeinfo = create_type_info(new_class_unique_name, module.fullname, bases) # add fields if fields: for field_name, field_type in fields.items(): var = Var(field_name, type=field_type) var.info = new_typeinfo var._fullname = new_typeinfo.fullname + "." + field_name new_typeinfo.names[field_name] = SymbolTableNode( MDEF, var, plugin_generated=True, no_serialize=no_serialize ) module.names[new_class_unique_name] = SymbolTableNode( GDEF, new_typeinfo, plugin_generated=True, no_serialize=no_serialize ) return new_typeinfo def get_current_module(api: TypeChecker) -> MypyFile: """ Scope is guaranteed to be initialized with the module as the first element of the stack. Inspired from https://github.com/python/mypy/blob/15b8ca967cc6187effcab23e6613da2db4546584/mypy/checker.py#L5788 """ current_module = api.scope.stack[0] assert isinstance(current_module, MypyFile) return current_module def make_oneoff_named_tuple( api: TypeChecker, name: str, fields: "dict[str, MypyType]", extra_bases: list[Instance] | None = None ) -> TupleType: current_module = get_current_module(api) if extra_bases is None: extra_bases = [] namedtuple_info = add_new_class_for_module( current_module, name, bases=[api.named_generic_type("typing.NamedTuple", []), *extra_bases], fields=fields ) return TupleType(list(fields.values()), fallback=Instance(namedtuple_info, [])) def make_tuple(api: "TypeChecker", fields: list[MypyType]) -> TupleType: # fallback for tuples is any builtins.tuple instance fallback = api.named_generic_type("builtins.tuple", [AnyType(TypeOfAny.special_form)]) return TupleType(fields, fallback=fallback) def convert_any_to_type(typ: MypyType, referred_to_type: MypyType) -> MypyType: proper_type = get_proper_type(typ) if isinstance(proper_type, UnionType): converted_items = [] for item in proper_type.items: converted_items.append(convert_any_to_type(item, referred_to_type)) return UnionType.make_union(converted_items, line=typ.line, column=typ.column) if isinstance(proper_type, Instance): args = [] for default_arg in proper_type.args: default_arg = get_proper_type(default_arg) if isinstance(default_arg, AnyType): args.append(referred_to_type) else: args.append(default_arg) return proper_type.copy_modified(args=args) if isinstance(proper_type, AnyType): return referred_to_type return typ def make_typeddict( api: SemanticAnalyzer | CheckerPluginInterface, fields: dict[str, MypyType], required_keys: set[str], readonly_keys: set[str], ) -> TypedDictType: if isinstance(api, CheckerPluginInterface): fallback_type = api.named_generic_type("typing._TypedDict", []) else: fallback_type = api.named_type("typing._TypedDict", []) return TypedDictType( fields, required_keys=required_keys, readonly_keys=readonly_keys, fallback=fallback_type, ) def resolve_string_attribute_value(attr_expr: Expression, django_context: "DjangoContext") -> str | None: if isinstance(attr_expr, StrExpr): return attr_expr.value if isinstance(attr_expr, NameExpr) and isinstance(attr_expr.node, Var) and attr_expr.node.type is not None: return get_literal_str_type(attr_expr.node.type) # support extracting from settings, in general case it's unresolvable yet if isinstance(attr_expr, MemberExpr): member_name = attr_expr.name if isinstance(attr_expr.expr, NameExpr) and attr_expr.expr.fullname == "django.conf.settings": if hasattr(django_context.settings, member_name): return getattr(django_context.settings, member_name) # type: ignore[no-any-return] return None def get_semanal_api(ctx: ClassDefContext | DynamicClassDefContext) -> SemanticAnalyzer: if not isinstance(ctx.api, SemanticAnalyzer): raise ValueError("Not a SemanticAnalyzer") return ctx.api def get_typechecker_api(ctx: AttributeContext | MethodContext | FunctionContext) -> TypeChecker: if not isinstance(ctx.api, TypeChecker): raise ValueError("Not a TypeChecker") return ctx.api def check_types_compatible( ctx: FunctionContext | MethodContext, *, expected_type: MypyType, actual_type: MypyType, error_message: str ) -> None: api = get_typechecker_api(ctx) api.check_subtype(actual_type, expected_type, ctx.context, error_message, "got", "expected") def add_new_sym_for_info( info: TypeInfo, name: str, sym_type: MypyType, *, no_serialize: bool = False, is_classvar: bool = False ) -> None: # type=: type of the variable itself var = Var(name=name, type=sym_type) # var.info: type of the object variable is bound to var.info = info var._fullname = info.fullname + "." + name var.is_initialized_in_class = True var.is_inferred = True var.is_classvar = is_classvar info.names[name] = SymbolTableNode(MDEF, var, plugin_generated=True, no_serialize=no_serialize) def is_abstract_model(model: TypeInfo) -> bool: if model.fullname in fullnames.DJANGO_ABSTRACT_MODELS: return True if not is_model_type(model): return False metadata = get_django_metadata(model) if metadata.get("is_abstract_model") is not None: return metadata["is_abstract_model"] meta = model.names.get("Meta") # Check if 'abstract' is declared in this model's 'class Meta' as # 'abstract = True' won't be inherited from a parent model. if meta is not None and isinstance(meta.node, TypeInfo) and "abstract" in meta.node.names: for stmt in meta.node.defn.defs.body: if ( # abstract = isinstance(stmt, AssignmentStmt) and len(stmt.lvalues) == 1 and isinstance(stmt.lvalues[0], NameExpr) and stmt.lvalues[0].name == "abstract" ): # abstract = True (builtins.bool) rhs_is_true = parse_bool(stmt.rvalue) is True # abstract: Literal[True] stmt_type = get_proper_type(stmt.type) is_literal_true = isinstance(stmt_type, LiteralType) and stmt_type.value is True metadata["is_abstract_model"] = rhs_is_true or is_literal_true return metadata["is_abstract_model"] metadata["is_abstract_model"] = False return False def resolve_lazy_reference( reference: str, *, api: TypeChecker | SemanticAnalyzer, django_context: "DjangoContext", ctx: Context ) -> TypeInfo | None: """ Attempts to resolve a lazy reference(e.g. ".") to a 'TypeInfo' instance. """ if "." not in reference: # -- needs prefix of . We can't implicitly solve # what app label this should be, yet. return None # Reference conforms to the structure of a lazy reference: '.' fullname = django_context.model_class_fullnames_by_label.get(reference) if fullname is not None: model_info = lookup_fully_qualified_typeinfo(api, fullname) if model_info is not None: return model_info if isinstance(api, SemanticAnalyzer) and not api.final_iteration: # Getting this far, where Django matched the reference but we still can't # find it, we want to defer api.defer() else: api.fail("Could not match lazy reference with any model", ctx) return None def is_model_type(info: TypeInfo) -> bool: return info.metaclass_type is not None and info.metaclass_type.type.has_base(fullnames.MODEL_METACLASS_FULLNAME) def get_model_from_expression( expr: Expression, *, self_model: TypeInfo, api: TypeChecker | SemanticAnalyzer, django_context: "DjangoContext", ) -> Instance | None: """ Attempts to resolve an expression to a 'TypeInfo' instance. Any lazy reference argument(e.g. ".") to a Django model is also attempted. """ if isinstance(expr, RefExpr) and isinstance(expr.node, TypeInfo): if is_model_type(expr.node): return Instance(expr.node, []) if isinstance(expr, StrExpr) and expr.value == "self": return Instance(self_model, []) lazy_reference = None if isinstance(expr, StrExpr): lazy_reference = expr.value elif ( isinstance(expr, MemberExpr) and isinstance(expr.expr, NameExpr) and f"{expr.expr.fullname}.{expr.name}" == fullnames.AUTH_USER_MODEL_FULLNAME ): lazy_reference = django_context.settings.AUTH_USER_MODEL if lazy_reference is not None: model_info = resolve_lazy_reference(lazy_reference, api=api, django_context=django_context, ctx=expr) if model_info is not None: return Instance(model_info, []) return None def fill_manager(manager: TypeInfo, typ: MypyType) -> Instance: return Instance(manager, [typ] if manager.is_generic() else []) def merge_extra_attrs( base_extra_attrs: ExtraAttrs | None, *, new_attrs: dict[str, MypyType] | None = None, new_immutable: set[str] | None = None, ) -> ExtraAttrs: """ Create a new `ExtraAttrs` by merging new attributes/immutable fields into a base. If base_extra_attrs is None, creates a fresh ExtraAttrs with only the new values. """ if base_extra_attrs: return ExtraAttrs( attrs={**base_extra_attrs.attrs, **new_attrs} if new_attrs is not None else base_extra_attrs.attrs.copy(), immutable=( base_extra_attrs.immutable | new_immutable if new_immutable is not None else base_extra_attrs.immutable.copy() ), mod_name=None, ) return ExtraAttrs( attrs=new_attrs or {}, immutable=new_immutable, mod_name=None, ) django-stubs-5.2.9/mypy_django_plugin/main.py000066400000000000000000000334731513401051600213310ustar00rootroot00000000000000import itertools import sys from collections.abc import Callable from functools import cached_property, partial from typing import Any from mypy.build import PRI_MED, PRI_MYPY from mypy.modulefinder import mypy_path from mypy.nodes import MypyFile, TypeInfo from mypy.options import Options from mypy.plugin import ( AnalyzeTypeContext, AttributeContext, ClassDefContext, DynamicClassDefContext, FunctionContext, MethodContext, Plugin, ReportConfigContext, ) from mypy.types import Type as MypyType from mypy_django_plugin.config import DjangoPluginConfig from mypy_django_plugin.django.context import DjangoContext from mypy_django_plugin.exceptions import UnregisteredModelError from mypy_django_plugin.lib import fullnames, helpers from mypy_django_plugin.transformers import ( choices, fields, forms, init_create, manytomany, manytoone, meta, orm_lookups, querysets, settings, ) from mypy_django_plugin.transformers.auth import get_user_model from mypy_django_plugin.transformers.functional import resolve_str_promise_attribute from mypy_django_plugin.transformers.managers import ( add_as_manager_to_queryset_class, create_new_manager_class_from_from_queryset_method, reparametrize_any_manager_hook, resolve_manager_method, ) from mypy_django_plugin.transformers.models import ( MetaclassAdjustments, handle_annotated_type, process_model_class, set_auth_user_model_boolean_fields, ) from mypy_django_plugin.transformers.request import check_querydict_is_mutable class NewSemanalDjangoPlugin(Plugin): def __init__(self, options: Options) -> None: super().__init__(options) self.plugin_config = DjangoPluginConfig(options.config_file) # Add paths from MYPYPATH env var sys.path.extend(mypy_path()) # Add paths from mypy_path config option sys.path.extend(options.mypy_path) self.django_context = DjangoContext(self.plugin_config.django_settings_module) def _get_current_form_bases(self) -> dict[str, int]: model_info = self._get_typeinfo_or_none(fullnames.BASEFORM_CLASS_FULLNAME) if model_info: bases = helpers.get_django_metadata_bases(model_info, "baseform_bases") bases[fullnames.BASEFORM_CLASS_FULLNAME] = 1 bases[fullnames.FORM_CLASS_FULLNAME] = 1 bases[fullnames.MODELFORM_CLASS_FULLNAME] = 1 return bases return {} def _get_typeinfo_or_none(self, class_name: str) -> TypeInfo | None: sym = self.lookup_fully_qualified(class_name) if sym is not None and isinstance(sym.node, TypeInfo): return sym.node return None def _new_dependency(self, module: str, priority: int = PRI_MYPY) -> tuple[int, str, int]: fake_lineno = -1 return (priority, module, fake_lineno) def get_additional_deps(self, file: MypyFile) -> list[tuple[int, str, int]]: # for settings if file.fullname == "django.conf" and self.django_context.django_settings_module: return [self._new_dependency(self.django_context.django_settings_module, PRI_MED)] # for values / values_list if file.fullname == "django.db.models": return [self._new_dependency("typing"), self._new_dependency("django_stubs_ext")] # for `get_user_model()` if file.fullname == "django.contrib.auth" or file.fullname in {"django.http", "django.http.request"}: auth_user_model_name = self.django_context.settings.AUTH_USER_MODEL try: auth_user_module = self.django_context.apps_registry.get_model(auth_user_model_name).__module__ except LookupError: # get_user_model() model app is not installed return [] return [self._new_dependency(auth_user_module), self._new_dependency("django_stubs_ext")] # ensure that all mentions to='someapp.SomeModel' are loaded with corresponding related Fields defined_model_classes = self.django_context.model_modules.get(file.fullname) if not defined_model_classes: return [] deps = set() for model_class in defined_model_classes.values(): for field in itertools.chain( # forward relations self.django_context.get_model_related_fields(model_class), # reverse relations - `related_objects` is private API (according to docstring) model_class._meta.related_objects, ): try: related_model_cls = self.django_context.get_field_related_model_cls(field) # type: ignore[arg-type] except UnregisteredModelError: continue related_model_module = related_model_cls.__module__ if related_model_module != file.fullname: deps.add(self._new_dependency(related_model_module)) return [ *deps, # For `QuerySet.annotate` self._new_dependency("django_stubs_ext"), # For `TypedModelMeta` lookup in model transformers self._new_dependency("django_stubs_ext.db.models"), # For `Manager.from_queryset` self._new_dependency("django.db.models.query"), ] def get_function_hook(self, fullname: str) -> Callable[[FunctionContext], MypyType] | None: info = self._get_typeinfo_or_none(fullname) if info: if info.has_base(fullnames.FIELD_FULLNAME): return partial(fields.transform_into_proper_return_type, django_context=self.django_context) if helpers.is_model_type(info): return partial(init_create.typecheck_model_init, django_context=self.django_context) if info.has_base(fullnames.BASE_MANAGER_CLASS_FULLNAME): return querysets.determine_proper_manager_type if info.has_base(fullnames.PREFETCH_CLASS_FULLNAME): return partial(querysets.specialize_prefetch_type, django_context=self.django_context) return None @cached_property def manager_and_queryset_method_hooks(self) -> dict[str, Callable[[MethodContext], MypyType]]: typecheck_filtering_method = partial(orm_lookups.typecheck_queryset_filter, django_context=self.django_context) return { "values": partial(querysets.extract_proper_type_queryset_values, django_context=self.django_context), "values_list": partial( querysets.extract_proper_type_queryset_values_list, django_context=self.django_context ), "alias": partial(querysets.extract_proper_type_queryset_annotate, django_context=self.django_context), "annotate": partial(querysets.extract_proper_type_queryset_annotate, django_context=self.django_context), "create": partial(init_create.typecheck_model_create, django_context=self.django_context), "acreate": partial(init_create.typecheck_model_acreate, django_context=self.django_context), "filter": typecheck_filtering_method, "get": typecheck_filtering_method, "aget": typecheck_filtering_method, "exclude": typecheck_filtering_method, "prefetch_related": partial( querysets.extract_prefetch_related_annotations, django_context=self.django_context ), "select_related": partial(querysets.validate_select_related, django_context=self.django_context), "bulk_update": partial( querysets.validate_bulk_update, django_context=self.django_context, method="bulk_update" ), "abulk_update": partial( querysets.validate_bulk_update, django_context=self.django_context, method="abulk_update" ), } def get_method_hook(self, fullname: str) -> Callable[[MethodContext], MypyType] | None: class_fullname, _, method_name = fullname.rpartition(".") # Methods called very often -- short circuit for minor speed up if method_name == "__init_subclass__" or fullname.startswith("builtins."): return None if class_fullname.endswith("QueryDict"): info = self._get_typeinfo_or_none(class_fullname) if info and info.has_base(fullnames.QUERYDICT_CLASS_FULLNAME): return check_querydict_is_mutable elif method_name == "__get__": hooks = { fullnames.MANYTOMANY_FIELD_FULLNAME: manytomany.refine_many_to_many_related_manager, fullnames.MANY_TO_MANY_DESCRIPTOR: manytomany.refine_many_to_many_related_manager, fullnames.REVERSE_MANY_TO_ONE_DESCRIPTOR: manytoone.refine_many_to_one_related_manager, } return hooks.get(class_fullname) if method_name in self.manager_and_queryset_method_hooks: info = self._get_typeinfo_or_none(class_fullname) if info and helpers.has_any_of_bases( info, [fullnames.QUERYSET_CLASS_FULLNAME, fullnames.MANAGER_CLASS_FULLNAME] ): return self.manager_and_queryset_method_hooks[method_name] elif method_name == "get_field": info = self._get_typeinfo_or_none(class_fullname) if info and info.has_base(fullnames.OPTIONS_CLASS_FULLNAME): return partial(meta.return_proper_field_type_from_get_field, django_context=self.django_context) return None def get_customize_class_mro_hook(self, fullname: str) -> Callable[[ClassDefContext], None] | None: info = self._get_typeinfo_or_none(fullname) if info and info.has_base(fullnames.BASE_MANAGER_CLASS_FULLNAME): return reparametrize_any_manager_hook return None def get_metaclass_hook(self, fullname: str) -> Callable[[ClassDefContext], None] | None: if fullname == fullnames.MODEL_METACLASS_FULLNAME: return partial(MetaclassAdjustments.adjust_model_class, plugin_config=self.plugin_config) return None def get_base_class_hook(self, fullname: str) -> Callable[[ClassDefContext], None] | None: # Base class is a Model class definition info = self._get_typeinfo_or_none(fullname) if info and helpers.is_model_type(info): return partial(process_model_class, django_context=self.django_context) # Base class is a Form class definition if fullname in self._get_current_form_bases(): return forms.transform_form_class # Base class is a QuerySet class definition if info and info.has_base(fullnames.QUERYSET_CLASS_FULLNAME): return add_as_manager_to_queryset_class return None def get_attribute_hook(self, fullname: str) -> Callable[[AttributeContext], MypyType] | None: class_name, _, attr_name = fullname.rpartition(".") # Lookup of a settings variable if class_name == fullnames.DUMMY_SETTINGS_BASE_CLASS: return partial( settings.get_type_of_settings_attribute, django_context=self.django_context, plugin_config=self.plugin_config, ) info = self._get_typeinfo_or_none(class_name) # Lookup of the '.is_superuser' attribute if info and info.has_base(fullnames.PERMISSION_MIXIN_CLASS_FULLNAME) and attr_name == "is_superuser": return partial(set_auth_user_model_boolean_fields, django_context=self.django_context) # Lookup of the 'user.is_staff' or 'user.is_active' attribute if info and info.has_base(fullnames.ABSTRACT_USER_MODEL_FULLNAME) and attr_name in ("is_staff", "is_active"): return partial(set_auth_user_model_boolean_fields, django_context=self.django_context) # Lookup of a method on a dynamically generated manager class # i.e. a manager class only existing while mypy is running, not collected from the AST if ( info and info.has_base(fullnames.BASE_MANAGER_CLASS_FULLNAME) and "from_queryset_manager" in helpers.get_django_metadata(info) ): return resolve_manager_method if info and info.has_base(fullnames.STR_PROMISE_FULLNAME): return resolve_str_promise_attribute if info and ( ( info.has_base(fullnames.CHOICES_TYPE_METACLASS_FULLNAME) and attr_name in {"choices", "labels", "values", "__empty__"} ) or (info.has_base(fullnames.CHOICES_CLASS_FULLNAME) and attr_name in {"label", "value"}) ): return choices.transform_into_proper_attr_type return None def get_type_analyze_hook(self, fullname: str) -> Callable[[AnalyzeTypeContext], MypyType] | None: if fullname in fullnames.ANNOTATED_TYPES_FULLNAMES: return partial(handle_annotated_type, fullname=fullname) if fullname == "django.contrib.auth.models._User": return partial(get_user_model, django_context=self.django_context) return None def get_dynamic_class_hook(self, fullname: str) -> Callable[[DynamicClassDefContext], None] | None: # Create a new manager class definition when a manager's '.from_queryset' classmethod is called class_name, _, method_name = fullname.rpartition(".") if method_name == "from_queryset": info = self._get_typeinfo_or_none(class_name) if info and info.has_base(fullnames.BASE_MANAGER_CLASS_FULLNAME): return create_new_manager_class_from_from_queryset_method return None def report_config_data(self, ctx: ReportConfigContext) -> dict[str, Any]: # Cache would be cleared if any settings do change. extra_data = { "AUTH_USER_MODEL": self.django_context.settings.AUTH_USER_MODEL, } return self.plugin_config.to_json(extra_data) def plugin(version: str) -> type[NewSemanalDjangoPlugin]: return NewSemanalDjangoPlugin django-stubs-5.2.9/mypy_django_plugin/py.typed000066400000000000000000000000001513401051600215060ustar00rootroot00000000000000django-stubs-5.2.9/mypy_django_plugin/transformers/000077500000000000000000000000001513401051600225465ustar00rootroot00000000000000django-stubs-5.2.9/mypy_django_plugin/transformers/__init__.py000066400000000000000000000000001513401051600246450ustar00rootroot00000000000000django-stubs-5.2.9/mypy_django_plugin/transformers/auth.py000066400000000000000000000032541513401051600240650ustar00rootroot00000000000000from mypy.nodes import TypeInfo from mypy.plugin import AnalyzeTypeContext from mypy.semanal import SemanticAnalyzer from mypy.typeanal import TypeAnalyser from mypy.types import PlaceholderType, ProperType from mypy.types import Type as MypyType from mypy.typevars import fill_typevars_with_any from mypy_django_plugin.django.context import DjangoContext from mypy_django_plugin.lib import fullnames, helpers def _get_abstract_base_user(api: SemanticAnalyzer) -> ProperType: sym = api.lookup_fully_qualified(fullnames.ABSTRACT_BASE_USER_MODEL_FULLNAME) assert isinstance(sym.node, TypeInfo) return fill_typevars_with_any(sym.node) def get_user_model(ctx: AnalyzeTypeContext, django_context: DjangoContext) -> MypyType: assert isinstance(ctx.api, TypeAnalyser) assert isinstance(ctx.api.api, SemanticAnalyzer) if not django_context.is_contrib_auth_installed: return _get_abstract_base_user(ctx.api.api) auth_user_model = django_context.settings.AUTH_USER_MODEL model_info = helpers.resolve_lazy_reference( auth_user_model, api=ctx.api.api, django_context=django_context, ctx=ctx.context ) if model_info is None: fullname = django_context.model_class_fullnames_by_label.get(auth_user_model) if fullname is not None: # When we've tried to resolve 'AUTH_USER_MODEL' but got no class back but # we notice that its value is recognised we'll return a placeholder for # the class as we expect it to exist later on. return PlaceholderType(fullname=fullname, args=[], line=ctx.context.line) return _get_abstract_base_user(ctx.api.api) return fill_typevars_with_any(model_info) django-stubs-5.2.9/mypy_django_plugin/transformers/choices.py000066400000000000000000000251541513401051600245440ustar00rootroot00000000000000from enum import Enum, auto from mypy.nodes import MemberExpr, NameExpr, SuperExpr, TypeAlias, TypeInfo, Var from mypy.plugin import AttributeContext from mypy.typeanal import make_optional_type from mypy.types import ( AnyType, Instance, LiteralType, Overloaded, ProperType, TupleType, TypeOfAny, TypeType, TypeVarType, UnionType, get_proper_type, ) from mypy.types import Type as MypyType from mypy_django_plugin.lib import fullnames # TODO: [mypy 1.14+] Remove this backport of `TypeInfo.enum_members`. def _get_enum_members(info: TypeInfo) -> list[str]: try: return info.enum_members except AttributeError: # mypy < 1.14 pass return [ name for name, sym in info.names.items() if ( isinstance(sym.node, Var) and name not in ("_ignore_", "_order_", "__order__") and not name.startswith("__") and sym.node.has_explicit_value ) ] class _LabelLaziness(Enum): LAZY = auto() NON_LAZY = auto() MIXED = auto() @classmethod def make(cls, lazy: bool | None) -> "_LabelLaziness": return cls.LAZY if lazy else cls.NON_LAZY def _is_lazy_string(ty: MypyType | None) -> bool: proper_type = get_proper_type(ty) return isinstance(proper_type, Instance) and proper_type.type.has_base(fullnames.STR_PROMISE_FULLNAME) def _is_lazy_member(node: TypeInfo, member_name: str) -> bool: if (sym := node.get(member_name)) is None: return False _member_type = get_proper_type(sym.type) if not isinstance(_member_type, TupleType): # Member has auto-generated plain string label - enum.auto() or no explicit label. return False if _member_type.length() < 2: # There need to be at least two items in the tuple. return False return _is_lazy_string(_member_type.items[-1]) def _label_laziness(node: TypeInfo) -> _LabelLaziness: """ Check whether a choices type has lazy strings for labels. This is used to determine whether a choices type uses lazy strings or non-lazy string for labels such that a more simple type can be used instead of the default in the stubs. """ assert node.is_enum if (sym := node.get("__empty__")) is not None: lazy = _is_lazy_string(sym.type) else: lazy = None # TODO: [mypy 1.14+] Use `node.enum_members` and remove `_get_enum_members()` backport. for member_name in _get_enum_members(node): member_lazy = _is_lazy_member(node, member_name) if lazy is None: lazy = member_lazy elif lazy != member_lazy: return _LabelLaziness.MIXED return _LabelLaziness.make(lazy) def _try_replace_label(typ: ProperType, label_laziness: _LabelLaziness) -> MypyType: """ Attempt to replace a label with a modified version. If there are no lazy strings for labels, remove the lazy string type, and vice-versa. """ if label_laziness is _LabelLaziness.MIXED: return typ if not isinstance(typ, UnionType): # If it's not a union, then it already is likely just `str` and not lazy. return typ items = [ t for t in map(get_proper_type, typ.items) if isinstance(t, Instance) and t.type.has_base(fullnames.STR_PROMISE_FULLNAME) == (label_laziness is _LabelLaziness.LAZY) ] # If we only have one item use that, otherwise make a new union. return UnionType.make_union(items) if len(items) > 1 else items[0] def _try_replace_value(typ: ProperType, base_type: Instance | None, has_empty_label: bool) -> MypyType: """ Attempt to replace a label with a modified version. If the value is of any type, then attempt to use the base type of the choices type. If the choices type has `__empty__` defined, then make the value type optional. """ has_unknown_base = isinstance(typ, AnyType) if has_empty_label and has_unknown_base and base_type is not None: return make_optional_type(base_type) if has_empty_label: return make_optional_type(typ) if has_unknown_base and base_type is not None: return base_type return typ def _get_enum_type_from_union_of_literals(typ: UnionType) -> MypyType: """ Attempts to resolve a single enum type from a union of enum literals. If this cannot be resolved, the original is returned. """ types = set() for item in typ.items: item = get_proper_type(item) if not isinstance(item, LiteralType) or not item.fallback.type.is_enum: # If anything that isn't a literal of an enum type is encountered, return the original. return typ types.add(item.fallback) # If there is only one enum type seen, return that otherwise return the original. return types.pop() if len(types) == 1 else typ def transform_into_proper_attr_type(ctx: AttributeContext) -> MypyType: """ A `get_attribute_hook` to make `.choices` and `.values` optional if `__empty__` is defined. When the `__empty__` label is specified, the `choices` and `values` properties can return a blank choice/value. This hook will amend the type returned by those properties. """ if isinstance(ctx.context, MemberExpr): expr = ctx.context.expr name = ctx.context.name elif isinstance(ctx.context, SuperExpr): expr = ctx.context name = ctx.context.name else: ctx.api.fail("Unable to resolve type of property", ctx.context) return AnyType(TypeOfAny.from_error) node: TypeInfo | None = None if isinstance(expr, MemberExpr | NameExpr): if isinstance(expr.node, TypeInfo): node = expr.node elif isinstance(expr.node, TypeAlias): alias = get_proper_type(expr.node.target) if isinstance(alias, Instance): node = alias.type elif isinstance(expr, SuperExpr): node = expr.info _node_type: ProperType | None = None if node is None: _node_type = get_proper_type(ctx.api.get_expression_type(expr)) if isinstance(_node_type, UnionType): # If this is a union of enum literals, check if they're all of the same enum type and # use that type instead. This situation often occurs where there is comparison to an # enum member in a branch. _node_type = get_proper_type(_get_enum_type_from_union_of_literals(_node_type)) if isinstance(_node_type, LiteralType) and _node_type.is_enum_literal(): _node_type = _node_type.fallback if isinstance(_node_type, TypeType): _node_type = _node_type.item if isinstance(_node_type, TypeVarType): _node_type = get_proper_type(_node_type.upper_bound) if isinstance(_node_type, Instance): node = _node_type.type if isinstance(_node_type, Overloaded) and _node_type.is_type_obj(): node = _node_type.type_object() if node is None: if isinstance(_node_type, UnionType): # Suppress the error for a known case where there are multiple base choices types in a # union. In theory this is something that could be handled by extracting all of the # base types and making the following code consider all of these types, but that's # quite a bit of effort. return ctx.default_attr_type ctx.api.fail(f"Unable to resolve type of {name} property", ctx.context) return AnyType(TypeOfAny.from_error) default_attr_type = get_proper_type(ctx.default_attr_type) if not node.is_enum or not node.has_base(fullnames.CHOICES_CLASS_FULLNAME): return default_attr_type # Enums with more than one base will treat the first base as the mixed-in type. base_type = node.bases[0] if len(node.bases) > 1 else None # When `__empty__` is defined, the `.choices` and `.values` properties will include `None` for # the blank choice which is labelled by the value of `__empty__`. empty_label = node.get("__empty__") # When `__empty__` is not a lazy string and the labels on all members are not lazy strings, the # label can be simplified to only be a simple string type. This keeps the benefits of accurate # typing when the lazy labels are being used, but reduces the pain of having to manage a union # of a simple and lazy string type where it's not necessary. label_laziness = _label_laziness(node) if ( name == "choices" and isinstance(default_attr_type, Instance) and default_attr_type.type.fullname == "builtins.list" and len(default_attr_type.args) == 1 ): choice_arg = get_proper_type(default_attr_type.args[0]) if isinstance(choice_arg, TupleType) and choice_arg.length() == 2: value_arg, label_arg = choice_arg.items label_arg = get_proper_type(label_arg) value_arg = get_proper_type(value_arg) new_label_arg = _try_replace_label(label_arg, label_laziness) new_value_arg = _try_replace_value(value_arg, base_type, empty_label is not None) if new_label_arg is not label_arg or new_value_arg is not value_arg: new_choice_arg = choice_arg.copy_modified(items=[new_value_arg, new_label_arg]) return default_attr_type.copy_modified(args=[new_choice_arg]) elif ( name == "labels" and isinstance(default_attr_type, Instance) and default_attr_type.type.fullname == "builtins.list" and len(default_attr_type.args) == 1 ): label_arg = get_proper_type(default_attr_type.args[0]) new_label_arg = _try_replace_label(label_arg, label_laziness) if new_label_arg is not label_arg: return default_attr_type.copy_modified(args=[new_label_arg]) elif ( name == "values" and isinstance(default_attr_type, Instance) and default_attr_type.type.fullname == "builtins.list" and len(default_attr_type.args) == 1 ): value_arg = get_proper_type(default_attr_type.args[0]) new_value_arg = _try_replace_value(value_arg, base_type, empty_label is not None) if new_value_arg is not value_arg: return default_attr_type.copy_modified(args=[new_value_arg]) elif name == "label": return _try_replace_label(default_attr_type, label_laziness) elif name == "__empty__" and empty_label is not None: return _try_replace_label(default_attr_type, _LabelLaziness.make(_is_lazy_string(empty_label.type))) elif name == "value": # Pass in `False` because `.value` will never return `None`. return _try_replace_value(default_attr_type, base_type, False) return default_attr_type django-stubs-5.2.9/mypy_django_plugin/transformers/fields.py000066400000000000000000000260121513401051600243670ustar00rootroot00000000000000from typing import TYPE_CHECKING, Any, NamedTuple, Union, cast from django.core.exceptions import FieldDoesNotExist from django.db.models.fields import AutoField, Field from django.db.models.fields.related import RelatedField from django.db.models.fields.reverse_related import ForeignObjectRel from mypy.maptype import map_instance_to_supertype from mypy.nodes import AssignmentStmt, NameExpr, TypeInfo from mypy.plugin import FunctionContext from mypy.types import AnyType, Instance, NoneType, ProperType, TypeOfAny, UninhabitedType, UnionType, get_proper_type from mypy.types import Type as MypyType from mypy_django_plugin.django.context import DjangoContext from mypy_django_plugin.exceptions import UnregisteredModelError from mypy_django_plugin.lib import fullnames, helpers from mypy_django_plugin.transformers import manytomany if TYPE_CHECKING: from django.contrib.contenttypes.fields import GenericForeignKey def _get_current_field_from_assignment( ctx: FunctionContext, django_context: DjangoContext ) -> Union["Field[Any, Any]", ForeignObjectRel, "GenericForeignKey"] | None: outer_model_info = helpers.get_typechecker_api(ctx).scope.active_class() if outer_model_info is None or not helpers.is_model_type(outer_model_info): return None field_name = None for stmt in outer_model_info.defn.defs.body: if isinstance(stmt, AssignmentStmt): if stmt.rvalue == ctx.context: if not isinstance(stmt.lvalues[0], NameExpr): return None field_name = stmt.lvalues[0].name break if field_name is None: return None model_cls = django_context.get_model_class_by_fullname(outer_model_info.fullname) if model_cls is None: return None try: return model_cls._meta.get_field(field_name) except FieldDoesNotExist: return None def reparametrize_related_field_type(related_field_type: Instance, set_type: MypyType, get_type: MypyType) -> Instance: args = [ helpers.convert_any_to_type(related_field_type.args[0], set_type), helpers.convert_any_to_type(related_field_type.args[1], get_type), ] return related_field_type.copy_modified(args=args) def fill_descriptor_types_for_related_field(ctx: FunctionContext, django_context: DjangoContext) -> MypyType: current_field = _get_current_field_from_assignment(ctx, django_context) if current_field is None: return AnyType(TypeOfAny.from_error) assert isinstance(current_field, RelatedField) try: related_model_cls = django_context.get_field_related_model_cls(current_field) except UnregisteredModelError: return AnyType(TypeOfAny.from_error) default_related_field_type = set_descriptor_types_for_field(ctx) # self reference with abstract=True on the model where ForeignKey is defined current_model_cls = current_field.model if current_model_cls._meta.abstract and current_model_cls == related_model_cls: # for all derived non-abstract classes, set variable with this name to # __get__/__set__ of ForeignKey of derived model for model_cls in django_context.all_registered_model_classes: if issubclass(model_cls, current_model_cls) and not model_cls._meta.abstract: derived_model_info = helpers.lookup_class_typeinfo(helpers.get_typechecker_api(ctx), model_cls) if derived_model_info is not None: fk_ref_type = Instance(derived_model_info, []) derived_fk_type = reparametrize_related_field_type( default_related_field_type, set_type=fk_ref_type, get_type=fk_ref_type ) helpers.add_new_sym_for_info(derived_model_info, name=current_field.name, sym_type=derived_fk_type) related_model = related_model_cls related_model_to_set = related_model_cls if related_model_to_set._meta.proxy_for_model is not None: related_model_to_set = related_model_to_set._meta.proxy_for_model typechecker_api = helpers.get_typechecker_api(ctx) related_model_info = helpers.lookup_class_typeinfo(typechecker_api, related_model) related_model_type: ProperType if related_model_info is None: # maybe no type stub related_model_type = AnyType(TypeOfAny.unannotated) else: related_model_type = Instance(related_model_info, []) related_model_to_set_info = helpers.lookup_class_typeinfo(typechecker_api, related_model_to_set) related_model_to_set_type: ProperType if related_model_to_set_info is None: # maybe no type stub related_model_to_set_type = AnyType(TypeOfAny.unannotated) else: related_model_to_set_type = Instance(related_model_to_set_info, []) # replace Any with referred_to_type return reparametrize_related_field_type( default_related_field_type, set_type=related_model_to_set_type, get_type=related_model_type ) class FieldDescriptorTypes(NamedTuple): set: MypyType get: MypyType def get_field_descriptor_types( field_info: TypeInfo, *, is_set_nullable: bool, is_get_nullable: bool ) -> FieldDescriptorTypes: set_type = helpers.get_private_descriptor_type(field_info, "_pyi_private_set_type", is_nullable=is_set_nullable) get_type = helpers.get_private_descriptor_type(field_info, "_pyi_private_get_type", is_nullable=is_get_nullable) return FieldDescriptorTypes(set=set_type, get=get_type) def set_descriptor_types_for_field_callback(ctx: FunctionContext, django_context: DjangoContext) -> MypyType: current_field = _get_current_field_from_assignment(ctx, django_context) if current_field is not None: if isinstance(current_field, AutoField): return set_descriptor_types_for_field(ctx, is_set_nullable=True) return set_descriptor_types_for_field(ctx) def set_descriptor_types_for_field( ctx: FunctionContext, *, is_set_nullable: bool = False, is_get_nullable: bool = False ) -> Instance: default_return_type = cast("Instance", ctx.default_return_type) is_nullable = helpers.get_bool_call_argument_by_name(ctx, "null", default=False) is_primary_key = helpers.get_bool_call_argument_by_name(ctx, "primary_key", default=False) # Allow setting field value to `None` when a field is primary key and has a default that can produce a value default_expr = helpers.get_call_argument_by_name(ctx, "default") if default_expr is not None: is_set_nullable = is_primary_key set_type, get_type = get_field_descriptor_types( default_return_type.type, is_set_nullable=is_set_nullable or is_nullable, is_get_nullable=is_get_nullable or is_nullable, ) # reconcile set and get types with the base field class base_field_type = next(base for base in default_return_type.type.mro if base.fullname == fullnames.FIELD_FULLNAME) mapped_instance = map_instance_to_supertype(default_return_type, base_field_type) mapped_set_type, mapped_get_type = tuple(get_proper_type(arg) for arg in mapped_instance.args) # bail if either mapped_set_type or mapped_get_type have type Never if not (isinstance(mapped_set_type, UninhabitedType) or isinstance(mapped_get_type, UninhabitedType)): # always replace set_type and get_type with (non-Any) mapped types set_type = helpers.convert_any_to_type(mapped_set_type, set_type) get_type = get_proper_type(helpers.convert_any_to_type(mapped_get_type, get_type)) # the get_type must be optional if the field is nullable if (is_get_nullable or is_nullable) and not ( isinstance(get_type, NoneType) or helpers.is_optional(get_type) or isinstance(get_type, AnyType) ): ctx.api.fail( f"{default_return_type.type.name} is nullable but its generic get type parameter is not optional", ctx.context, ) return default_return_type.copy_modified(args=[set_type, get_type]) def determine_type_of_array_field(ctx: FunctionContext, django_context: DjangoContext) -> MypyType: default_return_type = set_descriptor_types_for_field(ctx) base_field_arg_type = get_proper_type(helpers.get_call_argument_type_by_name(ctx, "base_field")) if not base_field_arg_type or not isinstance(base_field_arg_type, Instance): return default_return_type def drop_combinable(_type: MypyType) -> MypyType | None: _type = get_proper_type(_type) if isinstance(_type, Instance) and _type.type.has_base(fullnames.COMBINABLE_EXPRESSION_FULLNAME): return None if isinstance(_type, UnionType): items_without_combinable = [] for item in _type.items: reduced = drop_combinable(item) if reduced is not None: items_without_combinable.append(reduced) if len(items_without_combinable) > 1: return UnionType( items_without_combinable, line=_type.line, column=_type.column, is_evaluated=_type.is_evaluated, uses_pep604_syntax=_type.uses_pep604_syntax, ) if len(items_without_combinable) == 1: return items_without_combinable[0] return None return _type # Both base_field and return type should derive from Field and thus expect 2 arguments assert len(base_field_arg_type.args) == len(default_return_type.args) == 2 args = [] for new_type, default_arg in zip(base_field_arg_type.args, default_return_type.args, strict=False): # Drop any base_field Combinable type reduced = drop_combinable(new_type) if reduced is None: ctx.api.fail( f"Can't have ArrayField expecting {fullnames.COMBINABLE_EXPRESSION_FULLNAME!r} as data type", ctx.context, ) else: new_type = reduced args.append(helpers.convert_any_to_type(default_arg, new_type)) return default_return_type.copy_modified(args=args) def transform_into_proper_return_type(ctx: FunctionContext, django_context: DjangoContext) -> MypyType: default_return_type = get_proper_type(ctx.default_return_type) assert isinstance(default_return_type, Instance) outer_model_info = helpers.get_typechecker_api(ctx).scope.active_class() if outer_model_info is None or not helpers.is_model_type(outer_model_info): return ctx.default_return_type assert isinstance(outer_model_info, TypeInfo) if default_return_type.type.has_base(fullnames.MANYTOMANY_FIELD_FULLNAME): return manytomany.fill_model_args_for_many_to_many_field( ctx=ctx, model_info=outer_model_info, django_context=django_context ) if helpers.has_any_of_bases(default_return_type.type, fullnames.RELATED_FIELDS_CLASSES): return fill_descriptor_types_for_related_field(ctx, django_context) if default_return_type.type.has_base(fullnames.ARRAY_FIELD_FULLNAME): return determine_type_of_array_field(ctx, django_context) return set_descriptor_types_for_field_callback(ctx, django_context) django-stubs-5.2.9/mypy_django_plugin/transformers/forms.py000066400000000000000000000014271513401051600242520ustar00rootroot00000000000000from mypy.nodes import TypeInfo from mypy.plugin import ClassDefContext from mypy_django_plugin.lib import fullnames, helpers def make_meta_nested_class_inherit_from_any(ctx: ClassDefContext) -> None: meta_node = helpers.get_nested_meta_node_for_current_class(ctx.cls.info) if meta_node is None: if not ctx.api.final_iteration: ctx.api.defer() else: meta_node.fallback_to_any = True def transform_form_class(ctx: ClassDefContext) -> None: sym = ctx.api.lookup_fully_qualified_or_none(fullnames.BASEFORM_CLASS_FULLNAME) if sym is not None and isinstance(sym.node, TypeInfo): bases = helpers.get_django_metadata_bases(sym.node, "baseform_bases") bases[ctx.cls.fullname] = 1 make_meta_nested_class_inherit_from_any(ctx) django-stubs-5.2.9/mypy_django_plugin/transformers/functional.py000066400000000000000000000031761513401051600252710ustar00rootroot00000000000000from typing import Any from mypy.checkmember import analyze_member_access from mypy.errorcodes import ATTR_DEFINED from mypy.nodes import CallExpr, MemberExpr from mypy.plugin import AttributeContext from mypy.types import AnyType, Instance, TypeOfAny from mypy.types import Type as MypyType from mypy.version import __version__ as mypy_version from mypy_django_plugin.lib import helpers mypy_version_info = tuple(map(int, mypy_version.partition("+")[0].split("."))) def resolve_str_promise_attribute(ctx: AttributeContext) -> MypyType: if isinstance(ctx.context, MemberExpr): method_name = ctx.context.name elif isinstance(ctx.context, CallExpr) and isinstance(ctx.context.callee, MemberExpr): method_name = ctx.context.callee.name else: ctx.api.fail(f'Cannot resolve the attribute of "{ctx.type}"', ctx.context, code=ATTR_DEFINED) return AnyType(TypeOfAny.from_error) str_info = helpers.lookup_fully_qualified_typeinfo(helpers.get_typechecker_api(ctx), "builtins.str") assert str_info is not None str_type = Instance(str_info, []) # TODO: [mypy 1.16+] Remove this workaround for passing `msg` to `analyze_member_access()`. extra: dict[str, Any] = {} if mypy_version_info < (1, 16): extra["msg"] = ctx.api.msg return analyze_member_access( method_name, str_type, ctx.context, is_lvalue=False, is_super=False, # operators are already handled with magic methods defined in the stubs for _StrPromise is_operator=False, original_type=ctx.type, chk=helpers.get_typechecker_api(ctx), **extra, ) django-stubs-5.2.9/mypy_django_plugin/transformers/init_create.py000066400000000000000000000077601513401051600254200ustar00rootroot00000000000000from django.db.models.base import Model from mypy.errorcodes import CALL_ARG from mypy.plugin import FunctionContext, MethodContext from mypy.types import Instance, get_proper_type from mypy.types import Type as MypyType from mypy_django_plugin.django.context import DjangoContext from mypy_django_plugin.lib import helpers def get_actual_types(ctx: MethodContext | FunctionContext, expected_keys: list[str]) -> list[tuple[str, MypyType]]: actual_types = [] # positionals for pos, (actual_name, actual_type) in enumerate(zip(ctx.arg_names[0], ctx.arg_types[0], strict=False)): if actual_name is None: if ctx.callee_arg_names[0] == "kwargs" or pos >= len(expected_keys): # unpacked dict as kwargs is not supported continue actual_name = expected_keys[pos] actual_types.append((actual_name, actual_type)) # kwargs if len(ctx.callee_arg_names) > 1: for actual_name, actual_type in zip(ctx.arg_names[1], ctx.arg_types[1], strict=False): if actual_name is None: # unpacked dict as kwargs is not supported continue actual_types.append((actual_name, actual_type)) return actual_types def typecheck_model_method( ctx: FunctionContext | MethodContext, django_context: DjangoContext, model_cls: type[Model], method: str, ) -> None: """Type-checks positional and keyword arguments for Model methods like __init__(), create(), and acreate().""" typechecker_api = helpers.get_typechecker_api(ctx) expected_types = django_context.get_expected_types(typechecker_api, model_cls, method=method) expected_keys = [key for key in expected_types.keys() if key != "pk"] min_arg_count = helpers.get_min_argument_count(ctx) for actual_name, actual_type in get_actual_types(ctx, expected_keys): if actual_name not in expected_types: ctx.api.fail(f'Unexpected attribute "{actual_name}" for model "{model_cls.__name__}"', ctx.context) min_arg_count -= 1 # To avoid double error (Unexpected attribute + too many arguments) continue helpers.check_types_compatible( ctx, expected_type=expected_types[actual_name], actual_type=actual_type, error_message=f'Incompatible type for "{actual_name}" of "{model_cls.__name__}"', ) if min_arg_count > len(expected_keys): ctx.api.fail(f'Too many arguments for "{model_cls.__name__}"', ctx.context, code=CALL_ARG) def typecheck_model_init(ctx: FunctionContext, django_context: DjangoContext) -> MypyType: default_return_type = get_proper_type(ctx.default_return_type) if ( isinstance(default_return_type, Instance) and (model_cls := django_context.get_model_class_by_fullname(default_return_type.type.fullname)) is not None ): typecheck_model_method(ctx, django_context, model_cls, "__init__") return ctx.default_return_type def typecheck_model_create(ctx: MethodContext, django_context: DjangoContext) -> MypyType: default_return_type = get_proper_type(ctx.default_return_type) if ( isinstance(default_return_type, Instance) and (model_cls := django_context.get_model_class_by_fullname(default_return_type.type.fullname)) is not None ): typecheck_model_method(ctx, django_context, model_cls, "create") return ctx.default_return_type def typecheck_model_acreate(ctx: MethodContext, django_context: DjangoContext) -> MypyType: default_return_type = get_proper_type(ctx.default_return_type) if ( isinstance(default_return_type, Instance) # default_return_type at this point should be of type Coroutine[Any, Any, ] and isinstance((model := get_proper_type(default_return_type.args[-1])), Instance) and (model_cls := django_context.get_model_class_by_fullname(model.type.fullname)) is not None ): typecheck_model_method(ctx, django_context, model_cls, "acreate") return ctx.default_return_type django-stubs-5.2.9/mypy_django_plugin/transformers/managers.py000066400000000000000000000604251513401051600247240ustar00rootroot00000000000000from typing import Final from mypy.checker import TypeChecker from mypy.copytype import copy_type from mypy.nodes import ( GDEF, CallExpr, Decorator, FuncBase, FuncDef, MemberExpr, Node, OverloadedFuncDef, PlaceholderNode, RefExpr, StrExpr, SymbolTableNode, TypeInfo, ) from mypy.plugin import AttributeContext, ClassDefContext, DynamicClassDefContext from mypy.plugins.common import add_method_to_class from mypy.semanal import SemanticAnalyzer from mypy.semanal_shared import has_placeholder from mypy.subtypes import find_member from mypy.types import ( AnyType, CallableType, FunctionLike, Instance, Overloaded, ProperType, TupleType, TypeOfAny, TypeType, TypeVarType, UnionType, get_proper_type, ) from mypy.types import Type as MypyType from mypy.typevars import fill_typevars from mypy_django_plugin.lib import fullnames, helpers MANAGER_METHODS_RETURNING_QUERYSET: Final = frozenset( ( "alias", "all", "annotate", "complex_filter", "defer", "difference", "distinct", "exclude", "extra", "filter", "intersection", "none", "only", "order_by", "prefetch_related", "reverse", "select_for_update", "select_related", "union", "using", ) ) def get_method_type_from_dynamic_manager( api: TypeChecker, method_name: str, manager_instance: Instance ) -> ProperType | None: """ Attempt to resolve a method on a manager that was built from '.from_queryset' """ manager_type_info = manager_instance.type.get_containing_type_info(method_name) if ( manager_type_info is None or "django" not in manager_type_info.metadata or "from_queryset_manager" not in manager_type_info.metadata["django"] ): # Manager isn't dynamically added return None queryset_fullname = manager_type_info.metadata["django"]["from_queryset_manager"] assert isinstance(queryset_fullname, str) queryset_info = helpers.lookup_fully_qualified_typeinfo(api, queryset_fullname) assert queryset_info is not None is_fallback_queryset = queryset_info.metadata.get("django", {}).get("any_fallback_queryset", False) base_that_has_method = queryset_info.get_containing_type_info(method_name) if base_that_has_method is None: return None method_type = _get_funcdef_type(base_that_has_method.names[method_name].node) if not isinstance(method_type, FunctionLike): return method_type items = [] for item in method_type.items: items.append( _process_dynamic_method( method_name, item, base_that_has_method=base_that_has_method, queryset_info=queryset_info, manager_instance=manager_instance, is_fallback_queryset=is_fallback_queryset, ) ) return Overloaded(items) if len(items) > 1 else items[0] def _process_dynamic_method( method_name: str, method_type: CallableType, *, queryset_info: TypeInfo, base_that_has_method: TypeInfo, manager_instance: Instance, is_fallback_queryset: bool, ) -> CallableType: variables = method_type.variables ret_type = method_type.ret_type manager_model = get_proper_type(find_member("model", manager_instance, manager_instance)) assert isinstance(manager_model, TypeType), manager_model manager_model_type = manager_model.item queryset_instance = Instance(queryset_info, (manager_model_type,) * len(queryset_info.type_vars)) # For methods on the manager that return a queryset we need to override the # return type to be the actual queryset class, not the base QuerySet that's # used by the typing stubs. if method_name in MANAGER_METHODS_RETURNING_QUERYSET: ret_type = queryset_instance variables = () args_types = method_type.arg_types[1:] if _has_compatible_type_vars(base_that_has_method): typed_var = manager_instance.args or queryset_info.bases[0].args if ( typed_var and isinstance((model_arg := get_proper_type(typed_var[0])), Instance) and model_arg.type.has_base(fullnames.MODEL_CLASS_FULLNAME) and helpers.is_model_type(model_arg.type) ): ret_type = _replace_type_var(ret_type, base_that_has_method.defn.type_vars[0].fullname, model_arg) args_types = [ _replace_type_var(arg_type, base_that_has_method.defn.type_vars[0].fullname, model_arg) for arg_type in args_types ] if base_that_has_method.self_type: # Manages -> Self returns ret_type = _replace_type_var(ret_type, base_that_has_method.self_type.fullname, queryset_instance) # Drop any 'self' argument as our manager is already initialized return method_type.copy_modified( arg_types=args_types, arg_kinds=method_type.arg_kinds[1:], arg_names=method_type.arg_names[1:], variables=variables, ret_type=ret_type, ) def _get_funcdef_type(definition: Node | None) -> ProperType | None: if isinstance(definition, FuncBase): return definition.type if isinstance(definition, Decorator): return definition.func.type return None def _has_compatible_type_vars(type_info: TypeInfo) -> bool: """ Determines whether the provided 'type_info', is a generically parameterized subclass of models.QuerySet[T], with exactly one type variable. Criteria for compatibility: 1. 'type_info' must be a generic class with exactly one type variable. 2. All superclasses of 'type_info', up to and including models.QuerySet, must also be generic classes with exactly one type variable. Examples: Compatible: class _MyModelQuerySet(models.QuerySet[T]): ... class MyModelQuerySet(_MyModelQuerySet[T_2]): def example(self) -> T_2: ... Incompatible: class MyModelQuerySet(models.QuerySet[T], Generic[T, T2]): def example(self, a: T2) -> T_2: ... Returns: True if the 'base' meets the criteria, otherwise False. """ args = type_info.defn.type_vars if not args or len(args) > 1 or not isinstance(args[0], TypeVarType): # No type var to manage, or too many return False type_var: MypyType | None = None # check that for all the bases it has only one type vars for sub_base in type_info.bases: unic_args = list(set(sub_base.args)) if not unic_args or len(unic_args) > 1: # No type var for the sub_base, skipping continue if type_var and unic_args and type_var != unic_args[0]: # There is two different type vars in the bases, we are not compatible return False type_var = unic_args[0] if not type_var: # No type var found in the bases. return False if type_info.has_base(fullnames.QUERYSET_CLASS_FULLNAME): # If it is a subclass of QuerySet, it is compatible. return True # check that at least one base is a subclass of queryset with Generic type vars return any(_has_compatible_type_vars(sub_base.type) for sub_base in type_info.bases) def _replace_type_var(ret_type: MypyType, to_replace: str, replace_by: MypyType) -> MypyType: """ Substitutes a specified type variable within a Mypy type expression with an actual type. This function is recursive, and it operates on various kinds of Mypy types like Instance, ProperType, etc., to deeply replace the specified type variable. Parameters: - ret_type: A Mypy type expression where the substitution should occur. - to_replace: The type variable to be replaced, specified as its full name. - replace_by: The actual Mypy type to substitute in place of 'to_replace'. Example: Given: ret_type = "typing.Collection[T]" to_replace = "T" replace_by = "myapp.models.MyModel" Result: "typing.Collection[myapp.models.MyModel]" """ if isinstance(ret_type, TypeVarType) and ret_type.fullname == to_replace: return replace_by ret_type = copy_type(get_proper_type(ret_type)) if isinstance(ret_type, Instance): # Since it is an instance, recursively find the type var for all its args. return ret_type.copy_modified( args=tuple(_replace_type_var(item, to_replace, replace_by) for item in ret_type.args) ) if isinstance(ret_type, TypeType): return TypeType.make_normalized( _replace_type_var(ret_type.item, to_replace, replace_by), line=ret_type.line, column=ret_type.column, ) if isinstance(ret_type, TupleType): return ret_type.copy_modified( items=[_replace_type_var(item, to_replace, replace_by) for item in ret_type.items] ) if isinstance(ret_type, UnionType): return UnionType.make_union( items=[_replace_type_var(item, to_replace, replace_by) for item in ret_type.items], line=ret_type.line, column=ret_type.column, ) return ret_type def resolve_manager_method_from_instance(instance: Instance, method_name: str, ctx: AttributeContext) -> MypyType: api = helpers.get_typechecker_api(ctx) method_type = get_method_type_from_dynamic_manager(api, method_name, instance) return method_type if method_type is not None else ctx.default_attr_type def resolve_manager_method(ctx: AttributeContext) -> MypyType: """ A 'get_attribute_hook' that is intended to be invoked whenever the TypeChecker encounters an attribute on a class that has 'django.db.models.BaseManager' as a base. """ # Skip (method) type that is currently something other than Any of type `implementation_artifact` default_attr_type = get_proper_type(ctx.default_attr_type) if not isinstance(default_attr_type, AnyType): return ctx.default_attr_type if default_attr_type.type_of_any != TypeOfAny.implementation_artifact: return ctx.default_attr_type # (Current state is:) We wouldn't end up here when looking up a method from a custom _manager_. # That's why we only attempt to lookup the method for either a dynamically added or reverse manager. if isinstance(ctx.context, MemberExpr): method_name = ctx.context.name elif isinstance(ctx.context, CallExpr) and isinstance(ctx.context.callee, MemberExpr): method_name = ctx.context.callee.name else: ctx.api.fail("Unable to resolve return type of queryset/manager method", ctx.context) return AnyType(TypeOfAny.from_error) if isinstance(ctx.type, Instance): return resolve_manager_method_from_instance(instance=ctx.type, method_name=method_name, ctx=ctx) if isinstance(ctx.type, UnionType) and all(isinstance(get_proper_type(item), Instance) for item in ctx.type.items): resolved = tuple( resolve_manager_method_from_instance(instance=instance, method_name=method_name, ctx=ctx) for item in ctx.type.items if isinstance((instance := get_proper_type(item)), Instance) ) return UnionType(resolved) ctx.api.fail(f'Unable to resolve return type of queryset/manager method "{method_name}"', ctx.context) return AnyType(TypeOfAny.from_error) def create_new_manager_class_from_from_queryset_method(ctx: DynamicClassDefContext) -> None: """ Insert a new manager class node for a: ' = .from_queryset()'. When the assignment expression lives at module level. """ semanal_api = helpers.get_semanal_api(ctx) # TODO: Emit an error when called in a class scope if semanal_api.is_class_scope(): return # Don't redeclare the manager class if we've already defined it. manager_sym = semanal_api.lookup_current_scope(ctx.name) if manager_sym and isinstance(manager_sym.node, TypeInfo): # This is just a deferral run where our work is already finished return new_manager_info = create_manager_info_from_from_queryset_call(semanal_api, ctx.call, ctx.name) if new_manager_info is None: if not ctx.api.final_iteration: # Only add PlaceholderNode if it doesn't already exist to prevent # infinite semantic analysis iterations (fixes #2373) if not (manager_sym and isinstance(manager_sym.node, PlaceholderNode)): # XXX: hack for python/mypy#17402 ph = PlaceholderNode(ctx.api.qualified_name(ctx.name), ctx.call, ctx.call.line, becomes_typeinfo=True) ctx.api.add_symbol_table_node(ctx.name, SymbolTableNode(GDEF, ph)) ctx.api.defer() return def register_dynamically_created_manager(fullname: str, manager_name: str, manager_base: TypeInfo) -> None: manager_base.metadata.setdefault("from_queryset_managers", {}) # The `__module__` value of the manager type created by Django's # `.from_queryset` is `django.db.models.manager`. But we put new type(s) in the # module currently being processed, so we'll map those together through metadata. runtime_fullname = ".".join(["django.db.models.manager", manager_name]) manager_base.metadata["from_queryset_managers"][runtime_fullname] = fullname def create_manager_info_from_from_queryset_call( api: SemanticAnalyzer, call_expr: CallExpr, name: str | None = None ) -> TypeInfo | None: """ Extract manager and queryset TypeInfo from a from_queryset call. """ if ( # Check that this is a from_queryset call on a manager subclass not isinstance(call_expr.callee, MemberExpr) or not isinstance(call_expr.callee.expr, RefExpr) or not isinstance(call_expr.callee.expr.node, TypeInfo) or not call_expr.callee.expr.node.has_base(fullnames.BASE_MANAGER_CLASS_FULLNAME) or not call_expr.callee.name == "from_queryset" # Check that the call has one or two arguments and that the first is a # QuerySet subclass or not 1 <= len(call_expr.args) <= 2 or not isinstance(call_expr.args[0], RefExpr) or not isinstance(call_expr.args[0].node, TypeInfo) or not call_expr.args[0].node.has_base(fullnames.QUERYSET_CLASS_FULLNAME) ): return None base_manager_info, queryset_info = call_expr.callee.expr.node, call_expr.args[0].node if queryset_info.fullname is None: # In some cases, due to the way the semantic analyzer works, only # passed_queryset.name is available. But it should be analyzed again, # so this isn't a problem. return None # type: ignore[unreachable] if len(call_expr.args) == 2 and isinstance(call_expr.args[1], StrExpr): manager_name = call_expr.args[1].value else: manager_name = f"{base_manager_info.name}From{queryset_info.name}" # Always look in global scope, as that's where we'll declare dynamic manager classes manager_sym = api.globals.get(manager_name) if ( manager_sym is not None and isinstance(manager_sym.node, TypeInfo) and manager_sym.node.has_base(base_manager_info.fullname) and manager_sym.node.metadata.get("django", {}).get("from_queryset_manager") == queryset_info.fullname ): # Reuse an identical, already generated, manager new_manager_info = manager_sym.node else: # Create a new `TypeInfo` instance for the manager type try: new_manager_info = create_manager_class( api=api, base_manager_info=base_manager_info, name=manager_name, line=call_expr.line, with_unique_name=name is not None and name != manager_name, ) except helpers.IncompleteDefnException: return None populate_manager_from_queryset(new_manager_info, queryset_info) register_dynamically_created_manager( fullname=new_manager_info.fullname, manager_name=manager_name, manager_base=base_manager_info, ) # Add the new manager to the current module # TODO: use proper SemanticAnalyzer API for that. module = api.modules[api.cur_mod_id] if name is not None and name != new_manager_info.name: # Unless names are equal, there's 2 symbol names that needs the manager info module.names[name] = SymbolTableNode(GDEF, new_manager_info, plugin_generated=True) module.names[new_manager_info.name] = SymbolTableNode(GDEF, new_manager_info, plugin_generated=True) return new_manager_info def create_manager_class( api: SemanticAnalyzer, base_manager_info: TypeInfo, name: str, line: int, with_unique_name: bool ) -> TypeInfo: base_manager_instance = fill_typevars(base_manager_info) assert isinstance(base_manager_instance, Instance) # If any of the type vars are undefined we need to defer. This is handled by the caller if any(has_placeholder(type_var) for type_var in base_manager_info.defn.type_vars): raise helpers.IncompleteDefnException if with_unique_name: manager_info = helpers.add_new_class_for_module( module=api.modules[api.cur_mod_id], name=name, bases=[base_manager_instance], ) else: manager_info = helpers.create_type_info(name, api.cur_mod_id, bases=[base_manager_instance]) manager_info.line = line manager_info.type_vars = base_manager_info.type_vars manager_info.defn.type_vars = base_manager_info.defn.type_vars manager_info.defn.line = line return manager_info def populate_manager_from_queryset(manager_info: TypeInfo, queryset_info: TypeInfo) -> None: """ Add methods from the QuerySet class to the manager. """ # Stash the queryset fullname which was passed to .from_queryset So that # our 'resolve_manager_method' attribute hook can fetch the method from # that QuerySet class django_metadata = helpers.get_django_metadata(manager_info) django_metadata["from_queryset_manager"] = queryset_info.fullname # We collect and mark up all methods before django.db.models.query.QuerySet as class members for class_mro_info in queryset_info.mro: if class_mro_info.fullname == fullnames.QUERYSET_CLASS_FULLNAME: break for name, sym in class_mro_info.names.items(): if not isinstance(sym.node, FuncDef | OverloadedFuncDef | Decorator): continue # private, magic methods are not copied # https://github.com/django/django/blob/5.0.4/django/db/models/manager.py#L101 if name.startswith("_"): continue # Insert the queryset method name as a class member. Note that the type of # the method is set as Any. Figuring out the type is the job of the # 'resolve_manager_method' attribute hook, which comes later. # # class BaseManagerFromMyQuerySet(BaseManager): # queryset_method: Any = ... # helpers.add_new_sym_for_info( manager_info, name=name, sym_type=AnyType(TypeOfAny.implementation_artifact), ) # For methods on BaseManager that return a queryset we need to update # the return type to be the actual queryset subclass used. This is done # by adding the methods as attributes with type Any to the manager # class. The actual type of these methods are resolved in # resolve_manager_method. for method_name in MANAGER_METHODS_RETURNING_QUERYSET: helpers.add_new_sym_for_info( manager_info, name=method_name, sym_type=AnyType(TypeOfAny.implementation_artifact), ) def add_as_manager_to_queryset_class(ctx: ClassDefContext) -> None: semanal_api = helpers.get_semanal_api(ctx) def _defer() -> None: if not semanal_api.final_iteration: semanal_api.defer() queryset_info = semanal_api.type if queryset_info is None: return _defer() # either a manual `as_manager` definition or this is a deferral pass if "as_manager" in queryset_info.names: return base_as_manager = queryset_info.get("as_manager") if base_as_manager is None: return manager_sym = semanal_api.lookup_fully_qualified_or_none(fullnames.MANAGER_CLASS_FULLNAME) if manager_sym is None or not isinstance(manager_sym.node, TypeInfo): return _defer() manager_base = manager_sym.node base_ret_type = manager_base if base_as_manager.fullname != f"{fullnames.QUERYSET_CLASS_FULLNAME}.as_manager": base_as_manager_type = get_proper_type(base_as_manager.type) if not isinstance(base_as_manager_type, CallableType): return base_as_manager_ret_type = get_proper_type(base_as_manager_type.ret_type) if not isinstance(base_as_manager_ret_type, Instance): return base_ret_type = base_as_manager_ret_type.type manager_class_name = f"{manager_base.name}From{queryset_info.name}" current_module = semanal_api.modules[semanal_api.cur_mod_id] existing_sym = current_module.names.get(manager_class_name) if ( existing_sym is not None and isinstance(existing_sym.node, TypeInfo) and existing_sym.node.has_base(fullnames.MANAGER_CLASS_FULLNAME) and existing_sym.node.metadata.get("django", {}).get("from_queryset_manager") == queryset_info.fullname ): # Reuse an identical, already generated, manager new_manager_info = existing_sym.node else: # Create a new `TypeInfo` instance for the manager type try: new_manager_info = create_manager_class( api=semanal_api, base_manager_info=base_ret_type, name=manager_class_name, line=queryset_info.line, with_unique_name=True, ) except helpers.IncompleteDefnException: return _defer() populate_manager_from_queryset(new_manager_info, queryset_info) register_dynamically_created_manager( fullname=new_manager_info.fullname, manager_name=manager_class_name, manager_base=manager_base, ) # Add the new manager to the current module # We'll use `new_manager_info.name` instead of `manager_class_name` here # to handle possible name collisions, as it's unique. current_module.names[new_manager_info.name] = ( # Note that the generated manager type is always inserted at module level SymbolTableNode(GDEF, new_manager_info, plugin_generated=True) ) add_method_to_class( semanal_api, ctx.cls, "as_manager", args=[], return_type=Instance(new_manager_info, [AnyType(TypeOfAny.from_omitted_generics)]), is_classmethod=True, ) def reparametrize_any_manager_hook(ctx: ClassDefContext) -> None: """ Add implicit generics to manager classes that are defined without generic. Eg. class MyManager(models.Manager): ... is interpreted as: _T = TypeVar('_T', covariant=True) class MyManager(models.Manager[_T]): ... Note that this does not happen if mypy is run with disallow_any_generics = True, as not specifying the generic type is then considered an error. """ manager = ctx.api.lookup_fully_qualified_or_none(ctx.cls.fullname) if manager is None or manager.node is None: return assert isinstance(manager.node, TypeInfo) if manager.node.type_vars: # We've already been here return parent_manager = next( (base for base in manager.node.bases if base.type.has_base(fullnames.BASE_MANAGER_CLASS_FULLNAME)), None, ) if parent_manager is None or len(parent_manager.args) != 1: return model_param = get_proper_type(parent_manager.args[0]) if not isinstance(model_param, AnyType) or model_param.type_of_any is not TypeOfAny.from_omitted_generics: return type_vars = tuple(parent_manager.type.defn.type_vars) # If we end up with placeholders we need to defer so the placeholders are # resolved in a future iteration if any(has_placeholder(type_var) for type_var in type_vars): if not ctx.api.final_iteration: ctx.api.defer() else: return parent_manager.args = type_vars manager.node.defn.type_vars = list(type_vars) manager.node.add_type_vars() django-stubs-5.2.9/mypy_django_plugin/transformers/manytomany.py000066400000000000000000000153711513401051600253230ustar00rootroot00000000000000from typing import NamedTuple from mypy.nodes import AssignmentStmt, NameExpr, Node, TypeInfo from mypy.plugin import FunctionContext, MethodContext from mypy.types import Instance, ProperType, UninhabitedType, get_proper_type from mypy.types import Type as MypyType from mypy_django_plugin.django.context import DjangoContext from mypy_django_plugin.lib import fullnames, helpers class M2MThrough(NamedTuple): arg: Node | None model: ProperType class M2MTo(NamedTuple): arg: Node model: ProperType self: bool # ManyToManyField('self', ...) class M2MArguments(NamedTuple): to: M2MTo through: M2MThrough | None def fill_model_args_for_many_to_many_field( *, ctx: FunctionContext, model_info: TypeInfo, django_context: DjangoContext, ) -> MypyType: default_return_type = get_proper_type(ctx.default_return_type) if not ( ctx.args and ctx.args[0] and isinstance(default_return_type, Instance) and len(default_return_type.args) >= 2 and (args := get_m2m_arguments(ctx=ctx, model_info=model_info, django_context=django_context)) ): return ctx.default_return_type default_to_arg = get_proper_type(default_return_type.args[0]) to_arg: MypyType if isinstance(default_to_arg, UninhabitedType): to_arg = args.to.model else: # Avoid overwriting a decent 'to' argument to_arg = default_return_type.args[0] default_through_arg = get_proper_type(default_return_type.args[1]) if isinstance(default_through_arg, UninhabitedType): if helpers.is_abstract_model(model_info): # Many to many on abstract models doesn't create any implicit, concrete # through model, so we populate it with the upper bound to avoid error messages through_arg = default_return_type.type.defn.type_vars[1].upper_bound elif args.through is None: through_arg = default_through_arg else: through_arg = args.through.model else: # Avoid overwriting a decent 'through' argument through_arg = default_return_type.args[1] return default_return_type.copy_modified(args=[to_arg, through_arg]) def get_m2m_arguments( *, ctx: FunctionContext, model_info: TypeInfo, django_context: DjangoContext, ) -> M2MArguments | None: checker = helpers.get_typechecker_api(ctx) to_arg = ctx.args[0][0] to_model = helpers.get_model_from_expression( to_arg, self_model=model_info, api=checker, django_context=django_context ) if to_model is None: # 'ManyToManyField()' requires the 'to' argument return None to = M2MTo(arg=to_arg, model=to_model, self=to_model.type == model_info) through = None if len(ctx.args) > 5 and ctx.args[5]: # 'ManyToManyField(..., through=)' was called through_arg = ctx.args[5][0] through_model = helpers.get_model_from_expression( through_arg, self_model=model_info, api=checker, django_context=django_context ) if through_model is not None: through = M2MThrough(arg=through_arg, model=through_model) elif not helpers.is_abstract_model(model_info): # No explicit 'through' argument was provided and model is concrete. We need # to dig up any generated through model for this 'ManyToManyField()' field through_arg = None m2m_throughs = helpers.get_django_metadata(model_info).get("m2m_throughs", {}) if m2m_throughs: field_name = None for defn in model_info.defn.defs.body: if ( isinstance(defn, AssignmentStmt) and defn.rvalue is ctx.context and len(defn.lvalues) == 1 and isinstance(defn.lvalues[0], NameExpr) ): field_name = defn.lvalues[0].name break if field_name is not None: through_model_fullname = m2m_throughs.get(field_name) if through_model_fullname is not None: through_model_info = helpers.lookup_fully_qualified_typeinfo(checker, through_model_fullname) if through_model_info is not None: through = M2MThrough(arg=through_arg, model=Instance(through_model_info, [])) return M2MArguments(to=to, through=through) def get_related_manager_and_model(ctx: MethodContext) -> tuple[Instance, Instance, Instance] | None: """ Returns a 3-tuple consisting of: 1. A `ManyRelatedManager` instance 2. The first type parameter (_To) instance of 1. when it's a model 3. The second type parameter (_Through) instance of 1. when it's a model When encountering a `ManyRelatedManager` that has populated its 2 first type parameters with models. Otherwise `None` is returned. For example: if given a `ManyRelatedManager[A, B]` where `A` and `B` are models the following 3-tuple is returned: `(ManyRelatedManager[A, B], A, B)`. """ default_return_type = get_proper_type(ctx.default_return_type) if ( isinstance(default_return_type, Instance) and default_return_type.type.fullname == fullnames.MANY_RELATED_MANAGER ): # This is a call to '__get__' overload with a model instance of 'ManyToManyDescriptor'. # Returning a 'ManyRelatedManager'. Which we want to, just like Django, build from the # default manager of the related model. many_related_manager = default_return_type # Require first and second type argument of 'ManyRelatedManager' to be models if ( len(many_related_manager.args) >= 2 and isinstance((_To := get_proper_type(many_related_manager.args[0])), Instance) and helpers.is_model_type(_To.type) and isinstance((_Through := get_proper_type(many_related_manager.args[1])), Instance) and helpers.is_model_type(_Through.type) ): return many_related_manager, _To, _Through return None def refine_many_to_many_related_manager(ctx: MethodContext) -> MypyType: """ Updates the 'ManyRelatedManager' returned by e.g. 'ManyToManyDescriptor' to be a subclass of 'ManyRelatedManager' and the related model's default manager. """ related_objects = get_related_manager_and_model(ctx) if related_objects is None: return ctx.default_return_type _, related_model_instance, through_model_instance = related_objects checker = helpers.get_typechecker_api(ctx) related_manager_info = helpers.get_many_to_many_manager_info( checker, to=related_model_instance.type, derived_from="_default_manager" ) if related_manager_info is None: return ctx.default_return_type return Instance(related_manager_info, [through_model_instance]) django-stubs-5.2.9/mypy_django_plugin/transformers/manytoone.py000066400000000000000000000037271513401051600251420ustar00rootroot00000000000000from mypy.plugin import MethodContext from mypy.types import Instance, get_proper_type from mypy.types import Type as MypyType from mypy_django_plugin.lib import fullnames, helpers def get_model_of_related_manager(ctx: MethodContext) -> Instance | None: """ Returns the type parameter (_To) instance of a `RelatedManager` instance when it's a model. Otherwise `None` is returned. For example: if given a `RelatedManager[A]` where `A` is a model then `A` is returned. """ default_return_type = get_proper_type(ctx.default_return_type) if ( isinstance(default_return_type, Instance) and default_return_type.type.fullname == fullnames.RELATED_MANAGER_CLASS ): # This is a call to '__get__' overload with a model instance of # 'ReverseManyToOneDescriptor'. Returning a 'RelatedManager'. Which we want to, # just like Django, build from the default manager of the related model. related_manager = default_return_type # Require first type argument of 'RelatedManager' to be a model if ( len(related_manager.args) >= 1 and isinstance((_To := get_proper_type(related_manager.args[0])), Instance) and helpers.is_model_type(_To.type) ): return _To return None def refine_many_to_one_related_manager(ctx: MethodContext) -> MypyType: """ Updates the 'RelatedManager' returned by e.g. 'ReverseManyToOneDescriptor' to be a subclass of 'RelatedManager' and the related model's default manager. """ to_model_instance = get_model_of_related_manager(ctx) if to_model_instance is None: return ctx.default_return_type checker = helpers.get_typechecker_api(ctx) related_manager_info = helpers.get_reverse_manager_info( checker, to_model_instance.type, derived_from="_default_manager" ) if related_manager_info is None: return ctx.default_return_type return Instance(related_manager_info, []) django-stubs-5.2.9/mypy_django_plugin/transformers/meta.py000066400000000000000000000030441513401051600240470ustar00rootroot00000000000000from django.core.exceptions import FieldDoesNotExist from mypy.plugin import MethodContext from mypy.types import AnyType, Instance, TypeOfAny, get_proper_type from mypy.types import Type as MypyType from mypy_django_plugin.django.context import DjangoContext, get_field_type_from_model_type_info from mypy_django_plugin.lib import helpers from mypy_django_plugin.lib.helpers import DjangoModel def return_proper_field_type_from_get_field(ctx: MethodContext, django_context: DjangoContext) -> MypyType: if not ( isinstance(ctx.type, Instance) and ctx.type.args and isinstance(model_type := get_proper_type(ctx.type.args[0]), Instance) and (field_name_expr := helpers.get_call_argument_by_name(ctx, "field_name")) is not None and (field_name := helpers.resolve_string_attribute_value(field_name_expr, django_context)) is not None ): return ctx.default_return_type field_type = get_field_type_from_model_type_info(model_type.type, field_name) if field_type is not None: return field_type if (django_model := DjangoModel.from_model_type(model_type, django_context)) is None: return ctx.default_return_type try: field = django_model.cls._meta.get_field(field_name) if field_info := helpers.lookup_class_typeinfo(helpers.get_typechecker_api(ctx), field.__class__): return Instance(field_info, []) except FieldDoesNotExist as e: ctx.api.fail(str(e), ctx.context) return AnyType(TypeOfAny.from_error) return ctx.default_return_type django-stubs-5.2.9/mypy_django_plugin/transformers/models.py000066400000000000000000001522771513401051600244210ustar00rootroot00000000000000from collections import deque from collections.abc import Iterable from functools import cached_property from typing import Any, cast from django.db.models import Manager, Model from django.db.models.fields import DateField, DateTimeField, Field from django.db.models.fields.reverse_related import ForeignObjectRel, ManyToManyRel, OneToOneRel from mypy.checker import TypeChecker from mypy.nodes import ( ARG_STAR2, MDEF, Argument, AssignmentStmt, CallExpr, Context, FakeInfo, NameExpr, RefExpr, Statement, SymbolTableNode, TypeInfo, Var, ) from mypy.plugin import AnalyzeTypeContext, AttributeContext, ClassDefContext from mypy.plugins import common from mypy.semanal import SemanticAnalyzer from mypy.typeanal import TypeAnalyser from mypy.types import AnyType, Instance, ProperType, TypedDictType, TypeOfAny, TypeType, TypeVarType, get_proper_type from mypy.types import Type as MypyType from mypy.typevars import fill_typevars, fill_typevars_with_any from mypy_django_plugin.config import DjangoPluginConfig from mypy_django_plugin.django.context import DjangoContext from mypy_django_plugin.errorcodes import MANAGER_MISSING from mypy_django_plugin.exceptions import UnregisteredModelError from mypy_django_plugin.lib import fullnames, helpers from mypy_django_plugin.lib.fullnames import ANNOTATIONS_FULLNAME from mypy_django_plugin.transformers.fields import FieldDescriptorTypes, get_field_descriptor_types from mypy_django_plugin.transformers.managers import ( MANAGER_METHODS_RETURNING_QUERYSET, create_manager_info_from_from_queryset_call, ) from mypy_django_plugin.transformers.manytomany import M2MArguments, M2MThrough, M2MTo class ModelClassInitializer: api: SemanticAnalyzer def __init__(self, ctx: ClassDefContext, django_context: DjangoContext) -> None: self.api = cast("SemanticAnalyzer", ctx.api) self.model_classdef = ctx.cls self.django_context = django_context self.ctx = ctx @property def is_model_abstract(self) -> bool: return helpers.is_abstract_model(self.model_classdef.info) def lookup_typeinfo(self, fullname: str) -> TypeInfo | None: return helpers.lookup_fully_qualified_typeinfo(self.api, fullname) def lookup_typeinfo_or_incomplete_defn_error(self, fullname: str) -> TypeInfo: info = self.lookup_typeinfo(fullname) if info is None: raise helpers.IncompleteDefnException(f"No {fullname!r} found") return info def lookup_class_typeinfo_or_incomplete_defn_error(self, klass: type) -> TypeInfo: fullname = helpers.get_class_fullname(klass) return self.lookup_typeinfo_or_incomplete_defn_error(fullname) def create_new_var(self, name: str, typ: MypyType) -> Var: # type=: type of the variable itself var = Var(name=name, type=typ) # var.info: type of the object variable is bound to var.info = self.model_classdef.info var._fullname = self.model_classdef.info.fullname + "." + name var.is_initialized_in_class = True var.is_inferred = True return var def add_new_node_to_model_class( self, name: str, typ: MypyType, *, no_serialize: bool = False, is_classvar: bool = False ) -> None: # TODO: Rename to signal that it is a `Var` that is added.. helpers.add_new_sym_for_info( self.model_classdef.info, name=name, sym_type=typ, no_serialize=no_serialize, is_classvar=is_classvar ) def add_new_class_for_current_module(self, name: str, bases: list[Instance]) -> TypeInfo: current_module = self.api.modules[self.model_classdef.info.module_name] return helpers.add_new_class_for_module(current_module, name=name, bases=bases) def run(self) -> None: model_cls = self.django_context.get_model_class_by_fullname(self.model_classdef.fullname) if model_cls is None: return self.run_with_model_cls(model_cls) def get_generated_manager_mappings(self, base_manager_fullname: str) -> dict[str, str]: base_manager_info = self.lookup_typeinfo(base_manager_fullname) if base_manager_info is None or "from_queryset_managers" not in base_manager_info.metadata: return {} return base_manager_info.metadata["from_queryset_managers"] def get_generated_manager_info(self, manager_fullname: str, base_manager_fullname: str) -> TypeInfo | None: generated_managers = self.get_generated_manager_mappings(base_manager_fullname) real_manager_fullname = generated_managers.get(manager_fullname) if real_manager_fullname: return self.lookup_typeinfo(real_manager_fullname) # Not a generated manager return None def get_or_create_manager_with_any_fallback(self) -> TypeInfo | None: """ Create a Manager subclass with fallback to Any for unknown attributes and methods. This is used for unresolved managers, where we don't know the actual type of the manager. The created class is reused if multiple unknown managers are encountered. """ name = "UnknownManager" # Check if we've already created a fallback manager class for this # module, and if so reuse that. manager_info = self.lookup_typeinfo(f"{self.model_classdef.info.module_name}.{name}") if manager_info and manager_info.metadata.get("django", {}).get("any_fallback_manager"): return manager_info fallback_queryset = self.get_or_create_queryset_with_any_fallback() if fallback_queryset is None: return None base_manager_fullname = fullnames.MANAGER_CLASS_FULLNAME base_manager_info = self.lookup_typeinfo(base_manager_fullname) if base_manager_info is None: return None base_manager = fill_typevars(base_manager_info) assert isinstance(base_manager, Instance) manager_info = self.add_new_class_for_current_module(name, [base_manager]) manager_info.fallback_to_any = True manager_info.type_vars = base_manager_info.type_vars manager_info.defn.type_vars = base_manager_info.defn.type_vars manager_info.metaclass_type = manager_info.calculate_metaclass_type() # For methods on BaseManager that return a queryset we need to update # the return type to be the actual queryset subclass used. This is done # by adding the methods as attributes with type Any to the manager # class. The actual type of these methods are resolved in # resolve_manager_method. for method_name in MANAGER_METHODS_RETURNING_QUERYSET: helpers.add_new_sym_for_info( manager_info, name=method_name, sym_type=AnyType(TypeOfAny.implementation_artifact) ) manager_info.metadata["django"] = { "any_fallback_manager": True, "from_queryset_manager": fallback_queryset.fullname, } return manager_info def get_or_create_queryset_with_any_fallback(self) -> TypeInfo | None: """ Create a QuerySet subclass with fallback to Any for unknown attributes and methods. This is used for the manager returned by the method above. """ name = "UnknownQuerySet" # Check if we've already created a fallback queryset class for this # module, and if so reuse that. queryset_info = self.lookup_typeinfo(f"{self.model_classdef.info.module_name}.{name}") if queryset_info and queryset_info.metadata.get("django", {}).get("any_fallback_queryset"): return queryset_info base_queryset_info = self.lookup_typeinfo(fullnames.QUERYSET_CLASS_FULLNAME) if base_queryset_info is None: return None base_queryset = fill_typevars(base_queryset_info) assert isinstance(base_queryset, Instance) queryset_info = self.add_new_class_for_current_module(name, [base_queryset]) queryset_info.metadata["django"] = { "any_fallback_queryset": True, } queryset_info.fallback_to_any = True queryset_info.type_vars = base_queryset_info.type_vars.copy() queryset_info.defn.type_vars = base_queryset_info.defn.type_vars.copy() queryset_info.metaclass_type = queryset_info.calculate_metaclass_type() return queryset_info def run_with_model_cls(self, model_cls: type[Model]) -> None: raise NotImplementedError(f"Implement this in subclass {self.__class__.__name__}") class AddAnnotateUtilities(ModelClassInitializer): """ Creates a model subclass that will be used when the model's manager/queryset calls 'annotate' to hold on to attributes that Django adds to a model instance. Example: class MyModel(models.Model): ... class MyModel@AnnotatedWith(MyModel, django_stubs_ext.Annotations[_Annotations]): ... """ def run(self) -> None: annotations = self.lookup_typeinfo_or_incomplete_defn_error("django_stubs_ext.Annotations") object_does_not_exist = self.lookup_typeinfo_or_incomplete_defn_error(fullnames.OBJECT_DOES_NOT_EXIST) multiple_objects_returned = self.lookup_typeinfo_or_incomplete_defn_error(fullnames.MULTIPLE_OBJECTS_RETURNED) annotated_model_name = self.model_classdef.info.name + "@AnnotatedWith" annotated_model = self.lookup_typeinfo(self.model_classdef.info.module_name + "." + annotated_model_name) if annotated_model is None: model_type = fill_typevars_with_any(self.model_classdef.info) assert isinstance(model_type, Instance) annotations_type = fill_typevars(annotations) assert isinstance(annotations_type, Instance) annotated_model = self.add_new_class_for_current_module( annotated_model_name, bases=[model_type, annotations_type] ) annotated_model.defn.type_vars = annotations.defn.type_vars annotated_model.add_type_vars() helpers.mark_as_annotated_model(annotated_model) if self.is_model_abstract: # Below are abstract attributes, and in a stub file mypy requires # explicit ABCMeta if not all abstract attributes are implemented i.e. # class is kept abstract. So we add the attributes to get mypy off our # back helpers.add_new_sym_for_info( annotated_model, "DoesNotExist", TypeType(Instance(object_does_not_exist, [])) ) helpers.add_new_sym_for_info( annotated_model, "MultipleObjectsReturned", TypeType(Instance(multiple_objects_returned, [])) ) class InjectAnyAsBaseForNestedMeta(ModelClassInitializer): """ Replaces class MyModel(models.Model): class Meta: pass with class MyModel(models.Model): class Meta(TypedModelMeta): pass to provide proper typing of attributes in Meta inner classes. If TypedModelMeta is not available, fallback to Any as a base to get around incompatible Meta inner classes for different models. """ def run(self) -> None: meta_node = helpers.get_nested_meta_node_for_current_class(self.model_classdef.info) if meta_node is None: return None meta_node.fallback_to_any = True typed_model_meta_info = self.lookup_typeinfo(fullnames.TYPED_MODEL_META_FULLNAME) if typed_model_meta_info and not meta_node.has_base(fullnames.TYPED_MODEL_META_FULLNAME): # Insert TypedModelMeta just before `object` to leverage mypy's class-body semantic analysis. meta_node.mro.insert(-1, typed_model_meta_info) return None class AddDefaultPrimaryKey(ModelClassInitializer): def run_with_model_cls(self, model_cls: type[Model]) -> None: auto_field = model_cls._meta.auto_field if auto_field: self.create_autofield( auto_field=auto_field, dest_name=auto_field.attname, existing_field=not self.model_classdef.info.has_readable_member(auto_field.attname), ) def create_autofield( self, auto_field: "Field[Any, Any]", dest_name: str, existing_field: bool, ) -> None: if existing_field: auto_field_fullname = helpers.get_class_fullname(auto_field.__class__) auto_field_info = self.lookup_typeinfo_or_incomplete_defn_error(auto_field_fullname) set_type, get_type = get_field_descriptor_types( auto_field_info, is_set_nullable=True, is_get_nullable=False, ) self.add_new_node_to_model_class(dest_name, Instance(auto_field_info, [set_type, get_type])) class AddPrimaryKeyAlias(AddDefaultPrimaryKey): def run_with_model_cls(self, model_cls: type[Model]) -> None: # We also need to override existing `pk` definition from `stubs`: auto_field = model_cls._meta.pk if auto_field is not None: self.create_autofield( auto_field=auto_field, dest_name="pk", existing_field=self.model_classdef.info.has_readable_member(auto_field.name), ) class AddRelatedModelsId(ModelClassInitializer): def run_with_model_cls(self, model_cls: type[Model]) -> None: for field in self.django_context.get_model_foreign_keys(model_cls): try: related_model_cls = self.django_context.get_field_related_model_cls(field) except UnregisteredModelError: error_context: Context = self.ctx.cls field_sym = self.ctx.cls.info.get(field.name) if field_sym is not None and field_sym.node is not None: error_context = field_sym.node self.api.fail( f"Cannot find model {field.related_model!r} referenced in field {field.name!r}", ctx=error_context, ) self.add_new_node_to_model_class(field.attname, AnyType(TypeOfAny.explicit)) continue if related_model_cls._meta.abstract: continue rel_target_field = self.django_context.get_related_target_field(related_model_cls, field) if not rel_target_field: continue try: field_info = self.lookup_class_typeinfo_or_incomplete_defn_error(rel_target_field.__class__) except helpers.IncompleteDefnException as exc: if not self.api.final_iteration: raise exc continue is_nullable = self.django_context.get_field_nullability(field, None) set_type, get_type = get_field_descriptor_types( field_info, is_set_nullable=is_nullable, is_get_nullable=is_nullable ) self.add_new_node_to_model_class(field.attname, Instance(field_info, [set_type, get_type])) class AddManagers(ModelClassInitializer): def lookup_manager(self, fullname: str, manager: "Manager[Any]") -> TypeInfo | None: manager_info = self.lookup_typeinfo(fullname) if manager_info is None: manager_info = self.get_dynamic_manager(fullname, manager) return manager_info def is_manager_dynamically_generated(self, manager_info: TypeInfo | None) -> bool: if manager_info is None: return False return manager_info.metadata.get("django", {}).get("from_queryset_manager") is not None def reparametrize_dynamically_created_manager(self, manager_name: str, manager_info: TypeInfo | None) -> None: if not self.is_manager_dynamically_generated(manager_info): return assert manager_info is not None # Reparameterize dynamically created manager with model type manager_type = helpers.fill_manager(manager_info, Instance(self.model_classdef.info, [])) self.add_new_node_to_model_class(manager_name, manager_type, is_classvar=True) def run_with_model_cls(self, model_cls: type[Model]) -> None: manager_info: TypeInfo | None incomplete_manager_defs = set() for manager_name, manager in model_cls._meta.managers_map.items(): manager_node = self.model_classdef.info.get(manager_name) manager_fullname = helpers.get_class_fullname(manager.__class__) manager_info = self.lookup_manager(manager_fullname, manager) if manager_node and manager_node.type is not None: # Manager is already typed -> do nothing unless it's a dynamically generated manager self.reparametrize_dynamically_created_manager(manager_name, manager_info) continue if manager_info is None: # We couldn't find a manager type, see if we should create one manager_info = self.create_manager_from_from_queryset(manager_name) if manager_info is None: incomplete_manager_defs.add(manager_name) continue assert self.model_classdef.info.self_type is not None manager_type = helpers.fill_manager(manager_info, self.model_classdef.info.self_type) self.add_new_node_to_model_class(manager_name, manager_type, is_classvar=True) if incomplete_manager_defs: if not self.api.final_iteration: # Unless we're on the final round, see if another round could # figure out all manager types raise helpers.IncompleteDefnException() for manager_name in incomplete_manager_defs: # We act graceful and set the type as the bare minimum we know of # (Django's default) before finishing. And emit an error, to allow for # ignoring a more specialised manager not being resolved while still # setting _some_ type fallback_manager_info = self.get_or_create_manager_with_any_fallback() if fallback_manager_info is not None: assert self.model_classdef.info.self_type is not None manager_type = helpers.fill_manager(fallback_manager_info, self.model_classdef.info.self_type) self.add_new_node_to_model_class(manager_name, manager_type, is_classvar=True) # Find expression for e.g. `objects = SomeManager()` manager_expr = self.get_manager_expression(manager_name) manager_fullname = f"{self.model_classdef.fullname}.{manager_name}" self.api.fail( f'Could not resolve manager type for "{manager_fullname}"', manager_expr if manager_expr else self.ctx.cls, code=MANAGER_MISSING, ) def get_manager_expression(self, name: str) -> AssignmentStmt | None: # TODO: What happens if the manager is defined multiple times? for expr in self.ctx.cls.defs.body: if ( isinstance(expr, AssignmentStmt) and isinstance(expr.lvalues[0], NameExpr) and expr.lvalues[0].name == name ): return expr return None def get_dynamic_manager(self, fullname: str, manager: "Manager[Any]") -> TypeInfo | None: """ Try to get a dynamically defined manager """ # Check if manager is a generated (dynamic class) manager base_manager_fullname = helpers.get_class_fullname(manager.__class__.__bases__[0]) generated_managers = self.get_generated_manager_mappings(base_manager_fullname) generated_manager_name: str | None = generated_managers.get(fullname, None) if generated_manager_name is None: return None return self.lookup_typeinfo(generated_manager_name) def create_manager_from_from_queryset(self, name: str) -> TypeInfo | None: """ Try to create a manager from a .from_queryset call: class MyModel(models.Model): objects = MyManager.from_queryset(MyQuerySet)() """ assign_statement = self.get_manager_expression(name) if assign_statement is None: return None expr = assign_statement.rvalue if not isinstance(expr, CallExpr) or not isinstance(expr.callee, CallExpr): return None return create_manager_info_from_from_queryset_call(self.api, expr.callee) class AddDefaultManagerAttribute(ModelClassInitializer): def run_with_model_cls(self, model_cls: type[Model]) -> None: if "_default_manager" in self.model_classdef.info.names: return None default_manager_cls = model_cls._meta.default_manager.__class__ default_manager_fullname = helpers.get_class_fullname(default_manager_cls) try: default_manager_info = self.lookup_typeinfo_or_incomplete_defn_error(default_manager_fullname) except helpers.IncompleteDefnException as exc: # Check if default manager could be a generated manager base_manager_fullname = helpers.get_class_fullname(default_manager_cls.__bases__[0]) generated_manager_info = self.get_generated_manager_info(default_manager_fullname, base_manager_fullname) if generated_manager_info is None: # Manager doesn't appear to be generated. Unless we're on the final round, # see if another round could help figuring out the default manager type if not self.api.final_iteration: raise exc return None default_manager_info = generated_manager_info default_manager = helpers.fill_manager(default_manager_info, Instance(self.model_classdef.info, [])) self.add_new_node_to_model_class("_default_manager", default_manager, is_classvar=True) class AddReverseLookups(ModelClassInitializer): @cached_property def reverse_one_to_one_descriptor(self) -> TypeInfo: return self.lookup_typeinfo_or_incomplete_defn_error(fullnames.REVERSE_ONE_TO_ONE_DESCRIPTOR) @cached_property def reverse_many_to_one_descriptor(self) -> TypeInfo: return self.lookup_typeinfo_or_incomplete_defn_error(fullnames.REVERSE_MANY_TO_ONE_DESCRIPTOR) @cached_property def many_to_many_descriptor(self) -> TypeInfo: return self.lookup_typeinfo_or_incomplete_defn_error(fullnames.MANY_TO_MANY_DESCRIPTOR) def process_relation(self, relation: ForeignObjectRel) -> None: attname = relation.get_accessor_name() if attname is None: # No reverse accessor. return to_model_cls = self.django_context.get_field_related_model_cls(relation) to_model_info = self.lookup_class_typeinfo_or_incomplete_defn_error(to_model_cls) reverse_lookup_declared = attname in self.model_classdef.info.names if isinstance(relation, OneToOneRel): if not reverse_lookup_declared: self.add_new_node_to_model_class( attname, Instance( self.reverse_one_to_one_descriptor, [Instance(self.model_classdef.info, []), Instance(to_model_info, [])], ), ) return if isinstance(relation, ManyToManyRel): if not reverse_lookup_declared: # TODO: 'relation' should be based on `TypeInfo` instead of Django runtime. assert relation.through is not None through_fullname = helpers.get_class_fullname(relation.through) through_model_info = self.lookup_typeinfo_or_incomplete_defn_error(through_fullname) self.add_new_node_to_model_class( attname, Instance( self.many_to_many_descriptor, [Instance(to_model_info, []), Instance(through_model_info, [])] ), is_classvar=True, ) return if not reverse_lookup_declared: # ManyToOneRel self.add_new_node_to_model_class( attname, Instance(self.reverse_many_to_one_descriptor, [Instance(to_model_info, [])]), is_classvar=True ) related_manager_info = self.lookup_typeinfo_or_incomplete_defn_error(fullnames.RELATED_MANAGER_CLASS) # TODO: Support other reverse managers than `_default_manager` default_manager = to_model_info.names.get("_default_manager") if default_manager is None: if not self.api.final_iteration: raise helpers.IncompleteDefnException() # When we get no default manager we can't customize the reverse manager any # further and will just fall back to the manager declared on the descriptor. # If a django model has a Manager class that cannot be resolved statically # (if it is generated in a way where we cannot import it, like # `objects = my_manager_factory()`) # # See https://github.com/typeddjango/django-stubs/pull/993 # for more information on when this error can occur. self.ctx.api.fail( ( f"Couldn't resolve related manager {attname!r} for relation " f"'{to_model_info.fullname}.{relation.field.name}'." ), self.ctx.cls, code=MANAGER_MISSING, ) return default_manager_type = get_proper_type(default_manager.type) if ( # '_default_manager' attribute is a node type we can't process not isinstance(default_manager_type, Instance) # Already has a related manager subclassed from the default manager or helpers.get_reverse_manager_info(self.api, model_info=to_model_info, derived_from="_default_manager") is not None # When the default manager isn't custom there's no need to create a new type # as `RelatedManager` has `models.Manager` as base or default_manager_type.type.fullname == fullnames.MANAGER_CLASS_FULLNAME ): return # Create a reverse manager subclassed from the default manager of the related # model and 'RelatedManager' related_manager = Instance(related_manager_info, [Instance(to_model_info, [])]) # The reverse manager is based on the related model's manager, so it makes most sense to add the new # related manager in that module new_related_manager_info = helpers.add_new_class_for_module( module=self.api.modules[to_model_info.module_name], name=f"{to_model_info.name}_RelatedManager", bases=[related_manager, default_manager_type], ) # Stash the new reverse manager type fullname on the related model, so we don't duplicate # or have to create it again for other reverse relations helpers.set_reverse_manager_info( to_model_info, derived_from="_default_manager", fullname=new_related_manager_info.fullname, ) def run_with_model_cls(self, model_cls: type[Model]) -> None: # add related managers etc. processing_incomplete = False for relation in self.django_context.get_model_relations(model_cls): try: self.process_relation(relation) except helpers.IncompleteDefnException: processing_incomplete = True if processing_incomplete and not self.api.final_iteration: raise helpers.IncompleteDefnException class AddExtraFieldMethods(ModelClassInitializer): def run_with_model_cls(self, model_cls: type[Model]) -> None: # get_FOO_display for choices for field in self.django_context.get_model_fields(model_cls): if field.choices: info = self.lookup_typeinfo_or_incomplete_defn_error("builtins.str") return_type = Instance(info, []) common.add_method(self.ctx, name=f"get_{field.attname}_display", args=[], return_type=return_type) # get_next_by, get_previous_by for Date, DateTime for field in self.django_context.get_model_fields(model_cls): if isinstance(field, DateField | DateTimeField) and not field.null: return_type = Instance(self.model_classdef.info, []) common.add_method( self.ctx, name=f"get_next_by_{field.attname}", args=[ Argument( Var("kwargs", AnyType(TypeOfAny.implementation_artifact)), AnyType(TypeOfAny.implementation_artifact), initializer=None, kind=ARG_STAR2, ) ], return_type=return_type, ) common.add_method( self.ctx, name=f"get_previous_by_{field.attname}", args=[ Argument( Var("kwargs", AnyType(TypeOfAny.implementation_artifact)), AnyType(TypeOfAny.implementation_artifact), initializer=None, kind=ARG_STAR2, ) ], return_type=return_type, ) class ProcessManyToManyFields(ModelClassInitializer): """ Processes 'ManyToManyField()' fields and; - Generates any implicit through tables that Django also generates. It won't do anything if the model is abstract or for fields where an explicit 'through' argument has been passed. - Creates related managers for both ends of the many to many relationship TODO: Move the 'related_name' contribution from 'AddReverseLookups' to here. As it makes sense to add it when processing ManyToManyField """ def statements(self) -> Iterable[Statement]: """ Returns class body statements from the current model and any of its bases that is an abstract model. Statements from any concrete parent class or parents of that concrete class will be skipped. """ processed_models = set() # Produce all statements from current class model_bases = deque([self.model_classdef]) # Do a breadth first search over the current model and its bases, to find all # abstract parent models that have not been "interrupted" by any concrete model. while model_bases: model = model_bases.popleft() yield from model.defs.body if isinstance(model.info, FakeInfo): # While loading from cache ClassDef infos are faked and 'FakeInfo' doesn't have # all attributes of a 'TypeInfo' set. See #2184 continue for base in model.info.bases: # Only produce any additional statements from abstract model bases, as they # simulate regular python inheritance. Avoid concrete models, and any of their # parents, as they're handled differently by Django. if helpers.is_abstract_model(base.type) and base.type.fullname not in processed_models: model_bases.append(base.type.defn) processed_models.add(base.type.fullname) def run(self) -> None: if self.is_model_abstract: # TODO: Create abstract through models? return for statement in self.statements(): # Check if this part of the class body is an assignment from a 'ManyToManyField' call # = ManyToManyField(...) if ( isinstance(statement, AssignmentStmt) and len(statement.lvalues) == 1 and isinstance(statement.lvalues[0], NameExpr) and isinstance(statement.rvalue, CallExpr) and len(statement.rvalue.args) > 0 # Need at least the 'to' argument and isinstance(statement.rvalue.callee, RefExpr) and isinstance(statement.rvalue.callee.node, TypeInfo) and statement.rvalue.callee.node.has_base(fullnames.MANYTOMANY_FIELD_FULLNAME) ): m2m_field_name = statement.lvalues[0].name m2m_field_symbol = self.model_classdef.info.get(m2m_field_name) # The symbol referred to by the assignment expression is expected to be a variable if m2m_field_symbol is None or not isinstance(m2m_field_symbol.node, Var): continue # Resolve argument information of the 'ManyToManyField(...)' call args = self.resolve_many_to_many_arguments(statement.rvalue, context=statement) # Ignore calls without required 'to' argument, mypy will complain if args is None: continue # Get the names of the implicit through model that will be generated through_model_name = f"{self.model_classdef.name}_{m2m_field_name}" through_model = self.create_through_table_class( field_name=m2m_field_name, model_name=through_model_name, model_fullname=f"{self.model_classdef.info.module_name}.{through_model_name}", m2m_args=args, ) container = self.model_classdef.info.get_containing_type_info(m2m_field_name) if ( through_model is not None and container is not None and container.fullname != self.model_classdef.info.fullname and helpers.is_abstract_model(container) ): # ManyToManyField is inherited from an abstract parent class, so in # order to get the to and the through model argument right we # override the ManyToManyField attribute on the current class helpers.add_new_sym_for_info( self.model_classdef.info, name=m2m_field_name, sym_type=Instance(self.m2m_field, [args.to.model, Instance(through_model, [])]), ) # Create a 'ManyRelatedManager' class for the processed model self.create_many_related_manager(Instance(self.model_classdef.info, [])) if isinstance(args.to.model, Instance): # Create a 'ManyRelatedManager' class for the related model self.create_many_related_manager(args.to.model) @cached_property def default_pk_instance(self) -> Instance: default_pk_field = self.lookup_typeinfo(self.django_context.settings.DEFAULT_AUTO_FIELD) if default_pk_field is None: raise helpers.IncompleteDefnException() return Instance( default_pk_field, list(get_field_descriptor_types(default_pk_field, is_set_nullable=True, is_get_nullable=False)), ) @cached_property def model_pk_instance(self) -> Instance: return self.get_pk_instance(self.model_classdef.info) @cached_property def model_base(self) -> TypeInfo: info = self.lookup_typeinfo(fullnames.MODEL_CLASS_FULLNAME) if info is None: raise helpers.IncompleteDefnException() return info @cached_property def fk_field(self) -> TypeInfo: info = self.lookup_typeinfo(fullnames.FOREIGN_KEY_FULLNAME) if info is None: raise helpers.IncompleteDefnException() return info @cached_property def m2m_field(self) -> TypeInfo: info = self.lookup_typeinfo(fullnames.MANYTOMANY_FIELD_FULLNAME) if info is None: raise helpers.IncompleteDefnException() return info @cached_property def manager_info(self) -> TypeInfo: info = self.lookup_typeinfo(fullnames.MANAGER_CLASS_FULLNAME) if info is None: raise helpers.IncompleteDefnException() return info @cached_property def fk_field_types(self) -> FieldDescriptorTypes: return get_field_descriptor_types(self.fk_field, is_set_nullable=False, is_get_nullable=False) @cached_property def many_related_manager(self) -> TypeInfo: return self.lookup_typeinfo_or_incomplete_defn_error(fullnames.MANY_RELATED_MANAGER) def get_pk_instance(self, model: TypeInfo, /) -> Instance: """ Get a primary key instance of provided model's type info. If primary key can't be resolved, return a default declaration. """ contains_from_pk_info = model.get_containing_type_info("pk") if contains_from_pk_info is not None: pk = contains_from_pk_info.names["pk"].node if isinstance(pk, Var): pk_type = get_proper_type(pk.type) if isinstance(pk_type, Instance): return pk_type return self.default_pk_instance def create_through_table_class( self, field_name: str, model_name: str, model_fullname: str, m2m_args: M2MArguments ) -> TypeInfo | None: if not isinstance(m2m_args.to.model, Instance): return None if m2m_args.through is not None: # Call has explicit 'through=', no need to create any implicit through table return m2m_args.through.model.type if isinstance(m2m_args.through.model, Instance) else None # If through model is already declared there's nothing more we should do through_model = self.lookup_typeinfo(model_fullname) if through_model is not None: return through_model # Declare a new, empty, implicitly generated through model class named: '_' through_model = self.add_new_class_for_current_module(model_name, bases=[Instance(self.model_base, [])]) # We attempt to be a bit clever here and store the generated through model's fullname in # the metadata of the class containing the 'ManyToManyField' call expression, where its # identifier is the field name of the 'ManyToManyField'. This would allow the containing # model to always find the implicit through model, so that it doesn't get lost. model_metadata = helpers.get_django_metadata(self.model_classdef.info) model_metadata.setdefault("m2m_throughs", {}) model_metadata["m2m_throughs"][field_name] = through_model.fullname # Add a 'pk' symbol to the model class helpers.add_new_sym_for_info(through_model, name="pk", sym_type=self.default_pk_instance.copy_modified()) # Add an 'id' symbol to the model class helpers.add_new_sym_for_info(through_model, name="id", sym_type=self.default_pk_instance.copy_modified()) # Add the foreign key to the model containing the 'ManyToManyField' call: # or from_ from_name = f"from_{self.model_classdef.name.lower()}" if m2m_args.to.self else self.model_classdef.name.lower() helpers.add_new_sym_for_info( through_model, name=from_name, sym_type=Instance( self.fk_field, [ helpers.convert_any_to_type(self.fk_field_types.set, Instance(self.model_classdef.info, [])), helpers.convert_any_to_type(self.fk_field_types.get, Instance(self.model_classdef.info, [])), ], ), ) # Add the foreign key's '_id' field: _id or from__id helpers.add_new_sym_for_info( through_model, name=f"{from_name}_id", sym_type=self.model_pk_instance.copy_modified() ) # Add the foreign key to the model on the opposite side of the relation # i.e. the model given as 'to' argument to the 'ManyToManyField' call: # or to_ to_name = ( f"to_{m2m_args.to.model.type.name.lower()}" if m2m_args.to.self else m2m_args.to.model.type.name.lower() ) helpers.add_new_sym_for_info( through_model, name=to_name, sym_type=Instance( self.fk_field, [ helpers.convert_any_to_type(self.fk_field_types.set, m2m_args.to.model), helpers.convert_any_to_type(self.fk_field_types.get, m2m_args.to.model), ], ), ) # Add the foreign key's '_id' field: _id or to__id other_pk = self.get_pk_instance(m2m_args.to.model.type) helpers.add_new_sym_for_info(through_model, name=f"{to_name}_id", sym_type=other_pk.copy_modified()) # Add a manager named 'objects' helpers.add_new_sym_for_info( through_model, name="objects", sym_type=Instance(self.manager_info, [Instance(through_model, [])]), is_classvar=True, ) # Also add manager as '_default_manager' attribute helpers.add_new_sym_for_info( through_model, name="_default_manager", sym_type=Instance(self.manager_info, [Instance(through_model, [])]), is_classvar=True, ) return through_model def resolve_many_to_many_arguments(self, call: CallExpr, /, context: Context) -> M2MArguments | None: """ Inspect a 'ManyToManyField(...)' call to collect argument data on any 'to' and 'through' arguments. """ to_arg = helpers.get_class_init_argument_by_name(call, "to") if to_arg is None: # 'to' is a required argument of 'ManyToManyField()', we can't do anything if it's not provided return None # Resolve the type of the 'to' argument expression to_model = helpers.get_model_from_expression( to_arg, self_model=self.model_classdef.info, api=self.api, django_context=self.django_context ) if to_model is None: return None to = M2MTo( arg=to_arg, model=to_model, self=to_model.type == self.model_classdef.info, ) # Resolve the type of the 'through' argument expression through_arg = helpers.get_class_init_argument_by_name(call, "through") through = None if through_arg is not None: through_model = helpers.get_model_from_expression( through_arg, self_model=self.model_classdef.info, api=self.api, django_context=self.django_context ) if through_model is not None: through = M2MThrough(arg=through_arg, model=through_model) return M2MArguments(to=to, through=through) def create_many_related_manager(self, model: Instance) -> None: """ Creates a generic manager that subclasses both 'ManyRelatedManager' and the default manager of the given model. These are normally used on both models involved in a ManyToManyField. The manager classes are generic over a '_Through' model, meaning that they can be reused for multiple many to many relations. """ if helpers.get_many_to_many_manager_info(self.api, to=model.type, derived_from="_default_manager") is not None: return default_manager_node = model.type.names.get("_default_manager") if default_manager_node is None: raise helpers.IncompleteDefnException() default_manager_type = get_proper_type(default_manager_node.type) if not isinstance(default_manager_type, Instance): return # Create a reusable generic subclass that is generic over a 'through' model, # explicitly declared it'd could have looked something like below # # class X(models.Model): ... # _Through = TypeVar("_Through", bound=models.Model) # class X_ManyRelatedManager(ManyRelatedManager[X, _Through], type(X._default_manager), Generic[_Through]): ... through_type_var = self.many_related_manager.defn.type_vars[1] assert isinstance(through_type_var, TypeVarType) generic_to_many_related_manager = Instance(self.many_related_manager, [model, through_type_var.copy_modified()]) related_manager_info = helpers.add_new_class_for_module( module=self.api.modules[model.type.module_name], name=f"{model.type.name}_ManyRelatedManager", bases=[generic_to_many_related_manager, default_manager_type], ) # Reuse the '_Through' `TypeVar` from `ManyRelatedManager` in our subclass related_manager_info.defn.type_vars = [through_type_var.copy_modified()] related_manager_info.add_type_vars() # Track the existence of our manager subclass, by tying it to the model it # operates on helpers.set_many_to_many_manager_info( to=model.type, derived_from="_default_manager", manager_info=related_manager_info ) class MetaclassAdjustments(ModelClassInitializer): @classmethod def adjust_model_class(cls, ctx: ClassDefContext, plugin_config: DjangoPluginConfig) -> None: """ For the sake of type checkers other than mypy, some attributes that are dynamically added by Django's model metaclass has been annotated on `django.db.models.base.Model`. We remove those attributes and will handle them through the plugin. Configurable with `strict_model_abstract_attrs = false` to skip removing any objects from models. Basically, this code:: from django.db import models def get_model_count(model_type: type[models.Model]) -> int: return model_type.objects.count() - Will raise an error `"type[models.Model]" has no attribute "objects" [attr-defined]` when `strict_model_abstract_attrs = true` (default) - Return without any type errors when `strict_model_abstract_attrs = false` But, beware that the code above can fail in runtime, as mypy correctly shows. Example: `get_model_count(models.Model)` Turn this setting off at your own risk. """ if not plugin_config.strict_model_abstract_attrs: return if ctx.cls.fullname != fullnames.MODEL_CLASS_FULLNAME: return for attr_name in ["DoesNotExist", "MultipleObjectsReturned", "objects"]: attr = ctx.cls.info.names.get(attr_name) if attr is not None and isinstance(attr.node, Var) and not attr.plugin_generated: del ctx.cls.info.names[attr_name] def get_exception_bases(self, name: str) -> list[Instance]: bases = [] for model_base in self.model_classdef.info.direct_base_classes(): exception_base_sym = model_base.names.get(name) if ( # Base class is a Model helpers.is_model_type(model_base) # But base class is not 'models.Model' and model_base.fullname != fullnames.MODEL_CLASS_FULLNAME # Base class also has a generated exception base e.g. 'DoesNotExist' and exception_base_sym is not None and exception_base_sym.plugin_generated and isinstance(exception_base_sym.node, TypeInfo) ): bases.append(Instance(exception_base_sym.node, [])) return bases def add_exception_classes(self) -> None: """ Adds exception classes 'DoesNotExist' and 'MultipleObjectsReturned' to a model type, aligned with how the model metaclass does it runtime. If the model is abstract, exceptions will be added as abstract attributes. """ if "DoesNotExist" not in self.model_classdef.info.names: object_does_not_exist = self.lookup_typeinfo_or_incomplete_defn_error(fullnames.OBJECT_DOES_NOT_EXIST) does_not_exist: Var | TypeInfo if self.is_model_abstract: does_not_exist = self.create_new_var("DoesNotExist", TypeType(Instance(object_does_not_exist, []))) does_not_exist.is_abstract_var = True else: does_not_exist = helpers.create_type_info( "DoesNotExist", self.model_classdef.info.fullname, self.get_exception_bases("DoesNotExist") or [Instance(object_does_not_exist, [])], ) self.model_classdef.info.names[does_not_exist.name] = SymbolTableNode( MDEF, does_not_exist, plugin_generated=True ) if "MultipleObjectsReturned" not in self.model_classdef.info.names: django_multiple_objects_returned = self.lookup_typeinfo_or_incomplete_defn_error( fullnames.MULTIPLE_OBJECTS_RETURNED ) multiple_objects_returned: Var | TypeInfo if self.is_model_abstract: multiple_objects_returned = self.create_new_var( "MultipleObjectsReturned", TypeType(Instance(django_multiple_objects_returned, [])) ) multiple_objects_returned.is_abstract_var = True else: multiple_objects_returned = helpers.create_type_info( "MultipleObjectsReturned", self.model_classdef.info.fullname, ( self.get_exception_bases("MultipleObjectsReturned") or [Instance(django_multiple_objects_returned, [])] ), ) self.model_classdef.info.names[multiple_objects_returned.name] = SymbolTableNode( MDEF, multiple_objects_returned, plugin_generated=True ) def run(self) -> None: self.add_exception_classes() def process_model_class(ctx: ClassDefContext, django_context: DjangoContext) -> None: initializers = [ AddAnnotateUtilities, InjectAnyAsBaseForNestedMeta, AddDefaultPrimaryKey, AddPrimaryKeyAlias, AddRelatedModelsId, AddManagers, AddDefaultManagerAttribute, AddReverseLookups, AddExtraFieldMethods, ProcessManyToManyFields, MetaclassAdjustments, ] for initializer_cls in initializers: try: initializer_cls(ctx, django_context).run() except helpers.IncompleteDefnException: if not ctx.api.final_iteration: ctx.api.defer() def set_auth_user_model_boolean_fields(ctx: AttributeContext, django_context: DjangoContext) -> MypyType: boolinfo = helpers.lookup_class_typeinfo(helpers.get_typechecker_api(ctx), bool) assert boolinfo is not None return Instance(boolinfo, []) def handle_annotated_type(ctx: AnalyzeTypeContext, fullname: str) -> MypyType: """ Replaces the 'WithAnnotations' type with a type that can represent an annotated model. """ is_with_annotations = fullname == fullnames.WITH_ANNOTATIONS_FULLNAME args = ctx.type.args if not args: return AnyType(TypeOfAny.from_omitted_generics) if is_with_annotations else ctx.type type_arg = get_proper_type(ctx.api.analyze_type(args[0])) if not isinstance(type_arg, Instance) or not helpers.is_model_type(type_arg.type): return type_arg fields_dict = None if len(args) > 1: second_arg_type = get_proper_type(ctx.api.analyze_type(args[1])) if isinstance(second_arg_type, TypedDictType) and is_with_annotations: fields_dict = second_arg_type elif isinstance(second_arg_type, Instance) and second_arg_type.type.fullname == ANNOTATIONS_FULLNAME: annotations_type_arg = get_proper_type(second_arg_type.args[0]) if isinstance(annotations_type_arg, TypedDictType): fields_dict = annotations_type_arg elif not isinstance(annotations_type_arg, AnyType): ctx.api.fail("Only TypedDicts are supported as type arguments to Annotations", ctx.context) elif annotations_type_arg.type_of_any == TypeOfAny.from_omitted_generics: ctx.api.fail("Missing required TypedDict parameter for generic type Annotations", ctx.context) if fields_dict is None: return type_arg assert isinstance(ctx.api, TypeAnalyser) assert isinstance(ctx.api.api, SemanticAnalyzer) return get_annotated_type(ctx.api.api, type_arg, fields_dict=fields_dict) def get_annotated_type( api: SemanticAnalyzer | TypeChecker, model_type: Instance, fields_dict: TypedDictType ) -> ProperType: """ Get a model type that can be used to represent an annotated model """ extra_attrs = helpers.merge_extra_attrs(model_type.extra_attrs, new_attrs=fields_dict.items) annotated_model: TypeInfo | None if helpers.is_annotated_model(model_type.type): annotated_model = model_type.type if model_type.args: annotations = get_proper_type(model_type.args[0]) if isinstance(annotations, TypedDictType): fields_dict = helpers.make_typeddict( api, fields={**annotations.items, **fields_dict.items}, required_keys={*annotations.required_keys, *fields_dict.required_keys}, readonly_keys={*annotations.readonly_keys, *fields_dict.readonly_keys}, ) else: annotated_model = helpers.lookup_fully_qualified_typeinfo(api, model_type.type.fullname + "@AnnotatedWith") if annotated_model is None: return model_type return Instance(annotated_model, [fields_dict], extra_attrs=extra_attrs) django-stubs-5.2.9/mypy_django_plugin/transformers/orm_lookups.py000066400000000000000000000047521513401051600255010ustar00rootroot00000000000000from mypy.plugin import MethodContext from mypy.types import AnyType, Instance, ProperType, TypeOfAny, get_proper_type from mypy.types import Type as MypyType from mypy_django_plugin.django.context import DjangoContext from mypy_django_plugin.exceptions import UnregisteredModelError from mypy_django_plugin.lib import fullnames, helpers def typecheck_queryset_filter(ctx: MethodContext, django_context: DjangoContext) -> MypyType: django_model = helpers.get_model_info_from_qs_ctx(ctx, django_context) if django_model is None: return ctx.default_return_type # Expected formal arguments for filter methods are `*args` and `**kwargs`. We'll only typecheck # `**kwargs`, which means that `arg_names[1]` is what we're interested in. lookup_kwargs = ctx.arg_names[1] if len(ctx.arg_names) >= 2 else [] provided_lookup_types = ctx.arg_types[1] if len(ctx.arg_types) >= 2 else [] for lookup_kwarg, provided_type in zip(lookup_kwargs, provided_lookup_types, strict=False): if lookup_kwarg is None: continue provided_type = get_proper_type(provided_type) if isinstance(provided_type, Instance) and provided_type.type.has_base( fullnames.COMBINABLE_EXPRESSION_FULLNAME ): provided_type = resolve_combinable_type(provided_type, django_context) lookup_type: MypyType try: lookup_type = django_context.resolve_lookup_expected_type( ctx, django_model.cls, lookup_kwarg, django_model.typ ) except UnregisteredModelError: lookup_type = AnyType(TypeOfAny.from_error) # Managers as provided_type is not supported yet if isinstance(provided_type, Instance) and helpers.has_any_of_bases( provided_type.type, (fullnames.MANAGER_CLASS_FULLNAME, fullnames.QUERYSET_CLASS_FULLNAME) ): return ctx.default_return_type helpers.check_types_compatible( ctx, expected_type=lookup_type, actual_type=provided_type, error_message=f"Incompatible type for lookup {lookup_kwarg!r}:", ) return ctx.default_return_type def resolve_combinable_type(combinable_type: Instance, django_context: DjangoContext) -> ProperType: if combinable_type.type.fullname != fullnames.F_EXPRESSION_FULLNAME: # Combinables aside from F expressions are unsupported return AnyType(TypeOfAny.explicit) return django_context.resolve_f_expression_type(combinable_type) django-stubs-5.2.9/mypy_django_plugin/transformers/querysets.py000066400000000000000000001046621513401051600251750ustar00rootroot00000000000000from collections.abc import Sequence from typing import Literal from django.core.exceptions import FieldDoesNotExist, FieldError from django.db.models.base import Model from django.db.models.fields.related import RelatedField from django.db.models.fields.related_descriptors import ( ForwardManyToOneDescriptor, ManyToManyDescriptor, ReverseManyToOneDescriptor, ReverseOneToOneDescriptor, ) from django.db.models.fields.reverse_related import ForeignObjectRel from mypy.checker import TypeChecker from mypy.errorcodes import NO_REDEF from mypy.nodes import ARG_NAMED, ARG_NAMED_OPT, ARG_STAR, CallExpr, Expression, ListExpr, SetExpr, TupleExpr from mypy.plugin import FunctionContext, MethodContext from mypy.types import AnyType, Instance, LiteralType, ProperType, TupleType, TypedDictType, TypeOfAny, get_proper_type from mypy.types import Type as MypyType from mypy_django_plugin.django.context import DjangoContext, LookupsAreUnsupported from mypy_django_plugin.lib import fullnames, helpers from mypy_django_plugin.lib.helpers import DjangoModel from mypy_django_plugin.transformers.models import get_annotated_type def determine_proper_manager_type(ctx: FunctionContext) -> MypyType: default_return_type = get_proper_type(ctx.default_return_type) assert isinstance(default_return_type, Instance) outer_model_info = helpers.get_typechecker_api(ctx).scope.active_class() if ( outer_model_info is None or not helpers.is_model_type(outer_model_info) or outer_model_info.self_type is None or not default_return_type.type.is_generic() ): return default_return_type return default_return_type.copy_modified(args=[outer_model_info.self_type]) def get_field_type_from_lookup( ctx: MethodContext, django_context: DjangoContext, model_cls: type[Model], *, method: str, lookup: str, silent_on_error: bool = False, ) -> MypyType | None: try: lookup_field, model_cls = django_context.resolve_lookup_into_field(model_cls, lookup) except FieldError as exc: if not silent_on_error: ctx.api.fail(exc.args[0], ctx.context) return None except LookupsAreUnsupported: return AnyType(TypeOfAny.explicit) if lookup_field is None: return AnyType(TypeOfAny.implementation_artifact) if (isinstance(lookup_field, RelatedField) and lookup_field.column == lookup) or isinstance( lookup_field, ForeignObjectRel ): model_cls = django_context.get_field_related_model_cls(lookup_field) lookup_field = django_context.get_primary_key_field(model_cls) api = helpers.get_typechecker_api(ctx) model_info = helpers.lookup_class_typeinfo(api, model_cls) return django_context.get_field_get_type(api, model_info, lookup_field, method=method) def get_values_list_row_type( ctx: MethodContext, django_context: DjangoContext, model_cls: type[Model], *, is_annotated: bool, flat: bool, named: bool, ) -> MypyType: field_lookups = resolve_field_lookups(ctx.args[0], django_context) if field_lookups is None: return AnyType(TypeOfAny.from_error) typechecker_api = helpers.get_typechecker_api(ctx) model_info = helpers.lookup_class_typeinfo(typechecker_api, model_cls) if len(field_lookups) == 0: if flat: primary_key_field = django_context.get_primary_key_field(model_cls) lookup_type = get_field_type_from_lookup( ctx, django_context, model_cls, lookup=primary_key_field.attname, method="values_list" ) assert lookup_type is not None return lookup_type if named: column_types: dict[str, MypyType] = {} for field in django_context.get_model_fields(model_cls): column_type = django_context.get_field_get_type( typechecker_api, model_info, field, method="values_list" ) column_types[field.attname] = column_type if is_annotated: # Return a NamedTuple with a fallback so that it's possible to access any field return helpers.make_oneoff_named_tuple( typechecker_api, "Row", column_types, extra_bases=[typechecker_api.named_generic_type(fullnames.ANY_ATTR_ALLOWED_CLASS_FULLNAME, [])], ) return helpers.make_oneoff_named_tuple(typechecker_api, "Row", column_types) # flat=False, named=False, all fields if is_annotated: return typechecker_api.named_generic_type("builtins.tuple", [AnyType(TypeOfAny.special_form)]) field_lookups = [] for field in django_context.get_model_fields(model_cls): field_lookups.append(field.attname) if len(field_lookups) > 1 and flat: typechecker_api.fail("'flat' is not valid when 'values_list' is called with more than one field", ctx.context) return AnyType(TypeOfAny.from_error) column_types = {} for field_lookup in field_lookups: lookup_field_type = get_field_type_from_lookup( ctx, django_context, model_cls, lookup=field_lookup, method="values_list", silent_on_error=is_annotated ) if lookup_field_type is None: if is_annotated: lookup_field_type = AnyType(TypeOfAny.from_omitted_generics) else: return AnyType(TypeOfAny.from_error) column_types[field_lookup] = lookup_field_type if flat: assert len(column_types) == 1 row_type = next(iter(column_types.values())) elif named: row_type = helpers.make_oneoff_named_tuple(typechecker_api, "Row", column_types) else: # Since there may have been repeated field lookups, we cannot just use column_types.values here. # This is not the case in named above, because Django will error if duplicate fields are requested. resolved_column_types = [column_types[field_lookup] for field_lookup in field_lookups] row_type = helpers.make_tuple(typechecker_api, resolved_column_types) return row_type def extract_proper_type_queryset_values_list(ctx: MethodContext, django_context: DjangoContext) -> MypyType: django_model = helpers.get_model_info_from_qs_ctx(ctx, django_context) if django_model is None: return ctx.default_return_type default_return_type = get_proper_type(ctx.default_return_type) if not isinstance(default_return_type, Instance): return ctx.default_return_type flat = helpers.get_bool_call_argument_by_name(ctx, "flat", default=False) named = helpers.get_bool_call_argument_by_name(ctx, "named", default=False) if flat and named: ctx.api.fail("'flat' and 'named' can't be used together", ctx.context) return default_return_type.copy_modified(args=[django_model.typ, AnyType(TypeOfAny.from_error)]) row_type = get_values_list_row_type( ctx, django_context, django_model.cls, is_annotated=django_model.is_annotated, flat=flat, named=named ) ret = default_return_type.copy_modified(args=[django_model.typ, row_type]) if not named and (field_lookups := resolve_field_lookups(ctx.args[0], django_context)): # For non-named values_list, the row type does not encode column names. # Attach selected field names to the returned QuerySet instance so that # subsequent annotate() can make an informed decision about name conflicts. ret.extra_attrs = helpers.merge_extra_attrs(ret.extra_attrs, new_immutable=set(field_lookups)) return ret def gather_kwargs(ctx: MethodContext) -> dict[str, MypyType] | None: num_args = len(ctx.arg_kinds) kwargs = {} named = (ARG_NAMED, ARG_NAMED_OPT) for i in range(num_args): if not ctx.arg_kinds[i]: continue if any(kind not in named for kind in ctx.arg_kinds[i]): # Only named arguments supported continue for j in range(len(ctx.arg_names[i])): name = ctx.arg_names[i][j] assert name is not None kwargs[name] = ctx.arg_types[i][j] return kwargs def gather_expression_types(ctx: MethodContext) -> dict[str, MypyType]: kwargs = gather_kwargs(ctx) if not kwargs: return {} # For now, we don't try to resolve the output_field of the field would be, but use Any. # NOTE: It's important that we use 'special_form' for 'Any' as otherwise we can # get stuck with mypy interpreting an overload ambiguity towards the # overloaded 'Field.__get__' method when its 'model' argument gets matched. This # is because the model argument gets matched with a model subclass that is # parametrized with a type that contains the 'Any' below and then mypy runs in # to a (false?) ambiguity, due to 'Any', and can't decide what overload/return # type to select # # Example: # class MyModel(models.Model): # field = models.CharField() # # # Our plugin auto generates the following subclass # class MyModel_WithAnnotations(MyModel, django_stubs_ext.Annotations[_Annotations]): # ... # # Assume # x = MyModel.objects.annotate(foo=F("id")).get() # reveal_type(x) # MyModel_WithAnnotations[TypedDict({"foo": Any})] # # Then, on an attribute access of 'field' like # reveal_type(x.field) # # Now 'CharField.__get__', which is overloaded, is passed 'x' as the 'model' # argument and mypy consider it ambiguous to decide which overload method to # select due to the 'Any' in 'TypedDict({"foo": Any})'. But if we specify the # 'Any' as 'TypeOfAny.special_form' mypy doesn't consider the model instance to # contain 'Any' and the ambiguity goes away. return {name: AnyType(TypeOfAny.special_form) for name, _ in kwargs.items()} def extract_proper_type_queryset_annotate(ctx: MethodContext, django_context: DjangoContext) -> MypyType: django_model = helpers.get_model_info_from_qs_ctx(ctx, django_context) if django_model is None: return AnyType(TypeOfAny.from_omitted_generics) default_return_type = get_proper_type(ctx.default_return_type) if not isinstance(default_return_type, Instance): return ctx.default_return_type api = helpers.get_typechecker_api(ctx) expression_types = { attr_name: typ for attr_name, typ in gather_expression_types(ctx).items() if check_valid_attr_value(ctx, django_context, django_model, attr_name) } annotated_type: ProperType = django_model.typ if expression_types: fields_dict = helpers.make_typeddict( api, fields=expression_types, required_keys=set(expression_types.keys()), readonly_keys=set(), ) annotated_type = get_annotated_type(api, django_model.typ, fields_dict=fields_dict) row_type: MypyType if len(default_return_type.args) > 1: original_row_type = get_proper_type(default_return_type.args[1]) row_type = original_row_type if isinstance(original_row_type, TypedDictType): row_type = api.named_generic_type( "builtins.dict", [api.named_generic_type("builtins.str", []), AnyType(TypeOfAny.from_omitted_generics)] ) elif isinstance(original_row_type, TupleType): if original_row_type.partial_fallback.type.has_base("typing.NamedTuple"): # TODO: Use a NamedTuple which contains the known fields, but also # falls back to allowing any attribute access. row_type = AnyType(TypeOfAny.implementation_artifact) else: row_type = api.named_generic_type("builtins.tuple", [AnyType(TypeOfAny.from_omitted_generics)]) elif isinstance(original_row_type, Instance) and helpers.is_model_type(original_row_type.type): row_type = annotated_type else: row_type = annotated_type return default_return_type.copy_modified(args=[annotated_type, row_type]) def resolve_field_lookups(lookup_exprs: Sequence[Expression], django_context: DjangoContext) -> list[str] | None: field_lookups = [] for field_lookup_expr in lookup_exprs: field_lookup = helpers.resolve_string_attribute_value(field_lookup_expr, django_context) if field_lookup is None: return None field_lookups.append(field_lookup) return field_lookups def extract_proper_type_queryset_values(ctx: MethodContext, django_context: DjangoContext) -> MypyType: """ Extract proper return type for QuerySet.values(*fields, **expressions) method calls. See https://docs.djangoproject.com/en/5.2/ref/models/querysets/#values """ django_model = helpers.get_model_info_from_qs_ctx(ctx, django_context) if django_model is None or django_model.is_annotated: return ctx.default_return_type default_return_type = get_proper_type(ctx.default_return_type) if not isinstance(default_return_type, Instance): return ctx.default_return_type field_lookups = resolve_field_lookups(ctx.args[0], django_context) if field_lookups is None: return AnyType(TypeOfAny.from_error) # Bare `.values()` case if len(field_lookups) == 0 and not ctx.args[1]: for field in django_context.get_model_fields(django_model.cls): field_lookups.append(field.attname) column_types: dict[str, MypyType] = {} # Collect `*fields` types -- `.values("id", "name")` for field_lookup in field_lookups: field_lookup_type = get_field_type_from_lookup( ctx, django_context, django_model.cls, lookup=field_lookup, method="values" ) if field_lookup_type is None: return default_return_type.copy_modified(args=[django_model.typ, AnyType(TypeOfAny.from_error)]) column_types[field_lookup] = field_lookup_type # Collect `**expressions` types -- `.values(lower_name=Lower("name"), foo=F("name"))` column_types.update(gather_expression_types(ctx)) row_type = helpers.make_typeddict(ctx.api, column_types, set(column_types.keys()), set()) return default_return_type.copy_modified(args=[django_model.typ, row_type]) def _infer_prefetch_queryset_type(queryset_expr: Expression, api: TypeChecker) -> Instance | None: """Infer the model Instance from `Prefetch(queryset=...)`""" try: qs_type = get_proper_type(api.expr_checker.accept(queryset_expr)) except Exception: return None if isinstance(qs_type, Instance): return qs_type return None def _resolve_prefetch_string_argument( type_arg: MypyType, expr: Expression | None, django_context: DjangoContext, arg_name: str, ) -> str | None: # First try to get value from specialized type arg arg_value = helpers.get_literal_str_type(type_arg) if arg_value is not None: return arg_value # Fallback: parse inline call expression if isinstance(expr, CallExpr): arg_expr = helpers.get_class_init_argument_by_name(expr, arg_name) if arg_expr: return helpers.resolve_string_attribute_value(arg_expr, django_context) return None def _resolve_prefetch_queryset_argument( type_arg: MypyType, expr: Expression | None, api: TypeChecker, ) -> Instance | None: # First try to get queryset type from specialized type arg queryset_type = get_proper_type(type_arg) if isinstance(queryset_type, Instance): elem_model = helpers.extract_model_type_from_queryset(queryset_type, api) # If we got a valid specific model type, return the queryset type if elem_model is not None and elem_model.type.fullname != fullnames.MODEL_CLASS_FULLNAME: return queryset_type # Fallback: parse inline call expression if isinstance(expr, CallExpr): queryset_expr = helpers.get_class_init_argument_by_name(expr, "queryset") if queryset_expr is not None: return _infer_prefetch_queryset_type(queryset_expr, api) return None def _specialize_string_arg_to_literal( ctx: FunctionContext, django_context: DjangoContext, arg_name: str, fallback_type: MypyType ) -> MypyType: """ Helper to specialize a string argument to a Literal[str] type. This allows the plugin to extract the actual string value for further processing and validation in later analysis phases. """ if arg_expr := helpers.get_call_argument_by_name(ctx, arg_name): if arg_value := helpers.resolve_string_attribute_value(arg_expr, django_context): api = helpers.get_typechecker_api(ctx) return LiteralType(value=arg_value, fallback=api.named_generic_type("builtins.str", [])) return fallback_type def specialize_prefetch_type(ctx: FunctionContext, django_context: DjangoContext) -> MypyType: """Function hook for `Prefetch(...)` to specialize its `lookup` and `to_attr` generic parameters.""" default = get_proper_type(ctx.default_return_type) if not isinstance(default, Instance): return ctx.default_return_type lookup_type = _specialize_string_arg_to_literal(ctx, django_context, "lookup", default.args[0]) to_attr_type = _specialize_string_arg_to_literal(ctx, django_context, "to_attr", default.args[2]) return default.copy_modified(args=[lookup_type, default.args[1], to_attr_type]) def gather_flat_args(ctx: MethodContext) -> list[tuple[Expression | None, ProperType]]: """ Flatten all arguments into a uniform list of (expr, typ) pairs. This helper iterates over positional and named arguments and expands any starred arguments when their type is a TupleType with statically known items. """ lookups: list[tuple[Expression | None, ProperType]] = [] arg_start_idx = 0 for expr, typ, kind in zip(ctx.args[0], ctx.arg_types[0], ctx.arg_kinds[0], strict=False): ptyp = get_proper_type(typ) if kind == ARG_STAR: # Expand starred tuple items if statically known if isinstance(ptyp, TupleType): lookups.append((None, get_proper_type(ptyp.items[arg_start_idx]))) # If not a TupleType (e.g. list/Iterable), we cannot expand statically arg_start_idx += 1 continue lookups.append((expr, ptyp)) return lookups def _get_selected_fields_from_queryset_type(qs_type: Instance) -> set[str] | None: """ Derive selected field names from a QuerySet type. Sources: - values(): encoded in the row TypedDict keys - values_list(named=True): row is a NamedTuple; extract field names from fallback TypeInfo - values_list(named=False): stored in qs_type.extra_attrs.immutable """ if len(qs_type.args) > 1: row_type = get_proper_type(qs_type.args[1]) if isinstance(row_type, Instance) and helpers.is_model_type(row_type.type): return None if isinstance(row_type, TypedDictType): return set(row_type.items.keys()) if isinstance(row_type, TupleType): if row_type.partial_fallback.type.has_base("typing.NamedTuple"): return {name for name, sym in row_type.partial_fallback.type.names.items() if sym.plugin_generated} return set() return set() # Fallback to explicit metadata attached to the QuerySet Instance if qs_type.extra_attrs and qs_type.extra_attrs.immutable and isinstance(qs_type.extra_attrs.immutable, set): return qs_type.extra_attrs.immutable return None def check_valid_attr_value( ctx: MethodContext, django_context: DjangoContext, model: DjangoModel, attr_name: str, *, new_attr_names: set[str] | None = None, ) -> bool: """ Check if adding `attr_name` would conflict with existing symbols on `model`. Args: - model: The Django model being analyzed - attr_name: The name of the attribute to be added - new_attr_names: A mapping of field names to types currently being added to the model """ deselected_fields: set[str] | None = None if isinstance(ctx.type, Instance): selected_fields = _get_selected_fields_from_queryset_type(ctx.type) if selected_fields is not None: model_field_names = {f.name for f in django_context.get_model_fields(model.cls)} deselected_fields = model_field_names - selected_fields new_attr_names = new_attr_names or set() new_attr_names.update(selected_fields - model_field_names) is_conflicting_attr_value = bool( # 1. Conflict with another symbol on the model (If not de-selected via a prior .values/.values_list call). # Ex: # User.objects.prefetch_related(Prefetch(..., to_attr="id")) (model.typ.type.get(attr_name) and (deselected_fields is None or attr_name not in deselected_fields)) # 2. Conflict with a previous annotation. # Ex: # User.objects.annotate(foo=...).prefetch_related(Prefetch(...,to_attr="foo")) # User.objects.prefetch_related(Prefetch(...,to_attr="foo")).prefetch_related(Prefetch(...,to_attr="foo")) or (model.typ.extra_attrs and attr_name in model.typ.extra_attrs.attrs) # 3. Conflict with another symbol added in the current processing. # Ex: # User.objects.prefetch_related( # Prefetch("groups", Group.objects.filter(name="test"), to_attr="new_attr"), # Prefetch("groups", Group.objects.all(), to_attr="new_attr"), # E: Not OK! # ) or (new_attr_names is not None and attr_name in new_attr_names) ) if is_conflicting_attr_value: ctx.api.fail( f'Attribute "{attr_name}" already defined on "{model.typ}"', ctx.context, code=NO_REDEF, ) return not is_conflicting_attr_value def check_valid_prefetch_related_lookup( ctx: MethodContext, lookup: str, django_model: DjangoModel, django_context: DjangoContext, *, is_generic_prefetch: bool = False, ) -> bool: """Check if a lookup string resolve to something that can be prefetched""" current_model_cls = django_model.cls contenttypes_installed = django_context.apps_registry.is_installed("django.contrib.contenttypes") for through_attr in lookup.split("__"): rel_obj_descriptor = getattr(current_model_cls, through_attr, None) if rel_obj_descriptor is None: ctx.api.fail( ( f'Cannot find "{through_attr}" on "{current_model_cls.__name__}" object, ' f'"{lookup}" is an invalid parameter to "prefetch_related()"' ), ctx.context, ) return False if contenttypes_installed and is_generic_prefetch: from django.contrib.contenttypes.fields import GenericForeignKey if not isinstance(rel_obj_descriptor, GenericForeignKey): ctx.api.fail( f'"{through_attr}" on "{current_model_cls.__name__}" is not a GenericForeignKey, ' f"GenericPrefetch can only be used with GenericForeignKey fields", ctx.context, ) return True elif isinstance(rel_obj_descriptor, ForwardManyToOneDescriptor): current_model_cls = rel_obj_descriptor.field.remote_field.model elif isinstance(rel_obj_descriptor, ReverseOneToOneDescriptor): current_model_cls = rel_obj_descriptor.related.related_model # type:ignore[assignment] # Can't be 'self' for non abstract models elif isinstance(rel_obj_descriptor, ManyToManyDescriptor): current_model_cls = ( rel_obj_descriptor.rel.related_model if rel_obj_descriptor.reverse else rel_obj_descriptor.rel.model # type:ignore[assignment] # Can't be 'self' for non abstract models ) elif isinstance(rel_obj_descriptor, ReverseManyToOneDescriptor): if contenttypes_installed: from django.contrib.contenttypes.fields import ReverseGenericManyToOneDescriptor if isinstance(rel_obj_descriptor, ReverseGenericManyToOneDescriptor): current_model_cls = rel_obj_descriptor.rel.model continue current_model_cls = rel_obj_descriptor.rel.related_model # type:ignore[assignment] # Can't be 'self' for non abstract models else: if contenttypes_installed: from django.contrib.contenttypes.fields import GenericForeignKey if isinstance(rel_obj_descriptor, GenericForeignKey): # Generic foreign keys can point to any model, so we use Model as the base type return True ctx.api.fail( ( f'"{lookup}" does not resolve to an item that supports prefetching ' '- this is an invalid parameter to "prefetch_related()"' ), ctx.context, ) return False return True def check_conflicting_lookups( ctx: MethodContext, observed_attr: str, qs_types: dict[str, Instance | None], queryset_type: Instance | None, ) -> bool: is_conflicting_lookup = bool(observed_attr in qs_types and qs_types[observed_attr] != queryset_type) if is_conflicting_lookup: ctx.api.fail( f'Lookup "{observed_attr}" was already seen with a different queryset', ctx.context, code=NO_REDEF, ) return is_conflicting_lookup def extract_prefetch_related_annotations(ctx: MethodContext, django_context: DjangoContext) -> MypyType: """ Extract annotated attributes via `prefetch_related(Prefetch(..., to_attr=...))` See https://docs.djangoproject.com/en/5.2/ref/models/querysets/#prefetch-objects """ api = helpers.get_typechecker_api(ctx) if not ( isinstance(ctx.type, Instance) and isinstance((default_return_type := get_proper_type(ctx.default_return_type)), Instance) and (qs_model := helpers.get_model_info_from_qs_ctx(ctx, django_context)) is not None and ctx.args and ctx.arg_types and ctx.arg_types[0] # Only process the correct overload, i.e. # def prefetch_related(self, *lookups: str | Prefetch[_PrefetchedQuerySetT, _ToAttrT]) -> Self: ... and None not in ctx.callee_arg_names ): return ctx.default_return_type new_attrs: dict[str, MypyType] = {} # A mapping of field_name / types to add to the model qs_types: dict[str, Instance | None] = {} # A mapping of field_name / associated queryset type for expr, typ in gather_flat_args(ctx): if not (isinstance(typ, Instance) and typ.type.has_base(fullnames.PREFETCH_CLASS_FULLNAME)): # Handle plain string lookups (not Prefetch instances) lookup = helpers.get_literal_str_type(typ) queryset_type = None if lookup is not None: check_valid_prefetch_related_lookup(ctx, lookup, qs_model, django_context) check_conflicting_lookups(ctx, lookup, qs_types, queryset_type) qs_types[lookup] = queryset_type continue # 1) Extract lookup value from specialized type arg or call expression lookup = _resolve_prefetch_string_argument(typ.args[0], expr, django_context, "lookup") # 2) Extract to_attr value from specialized type arg or call expression to_attr = _resolve_prefetch_string_argument(typ.args[2], expr, django_context, "to_attr") if to_attr is None and lookup is None: continue # 3.a) Determine queryset type from specialized type arg or call expression queryset_type = _resolve_prefetch_queryset_argument(typ.args[1], expr, api) # 3.b) Extract model type from queryset type (or from the lookup value) elem_model: Instance | None = None if queryset_type is not None and isinstance(queryset_type, Instance): elem_model = helpers.extract_model_type_from_queryset(queryset_type, api) elif lookup: try: observed_model_cls = django_context.resolve_lookup_into_field(qs_model.cls, lookup)[1] if model_info := helpers.lookup_class_typeinfo(api, observed_model_cls): elem_model = Instance(model_info, []) except (FieldError, LookupsAreUnsupported): pass if to_attr and check_valid_attr_value( ctx, django_context, qs_model, to_attr, new_attr_names=set(new_attrs.keys()) ): new_attrs[to_attr] = api.named_generic_type( "builtins.list", [elem_model if elem_model is not None else AnyType(TypeOfAny.special_form)], ) qs_types[to_attr] = queryset_type if not to_attr and lookup: check_valid_prefetch_related_lookup( ctx, lookup, qs_model, django_context, is_generic_prefetch=typ.type.has_base(fullnames.GENERIC_PREFETCH_CLASS_FULLNAME), ) check_conflicting_lookups(ctx, lookup, qs_types, queryset_type) qs_types[lookup] = queryset_type if not new_attrs: return ctx.default_return_type fields_dict = helpers.make_typeddict( api, fields=new_attrs, required_keys=set(new_attrs.keys()), readonly_keys=set(), ) annotated_model = get_annotated_type(api, qs_model.typ, fields_dict=fields_dict) # Keep row shape; if row is a model instance, update it to annotated # Todo: consolidate with `extract_proper_type_queryset_annotate` row handling above. if len(default_return_type.args) > 1: original_row = get_proper_type(default_return_type.args[1]) row_type: MypyType = original_row if isinstance(original_row, Instance) and helpers.is_model_type(original_row.type): row_type = annotated_model else: row_type = annotated_model return default_return_type.copy_modified(args=[annotated_model, row_type]) def _get_select_related_field_choices(model_cls: type[Model]) -> set[str]: """ Get valid field choices for select_related lookups. Based on Django's SQLCompiler.get_related_selections._get_field_choices method. """ opts = model_cls._meta # Direct relation fields (forward relations) direct_choices = (f.name for f in opts.fields if f.is_relation) # Reverse relation fields (backward relations with unique=True) reverse_choices = (f.field.related_query_name() for f in opts.related_objects if f.field.unique) return {*direct_choices, *reverse_choices} def _validate_select_related_lookup( ctx: MethodContext, django_context: DjangoContext, model_cls: type[Model], lookup: str, ) -> bool: """Validate a single select_related lookup string.""" if not lookup.strip(): ctx.api.fail( f'Invalid field name "{lookup}" in select_related lookup', ctx.context, ) return False lookup_parts = lookup.split("__") observed_model = model_cls for i, part in enumerate(lookup_parts): valid_choices = _get_select_related_field_choices(observed_model) if part not in valid_choices: ctx.api.fail( f'Invalid field name "{part}" in select_related lookup. ' f"Choices are: {', '.join(sorted(valid_choices)) or '(none)'}", ctx.context, ) return False if i < len(lookup_parts) - 1: # Not the last part try: field, observed_model = django_context.resolve_lookup_into_field(observed_model, part) if field is None: return False except (FieldError, LookupsAreUnsupported): # For good measure, but we should never reach this since we already validated the part name return False return True def validate_select_related(ctx: MethodContext, django_context: DjangoContext) -> MypyType: """ Validates that all lookup strings passed to select_related() resolve to actual model fields and relations. Extracted and adapted from `django.db.models.sql.compiler.SQLCompiler.get_related_selections` """ if not ( isinstance(ctx.type, Instance) and (django_model := helpers.get_model_info_from_qs_ctx(ctx, django_context)) is not None and ctx.arg_types and ctx.arg_types[0] ): return ctx.default_return_type for lookup_type in ctx.arg_types[0]: lookup_value = helpers.get_literal_str_type(get_proper_type(lookup_type)) if lookup_value is not None: _validate_select_related_lookup(ctx, django_context, django_model.cls, lookup_value) return ctx.default_return_type def _validate_bulk_update_field( ctx: MethodContext, model_cls: type[Model], field_name: str, method: Literal["bulk_update", "abulk_update"] ) -> bool: opts = model_cls._meta try: field = opts.get_field(field_name) except FieldDoesNotExist as e: ctx.api.fail(str(e), ctx.context) return False if not field.concrete or field.many_to_many: ctx.api.fail(f'"{method}()" can only be used with concrete fields. Got "{field_name}"', ctx.context) return False all_pk_fields = set(getattr(opts, "pk_fields", [opts.pk])) for parent in getattr(opts, "all_parents", opts.get_parent_list()): all_pk_fields.update(getattr(parent._meta, "pk_fields", [parent._meta.pk])) if field in all_pk_fields: ctx.api.fail(f'"{method}()" cannot be used with primary key fields. Got "{field_name}"', ctx.context) return False return True def validate_bulk_update( ctx: MethodContext, django_context: DjangoContext, method: Literal["bulk_update", "abulk_update"] ) -> MypyType: """ Type check the `fields` argument passed to `QuerySet.bulk_update(...)`. Extracted and adapted from `django.db.models.query.QuerySet.bulk_update` Mirrors tests from `django/tests/queries/test_bulk_update.py` """ if not ( isinstance(ctx.type, Instance) and (django_model := helpers.get_model_info_from_qs_ctx(ctx, django_context)) is not None and len(ctx.args) >= 2 and ctx.args[1] and isinstance((fields_args := ctx.args[1][0]), (ListExpr, TupleExpr, SetExpr)) ): return ctx.default_return_type if len(fields_args.items) == 0: ctx.api.fail(f'Field names must be given to "{method}()"', ctx.context) return ctx.default_return_type for field_arg in fields_args.items: field_name = helpers.resolve_string_attribute_value(field_arg, django_context) if field_name is not None: _validate_bulk_update_field(ctx, django_model.cls, field_name, method) return ctx.default_return_type django-stubs-5.2.9/mypy_django_plugin/transformers/request.py000066400000000000000000000006231513401051600246110ustar00rootroot00000000000000from mypy.plugin import MethodContext from mypy.types import Type as MypyType from mypy.types import UninhabitedType, get_proper_type def check_querydict_is_mutable(ctx: MethodContext) -> MypyType: ret_type = get_proper_type(ctx.default_return_type) if isinstance(ret_type, UninhabitedType): ctx.api.fail("This QueryDict is immutable.", ctx.context) return ctx.default_return_type django-stubs-5.2.9/mypy_django_plugin/transformers/settings.py000066400000000000000000000035701513401051600247650ustar00rootroot00000000000000from mypy.nodes import MemberExpr from mypy.plugin import AttributeContext from mypy.types import AnyType, TypeOfAny from mypy.types import Type as MypyType from mypy_django_plugin.config import DjangoPluginConfig from mypy_django_plugin.django.context import DjangoContext from mypy_django_plugin.lib import helpers def get_type_of_settings_attribute( ctx: AttributeContext, django_context: DjangoContext, plugin_config: DjangoPluginConfig ) -> MypyType: if not isinstance(ctx.context, MemberExpr): return ctx.default_attr_type setting_name = ctx.context.name typechecker_api = helpers.get_typechecker_api(ctx) # first look for the setting in the project settings file, then global settings settings_module = typechecker_api.modules.get(django_context.django_settings_module) global_settings_module = typechecker_api.modules.get("django.conf.global_settings") for module in [settings_module, global_settings_module]: if module is not None: sym = module.names.get(setting_name) if sym is not None: if sym.type is None: # When analysing a function, mypy will defer analysis to a later pass typechecker_api.handle_cannot_determine_type(setting_name, ctx.context) return ctx.default_attr_type return sym.type # Now, we want to check if this setting really exist in runtime. # If it does, we just return `Any`, not to raise any false-positives. # But, we cannot reconstruct the exact runtime type. # See https://github.com/typeddjango/django-stubs/pull/1163 if not plugin_config.strict_settings and hasattr(django_context.settings, setting_name): return AnyType(TypeOfAny.implementation_artifact) ctx.api.fail(f"'Settings' object has no attribute {setting_name!r}", ctx.context) return ctx.default_attr_type django-stubs-5.2.9/pyproject.toml000066400000000000000000000105371513401051600170450ustar00rootroot00000000000000[project] name = "django-stubs" version = "5.2.9" description = "Mypy stubs for Django" readme = "README.md" license = "MIT" license-files = ["LICENSE.md"] requires-python = ">=3.10" authors = [ { name = "Maksim Kurnikov", email = "maxim.kurnikov@gmail.com" }, ] maintainers = [ { name = "Marti Raudsepp", email = "marti@juffo.org" }, { name = "Nikita Sobolev", email = "mail@sobolevn.me" }, { name = "Petter Friberg", email = "petter_friberg@hotmail.com" }, { name = "Adam Johnson", email = "me@adamj.eu" }, ] classifiers = [ "Operating System :: OS Independent", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", "Typing :: Typed", "Framework :: Django", "Framework :: Django :: 5.0", "Framework :: Django :: 5.1", "Framework :: Django :: 5.2", ] dependencies = [ "django", "django-stubs-ext>=5.2.9", "tomli; python_version < '3.11'", # Types: "types-pyyaml", "typing-extensions>=4.11.0", ] [project.optional-dependencies] compatible-mypy = ["mypy>=1.13,<1.20"] oracle = ["oracledb"] redis = ["redis", "types-redis"] [dependency-groups] tests = [ # Dev tools: "pytest==9.0.2", "pytest-mypy-plugins==3.2.0", "pytest-shard==0.1.2", "pytest-xdist==3.8.0", # Django deps: "django==5.2.10", "mysqlclient==2.2.7", "psycopg2-binary==2.9.11", "jinja2==3.1.6", "pyyaml==6.0.3", # typing: "django-stubs[compatible-mypy,oracle,redis]", ] pyright = [ "pyright==1.1.408", ] pyrefly = [ "pyrefly==0.48.0", ] dev = [ {include-group = "tests"}, {include-group = "pyright"}, {include-group = "pyrefly"}, ] [project.urls] Homepage = "https://github.com/typeddjango/django-stubs" Funding = "https://github.com/sponsors/typeddjango" "Release notes" = "https://github.com/typeddjango/django-stubs/releases" [tool.uv.sources] django-stubs = { workspace = true } django-stubs-ext = { workspace = true } [tool.uv.workspace] members = ["ext"] [build-system] requires = ["uv_build>=0.9.9,<0.10.0"] build-backend = "uv_build" [tool.uv.build-backend] module-name = ["django-stubs", "mypy_django_plugin"] module-root = "" [tool.codespell] ignore-words-list = "aadd,acount,nam,asend" [tool.ruff] # Adds to default excludes: https://ruff.rs/docs/settings/#exclude line-length = 120 target-version = "py310" [tool.ruff.lint] # See Rules in Ruff documentation: https://beta.ruff.rs/docs/rules/ select = [ "B", # bugbear "E", # pycodestyle "F", # pyflakes "FURB", # refurb "INP", # flake8-tidy-imports "W", # pycodestyle "I", # isort "ISC001", # Implicitly concatenated string literals on one line "ISC002", # Implicitly concatenated string literals over multiple lines "UP", # pyupgrade "TID251", # Disallowed imports (flake8-tidy-imports.banned-api) "PYI", # flake8-pyi "RUF100", # Equivalent to flake8-noqa NQA103 "PGH004", # Equivalent to flake8-noqa NQA104 "PGH003", # Disallowed blanket `type: ignore` annotations. "RET504", # Unnecessary assignment to {name} before return statement "RET505", # Unnecessary {branch} after return statement "RET506", # Unnecessary {branch} after raise statement "RET507", # Unnecessary {branch} after continue statement "RET508", # Unnecessary {branch} after break statement "RUF", # Ruff specific rules "TC", # flake8-type-checking ] ignore = [ "PYI021", # We have a few meaningful docstrings for stubs only constructs/utilities. "PYI041", # This might not be obvious that `float | int` is mostly equivalent to `float` typing wise | int | str "PYI043", ] [tool.ruff.lint.per-file-ignores] "*.pyi" = [ "B", "E501", "E741", "E743", "F403", # Use wildcard import "F405", "F822", "F821", ] "tests/*.py" = ["INP001", "PGH003", "RUF012"] "ext/tests/*.py" = ["INP001"] "setup.py" = ["INP001"] [tool.ruff.lint.flake8-tidy-imports.banned-api] "_typeshed.Self".msg = "Use typing_extensions.Self (PEP 673) instead. If you type a metaclass, add a noqa" "typing.assert_type".msg = "Only available in Python 3.11 and above. Use `typing_extensions.assert_type` instead." "typing.Self".msg = "Only available in Python 3.11 and above. Use `typing_extensions.Self` instead." [tool.ruff.lint.isort] known-first-party = ["django_stubs_ext", "mypy_django_plugin"] split-on-trailing-comma = false django-stubs-5.2.9/pyrefly.toml000066400000000000000000000001331513401051600165070ustar00rootroot00000000000000# Respect only `# pyrefly: ignore` (ignore `# type: ignore`) enabled-ignores = ["pyrefly"] django-stubs-5.2.9/pyrightconfig.json000066400000000000000000000012161513401051600176720ustar00rootroot00000000000000{ "$schema": "https://raw.githubusercontent.com/microsoft/pyright/main/packages/vscode-pyright/schemas/pyrightconfig.schema.json", "include": [ "django-stubs", "ext/django_stubs_ext", "mypy_django_plugin", "scripts", ], "exclude": [ ".github", ".mypy_cache", "build", // test cases use a custom config file "tests/", ], "typeCheckingMode": "strict", "reportMissingTypeArgument": "warning", // Stubs are allowed to use private variables "reportPrivateUsage": "none", "stubPath": ".", "pythonVersion": "3.8", "pythonPlatform": "All", } django-stubs-5.2.9/pyrightconfig.testcases.json000066400000000000000000000020751513401051600216730ustar00rootroot00000000000000{ "$schema": "https://raw.githubusercontent.com/microsoft/pyright/main/packages/vscode-pyright/schemas/pyrightconfig.schema.json", "include": [ "tests/assert_type/" ], "typeCheckingMode": "strict", // Extra strict settings "reportShadowedImports": "error", // Don't accidentally name a file something that shadows stdlib "reportImplicitStringConcatenation": "error", "reportUninitializedInstanceVariable": "error", "reportUnnecessaryTypeIgnoreComment": "error", // Don't use '# type: ignore' to suppress with pyright "enableTypeIgnoreComments": false, // If a test case uses this anti-pattern, there's likely a reason and annoying to `type: ignore`. // Let Ruff flag it (B006) "reportCallInDefaultInitializer": "none", // Too strict and not needed for type testing "reportMissingSuperCall": "none", // Stubs are allowed to use private variables. We may want to test those. "reportPrivateUsage": "none", // Stubs don't need the actual modules to be installed "reportMissingModuleSource": "none", } django-stubs-5.2.9/pytest.ini000066400000000000000000000003611513401051600161540ustar00rootroot00000000000000[pytest] testpaths = ./tests ./ext/tests addopts = --tb=native -s -v --cache-clear --mypy-ini-file=mypy.ini --mypy-extension-hook=scripts.tests_extension_hook.django_plugin_hook --ignore=tests/assert_type django-stubs-5.2.9/scripts/000077500000000000000000000000001513401051600156125ustar00rootroot00000000000000django-stubs-5.2.9/scripts/__init__.py000066400000000000000000000000001513401051600177110ustar00rootroot00000000000000django-stubs-5.2.9/scripts/django_tests_settings.py000066400000000000000000000005561513401051600225760ustar00rootroot00000000000000# It is used in `mypy.ini` only. # The following installed apps are required for stubtest to run correctly. INSTALLED_APPS = [ "django.contrib.auth", "django.contrib.admin", "django.contrib.contenttypes", "django.contrib.flatpages", "django.contrib.redirects", "django.contrib.sessions", "django.contrib.sites", ] STATIC_URL = "static/" django-stubs-5.2.9/scripts/stubtest.sh000077500000000000000000000005371513401051600200330ustar00rootroot00000000000000#!/bin/sh # Run this script with `./scripts/stubtest.sh` set -e export MYPYPATH='.' # Cleaning existing cache: rm -rf .mypy_cache stubtest django \ --mypy-config-file mypy.ini \ --allowlist scripts/stubtest/allowlist.txt \ --allowlist scripts/stubtest/allowlist_todo.txt \ --allowlist scripts/stubtest/allowlist_todo_django52.txt django-stubs-5.2.9/scripts/stubtest/000077500000000000000000000000001513401051600174675ustar00rootroot00000000000000django-stubs-5.2.9/scripts/stubtest/allowlist.txt000066400000000000000000000320561513401051600222500ustar00rootroot00000000000000# This is a true allow list with things that we really don't care about. # `allowlist_todo.txt` and `allowlist_todo_django50` # are autogenerated by `stubtest --generate-allowlist` # and might contain actual problems and things that we *do want* to fix. # # Please, move things here when you are sure that they really should be ignored. # Comments about why things are ignored are mandatory. # We don't need locales: django.conf.locale.* # We don't need migrations: django.contrib.admin.migrations.* django.contrib.auth.migrations.* django.contrib.contenttypes.migrations.* django.contrib.flatpages.migrations.* django.contrib.redirects.migrations.* django.contrib.sessions.migrations.* django.contrib.sites.migrations.* # default_storage is actually an instance of DefaultStorage, but it proxies through to a Storage django.core.files.storage.default_storage # '_RelatedManager' entries are plugin generated and these subclasses only exist # _locally/dynamically_ runtime -- Created via # 'django.db.models.fields.related_descriptors.create_reverse_many_to_one_manager' django.contrib.admin.models.LogEntry_RelatedManager django.contrib.auth.models.Permission_RelatedManager # '_ManyRelatedManager' entries are plugin generated and these subclasses only exist # _locally/dynamically_ runtime -- Created via # 'django.db.models.fields.related_descriptors.create_forward_many_to_many_manager' django.contrib.auth.models.Group_ManyRelatedManager django.contrib.auth.models.Permission_ManyRelatedManager django.contrib.auth.models.User_ManyRelatedManager # BaseArchive abstract methods that take no argument, but typed with arguments to match the Archive and TarArchive Implementations django.utils.archive.BaseArchive.list django.utils.archive.BaseArchive.extract # ImmutableList always raise when calling these, # later they can be added with `-> NoReturn` overrides. django.utils.datastructures.ImmutableList.__delitem__ django.utils.datastructures.ImmutableList.__delslice__ django.utils.datastructures.ImmutableList.__iadd__ django.utils.datastructures.ImmutableList.__imul__ django.utils.datastructures.ImmutableList.__setitem__ django.utils.datastructures.ImmutableList.__setslice__ django.utils.datastructures.ImmutableList.append django.utils.datastructures.ImmutableList.extend django.utils.datastructures.ImmutableList.insert django.utils.datastructures.ImmutableList.pop django.utils.datastructures.ImmutableList.remove django.utils.datastructures.ImmutableList.sort django.utils.datastructures.ImmutableList.reverse # Promise is lazy, see notes in .pyi django.utils.functional.Promise.__init__ django.utils.functional.Promise.__add__ django.utils.functional.Promise.__deepcopy__ django.utils.functional.Promise.__radd__ django.utils.functional.Promise.__mod__ # `classonlymethod` is an alias for `@classmethod` which is disjoint: django.utils.decorators.classonlymethod # Lazy regex django.contrib.admin.utils.UNQUOTE_RE django.contrib.gis.geometry.hex_regex django.contrib.gis.geometry.json_regex django.contrib.gis.geometry.wkt_regex django.contrib.gis.geos.hex_regex django.contrib.gis.geos.wkt_regex django.core.cache.backends.base.memcached_error_chars_re django.core.validators.EmailValidator.domain_regex django.core.validators.EmailValidator.literal_regex django.core.validators.EmailValidator.user_regex django.core.validators.slug_re django.core.validators.slug_unicode_re django.core.validators.URLValidator.regex django.core.management.commands.makemessages.plural_forms_re django.core.management.commands.runserver.naiveip_re django.http.request.host_validation_re django.middleware.csrf.invalid_token_chars_re django.template.base.filter_re django.template.base.kwarg_re django.test.client.CONTENT_TYPE_RE django.test.client.JSON_CONTENT_TYPE_RE django.test.html.ASCII_WHITESPACE django.utils.dateformat.re_escaped django.utils.dateformat.re_formatchars django.utils.dateparse.date_re django.utils.dateparse.datetime_re django.utils.dateparse.iso8601_duration_re django.utils.dateparse.postgres_interval_re django.utils.dateparse.standard_duration_re django.utils.dateparse.time_re django.utils.http.ASCTIME_DATE django.utils.http.ETAG_MATCH django.utils.http.RFC1123_DATE django.utils.http.RFC850_DATE django.utils.text.re_newlines django.utils.text.re_camel_case django.utils.text.smart_split_re django.utils.translation.trans_real.language_code_re django.utils.translation.trans_real.language_code_prefix_re django.utils.translation.trans_real.accept_language_re django.utils.translation.template.plural_re django.utils.translation.template.inline_re django.utils.translation.template.endblock_re django.utils.translation.template.dot_re django.utils.translation.template.context_re django.utils.translation.template.constant_re django.utils.translation.template.block_re django.utils.version.version_component_re django.views.debug.SafeExceptionReporterFilter.hidden_settings django.http.multipartparser.MultiPartParser.boundary_re # AlterTogetherOptionOperation.option_name is set as None, # but is required in the init, so we type it as str django.db.migrations.operations.models.AlterTogetherOptionOperation.option_name # These are set to None in the base class but *must* be overridden # because they are required in the init, so we type them without the None option. django.db.backends.base.base.BaseDatabaseWrapper.SchemaEditorClass django.db.backends.base.base.BaseDatabaseWrapper.client_class django.db.backends.base.base.BaseDatabaseWrapper.creation_class django.db.backends.base.base.BaseDatabaseWrapper.features_class django.db.backends.base.base.BaseDatabaseWrapper.introspection_class django.db.backends.base.base.BaseDatabaseWrapper.ops django.db.backends.base.base.BaseDatabaseWrapper.ops_class # Attributes defaulting to None messing with mypy django.views.generic.detail.SingleObjectMixin.model django.views.generic.edit.BaseDeleteView.form_class # Dynamically added via django.core.management.color.make_style django.core.management.color.Style.ERROR django.core.management.color.Style.ERROR_OUTPUT django.core.management.color.Style.HTTP_BAD_REQUEST django.core.management.color.Style.HTTP_INFO django.core.management.color.Style.HTTP_NOT_FOUND django.core.management.color.Style.HTTP_NOT_MODIFIED django.core.management.color.Style.HTTP_REDIRECT django.core.management.color.Style.HTTP_SERVER_ERROR django.core.management.color.Style.HTTP_SUCCESS django.core.management.color.Style.MIGRATE_HEADING django.core.management.color.Style.MIGRATE_LABEL django.core.management.color.Style.NOTICE django.core.management.color.Style.SQL_COLTYPE django.core.management.color.Style.SQL_FIELD django.core.management.color.Style.SQL_KEYWORD django.core.management.color.Style.SQL_TABLE django.core.management.color.Style.SUCCESS django.core.management.color.Style.WARNING # We re-export `functools.cached_property` which has different semantics django.utils.functional.cached_property.__class_getitem__ django.utils.functional.cached_property.__set__ django.utils.functional.cached_property.name # Ignore missing inner `Meta` class, see PR #2000 for the related discussion django.contrib.auth.base_user.AbstractBaseUser.Meta django.contrib.auth.forms.BaseUserCreationForm.Meta django.contrib.auth.forms.UserChangeForm.Meta django.contrib.auth.models.AbstractBaseUser.Meta django.contrib.auth.models.AbstractUser.Meta django.contrib.auth.models.PermissionsMixin.Meta django.contrib.flatpages.forms.FlatpageForm.Meta django.contrib.sessions.base_session.AbstractBaseSession.Meta # Custom __str__ that we don't want to overcomplicate: django.forms.utils.RenderableMixin.__str__ django.forms.utils.RenderableMixin.__html__ # Dynamically added in ManyToManyField.contribute_to_class() django.db.models.ManyToManyField.m2m_db_table django.db.models.fields.related.ManyToManyField.m2m_db_table django.contrib.gis.db.models.ManyToManyField.m2m_db_table # Dynamically added in ManyToManyField.contribute_to_related_class() django.db.models.ManyToManyField.m2m_column_name django.db.models.ManyToManyField.m2m_field_name django.db.models.ManyToManyField.m2m_reverse_field_name django.db.models.ManyToManyField.m2m_reverse_name django.db.models.ManyToManyField.m2m_reverse_target_field_name django.db.models.ManyToManyField.m2m_target_field_name django.db.models.fields.related.ManyToManyField.m2m_column_name django.db.models.fields.related.ManyToManyField.m2m_field_name django.db.models.fields.related.ManyToManyField.m2m_reverse_field_name django.db.models.fields.related.ManyToManyField.m2m_reverse_name django.db.models.fields.related.ManyToManyField.m2m_reverse_target_field_name django.db.models.fields.related.ManyToManyField.m2m_target_field_name django.contrib.gis.db.models.ManyToManyField.m2m_column_name django.contrib.gis.db.models.ManyToManyField.m2m_field_name django.contrib.gis.db.models.ManyToManyField.m2m_reverse_field_name django.contrib.gis.db.models.ManyToManyField.m2m_reverse_name django.contrib.gis.db.models.ManyToManyField.m2m_reverse_target_field_name django.contrib.gis.db.models.ManyToManyField.m2m_target_field_name # Defined inside a signature (using the walrus operator) django.core.management.utils.sentinel # Plugin generated model instances for '.annotate' support django.contrib.admin.models.LogEntry@AnnotatedWith django.contrib.auth.base_user.AbstractBaseUser@AnnotatedWith django.contrib.auth.models.AbstractUser@AnnotatedWith django.contrib.auth.models.Group@AnnotatedWith django.contrib.auth.models.Permission@AnnotatedWith django.contrib.auth.models.PermissionsMixin@AnnotatedWith django.contrib.auth.models.User@AnnotatedWith django.contrib.contenttypes.models.ContentType@AnnotatedWith django.contrib.flatpages.models.FlatPage@AnnotatedWith django.contrib.gis.db.backends.oracle.models.OracleGeometryColumns@AnnotatedWith django.contrib.gis.db.backends.oracle.models.OracleSpatialRefSys@AnnotatedWith django.contrib.gis.db.backends.postgis.models.PostGISGeometryColumns@AnnotatedWith django.contrib.gis.db.backends.postgis.models.PostGISSpatialRefSys@AnnotatedWith django.contrib.gis.db.backends.spatialite.models.SpatialiteGeometryColumns@AnnotatedWith django.contrib.gis.db.backends.spatialite.models.SpatialiteSpatialRefSys@AnnotatedWith django.contrib.redirects.models.Redirect@AnnotatedWith django.contrib.sessions.base_session.AbstractBaseSession@AnnotatedWith django.contrib.sessions.models.Session@AnnotatedWith django.contrib.sites.models.Site@AnnotatedWith django.db.migrations.recorder.Migration@AnnotatedWith # These are `UserModel = get_user_model()` lines, the plugin updates them to correct types django.contrib.auth.backends.UserModel django.contrib.auth.forms.UserModel django.contrib.auth.views.UserModel # Using the definitions from `dict` (from typeshed) django.contrib.sessions.backends.base.SessionBase.get django.contrib.sessions.backends.base.SessionBase.setdefault # Limited stubtest support for enums (https://github.com/python/mypy/issues/16806) django.db.migrations.operations.base.OperationCategory.__new__ # Ignore: ...Model.[a]save is inconsistent, stub does not have *args argument "args" # Positional arguments were deprecated in Django 5.1, we have adopted keyword-only arguments early. django.contrib.auth.base_user.AbstractBaseUser.save django.contrib.auth.models.AbstractBaseUser.save django.contrib.gis.db.models.Model.asave django.contrib.gis.db.models.Model.save django.db.models.Model.asave django.db.models.Model.save django.db.models.base.Model.asave django.db.models.base.Model.save # Ignore: GeneratedField.__init__ is inconsistent, runtime argument "db_persist" has a default value but stub argument does not # The default value None never worked and has been dropped for Django 6.0: # https://code.djangoproject.com/ticket/36262 django.contrib.gis.db.models.GeneratedField.__init__ django.db.models.GeneratedField.__init__ django.db.models.fields.generated.GeneratedField.__init__ # These are dynamically added when using `save(commit=False)` # See https://docs.djangoproject.com/en/5.2/topics/forms/modelforms/#the-save-method django.forms.BaseModelForm.save_m2m django.forms.BaseModelFormSet.save_m2m django.forms.models.BaseModelForm.save_m2m django.forms.models.BaseModelFormSet.save_m2m django.contrib.gis.forms.BaseModelForm.save_m2m django.contrib.gis.forms.BaseModelFormSet.save_m2m # Dynamically generated in https://github.com/django/django/blob/0ee06c04e0256094270db3ffe8b5dafa6a8457a3/django/core/mail/backends/locmem.py#L24 django.core.mail.outbox # Variable is supposed to be a set but is initialised to an empty dict django.contrib.gis.db.backends.base.features.BaseSpatialFeatures.unsupported_geojson_options # We declare more strict types for this in stubs to avoid RuntimeErrors. # Django uses a `*args` parameter but crash if it contains more than 1 element. django.http.QueryDict.pop django.http.request.QueryDict.pop # Django incorrectly uses a signature of `(cls, **kwargs)` when it should be `(cls, *args, **kwargs)`. django.test.selenium.SeleniumTestCase.__init_subclass__ # Django incorrectly uses a signature of `(self, *args, **kwargs)` when it should be `(self)`. django.forms.renderers.Jinja2DivFormRenderer.__init__ # mypy does not understand __getitem__ unpacking python/mypy#2220 django.urls.ResolverMatch.__iter__ django.urls.resolvers.ResolverMatch.__iter__ django-stubs-5.2.9/scripts/stubtest/allowlist_todo.txt000066400000000000000000001431641513401051600233000ustar00rootroot00000000000000# Autogenerated by `stubtest` # Unsorted: there are real problems and things we can really ignore. django.__main__ django.conf.global_settings.gettext_noop django.contrib.admin.FieldListFilter.title django.contrib.admin.filters.FieldListFilter.title django.contrib.admin.helpers.AdminForm.fields django.contrib.admin.helpers.AdminForm.is_bound django.contrib.admin.helpers.AdminReadonlyField.get_admin_url django.contrib.admin.helpers.InlineAdminFormSet.is_bound django.contrib.admin.helpers.InlineAdminFormSet.total_form_count django.contrib.admin.models.LogEntry.action_flag django.contrib.admin.models.LogEntry.action_time django.contrib.admin.models.LogEntry.change_message django.contrib.admin.models.LogEntry.content_type django.contrib.admin.models.LogEntry.content_type_id django.contrib.admin.models.LogEntry.get_action_flag_display django.contrib.admin.models.LogEntry.get_next_by_action_time django.contrib.admin.models.LogEntry.get_previous_by_action_time django.contrib.admin.models.LogEntry.id django.contrib.admin.models.LogEntry.object_id django.contrib.admin.models.LogEntry.object_repr django.contrib.admin.models.LogEntry.user django.contrib.admin.models.LogEntry.user_id django.contrib.admin.options.BaseModelAdmin.media django.contrib.admin.options.InlineModelAdmin.model django.contrib.admin.options.InlineModelAdmin.template django.contrib.admin.site django.contrib.admin.sites.site django.contrib.admin.tests.AdminSeleniumTestCase django.contrib.admin.tests.AdminSeleniumTestCase.assertCountSeleniumElements django.contrib.admin.tests.CSPMiddleware.process_response django.contrib.admin.utils.QUOTE_MAP django.contrib.admin.utils.UNQUOTE_MAP django.contrib.admin.utils.prepare_lookup_value django.contrib.admin.views.autocomplete.AutocompleteJsonView.admin_site django.contrib.admin.views.autocomplete.AutocompleteJsonView.process_request django.contrib.admin.views.autocomplete.AutocompleteJsonView.serialize_result django.contrib.admin.widgets.AutocompleteMixin.media django.contrib.admin.widgets.FilteredSelectMultiple.Media django.contrib.admin.widgets.BaseAdminTimeWidget.Media django.contrib.admin.widgets.BaseAdminDateWidget.Media django.contrib.admindocs.utils.non_capturing_group_matcher django.contrib.admindocs.utils.remove_non_capturing_groups django.contrib.admindocs.utils.replace_metacharacters django.contrib.auth.admin.GroupAdmin.formfield_for_manytomany django.contrib.auth.admin.UserAdmin.fieldsets django.contrib.auth.admin.UserAdmin.get_form django.contrib.auth.base_user.AbstractBaseUser.last_login django.contrib.auth.base_user.AbstractBaseUser.password django.contrib.auth.decorators.login_required django.contrib.auth.hashers.Argon2PasswordHasher.params django.contrib.auth.hashers.ScryptPasswordHasher django.contrib.auth.hashers.must_update_salt django.contrib.auth.hashers.reset_hashers django.contrib.auth.models.AbstractBaseUser.last_login django.contrib.auth.models.AbstractBaseUser.password django.contrib.auth.models.AbstractUser.date_joined django.contrib.auth.models.AbstractUser.email django.contrib.auth.models.AbstractUser.email_user django.contrib.auth.models.AbstractUser.first_name django.contrib.auth.models.AbstractUser.get_next_by_date_joined django.contrib.auth.models.AbstractUser.get_previous_by_date_joined django.contrib.auth.models.AbstractUser.groups django.contrib.auth.models.AbstractUser.is_active django.contrib.auth.models.AbstractUser.is_staff django.contrib.auth.models.AbstractUser.is_superuser django.contrib.auth.models.AbstractUser.last_login django.contrib.auth.models.AbstractUser.last_name django.contrib.auth.models.AbstractUser.objects django.contrib.auth.models.AbstractUser.password django.contrib.auth.models.AbstractUser.user_permissions django.contrib.auth.models.AbstractUser.username django.contrib.auth.models.AnonymousUser.__int__ django.contrib.auth.models.Group.id django.contrib.auth.models.Group.name django.contrib.auth.models.Group.permissions django.contrib.auth.models.Permission.codename django.contrib.auth.models.Permission.content_type django.contrib.auth.models.Permission.content_type_id django.contrib.auth.models.Permission.id django.contrib.auth.models.Permission.name django.contrib.auth.models.PermissionsMixin.groups django.contrib.auth.models.PermissionsMixin.is_superuser django.contrib.auth.models.PermissionsMixin.user_permissions django.contrib.auth.models.User.date_joined django.contrib.auth.models.User.email django.contrib.auth.models.User.first_name django.contrib.auth.models.User.get_next_by_date_joined django.contrib.auth.models.User.get_previous_by_date_joined django.contrib.auth.models.User.groups django.contrib.auth.models.User.id django.contrib.auth.models.User.is_active django.contrib.auth.models.User.is_staff django.contrib.auth.models.User.is_superuser django.contrib.auth.models.User.last_login django.contrib.auth.models.User.last_name django.contrib.auth.models.User.password django.contrib.auth.models.User.user_permissions django.contrib.auth.models.User.username django.contrib.auth.password_validation.CommonPasswordValidator.DEFAULT_PASSWORD_LIST_PATH django.contrib.auth.password_validation.CommonPasswordValidator.__init__ django.contrib.auth.password_validation.exceeds_maximum_length_ratio django.contrib.auth.tokens.PasswordResetTokenGenerator._make_token_with_timestamp django.contrib.auth.tokens.PasswordResetTokenGenerator.algorithm django.contrib.auth.views.LoginView.form_class django.contrib.auth.views.PasswordChangeView.form_class django.contrib.auth.views.PasswordResetConfirmView.form_class django.contrib.auth.views.PasswordResetView.form_class django.contrib.contenttypes.admin.GenericInlineModelAdmin.ct_field django.contrib.contenttypes.admin.GenericInlineModelAdmin.ct_fk_field django.contrib.contenttypes.admin.GenericInlineModelAdmin.template django.contrib.contenttypes.fields.GenericRelation.get_extra_restriction django.contrib.contenttypes.forms.generic_inlineformset_factory django.contrib.contenttypes.management.inject_rename_contenttypes_operations django.contrib.contenttypes.models.ContentType.app_label django.contrib.contenttypes.models.ContentType.app_labeled_name django.contrib.contenttypes.models.ContentType.id django.contrib.contenttypes.models.ContentType.model django.contrib.contenttypes.models.ContentTypeManager.__init__ django.contrib.flatpages.models.FlatPage.content django.contrib.flatpages.models.FlatPage.enable_comments django.contrib.flatpages.models.FlatPage.id django.contrib.flatpages.models.FlatPage.registration_required django.contrib.flatpages.models.FlatPage.sites django.contrib.flatpages.models.FlatPage.template_name django.contrib.flatpages.models.FlatPage.title django.contrib.flatpages.models.FlatPage.url django.contrib.gis.admin.GISModelAdmin.gis_widget django.contrib.gis.admin.options.GISModelAdmin.gis_widget django.contrib.gis.admin.options.GeoModelAdminMixin django.contrib.gis.admin.site django.contrib.gis.db.backends.oracle.features.DatabaseFeatures.django_test_skips django.contrib.gis.db.backends.postgis.operations.PostGISOperations.convert_extent django.contrib.gis.db.backends.postgis.operations.PostGISOperations.convert_extent3d django.contrib.gis.db.backends.postgis.schema.PostGISSchemaEditor.rast_index_template django.contrib.gis.db.backends.spatialite.base.DatabaseWrapper.ops django.contrib.gis.db.backends.spatialite.features.DatabaseFeatures.django_test_skips django.contrib.gis.db.backends.spatialite.operations.SpatiaLiteOperations.convert_extent django.contrib.gis.db.backends.spatialite.operations.SpatiaLiteOperations.from_text django.contrib.gis.db.backends.spatialite.operations.SpatiaLiteOperations.geom_lib_version django.contrib.gis.db.backends.spatialite.operations.SpatiaLiteOperations.rttopo_version django.contrib.gis.db.models.Aggregate.__init__ django.contrib.gis.db.models.Aggregate.as_sql django.contrib.gis.db.models.Aggregate.default_alias django.contrib.gis.db.models.Aggregate.name django.contrib.gis.db.models.AutoField.rel_db_type django.contrib.gis.db.models.BaseConstraint.contains_expressions django.contrib.gis.db.models.BaseConstraint.validate django.contrib.gis.db.models.BigAutoField.rel_db_type django.contrib.gis.db.models.BigIntegerField.formfield django.contrib.gis.db.models.BinaryField.get_placeholder django.contrib.gis.db.models.BooleanField.formfield django.contrib.gis.db.models.Case.as_sql django.contrib.gis.db.models.Case.allowed_default django.contrib.gis.db.models.CharField.cast_db_type django.contrib.gis.db.models.CharField.description django.contrib.gis.db.models.CharField.formfield django.contrib.gis.db.models.CheckConstraint.validate django.contrib.gis.db.models.Count.__init__ django.contrib.gis.db.models.DateField.formfield django.contrib.gis.db.models.DateTimeField.formfield django.contrib.gis.db.models.DecimalField.context django.contrib.gis.db.models.DecimalField.formfield django.contrib.gis.db.models.DurationField.formfield django.contrib.gis.db.models.DurationField.get_db_converters django.contrib.gis.db.models.EmailField.formfield django.contrib.gis.db.models.Exists.empty_result_set_value django.contrib.gis.db.models.ExpressionWrapper.allowed_default django.contrib.gis.db.models.Extent.is_extent django.contrib.gis.db.models.Extent3D.is_extent django.contrib.gis.db.models.Field.__copy__ django.contrib.gis.db.models.Field.__deepcopy__ django.contrib.gis.db.models.Field.__ge__ django.contrib.gis.db.models.Field.__get__ django.contrib.gis.db.models.Field.__gt__ django.contrib.gis.db.models.Field.__le__ django.contrib.gis.db.models.Field.__lt__ django.contrib.gis.db.models.Field.__set__ django.contrib.gis.db.models.Field.cast_db_type django.contrib.gis.db.models.Field.clone django.contrib.gis.db.models.Field.db_returning django.contrib.gis.db.models.Field.db_tablespace django.contrib.gis.db.models.Field.db_type_suffix django.contrib.gis.db.models.Field.description django.contrib.gis.db.models.Field.descriptor_class django.contrib.gis.db.models.Field.error_messages django.contrib.gis.db.models.Field.get_db_converters django.contrib.gis.db.models.Field.get_filter_kwargs_for_object django.contrib.gis.db.models.Field.get_pk_value_on_save django.contrib.gis.db.models.Field.rel_db_type django.contrib.gis.db.models.Field.unique django.contrib.gis.db.models.FileField.__get__ django.contrib.gis.db.models.FileField.attr_class django.contrib.gis.db.models.FileField.descriptor_class django.contrib.gis.db.models.FileField.formfield django.contrib.gis.db.models.FilePathField.formfield django.contrib.gis.db.models.FloatField.formfield django.contrib.gis.db.models.ForeignKey.__class_getitem__ django.contrib.gis.db.models.ForeignKey.contribute_to_related_class django.contrib.gis.db.models.ForeignKey.convert_empty_strings django.contrib.gis.db.models.ForeignKey.descriptor_class django.contrib.gis.db.models.ForeignKey.formfield django.contrib.gis.db.models.ForeignKey.get_db_converters django.contrib.gis.db.models.ForeignObject.__copy__ django.contrib.gis.db.models.ForeignObject.__get__ django.contrib.gis.db.models.ForeignObject.contribute_to_related_class django.contrib.gis.db.models.ForeignObject.forward_related_accessor_class django.contrib.gis.db.models.ForeignObject.get_class_lookups django.contrib.gis.db.models.ForeignObject.get_extra_descriptor_filter django.contrib.gis.db.models.ForeignObject.get_extra_restriction django.contrib.gis.db.models.ForeignObject.get_foreign_related_value django.contrib.gis.db.models.ForeignObject.get_instance_value_for_fields django.contrib.gis.db.models.ForeignObject.get_joining_columns django.contrib.gis.db.models.ForeignObject.get_local_related_value django.contrib.gis.db.models.ForeignObject.get_path_info django.contrib.gis.db.models.ForeignObject.get_reverse_joining_columns django.contrib.gis.db.models.ForeignObject.get_reverse_path_info django.contrib.gis.db.models.ForeignObject.path_infos django.contrib.gis.db.models.ForeignObject.related_accessor_class django.contrib.gis.db.models.ForeignObject.requires_unique_target django.contrib.gis.db.models.ForeignObject.reverse_path_infos django.contrib.gis.db.models.ForeignObjectRel.empty_strings_allowed django.contrib.gis.db.models.ForeignObjectRel.get_extra_restriction django.contrib.gis.db.models.ForeignObjectRel.identity django.contrib.gis.db.models.ForeignObjectRel.path_infos django.contrib.gis.db.models.Func.allowed_default django.contrib.gis.db.models.GenericIPAddressField.formfield django.contrib.gis.db.models.ImageField.__get__ django.contrib.gis.db.models.ImageField.attr_class django.contrib.gis.db.models.ImageField.descriptor_class django.contrib.gis.db.models.ImageField.formfield django.contrib.gis.db.models.IntegerField.formfield django.contrib.gis.db.models.JSONField.formfield django.contrib.gis.db.models.JSONField.get_transform django.contrib.gis.db.models.Lookup.get_prep_lhs django.contrib.gis.db.models.Lookup.allowed_default django.contrib.gis.db.models.Lookup.lookup_name django.contrib.gis.db.models.ManyToManyField.__get__ django.contrib.gis.db.models.ManyToManyField.formfield django.contrib.gis.db.models.ManyToManyField.path_infos django.contrib.gis.db.models.ManyToManyField.reverse_path_infos django.contrib.gis.db.models.ManyToManyRel.identity django.contrib.gis.db.models.ManyToOneRel.identity django.contrib.gis.db.models.Model.add_to_class django.contrib.gis.db.models.OneToOneField.__get__ django.contrib.gis.db.models.OneToOneField.formfield django.contrib.gis.db.models.OneToOneField.forward_related_accessor_class django.contrib.gis.db.models.OneToOneField.related_accessor_class django.contrib.gis.db.models.OrderBy.as_oracle django.contrib.gis.db.models.OrderBy.as_sql django.contrib.gis.db.models.PositiveBigIntegerField.formfield django.contrib.gis.db.models.PositiveBigIntegerField.integer_field_class django.contrib.gis.db.models.PositiveIntegerField.formfield django.contrib.gis.db.models.PositiveIntegerField.integer_field_class django.contrib.gis.db.models.PositiveSmallIntegerField.formfield django.contrib.gis.db.models.PositiveSmallIntegerField.integer_field_class django.contrib.gis.db.models.QuerySet.__deepcopy__ django.contrib.gis.db.models.QuerySet.__xor__ django.contrib.gis.db.models.SlugField.formfield django.contrib.gis.db.models.SmallAutoField.rel_db_type django.contrib.gis.db.models.StdDev.__init__ django.contrib.gis.db.models.Subquery.as_sql django.contrib.gis.db.models.Subquery.empty_result_set_value django.contrib.gis.db.models.Subquery.external_aliases django.contrib.gis.db.models.Subquery.get_external_cols django.contrib.gis.db.models.TextField.formfield django.contrib.gis.db.models.TimeField.formfield django.contrib.gis.db.models.URLField.formfield django.contrib.gis.db.models.UUIDField.formfield django.contrib.gis.db.models.UniqueConstraint.contains_expressions django.contrib.gis.db.models.UniqueConstraint.validate django.contrib.gis.db.models.Value.empty_result_set_value django.contrib.gis.db.models.Value.for_save django.contrib.gis.db.models.Variance.__init__ django.contrib.gis.db.models.When.as_sql django.contrib.gis.db.models.When.allowed_default django.contrib.gis.db.models.Window.as_sql django.contrib.gis.db.models.Window.as_sqlite django.contrib.gis.db.models.aggregates.Extent.is_extent django.contrib.gis.db.models.aggregates.Extent3D.is_extent django.contrib.gis.db.models.aggregates.GeoAggregate.as_sql django.contrib.gis.db.models.functions.Area.as_sql django.contrib.gis.db.models.functions.GeoFuncMixin.__init__ django.contrib.gis.db.models.functions.GeoFuncMixin.as_sql django.contrib.gis.db.models.functions.GeoFuncMixin.name django.contrib.gis.db.models.functions.GeoFuncMixin.resolve_expression django.contrib.gis.db.models.functions.Length.as_sql django.contrib.gis.db.models.lookups.RasterBandTransform.as_sql django.contrib.gis.forms.ALL_FIELDS django.contrib.gis.forms.BaseForm.__init__ django.contrib.gis.forms.BaseFormSet.__init__ django.contrib.gis.forms.BaseModelFormSet.model django.contrib.gis.forms.ChoiceField.__deepcopy__ django.contrib.gis.forms.Field.__deepcopy__ django.contrib.gis.forms.FileField.bound_data django.contrib.gis.forms.Media.__html__ django.contrib.gis.forms.ModelChoiceField.__deepcopy__ django.contrib.gis.forms.MultiValueField.__deepcopy__ django.contrib.gis.forms.MultiWidget.use_fieldset django.contrib.gis.forms.RadioSelect.id_for_label django.contrib.gis.forms.RadioSelect.use_fieldset django.contrib.gis.forms.SelectDateWidget.use_fieldset django.contrib.gis.forms.Widget.use_fieldset django.contrib.gis.forms.formset_factory django.contrib.gis.forms.inlineformset_factory django.contrib.gis.forms.modelformset_factory django.contrib.gis.gdal.OGRGeometry.geojson django.contrib.gis.gdal.SpatialReference.pretty_wkt django.contrib.gis.gdal.SpatialReference.xml django.contrib.gis.gdal.envelope.OGREnvelope.MaxX django.contrib.gis.gdal.envelope.OGREnvelope.MaxY django.contrib.gis.gdal.envelope.OGREnvelope.MinX django.contrib.gis.gdal.envelope.OGREnvelope.MinY django.contrib.gis.gdal.geometries.LineString.coords django.contrib.gis.gdal.geometries.OGRGeometry.geojson django.contrib.gis.gdal.geometries.Polygon.exterior_ring django.contrib.gis.gdal.srs.SpatialReference.pretty_wkt django.contrib.gis.gdal.srs.SpatialReference.xml django.contrib.gis.geos.Point.tuple django.contrib.gis.geos.geometry.GEOSGeometryBase.geojson django.contrib.gis.geos.geometry.GEOSGeometryBase.make_valid django.contrib.gis.geos.geometry.GEOSGeometryBase.normalize django.contrib.gis.geos.libgeos.error_h django.contrib.gis.geos.libgeos.notice_h django.contrib.gis.geos.mutable_list.ListMixin.__ge__ django.contrib.gis.geos.mutable_list.ListMixin.__gt__ django.contrib.gis.geos.mutable_list.ListMixin.__le__ django.contrib.gis.geos.point.Point.tuple django.contrib.gis.geos.prototypes.geom.geos_makevalid django.contrib.gis.measure.MeasureBase.__ge__ django.contrib.gis.measure.MeasureBase.__gt__ django.contrib.gis.measure.MeasureBase.__le__ django.contrib.humanize.templatetags.humanize.intword_converters django.contrib.messages.storage.cookie.CookieStorage.key_salt django.contrib.messages.storage.cookie.MessageDecoder.decode django.contrib.messages.storage.cookie.MessageEncoder.default django.contrib.postgres.fields.ArrayField.formfield django.contrib.postgres.fields.HStoreField.formfield django.contrib.postgres.fields.RangeField.formfield django.contrib.postgres.fields.array.ArrayField.formfield django.contrib.postgres.fields.hstore.HStoreField.formfield django.contrib.postgres.fields.ranges.RangeField.formfield django.contrib.redirects.models.Redirect.id django.contrib.redirects.models.Redirect.new_path django.contrib.redirects.models.Redirect.old_path django.contrib.redirects.models.Redirect.site django.contrib.redirects.models.Redirect.site_id django.contrib.sessions.backends.signed_cookies.SessionStore.exists django.contrib.sessions.base_session.AbstractBaseSession.expire_date django.contrib.sessions.base_session.AbstractBaseSession.get_next_by_expire_date django.contrib.sessions.base_session.AbstractBaseSession.get_previous_by_expire_date django.contrib.sessions.base_session.AbstractBaseSession.objects django.contrib.sessions.base_session.AbstractBaseSession.session_data django.contrib.sessions.base_session.AbstractBaseSession.session_key django.contrib.sessions.models.Session.expire_date django.contrib.sessions.models.Session.get_next_by_expire_date django.contrib.sessions.models.Session.get_previous_by_expire_date django.contrib.sessions.models.Session.session_data django.contrib.sessions.models.Session.session_key django.contrib.sitemaps.views.SitemapIndexItem django.contrib.sites.models.Site.domain django.contrib.sites.models.Site.flatpage_set django.contrib.sites.models.Site.id django.contrib.sites.models.Site.name django.contrib.staticfiles.finders.BaseStorageFinder.storage django.contrib.staticfiles.finders.DefaultStorageFinder.storage django.contrib.staticfiles.storage.staticfiles_storage django.core.cache.cache django.core.files.uploadedfile.UploadedFile.size django.core.files.utils.FileProxyMixin.encoding django.core.files.utils.FileProxyMixin.fileno django.core.files.utils.FileProxyMixin.flush django.core.files.utils.FileProxyMixin.isatty django.core.files.utils.FileProxyMixin.newlines django.core.files.utils.FileProxyMixin.read django.core.files.utils.FileProxyMixin.readinto django.core.files.utils.FileProxyMixin.readline django.core.files.utils.FileProxyMixin.readlines django.core.files.utils.FileProxyMixin.seek django.core.files.utils.FileProxyMixin.tell django.core.files.utils.FileProxyMixin.truncate django.core.files.utils.FileProxyMixin.write django.core.files.utils.FileProxyMixin.writelines django.core.mail.backends.filebased.EmailBackend.__init__ django.core.mail.backends.locmem.EmailBackend.send_messages django.core.mail.backends.smtp.EmailBackend.__init__ django.core.mail.backends.smtp.EmailBackend.connection_class django.core.mail.backends.smtp.EmailBackend.ssl_context django.core.management.commands.makemessages.TranslatableFile.__ge__ django.core.management.commands.makemessages.TranslatableFile.__gt__ django.core.management.commands.makemessages.TranslatableFile.__le__ django.core.management.commands.makemessages.TranslatableFile.__lt__ django.core.management.commands.makemessages.TranslatableFile.path django.core.servers.basehttp.ServerHandler.__init__ django.core.servers.basehttp.ThreadedWSGIServer.__init__ django.db.backends.ddl_references.Expressions django.db.backends.mysql.base.DatabaseWrapper.ops django.db.backends.mysql.features.DatabaseFeatures.can_rename_index django.db.backends.mysql.features.DatabaseFeatures.can_return_rows_from_bulk_insert django.db.backends.mysql.features.DatabaseFeatures.django_test_skips django.db.backends.mysql.features.DatabaseFeatures.minimum_database_version django.db.backends.mysql.features.DatabaseFeatures.supports_select_difference django.db.backends.mysql.features.DatabaseFeatures.supports_select_intersection django.db.backends.mysql.features.DatabaseFeatures.supports_table_check_constraints django.db.backends.mysql.features.DatabaseFeatures.test_collations django.db.backends.mysql.introspection.DatabaseIntrospection.get_storage_engine django.db.backends.mysql.introspection.InfoLine.__match_args__ django.db.backends.mysql.introspection.InfoLine.__new__ django.db.backends.mysql.introspection.InfoLine._fields django.db.backends.mysql.introspection.InfoLine.comment django.db.backends.mysql.introspection.TableInfo django.db.backends.mysql.schema.DatabaseSchemaEditor.sql_alter_column_comment django.db.backends.oracle.features.DatabaseFeatures.django_test_skips django.db.backends.oracle.features.DatabaseFeatures.introspected_field_types django.db.backends.oracle.features.DatabaseFeatures.supports_collation_on_charfield django.db.backends.oracle.features.DatabaseFeatures.supports_frame_exclusion django.db.backends.postgresql.base.DatabaseWrapper.Database django.db.backends.postgresql.base.DatabaseWrapper.ops django.db.backends.postgresql.base.DatabaseWrapper.tzinfo_factory django.db.backends.postgresql.base.INETARRAY django.db.backends.postgresql.base.INETARRAY_OID django.db.backends.postgresql.features.DatabaseFeatures.django_test_expected_failures django.db.backends.postgresql.features.DatabaseFeatures.introspected_field_types django.db.backends.postgresql.features.DatabaseFeatures.prohibits_null_characters_in_text_exception django.db.backends.postgresql.features.DatabaseFeatures.uses_server_side_binding django.db.backends.postgresql.introspection.DatabaseIntrospection.index_default_access_method django.db.backends.postgresql.introspection.FieldInfo django.db.backends.postgresql.introspection.TableInfo django.db.backends.postgresql.operations.get_json_dumps django.db.backends.postgresql.schema.DatabaseSchemaEditor.sql_add_identity django.db.backends.postgresql.schema.DatabaseSchemaEditor.sql_alter_sequence_type django.db.backends.postgresql.schema.DatabaseSchemaEditor.sql_drop_indentity django.db.backends.sqlite3.base.DatabaseWrapper.Database django.db.backends.sqlite3.base.DatabaseWrapper.ops django.db.backends.sqlite3.base.DatabaseWrapper.pattern_esc django.db.backends.sqlite3.base.DatabaseWrapper.pattern_ops django.db.backends.sqlite3.base.SQLiteCursorWrapper.convert_query django.db.backends.sqlite3.base.SQLiteCursorWrapper.execute django.db.backends.sqlite3.base.SQLiteCursorWrapper.executemany django.db.backends.sqlite3.base.adapt_date django.db.backends.sqlite3.base.adapt_datetime django.db.backends.sqlite3.features.DatabaseFeatures.can_alter_table_drop_column django.db.backends.sqlite3.features.DatabaseFeatures.can_introspect_json_field django.db.backends.sqlite3.features.DatabaseFeatures.can_return_columns_from_insert django.db.backends.sqlite3.features.DatabaseFeatures.can_return_rows_from_bulk_insert django.db.backends.sqlite3.features.DatabaseFeatures.django_test_skips django.db.backends.sqlite3.features.DatabaseFeatures.has_json_object_function django.db.backends.sqlite3.features.DatabaseFeatures.introspected_field_types django.db.backends.sqlite3.features.DatabaseFeatures.supports_json_field django.db.backends.sqlite3.introspection.FieldInfo django.db.backends.sqlite3.schema.DatabaseSchemaEditor.delete_model django.db.backends.sqlite3.schema.DatabaseSchemaEditor.sql_create_fk django.db.backends.utils.debug_transaction django.db.backends.utils.names_digest django.db.backends.utils.split_tzname_delta django.db.connection django.db.migrations.Migration.suggest_name django.db.migrations.graph.Node.__ge__ django.db.migrations.graph.Node.__gt__ django.db.migrations.graph.Node.__le__ django.db.migrations.loader.MigrationLoader.collect_sql django.db.migrations.migration.Migration.suggest_name django.db.migrations.operations.utils django.db.migrations.questioner.InteractiveMigrationQuestioner.__init__ django.db.migrations.questioner.InteractiveMigrationQuestioner.ask_unique_callable_default_addition django.db.migrations.questioner.MigrationQuestioner.ask_unique_callable_default_addition django.db.migrations.questioner.NonInteractiveMigrationQuestioner.__init__ django.db.migrations.questioner.NonInteractiveMigrationQuestioner.log_lack_of_migration django.db.migrations.recorder.MigrationRecorder.Migration.get_next_by_applied django.db.migrations.recorder.MigrationRecorder.Migration.get_previous_by_applied django.db.migrations.recorder.MigrationRecorder.Migration.id django.db.migrations.serializer.ChoicesSerializer django.db.migrations.utils.FieldReference django.db.migrations.utils.field_is_referenced django.db.migrations.utils.field_references django.db.migrations.utils.get_references django.db.migrations.utils.resolve_relation django.db.models.Aggregate.__init__ django.db.models.Aggregate.as_sql django.db.models.Aggregate.default_alias django.db.models.Aggregate.name django.db.models.AutoField.rel_db_type django.db.models.BaseConstraint.contains_expressions django.db.models.BaseConstraint.validate django.db.models.BigAutoField.rel_db_type django.db.models.BigIntegerField.formfield django.db.models.BinaryField.get_placeholder django.db.models.BooleanField.formfield django.db.models.Case.as_sql django.db.models.Case.allowed_default django.db.models.CharField.cast_db_type django.db.models.CharField.description django.db.models.CharField.formfield django.db.models.CheckConstraint.validate django.db.models.Count.__init__ django.db.models.DateField.formfield django.db.models.DateTimeField.formfield django.db.models.DecimalField.context django.db.models.DecimalField.formfield django.db.models.DurationField.formfield django.db.models.DurationField.get_db_converters django.db.models.EmailField.formfield django.db.models.Exists.empty_result_set_value django.db.models.ExpressionWrapper.allowed_default django.db.models.Field.__copy__ django.db.models.Field.__deepcopy__ django.db.models.Field.__ge__ django.db.models.Field.__get__ django.db.models.Field.__gt__ django.db.models.Field.__le__ django.db.models.Field.__lt__ django.db.models.Field.__set__ django.db.models.Field.cast_db_type django.db.models.Field.clone django.db.models.Field.db_returning django.db.models.Field.db_tablespace django.db.models.Field.db_type_suffix django.db.models.Field.description django.db.models.Field.descriptor_class django.db.models.Field.error_messages django.db.models.Field.get_db_converters django.db.models.Field.get_filter_kwargs_for_object django.db.models.Field.get_pk_value_on_save django.db.models.Field.rel_db_type django.db.models.Field.unique django.db.models.FileField.__get__ django.db.models.FileField.attr_class django.db.models.FileField.descriptor_class django.db.models.FileField.formfield django.db.models.FilePathField.formfield django.db.models.FloatField.formfield django.db.models.ForeignKey.__class_getitem__ django.db.models.ForeignKey.contribute_to_related_class django.db.models.ForeignKey.convert_empty_strings django.db.models.ForeignKey.descriptor_class django.db.models.ForeignKey.formfield django.db.models.ForeignKey.get_db_converters django.db.models.ForeignObject.__copy__ django.db.models.ForeignObject.__get__ django.db.models.ForeignObject.contribute_to_related_class django.db.models.ForeignObject.forward_related_accessor_class django.db.models.ForeignObject.get_class_lookups django.db.models.ForeignObject.get_extra_descriptor_filter django.db.models.ForeignObject.get_extra_restriction django.db.models.ForeignObject.get_foreign_related_value django.db.models.ForeignObject.get_instance_value_for_fields django.db.models.ForeignObject.get_joining_columns django.db.models.ForeignObject.get_local_related_value django.db.models.ForeignObject.get_path_info django.db.models.ForeignObject.get_reverse_joining_columns django.db.models.ForeignObject.get_reverse_path_info django.db.models.ForeignObject.path_infos django.db.models.ForeignObject.related_accessor_class django.db.models.ForeignObject.requires_unique_target django.db.models.ForeignObject.reverse_path_infos django.db.models.ForeignObjectRel.empty_strings_allowed django.db.models.ForeignObjectRel.get_extra_restriction django.db.models.ForeignObjectRel.identity django.db.models.ForeignObjectRel.path_infos django.db.models.Func.allowed_default django.db.models.GenericIPAddressField.formfield django.db.models.ImageField.__get__ django.db.models.ImageField.attr_class django.db.models.ImageField.descriptor_class django.db.models.ImageField.formfield django.db.models.IntegerField.formfield django.db.models.JSONField.formfield django.db.models.JSONField.get_transform django.db.models.Lookup.get_prep_lhs django.db.models.Lookup.lookup_name django.db.models.Lookup.allowed_default django.db.models.ManyToManyField.__get__ django.db.models.ManyToManyField.formfield django.db.models.ManyToManyField.path_infos django.db.models.ManyToManyField.reverse_path_infos django.db.models.ManyToManyRel.identity django.db.models.ManyToOneRel.identity django.db.models.Model.add_to_class django.db.models.OneToOneField.__get__ django.db.models.OneToOneField.formfield django.db.models.OneToOneField.forward_related_accessor_class django.db.models.OneToOneField.related_accessor_class django.db.models.OrderBy.as_oracle django.db.models.OrderBy.as_sql django.db.models.PositiveBigIntegerField.formfield django.db.models.PositiveBigIntegerField.integer_field_class django.db.models.PositiveIntegerField.formfield django.db.models.PositiveIntegerField.integer_field_class django.db.models.PositiveSmallIntegerField.formfield django.db.models.PositiveSmallIntegerField.integer_field_class django.db.models.QuerySet.__deepcopy__ django.db.models.QuerySet.__xor__ django.db.models.SlugField.formfield django.db.models.SmallAutoField.rel_db_type django.db.models.StdDev.__init__ django.db.models.Subquery.as_sql django.db.models.Subquery.empty_result_set_value django.db.models.Subquery.external_aliases django.db.models.Subquery.get_external_cols django.db.models.TextField.formfield django.db.models.TimeField.formfield django.db.models.URLField.formfield django.db.models.UUIDField.formfield django.db.models.UniqueConstraint.contains_expressions django.db.models.UniqueConstraint.validate django.db.models.Value.empty_result_set_value django.db.models.Value.for_save django.db.models.Variance.__init__ django.db.models.When.as_sql django.db.models.When.allowed_default django.db.models.Window.as_sql django.db.models.Window.as_sqlite django.db.models.aggregates.Aggregate.__init__ django.db.models.aggregates.Aggregate.as_sql django.db.models.aggregates.Aggregate.default_alias django.db.models.aggregates.Aggregate.name django.db.models.aggregates.Count.__init__ django.db.models.aggregates.StdDev.__init__ django.db.models.aggregates.Variance.__init__ django.db.models.base.Model.add_to_class django.db.models.base.ModelBase.__new__ django.db.models.base.ModelBase.add_to_class django.db.models.base.ModelStateFieldsCacheDescriptor.__get__ django.db.models.base.make_foreign_order_accessors django.db.models.base.method_get_order django.db.models.base.method_set_order django.db.models.base.subclass_exception django.db.models.constraints.BaseConstraint.contains_expressions django.db.models.constraints.BaseConstraint.validate django.db.models.constraints.CheckConstraint.validate django.db.models.constraints.UniqueConstraint.contains_expressions django.db.models.constraints.UniqueConstraint.validate django.db.models.expressions.BaseExpression.empty_result_set_value django.db.models.expressions.BaseExpression.prefix_references django.db.models.expressions.BaseExpression.replace_expressions django.db.models.expressions.Case.as_sql django.db.models.expressions.Case.allowed_default django.db.models.expressions.CombinedExpression.allowed_default django.db.models.expressions.ExpressionWrapper.allowed_default django.db.models.expressions.Func.allowed_default django.db.models.expressions.When.allowed_default django.db.models.expressions.Col.relabeled_clone django.db.models.expressions.Exists.empty_result_set_value django.db.models.expressions.OrderBy.as_oracle django.db.models.expressions.OrderBy.as_sql django.db.models.expressions.Ref.relabeled_clone django.db.models.expressions.ResolvedOuterRef.as_sql django.db.models.expressions.ResolvedOuterRef.get_group_by_cols django.db.models.expressions.ResolvedOuterRef.relabeled_clone django.db.models.expressions.Subquery.as_sql django.db.models.expressions.Subquery.empty_result_set_value django.db.models.expressions.Subquery.external_aliases django.db.models.expressions.Subquery.get_external_cols django.db.models.expressions.Value.empty_result_set_value django.db.models.expressions.Value.for_save django.db.models.expressions.When.as_sql django.db.models.expressions.Window.as_sql django.db.models.expressions.Window.as_sqlite django.db.models.expressions.connector django.db.models.expressions.d django.db.models.expressions.field_types django.db.models.expressions.register_combinable_fields django.db.models.fields.AutoField.rel_db_type django.db.models.fields.AutoFieldMixin.__init__ django.db.models.fields.AutoFieldMixin.check django.db.models.fields.AutoFieldMixin.formfield django.db.models.fields.AutoFieldMixin.get_db_prep_value django.db.models.fields.AutoFieldMixin.validate django.db.models.fields.BigAutoField.rel_db_type django.db.models.fields.BigIntegerField.formfield django.db.models.fields.BinaryField.get_placeholder django.db.models.fields.BooleanField.formfield django.db.models.fields.CharField.cast_db_type django.db.models.fields.CharField.description django.db.models.fields.CharField.formfield django.db.models.fields.DateField.formfield django.db.models.fields.DateTimeCheckMixin.check django.db.models.fields.DateTimeField.formfield django.db.models.fields.DecimalField.context django.db.models.fields.DecimalField.formfield django.db.models.fields.DurationField.formfield django.db.models.fields.DurationField.get_db_converters django.db.models.fields.EmailField.formfield django.db.models.fields.Field.__copy__ django.db.models.fields.Field.__deepcopy__ django.db.models.fields.Field.__ge__ django.db.models.fields.Field.__get__ django.db.models.fields.Field.__gt__ django.db.models.fields.Field.__le__ django.db.models.fields.Field.__lt__ django.db.models.fields.Field.__set__ django.db.models.fields.Field.cast_db_type django.db.models.fields.Field.clone django.db.models.fields.Field.db_returning django.db.models.fields.Field.db_tablespace django.db.models.fields.Field.db_type_suffix django.db.models.fields.Field.description django.db.models.fields.Field.descriptor_class django.db.models.fields.Field.error_messages django.db.models.fields.Field.get_db_converters django.db.models.fields.Field.get_filter_kwargs_for_object django.db.models.fields.Field.get_pk_value_on_save django.db.models.fields.Field.rel_db_type django.db.models.fields.Field.unique django.db.models.fields.FilePathField.formfield django.db.models.fields.FloatField.formfield django.db.models.fields.GenericIPAddressField.formfield django.db.models.fields.IntegerField.formfield django.db.models.fields.PositiveBigIntegerField.formfield django.db.models.fields.PositiveBigIntegerField.integer_field_class django.db.models.fields.PositiveIntegerField.formfield django.db.models.fields.PositiveIntegerField.integer_field_class django.db.models.fields.PositiveSmallIntegerField.formfield django.db.models.fields.PositiveSmallIntegerField.integer_field_class django.db.models.fields.SlugField.formfield django.db.models.fields.SmallAutoField.rel_db_type django.db.models.fields.TextField.formfield django.db.models.fields.TimeField.formfield django.db.models.fields.URLField.formfield django.db.models.fields.UUIDField.formfield django.db.models.fields.files.FileField.__get__ django.db.models.fields.files.FileField.attr_class django.db.models.fields.files.FileField.descriptor_class django.db.models.fields.files.FileField.formfield django.db.models.fields.files.ImageField.__get__ django.db.models.fields.files.ImageField.attr_class django.db.models.fields.files.ImageField.descriptor_class django.db.models.fields.files.ImageField.formfield django.db.models.fields.json.CaseInsensitiveMixin.process_lhs django.db.models.fields.json.CaseInsensitiveMixin.process_rhs django.db.models.fields.json.HasKeyLookup.as_mysql django.db.models.fields.json.HasKeyLookup.as_sql django.db.models.fields.json.HasKeyLookup.as_sqlite django.db.models.fields.json.JSONField.formfield django.db.models.fields.json.JSONField.get_transform django.db.models.fields.json.KeyTextTransform.as_mysql django.db.models.fields.json.KeyTransform.as_mysql django.db.models.fields.json.KeyTransform.as_oracle django.db.models.fields.json.KeyTransform.as_postgresql django.db.models.fields.json.KeyTransform.as_sqlite django.db.models.fields.json.KeyTransformIsNull.as_sqlite django.db.models.fields.json.KeyTransformNumericLookupMixin.process_rhs django.db.models.fields.related.ForeignKey.__class_getitem__ django.db.models.fields.related.ForeignKey.contribute_to_related_class django.db.models.fields.related.ForeignKey.convert_empty_strings django.db.models.fields.related.ForeignKey.descriptor_class django.db.models.fields.related.ForeignKey.formfield django.db.models.fields.related.ForeignKey.get_db_converters django.db.models.fields.related.ForeignObject.__copy__ django.db.models.fields.related.ForeignObject.__get__ django.db.models.fields.related.ForeignObject.contribute_to_related_class django.db.models.fields.related.ForeignObject.forward_related_accessor_class django.db.models.fields.related.ForeignObject.get_class_lookups django.db.models.fields.related.ForeignObject.get_extra_descriptor_filter django.db.models.fields.related.ForeignObject.get_extra_restriction django.db.models.fields.related.ForeignObject.get_foreign_related_value django.db.models.fields.related.ForeignObject.get_instance_value_for_fields django.db.models.fields.related.ForeignObject.get_joining_columns django.db.models.fields.related.ForeignObject.get_local_related_value django.db.models.fields.related.ForeignObject.get_path_info django.db.models.fields.related.ForeignObject.get_reverse_joining_columns django.db.models.fields.related.ForeignObject.get_reverse_path_info django.db.models.fields.related.ForeignObject.path_infos django.db.models.fields.related.ForeignObject.related_accessor_class django.db.models.fields.related.ForeignObject.requires_unique_target django.db.models.fields.related.ForeignObject.reverse_path_infos django.db.models.fields.related.ForeignObjectRel.empty_strings_allowed django.db.models.fields.related.ForeignObjectRel.get_extra_restriction django.db.models.fields.related.ForeignObjectRel.identity django.db.models.fields.related.ForeignObjectRel.path_infos django.db.models.fields.related.ManyToManyField.__get__ django.db.models.fields.related.ManyToManyField.formfield django.db.models.fields.related.ManyToManyField.path_infos django.db.models.fields.related.ManyToManyField.reverse_path_infos django.db.models.fields.related.ManyToManyRel.identity django.db.models.fields.related.ManyToOneRel.identity django.db.models.fields.related.OneToOneField.__get__ django.db.models.fields.related.OneToOneField.formfield django.db.models.fields.related.OneToOneField.forward_related_accessor_class django.db.models.fields.related.OneToOneField.related_accessor_class django.db.models.fields.related.RelatedField.formfield django.db.models.fields.related.lazy_related_operation django.db.models.fields.related_descriptors.ForeignKeyDeferredAttribute.__set__ django.db.models.fields.related_lookups.RelatedLookupMixin.as_sql django.db.models.fields.reverse_related.ForeignObjectRel.empty_strings_allowed django.db.models.fields.reverse_related.ForeignObjectRel.get_extra_restriction django.db.models.fields.reverse_related.ForeignObjectRel.identity django.db.models.fields.reverse_related.ForeignObjectRel.path_infos django.db.models.fields.reverse_related.ManyToManyRel.identity django.db.models.fields.reverse_related.ManyToOneRel.identity django.db.models.functions.Cast.as_mysql django.db.models.functions.Cast.as_oracle django.db.models.functions.Cast.as_postgresql django.db.models.functions.Cast.as_sql django.db.models.functions.Ceil.as_oracle django.db.models.functions.Coalesce.as_oracle django.db.models.functions.Coalesce.empty_result_set_value django.db.models.functions.Collate.as_sql django.db.models.functions.Collate.collation_re django.db.models.functions.ConcatPair.as_postgresql django.db.models.functions.Cot.as_oracle django.db.models.functions.Degrees.as_oracle django.db.models.functions.Extract.as_sql django.db.models.functions.Extract.lookup_name django.db.models.functions.Now.as_mysql django.db.models.functions.Now.as_postgresql django.db.models.functions.NullIf.as_oracle django.db.models.functions.Pi.as_oracle django.db.models.functions.Radians.as_oracle django.db.models.functions.Random.as_mysql django.db.models.functions.Random.as_oracle django.db.models.functions.comparison.Cast.as_mysql django.db.models.functions.comparison.Cast.as_oracle django.db.models.functions.comparison.Cast.as_postgresql django.db.models.functions.comparison.Cast.as_sql django.db.models.functions.comparison.Coalesce.as_oracle django.db.models.functions.comparison.Coalesce.empty_result_set_value django.db.models.functions.comparison.Collate.as_sql django.db.models.functions.comparison.Collate.collation_re django.db.models.functions.comparison.NullIf.as_oracle django.db.models.functions.datetime.Extract.as_sql django.db.models.functions.datetime.Extract.lookup_name django.db.models.functions.datetime.Now.as_mysql django.db.models.functions.datetime.Now.as_postgresql django.db.models.functions.datetime.TruncBase.kind django.db.models.functions.math.Ceil.as_oracle django.db.models.functions.math.Cot.as_oracle django.db.models.functions.math.Degrees.as_oracle django.db.models.functions.math.Pi.as_oracle django.db.models.functions.math.Radians.as_oracle django.db.models.functions.math.Random.as_mysql django.db.models.functions.math.Random.as_oracle django.db.models.functions.mixins.FixDecimalInputMixin.as_postgresql django.db.models.functions.mixins.FixDurationInputMixin.as_mysql django.db.models.functions.mixins.FixDurationInputMixin.as_oracle django.db.models.functions.text.ConcatPair.as_postgresql django.db.models.indexes.IndexExpression.wrapper_classes django.db.models.lookups.FieldGetDbPrepValueIterableMixin.batch_process_rhs django.db.models.lookups.FieldGetDbPrepValueIterableMixin.process_rhs django.db.models.lookups.IExact.process_rhs django.db.models.lookups.Lookup.get_prep_lhs django.db.models.lookups.Lookup.allowed_default django.db.models.lookups.Lookup.lookup_name django.db.models.lookups.PatternLookup.process_rhs django.db.models.query.EmptyQuerySet.__init__ django.db.models.query.QuerySet.__deepcopy__ django.db.models.query.QuerySet.__xor__ django.db.models.query.RawQuerySet.__aiter__ django.db.models.query.RelatedPopulator django.db.models.query.get_related_populators django.db.models.query.normalize_prefetch_lookups django.db.models.query.prefetch_one_level django.db.models.query_utils.Q.identity django.db.models.query_utils.RegisterLookupMixin._unregister_lookup django.db.models.query_utils.RegisterLookupMixin.get_class_lookups django.db.models.query_utils.RegisterLookupMixin.get_instance_lookups django.db.models.query_utils.RegisterLookupMixin.get_lookups django.db.models.query_utils.RegisterLookupMixin.register_class_lookup django.db.models.query_utils.RegisterLookupMixin.register_instance_lookup django.db.models.query_utils.RegisterLookupMixin.register_lookup django.db.models.query_utils.class_or_instance_method django.db.models.query_utils.logger django.db.models.query_utils.select_related_descend django.db.models.sql.AggregateQuery.__init__ django.db.models.sql.InsertQuery.__init__ django.db.models.sql.compiler.SQLCompiler.__init__ django.db.models.sql.compiler.SQLCompiler.get_default_columns django.db.models.sql.compiler.SQLCompiler.get_qualify_sql django.db.models.sql.compiler.SQLCompiler.get_related_selections django.db.models.sql.datastructures.BaseTable.identity django.db.models.sql.datastructures.Join.identity django.db.models.sql.subqueries.AggregateQuery.__init__ django.db.models.sql.subqueries.InsertQuery.__init__ django.db.models.sql.where.ExtraWhere.contains_over_clause django.db.models.sql.where.NothingNode.contains_over_clause django.db.models.sql.where.WhereNode.get_db_converters django.db.models.sql.where.WhereNode.get_group_by_cols django.db.models.sql.where.WhereNode.get_lookup django.db.models.sql.where.WhereNode.get_source_expressions django.db.models.sql.where.WhereNode.leaves django.db.models.sql.where.WhereNode.replace_expressions django.db.models.sql.where.WhereNode.set_source_expressions django.db.models.sql.where.WhereNode.split_having django.db.models.sql.where.WhereNode.split_having_qualify django.db.utils.DatabaseErrorWrapper.__call__ django.forms.ALL_FIELDS django.forms.BaseForm.__init__ django.forms.BaseFormSet.__init__ django.forms.BaseModelFormSet.model django.forms.ChoiceField.__deepcopy__ django.forms.Field.__deepcopy__ django.forms.FileField.bound_data django.forms.Media.__html__ django.forms.ModelChoiceField.__deepcopy__ django.forms.MultiValueField.__deepcopy__ django.forms.MultiWidget.use_fieldset django.forms.RadioSelect.id_for_label django.forms.RadioSelect.use_fieldset django.forms.SelectDateWidget.use_fieldset django.forms.Widget.use_fieldset django.forms.boundfield.BoundWidget.__html__ django.forms.fields.ChoiceField.__deepcopy__ django.forms.fields.Field.__deepcopy__ django.forms.fields.FileField.bound_data django.forms.fields.MultiValueField.__deepcopy__ django.forms.forms.BaseForm.__init__ django.forms.formset_factory django.forms.formsets.BaseFormSet.__init__ django.forms.formsets.ManagementForm.__init__ django.forms.formsets.formset_factory django.forms.inlineformset_factory django.forms.modelformset_factory django.forms.models.BaseModelFormSet.model django.forms.models.ModelChoiceField.__deepcopy__ django.forms.models.inlineformset_factory django.forms.models.modelformset_factory django.forms.renderers.DjangoDivFormRenderer django.forms.widgets.ChoiceWidget.template_name django.forms.widgets.Input.input_type django.forms.widgets.Media.__html__ django.forms.widgets.MultiWidget.use_fieldset django.forms.widgets.RadioSelect.id_for_label django.forms.widgets.RadioSelect.use_fieldset django.forms.widgets.SelectDateWidget.use_fieldset django.forms.widgets.Widget.use_fieldset django.template.VariableDoesNotExist.__init__ django.template.base.FilterExpression.is_var django.template.base.VariableDoesNotExist.__init__ django.template.defaultfilters.json_script django.template.library.InclusionNode.token django.template.library.SimpleNode.token django.template.loader_tags.BlockNode.token django.template.loader_tags.ExtendsNode.token django.template.loader_tags.IncludeNode.token django.template.loaders.cached.Loader.get_dirs django.template.smartif.EndToken django.template.smartif.key django.template.smartif.op django.test.runner.DiscoverRunner.log django.test.runner.DiscoverRunner.reorder_by django.test.runner.DummyList django.test.runner.PDBDebugResult.debug django.test.runner.ParallelTestSuite.__init__ django.test.runner.ParallelTestSuite.initialize_suite django.test.runner.ParallelTestSuite.process_setup django.test.runner.ParallelTestSuite.process_setup_args django.test.runner.Shuffler django.test.runner.default_test_processes django.test.runner.filter_tests_by_tags django.test.runner.find_top_level django.test.runner.get_max_test_processes django.test.runner.is_discoverable django.test.runner.parallel_type django.test.runner.partition_suite_by_type django.test.runner.reorder_suite django.test.runner.reorder_test_bin django.test.runner.reorder_tests django.test.runner.shuffle_tests django.test.runner.test_match_tags django.test.runner.try_importing django.test.selenium.SeleniumTestCase django.test.selenium.SeleniumTestCase.external_host django.test.selenium.SeleniumTestCase.tags django.test.selenium.SeleniumTestCaseBase.__new__ django.test.selenium.SeleniumTestCaseBase.create_options django.test.selenium.SeleniumTestCaseBase.external_host django.test.selenium.SeleniumTestCaseBase.get_capability django.test.selenium.SeleniumTestCaseBase.headless django.test.selenium.SeleniumTestCaseBase.import_options django.test.selenium.SeleniumTestCaseBase.selenium_hub django.test.testcases.LiveServerThread.__init__ django.test.testcases.LiveServerThread.server_class django.test.testcases._AssertTemplateUsedContext.__init__ django.urls.conf.path django.urls.conf.re_path django.urls.path django.urls.re_path django.urls.resolvers.LocaleRegexDescriptor.__get__ # mypy 1.9.0 new issues: django.db.models.expressions.rhs django.db.models.expressions.result django.db.models.expressions.lhs django.db.backends.postgresql.base.Cursor django-stubs-5.2.9/scripts/stubtest/allowlist_todo_django52.txt000066400000000000000000000124601513401051600247630ustar00rootroot00000000000000# Autogenerated by `stubtest` # Created for 5.2 update: django.contrib.contenttypes.fields.GenericRelation.get_foreign_related_value django.contrib.contenttypes.fields.GenericRelation.get_local_related_value django.contrib.gis.db.backends.mysql.schema.MySQLGISSchemaEditor.__init__ django.contrib.gis.db.backends.oracle.operations.OracleOperations.convert_extent django.contrib.gis.db.backends.oracle.operations.OracleOperations.from_text django.contrib.gis.db.models.BaseConstraint.non_db_attrs django.contrib.gis.db.models.Count.allows_composite_expressions django.contrib.gis.db.models.Field.has_db_default django.contrib.gis.db.models.ForeignKey.cast_db_type django.contrib.gis.db.models.OrderBy.allows_composite_expressions django.contrib.gis.db.models.Q.identity django.contrib.gis.gdal.OGRGeometry.geos_support django.contrib.gis.gdal.OGRGeometry.get_curve_geometry django.contrib.gis.gdal.OGRGeometry.get_linear_geometry django.contrib.gis.gdal.OGRGeometry.has_curve django.contrib.gis.gdal.geometries.CircularString django.contrib.gis.gdal.geometries.CompoundCurve django.contrib.gis.gdal.geometries.CurvePolygon django.contrib.gis.gdal.geometries.MultiCurve django.contrib.gis.gdal.geometries.MultiSurface django.contrib.gis.gdal.geometries.OGRGeometry.geos_support django.contrib.gis.gdal.geometries.OGRGeometry.get_curve_geometry django.contrib.gis.gdal.geometries.OGRGeometry.get_linear_geometry django.contrib.gis.gdal.geometries.OGRGeometry.has_curve django.contrib.gis.gdal.prototypes.geom.get_curve_geom django.contrib.gis.gdal.prototypes.geom.get_linear_geom django.contrib.gis.gdal.prototypes.geom.has_curve_geom django.contrib.gis.geos.prototypes.io.DEFAULT_TRIM_VALUE django.contrib.gis.management django.contrib.gis.management.commands django.contrib.gis.management.commands.inspectdb django.contrib.gis.management.commands.ogrinspect django.contrib.sessions.backends.base.SessionBase.pop django.core.checks.Tags.commands django.core.checks.commands django.core.checks.registry.Tags.commands django.core.handlers.wsgi.LimitedStream.read django.core.handlers.wsgi.LimitedStream.readline django.db.backends.base.features.BaseDatabaseFeatures.rounds_to_even django.db.backends.base.features.BaseDatabaseFeatures.supports_tuple_lookups django.db.backends.base.schema.BaseDatabaseSchemaEditor.sql_pk_constraint django.db.backends.mysql.compiler.SQLCompiler.__init__ django.db.backends.mysql.compiler.SQLCompiler.get_default_columns django.db.backends.mysql.compiler.SQLCompiler.get_qualify_sql django.db.backends.mysql.compiler.SQLCompiler.get_related_selections django.db.backends.mysql.features.DatabaseFeatures.allows_group_by_selected_pks django.db.backends.mysql.features.DatabaseFeatures.has_native_uuid_field django.db.backends.mysql.features.DatabaseFeatures.supports_expression_defaults django.db.backends.oracle.base.DatabaseWrapper.close_pool django.db.backends.oracle.base.DatabaseWrapper.is_pool django.db.backends.oracle.base.DatabaseWrapper.ops django.db.backends.oracle.base.DatabaseWrapper.oracledb_version django.db.backends.oracle.base.DatabaseWrapper.pool django.db.backends.oracle.features.DatabaseFeatures.bare_select_suffix django.db.backends.oracle.features.DatabaseFeatures.supports_aggregation_over_interval_types django.db.backends.oracle.features.DatabaseFeatures.supports_comparing_boolean_expr django.db.backends.oracle.features.DatabaseFeatures.supports_primitives_in_json_field django.db.backends.oracle.features.DatabaseFeatures.supports_tuple_lookups django.db.backends.oracle.features.DatabaseFeatures.test_collations django.db.backends.oracle.introspection.TableInfo django.db.backends.oracle.oracledb_any django.db.backends.oracle.utils.BulkInsertMapper.NCLOB django.db.backends.oracle.utils.dsn django.db.backends.postgresql.base.DatabaseWrapper.close_pool django.db.backends.postgresql.base.DatabaseWrapper.pool django.db.backends.postgresql.compiler django.db.backends.postgresql.features.DatabaseFeatures.django_test_skips django.db.backends.postgresql.features.DatabaseFeatures.supports_nulls_distinct_unique_constraints django.db.backends.postgresql.psycopg_any django.db.backends.sqlite3.base.DatabaseWrapper.transaction_modes django.db.backends.sqlite3.features.DatabaseFeatures.supports_tuple_lookups django.db.backends.sqlite3.schema.DatabaseSchemaEditor.sql_alter_column_comment django.db.backends.sqlite3.schema.DatabaseSchemaEditor.sql_alter_table_comment django.db.migrations.autodetector.MigrationAutodetector.generate_altered_constraints django.db.migrations.autodetector.OperationDependency django.db.migrations.state.ProjectState.alter_constraint django.db.models.BaseConstraint.non_db_attrs django.db.models.Count.allows_composite_expressions django.db.models.Field.has_db_default django.db.models.ForeignKey.cast_db_type django.db.models.OrderBy.allows_composite_expressions django.db.models.Q.identity django.db.models.aggregates.Count.allows_composite_expressions django.db.models.constraints.BaseConstraint.non_db_attrs django.db.models.expressions.BaseExpression.allows_composite_expressions django.db.models.expressions.BaseExpression.set_returning django.db.models.expressions.ColPairs django.db.models.expressions.OrderBy.allows_composite_expressions django.db.models.expressions.OutputFieldIsNoneError django.db.models.fields.Field.has_db_default django.db.models.fields.related.ForeignKey.cast_db_type django.db.models.fields.tuple_lookups django-stubs-5.2.9/scripts/tests_extension_hook.py000066400000000000000000000034751513401051600224530ustar00rootroot00000000000000from pytest_mypy_plugins.collect import File from pytest_mypy_plugins.item import YamlTestItem def django_plugin_hook(test_item: YamlTestItem) -> None: custom_settings = test_item.parsed_test_data.get("custom_settings", "") installed_apps = test_item.parsed_test_data.get("installed_apps", None) monkeypatch = test_item.parsed_test_data.get("monkeypatch", False) if installed_apps and custom_settings: raise ValueError('"installed_apps" and "custom_settings" are not compatible, please use one or the other') if installed_apps: # custom_settings is empty, add INSTALLED_APPS installed_apps_as_str = "(" + ",".join([repr(app) for app in installed_apps]) + ",)" custom_settings += "INSTALLED_APPS = " + installed_apps_as_str if "SECRET_KEY" not in custom_settings: custom_settings = 'SECRET_KEY = "1"\n' + custom_settings if monkeypatch: custom_settings = "import django_stubs_ext\ndjango_stubs_ext.monkeypatch()\n" + custom_settings django_settings_section = "\n[mypy.plugins.django-stubs]\ndjango_settings_module = mysettings" if not test_item.additional_mypy_config: test_item.additional_mypy_config = django_settings_section else: if "[mypy.plugins.django-stubs]" not in test_item.additional_mypy_config: test_item.additional_mypy_config += django_settings_section mysettings_file = File(path="mysettings.py", content=custom_settings) test_item.files.append(mysettings_file) if hasattr(test_item.config, "workerinput"): # Append worker ID to cache directory to prevent race conditions during parallel mypy testing # Avoids potential file corruption when multiple processes access/write cached files simultaneously test_item.incremental_cache_dir += test_item.config.workerinput["workerid"] django-stubs-5.2.9/tests/000077500000000000000000000000001513401051600152655ustar00rootroot00000000000000django-stubs-5.2.9/tests/__init__.py000066400000000000000000000000001513401051600173640ustar00rootroot00000000000000django-stubs-5.2.9/tests/assert_type/000077500000000000000000000000001513401051600176275ustar00rootroot00000000000000django-stubs-5.2.9/tests/assert_type/__init__.py000066400000000000000000000000001513401051600217260ustar00rootroot00000000000000django-stubs-5.2.9/tests/assert_type/apps/000077500000000000000000000000001513401051600205725ustar00rootroot00000000000000django-stubs-5.2.9/tests/assert_type/apps/__init__.py000066400000000000000000000000001513401051600226710ustar00rootroot00000000000000django-stubs-5.2.9/tests/assert_type/apps/test_config.py000066400000000000000000000024151513401051600234520ustar00rootroot00000000000000from django.apps.config import AppConfig from django.utils.functional import cached_property from typing_extensions import assert_type class FooConfig(AppConfig): name = "foo" default_auto_field = "django.db.models.BigAutoField" class BarConfig(AppConfig): name = "foo" @property def default_auto_field(self) -> str: # type: ignore[override] # pyrefly: ignore[bad-override] return "django.db.models.BigAutoField" class BazConfig(AppConfig): name = "foo" @cached_property def default_auto_field(self) -> str: # type: ignore[override] # pyrefly: ignore[bad-override] return "django.db.models.BigAutoField" class FooBarConfig(AppConfig): name = "foo" default_auto_field = cached_property(lambda self: "django.db.models.BigAutoField") # Pyright correctly picks up our fake '_Getter' descriptor on class level. But we # silence the pyright error since mypy doesn't follow along and the fake descriptor # is a stubs detail made to round other problems. assert_type(FooConfig.default_auto_field, str) # pyright: ignore[reportAssertTypeFailure] assert_type(BarConfig("bar", None).default_auto_field, str) assert_type(BazConfig("baz", None).default_auto_field, str) assert_type(FooBarConfig("baz", None).default_auto_field, str) django-stubs-5.2.9/tests/assert_type/conf/000077500000000000000000000000001513401051600205545ustar00rootroot00000000000000django-stubs-5.2.9/tests/assert_type/conf/settings.py000066400000000000000000000100441513401051600227650ustar00rootroot00000000000000from pathlib import Path from django_stubs_ext.settings import TemplatesSetting BASE_DIR = Path(__file__).resolve().parent # Example taken from various doc pages # https://docs.djangoproject.com/en/5.2/ref/settings/#templates TEMPLATES: list[TemplatesSetting] = [ { "BACKEND": "django.template.backends.django.DjangoTemplates", "APP_DIRS": True, }, ] # https://docs.djangoproject.com/en/5.2/ref/templates/api/#the-dirs-option TEMPLATES_2: list[TemplatesSetting] = [ { "BACKEND": "django.template.backends.django.DjangoTemplates", "DIRS": [ "/home/html/templates/lawrence.com", "/home/html/templates/default", ], }, ] # https://docs.djangoproject.com/en/5.2/ref/templates/api/#template-loaders TEMPLATES_3: list[TemplatesSetting] = [ { "BACKEND": "django.template.backends.django.DjangoTemplates", "DIRS": [BASE_DIR / "templates"], } ] TEMPLATES_4: list[TemplatesSetting] = [ { "BACKEND": "django.template.backends.django.DjangoTemplates", "OPTIONS": { "loaders": [ ( "django.template.loaders.filesystem.Loader", [BASE_DIR / "templates"], ), ], }, } ] # https://docs.djangoproject.com/en/5.2/ref/templates/api/#django.template.loaders.cached.Loader TEMPLATES_5: list[TemplatesSetting] = [ { "BACKEND": "django.template.backends.django.DjangoTemplates", "DIRS": [BASE_DIR / "templates"], "OPTIONS": { "loaders": [ ( "django.template.loaders.cached.Loader", [ "django.template.loaders.filesystem.Loader", "django.template.loaders.app_directories.Loader", "path.to.custom.Loader", ], ), ], }, } ] # https://docs.djangoproject.com/en/5.2/ref/templates/api/#django.template.loaders.cached.Loader TEMPLATES_6: list[TemplatesSetting] = [ { "BACKEND": "django.template.backends.django.DjangoTemplates", "OPTIONS": { "loaders": [ ( "django.template.loaders.locmem.Loader", { "index.html": "content here", }, ), ], }, } ] # https://docs.djangoproject.com/en/5.2/topics/templates/#configuration TEMPLATES_7: list[TemplatesSetting] = [ { "BACKEND": "django.template.backends.django.DjangoTemplates", "DIRS": [], "APP_DIRS": True, "OPTIONS": { # ... some options here ... }, }, ] # https://docs.djangoproject.com/en/5.2/topics/templates/#django.template.backends.base.Template.render TEMPLATES_8: list[TemplatesSetting] = [ { "BACKEND": "django.template.backends.django.DjangoTemplates", "DIRS": [ "/home/html/example.com", "/home/html/default", ], }, { "BACKEND": "django.template.backends.jinja2.Jinja2", "DIRS": [ "/home/html/jinja2", ], }, ] # Custom jinja backend TEMPLATES_9: list[TemplatesSetting] = [ { "BACKEND": "django.template.backends.django.DjangoTemplates", "DIRS": [BASE_DIR / "templates" / "django"], "APP_DIRS": True, }, { "BACKEND": "django.template.backends.jinja2.Jinja2", "DIRS": [BASE_DIR / "templates" / "jinja"], "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", ], "environment": "example.jinja.environment", "extensions": [ "jinja2.ext.do", "jinja2.ext.i18n", "jinja2.ext.loopcontrols", ], }, }, ] django-stubs-5.2.9/tests/assert_type/contrib/000077500000000000000000000000001513401051600212675ustar00rootroot00000000000000django-stubs-5.2.9/tests/assert_type/contrib/admin/000077500000000000000000000000001513401051600223575ustar00rootroot00000000000000django-stubs-5.2.9/tests/assert_type/contrib/admin/__init__.py000066400000000000000000000000001513401051600244560ustar00rootroot00000000000000django-stubs-5.2.9/tests/assert_type/contrib/admin/test_utils.py000066400000000000000000000062131513401051600251320ustar00rootroot00000000000000from __future__ import annotations from django import http from django.contrib import admin from django.contrib.admin.options import _DisplayT from django.contrib.admin.utils import flatten, flatten_fieldsets from django.db import models from typing_extensions import assert_type @admin.display(description="Name") def upper_case_name(obj: Person) -> str: return f"{obj.first_name} {obj.last_name}".upper() # pyright: ignore[reportUnknownMemberType] class Person(models.Model): first_name = models.CharField(max_length=None) # pyright: ignore[reportUnknownVariableType] last_name = models.CharField(max_length=None) # pyright: ignore[reportUnknownVariableType] birthday = models.DateField() # pyright: ignore[reportUnknownVariableType] class PersonListAdmin(admin.ModelAdmin[Person]): fields = [["first_name", "last_name"], "birthday"] list_display = [upper_case_name, "birthday"] class PersonTupleAdmin(admin.ModelAdmin[Person]): fields = (("first_name", "last_name"), "birthday") list_display = (upper_case_name, "birthday") class PersonFieldsetListAdmin(admin.ModelAdmin[Person]): fieldsets = [ ( "Personal Details", { "description": "Personal details of a person.", "fields": [["first_name", "last_name"], "birthday"], }, ) ] class PersonFieldsetTupleAdmin(admin.ModelAdmin[Person]): fieldsets = ( ( "Personal Details", { "description": "Personal details of a person.", "fields": (("first_name", "last_name"), "birthday"), }, ), ) request = http.HttpRequest() admin_site = admin.AdminSite() person_list_admin = PersonListAdmin(Person, admin_site) person_tuple_admin = PersonTupleAdmin(Person, admin_site) person_fieldset_list_admin = PersonFieldsetListAdmin(Person, admin_site) person_fieldset_tuple_admin = PersonFieldsetTupleAdmin(Person, admin_site) # For some reason, pyright cannot see that these are not `None`. assert person_list_admin.fields is not None assert person_tuple_admin.fields is not None assert person_fieldset_list_admin.fieldsets is not None assert person_fieldset_tuple_admin.fieldsets is not None assert_type(flatten(person_list_admin.fields), list[str]) assert_type(flatten(person_list_admin.get_fields(request)), list[str]) assert_type(flatten(person_tuple_admin.fields), list[str]) assert_type(flatten(person_tuple_admin.get_fields(request)), list[str]) assert_type(flatten(person_list_admin.list_display), list[_DisplayT[Person]]) assert_type(flatten(person_list_admin.get_list_display(request)), list[_DisplayT[Person]]) assert_type(flatten(person_tuple_admin.list_display), list[_DisplayT[Person]]) assert_type(flatten(person_tuple_admin.get_list_display(request)), list[_DisplayT[Person]]) assert_type(flatten_fieldsets(person_fieldset_list_admin.fieldsets), list[str]) assert_type(flatten_fieldsets(person_fieldset_list_admin.get_fieldsets(request)), list[str]) assert_type(flatten_fieldsets(person_fieldset_tuple_admin.fieldsets), list[str]) assert_type(flatten_fieldsets(person_fieldset_tuple_admin.get_fieldsets(request)), list[str]) django-stubs-5.2.9/tests/assert_type/contrib/auth/000077500000000000000000000000001513401051600222305ustar00rootroot00000000000000django-stubs-5.2.9/tests/assert_type/contrib/auth/test_decorators.py000066400000000000000000000007421513401051600260110ustar00rootroot00000000000000from django.contrib.auth.decorators import user_passes_test from django.http import HttpRequest, HttpResponse from django.urls import reverse, reverse_lazy reversed_url = reverse("url") lazy_url = reverse_lazy("namespace:url") @user_passes_test(lambda user: user.is_active, login_url=reversed_url) def my_view1(request: HttpRequest) -> HttpResponse: ... @user_passes_test(lambda user: user.is_active, login_url=lazy_url) def my_view2(request: HttpRequest) -> HttpResponse: ... django-stubs-5.2.9/tests/assert_type/contrib/auth/test_models.py000066400000000000000000000004021513401051600251200ustar00rootroot00000000000000from django.contrib.auth.models import AbstractBaseUser, UserManager from typing_extensions import assert_type class MyUser(AbstractBaseUser): pass class Manager(UserManager[MyUser]): pass assert_type(Manager().create_user("username"), MyUser) django-stubs-5.2.9/tests/assert_type/db/000077500000000000000000000000001513401051600202145ustar00rootroot00000000000000django-stubs-5.2.9/tests/assert_type/db/__init__.py000066400000000000000000000000001513401051600223130ustar00rootroot00000000000000django-stubs-5.2.9/tests/assert_type/db/models/000077500000000000000000000000001513401051600214775ustar00rootroot00000000000000django-stubs-5.2.9/tests/assert_type/db/models/__init__.py000066400000000000000000000000001513401051600235760ustar00rootroot00000000000000django-stubs-5.2.9/tests/assert_type/db/models/_enums.py000066400000000000000000000016051513401051600233410ustar00rootroot00000000000000from typing import Literal from django.db.models import TextChoices from typing_extensions import assert_type class Direction(TextChoices): NORTH = "N", "North" EAST = "E", "East" SOUTH = "S", "South" WEST = "W", "West" # Note: Suppress errors from pyright as the mypy plugin narrows the type of labels if non-lazy. assert_type(Direction.names, list[str]) assert_type(Direction.labels, list[str]) # pyright: ignore[reportAssertTypeFailure] assert_type(Direction.values, list[str]) assert_type(Direction.choices, list[tuple[str, str]]) # pyright: ignore[reportAssertTypeFailure] assert_type(Direction.NORTH, Literal[Direction.NORTH]) assert_type(Direction.NORTH.name, Literal["NORTH"]) assert_type(Direction.NORTH.label, str) # pyright: ignore[reportAssertTypeFailure] assert_type(Direction.NORTH.value, str) assert_type(Direction.NORTH.do_not_call_in_templates, Literal[True]) django-stubs-5.2.9/tests/assert_type/db/models/fields/000077500000000000000000000000001513401051600227455ustar00rootroot00000000000000django-stubs-5.2.9/tests/assert_type/db/models/fields/__init__.py000066400000000000000000000000001513401051600250440ustar00rootroot00000000000000django-stubs-5.2.9/tests/assert_type/db/models/fields/test_related_descriptors.py000066400000000000000000000007771513401051600304320ustar00rootroot00000000000000from typing import ClassVar from django.db import models from django.db.models.fields.related_descriptors import RelatedManager, ReverseManyToOneDescriptor from typing_extensions import assert_type class Other(models.Model): explicit_descriptor: ClassVar[ReverseManyToOneDescriptor["MyModel"]] class MyModel(models.Model): rel = models.ForeignKey[Other, Other](Other, on_delete=models.CASCADE, related_name="explicit_descriptor") assert_type(Other().explicit_descriptor, RelatedManager[MyModel]) django-stubs-5.2.9/tests/assert_type/db/models/test_constraints.py000066400000000000000000000014071513401051600254610ustar00rootroot00000000000000from typing import Any from django.db.models import CheckConstraint, F, UniqueConstraint from django.db.models.functions import Lower from django.db.models.lookups import LessThan UniqueConstraint(Lower("name").desc(), "category", name="unique_lower_name_category") UniqueConstraint(fields=["name"], name="unique_name") # There's no overload case for passing both expression and 'fields' UniqueConstraint( # type: ignore[call-overload] # pyrefly: ignore[no-matching-overload] Lower("name"), fields=["name"], # pyright: ignore[reportArgumentType] name="unique_mess", ) CheckConstraint( # type: ignore[deprecated] # pyright: ignore[reportDeprecated] # pyrefly: ignore[deprecated] name="less_than_constraint", check=LessThan[Any](F("months"), 1), ) django-stubs-5.2.9/tests/assert_type/db/models/test_enums.py000066400000000000000000000350311513401051600242410ustar00rootroot00000000000000import enum from typing import Any, Literal, TypeVar from django.db.models import Choices, IntegerChoices, Model, TextChoices from django.utils.functional import _StrOrPromise, _StrPromise from django.utils.translation import gettext_lazy as _ from typing_extensions import assert_type # Choices in a separate model to test that the plugin resolves types correctly. from tests.assert_type.db.models import _enums as imported T_Choices = TypeVar("T_Choices", bound=IntegerChoices) def get_choices_using_property(choices: type[T_Choices]) -> list[tuple[int, str]]: return choices.choices # pyright: ignore[reportReturnType] def get_labels_using_property(choices: type[T_Choices]) -> list[str]: return choices.labels # pyright: ignore[reportReturnType] def get_values_using_property(choices: type[T_Choices]) -> list[int]: return choices.values def get_labels_using_comprehension(choices: type[T_Choices]) -> list[str]: return [choice.label for choice in choices] # pyright: ignore[reportReturnType] def get_values_using_comprehension(choices: type[T_Choices]) -> list[int]: return [choice.value for choice in choices] class Suit(IntegerChoices): DIAMOND = 1, _("Diamond") SPADE = 2, _("Spade") HEART = 3, _("Heart") CLUB = 4, _("Club") class YearInSchool(TextChoices): FRESHMAN = "FR", _("Freshman") SOPHOMORE = "SO", _("Sophomore") JUNIOR = "JR", _("Junior") SENIOR = "SR", _("Senior") GRADUATE = "GR", _("Graduate") class Vehicle(IntegerChoices): CAR = 1, "Carriage" TRUCK = 2 JET_SKI = 3 __empty__ = _("(Unknown)") class Gender(TextChoices): MALE = "M" FEMALE = "F" NOT_SPECIFIED = "X" __empty__ = "(Undeclared)" class Medal(TextChoices): GOLD = enum.auto() SILVER = enum.auto() BRONZE = enum.auto() class Separator(bytes, Choices): FS = b"\x1c", "File Separator" GS = b"\x1d", "Group Separator" RS = b"\x1e", "Record Separator" US = b"\x1f", "Unit Separator" class Constants(float, Choices): PI = 3.141592653589793, "π" TAU = 6.283185307179586, "τ" __empty__ = "NULL" class BaseEmptyChoices(Choices): __empty__ = "Python's None" class VoidChoices(BaseEmptyChoices): ABYSS = enum.auto() CHASM = enum.auto() # Choice type that has been aliased to test that the plugin resolves types correctly. CompassPoint = imported.Direction # Choice type that has been aliased by type to test that the plugin resolves types correctly. Award: type[TextChoices] = Medal # Checks unions of enum literals to test that the plugin resolves types correctly. def get_suit_with_color(suit: Suit) -> str: if suit == Suit.DIAMOND or suit == Suit.HEART: return f"{suit.label} is red." return f"{suit.label} is black." # Checks a single enum literal to test that the plugin resolves types correctly. def is_suit_a_diamond(suit: Suit) -> str: if suit == Suit.DIAMOND: return f"{suit.label}: Yes!" return f"{suit.label}: No!" # Choice type that overrides a property and uses `super()` to test the plugin resolve types correctly. class ShoutyTextChoices(TextChoices): @property def label(self) -> str: return super().label.upper() class DeckModel(Model): # Alias with the same name. Suit = Suit # Alias with a different name. House = Suit class Joker(TextChoices): BLACK = "B" RED = "R" # Assertions for an integer choices type that uses a lazy translatable string for all labels. assert_type(Suit.names, list[str]) assert_type(Suit.labels, list[_StrPromise]) # pyright: ignore[reportAssertTypeFailure] assert_type(Suit.values, list[int]) assert_type(Suit.choices, list[tuple[int, _StrPromise]]) # pyright: ignore[reportAssertTypeFailure] assert_type(Suit.CLUB, Literal[Suit.CLUB]) assert_type(Suit.CLUB.name, Literal["CLUB"]) assert_type(Suit.CLUB.label, _StrPromise) # pyright: ignore[reportAssertTypeFailure] assert_type(Suit.CLUB.value, int) assert_type(Suit.CLUB.do_not_call_in_templates, Literal[True]) # Assertions for a text choices type that uses a lazy translatable string for all labels. assert_type(YearInSchool.names, list[str]) assert_type(YearInSchool.labels, list[_StrPromise]) # pyright: ignore[reportAssertTypeFailure] assert_type(YearInSchool.values, list[str]) assert_type(YearInSchool.choices, list[tuple[str, _StrPromise]]) # pyright: ignore[reportAssertTypeFailure] assert_type(YearInSchool.SENIOR, Literal[YearInSchool.SENIOR]) assert_type(YearInSchool.SENIOR.name, Literal["SENIOR"]) assert_type(YearInSchool.SENIOR.label, _StrPromise) # pyright: ignore[reportAssertTypeFailure] assert_type(YearInSchool.SENIOR.value, str) assert_type(YearInSchool.SENIOR.do_not_call_in_templates, Literal[True]) # Assertions for an integer choices type that defines `__empty__`, generates most labels, etc. # Note: Suppress errors from pyright as the mypy plugin handles making types optional. assert_type(Vehicle.names, list[str]) assert_type(Vehicle.labels, list[_StrOrPromise]) assert_type(Vehicle.values, list[int | None]) # pyright: ignore[reportAssertTypeFailure] assert_type(Vehicle.choices, list[tuple[int | None, _StrOrPromise]]) # pyright: ignore[reportAssertTypeFailure] assert_type(Vehicle.CAR, Literal[Vehicle.CAR]) assert_type(Vehicle.CAR.name, Literal["CAR"]) assert_type(Vehicle.CAR.label, _StrOrPromise) assert_type(Vehicle.CAR.value, int) assert_type(Vehicle.CAR.do_not_call_in_templates, Literal[True]) assert_type(Vehicle.__empty__, _StrPromise) # pyright: ignore[reportAssertTypeFailure] # Assertions for an text choices type that defines `__empty__` and uses plain strings for all labels. # Note: Suppress errors from pyright as the mypy plugin handles making types optional. # Note: Suppress errors from pyright as the mypy plugin narrows the type of labels if non-lazy. assert_type(Gender.names, list[str]) assert_type(Gender.labels, list[str]) # pyright: ignore[reportAssertTypeFailure] assert_type(Gender.values, list[str | None]) # pyright: ignore[reportAssertTypeFailure] assert_type(Gender.choices, list[tuple[str | None, str]]) # pyright: ignore[reportAssertTypeFailure] assert_type(Gender.MALE, Literal[Gender.MALE]) assert_type(Gender.MALE.name, Literal["MALE"]) assert_type(Gender.MALE.label, str) # pyright: ignore[reportAssertTypeFailure] assert_type(Gender.MALE.value, str) assert_type(Gender.MALE.do_not_call_in_templates, Literal[True]) assert_type(Gender.__empty__, str) # pyright: ignore[reportAssertTypeFailure] # Assertions for a text choices type that uses `enum.auto()`. # Note: Suppress errors from pyright as the mypy plugin narrows the type of labels if non-lazy. assert_type(Medal.names, list[str]) assert_type(Medal.labels, list[str]) # pyright: ignore[reportAssertTypeFailure] assert_type(Medal.values, list[str]) assert_type(Medal.choices, list[tuple[str, str]]) # pyright: ignore[reportAssertTypeFailure] assert_type(Medal.GOLD, Literal[Medal.GOLD]) assert_type(Medal.GOLD.name, Literal["GOLD"]) assert_type(Medal.GOLD.label, str) # pyright: ignore[reportAssertTypeFailure] assert_type(Medal.GOLD.value, str) assert_type(Medal.GOLD.do_not_call_in_templates, Literal[True]) # Assertions for a choices type that uses a custom base type. # Note: Suppress errors from pyright as the mypy plugin handles propagating custom base types. # Note: Suppress errors from pyright as the mypy plugin narrows the type of labels if non-lazy. assert_type(Separator.names, list[str]) assert_type(Separator.labels, list[str]) # pyright: ignore[reportAssertTypeFailure] assert_type(Separator.values, list[bytes]) # pyright: ignore[reportAssertTypeFailure] assert_type(Separator.choices, list[tuple[bytes, str]]) # pyright: ignore[reportAssertTypeFailure] assert_type(Separator.FS, Literal[Separator.FS]) assert_type(Separator.FS.name, Literal["FS"]) assert_type(Separator.FS.label, str) # pyright: ignore[reportAssertTypeFailure] assert_type(Separator.FS.value, bytes) # pyright: ignore[reportAssertTypeFailure] assert_type(Separator.FS.do_not_call_in_templates, Literal[True]) # Assertions for a choices type uses a custom base type and defines `__empty__`. # Note: Suppress errors from pyright as the mypy plugin handles making types optional. # Note: Suppress errors from pyright as the mypy plugin handles propagating custom base types. # Note: Suppress errors from pyright as the mypy plugin narrows the type of labels if non-lazy. assert_type(Constants.names, list[str]) assert_type(Constants.labels, list[str]) # pyright: ignore[reportAssertTypeFailure] assert_type(Constants.values, list[float | None]) # pyright: ignore[reportAssertTypeFailure] assert_type(Constants.choices, list[tuple[float | None, str]]) # pyright: ignore[reportAssertTypeFailure] assert_type(Constants.PI, Literal[Constants.PI]) assert_type(Constants.PI.name, Literal["PI"]) assert_type(Constants.PI.label, str) # pyright: ignore[reportAssertTypeFailure] assert_type(Constants.PI.value, float) # pyright: ignore[reportAssertTypeFailure] assert_type(Constants.PI.do_not_call_in_templates, Literal[True]) assert_type(Constants.__empty__, str) # pyright: ignore[reportAssertTypeFailure] # Assertions for a choices type where `__empty__` is defined on a base class. # Note: Suppress errors from pyright as the mypy plugin handles making types optional. # Note: Suppress errors from pyright as the mypy plugin narrows the type of labels if non-lazy. assert_type(VoidChoices.names, list[str]) assert_type(VoidChoices.labels, list[str]) # pyright: ignore[reportAssertTypeFailure] assert_type(VoidChoices.values, list[int | None]) # type: ignore[assert-type] # pyright: ignore[reportAssertTypeFailure] assert_type( # pyrefly: ignore[assert-type] VoidChoices.values, # pyright: ignore[reportAssertTypeFailure] list[Any | None], ) assert_type(VoidChoices.choices, list[tuple[int | None, str]]) # type: ignore[assert-type] # pyright: ignore[reportAssertTypeFailure] assert_type( # pyrefly: ignore[assert-type] VoidChoices.choices, # pyright: ignore[reportAssertTypeFailure] list[tuple[Any | None, str]], ) assert_type(VoidChoices.ABYSS, Literal[VoidChoices.ABYSS]) assert_type(VoidChoices.ABYSS.name, Literal["ABYSS"]) assert_type(VoidChoices.ABYSS.label, str) # pyright: ignore[reportAssertTypeFailure] assert_type(VoidChoices.ABYSS.value, int) # type: ignore[assert-type] # pyright: ignore[reportAssertTypeFailure] assert_type(VoidChoices.ABYSS.value, Any) # pyrefly: ignore[assert-type] assert_type(VoidChoices.ABYSS.do_not_call_in_templates, Literal[True]) assert_type(VoidChoices.__empty__, str) # pyright: ignore[reportAssertTypeFailure] # Assertions for a choices type imported from another module to test the plugin resolves correctly. # Note: Suppress errors from pyright as the mypy plugin narrows the type of labels if non-lazy. assert_type(imported.Direction.names, list[str]) assert_type(imported.Direction.labels, list[str]) # pyright: ignore[reportAssertTypeFailure] assert_type(imported.Direction.values, list[str]) assert_type(imported.Direction.choices, list[tuple[str, str]]) # pyright: ignore[reportAssertTypeFailure] assert_type(imported.Direction.NORTH, Literal[imported.Direction.NORTH]) assert_type(imported.Direction.NORTH.name, Literal["NORTH"]) assert_type(imported.Direction.NORTH.label, str) # pyright: ignore[reportAssertTypeFailure] assert_type(imported.Direction.NORTH.value, str) assert_type(imported.Direction.NORTH.do_not_call_in_templates, Literal[True]) # Assertions for a choices type aliased from another to test the plugin resolves correctly. # Note: Suppress errors from pyright as the mypy plugin narrows the type of labels if non-lazy. assert_type(CompassPoint.names, list[str]) assert_type(CompassPoint.labels, list[str]) # pyright: ignore[reportAssertTypeFailure] assert_type(CompassPoint.values, list[str]) assert_type(CompassPoint.choices, list[tuple[str, str]]) # pyright: ignore[reportAssertTypeFailure] assert_type(CompassPoint.NORTH, Literal[imported.Direction.NORTH]) assert_type(CompassPoint.NORTH.name, Literal["NORTH"]) assert_type(CompassPoint.NORTH.label, str) # pyright: ignore[reportAssertTypeFailure] assert_type(CompassPoint.NORTH.value, str) assert_type(CompassPoint.NORTH.do_not_call_in_templates, Literal[True]) # Assertions for a choices type aliased by type to test the plugin resolves correctly. # Note: Suppress errors from pyright as the mypy plugin narrows the type of labels if non-lazy. assert_type(Award.names, list[str]) assert_type(Award.labels, list[str]) # pyright: ignore[reportAssertTypeFailure] assert_type(Award.values, list[str]) assert_type(Award.choices, list[tuple[str, str]]) # pyright: ignore[reportAssertTypeFailure] # Assertions for mixing multiple choices types with consistent base types - only `IntegerChoices`. x0 = (Suit, Vehicle) assert_type([member.label for choices in x0 for member in choices], list[_StrOrPromise]) assert_type([member.value for choices in x0 for member in choices], list[int]) # Assertions for mixing multiple choices types with consistent base types - only `TextChoices`. x1 = (Medal, Gender) assert_type([member.label for choices in x1 for member in choices], list[str]) # type: ignore[assert-type] # pyright: ignore[reportAssertTypeFailure] assert_type([member.label for choices in x1 for member in choices], list[_StrOrPromise]) # pyrefly: ignore[assert-type] assert_type([member.value for choices in x1 for member in choices], list[str]) # Assertions for mixing multiple choices types with different base types - `IntegerChoices` and `TextChoices`. x2 = (Medal, Suit) assert_type([member.label for choices in x2 for member in choices], list[_StrOrPromise]) assert_type([member.value for choices in x2 for member in choices], list[int | str]) # Assertions for mixing multiple choices types with consistent base types - custom types. x3 = (Constants, Separator) assert_type([member.label for choices in x3 for member in choices], list[str]) # type: ignore[assert-type] # pyright: ignore[reportAssertTypeFailure] assert_type([member.label for choices in x3 for member in choices], list[_StrOrPromise]) # pyrefly: ignore[assert-type] assert_type([member.value for choices in x3 for member in choices], list[bytes | float]) # type: ignore[assert-type] # pyright: ignore[reportAssertTypeFailure] assert_type([member.value for choices in x3 for member in choices], list[Any]) # pyrefly: ignore[assert-type] # Assertions for choices objects defined and aliased in a model. assert_type(DeckModel.Suit.choices, list[tuple[int, _StrPromise]]) # pyright: ignore[reportAssertTypeFailure] assert_type(DeckModel.House.choices, list[tuple[int, _StrPromise]]) # pyright: ignore[reportAssertTypeFailure] assert_type(DeckModel.Joker.choices, list[tuple[str, str]]) # pyright: ignore[reportAssertTypeFailure] django-stubs-5.2.9/tests/assert_type/db/models/test_ordering.py000066400000000000000000000044351513401051600247270ustar00rootroot00000000000000from django.contrib.auth.models import User from django.db.models import F, OrderBy from django.db.models.sql.query import Query qs = User.objects.all() qs.order_by("username") qs.order_by(F("username")) qs.order_by("-date_joined", F("last_login").desc()) # Test OrderBy expressions (success cases) qs.order_by(OrderBy(F("username"))) qs.order_by(OrderBy(F("date_joined"), descending=True)) qs.order_by("username", OrderBy(F("last_login"), descending=True)) qs.extra(order_by=["username"]) qs.extra(order_by=[F("username")]) qs.extra(order_by=["username", F("date_joined").desc()]) qs.extra(order_by=[OrderBy(F("username"))]) qs.extra(order_by=["username", OrderBy(F("date_joined"), descending=True)]) query = Query(User) query.add_ordering("username") query.add_ordering(F("date_joined")) query.add_ordering("-last_login", F("username").desc()) query.add_ordering(OrderBy(F("username"))) query.add_ordering("username", OrderBy(F("date_joined"), descending=True)) query.add_extra( select=None, select_params=None, where=None, params=None, tables=None, order_by=["username", F("date_joined").desc(), OrderBy(F("last_login"))], ) # failure cases qs.order_by(123) # type: ignore[arg-type] # pyright: ignore[reportArgumentType] # pyrefly: ignore[bad-argument-type] qs.order_by(["username"]) # type: ignore[arg-type] # pyright: ignore[reportArgumentType] # pyrefly: ignore[bad-argument-type] qs.order_by({"username": "asc"}) # type: ignore[arg-type] # pyright: ignore[reportArgumentType] # pyrefly: ignore[bad-argument-type] qs.extra(order_by=[123]) # type: ignore[list-item] # pyright: ignore[reportArgumentType] # pyrefly: ignore[bad-argument-type] qs.extra(order_by=["username", 456]) # type: ignore[list-item] # pyright: ignore[reportArgumentType] # pyrefly: ignore[bad-argument-type] query.add_ordering(123) # type: ignore[arg-type] # pyright: ignore[reportArgumentType] # pyrefly: ignore[bad-argument-type] query.add_ordering(["username"]) # type: ignore[arg-type] # pyright: ignore[reportArgumentType] # pyrefly: ignore[bad-argument-type] query.add_extra( select=None, select_params=None, where=None, params=None, tables=None, order_by=[123, "username"], # type: ignore[list-item] # pyright: ignore[reportArgumentType] # pyrefly: ignore[bad-argument-type] ) django-stubs-5.2.9/tests/assert_type/db/models/test_query.py000066400000000000000000000026531513401051600242630ustar00rootroot00000000000000from collections.abc import Sequence from django.db.models import Model from django.db.models.query import ( aprefetch_related_objects, # pyright: ignore[reportUnknownVariableType] prefetch_related_objects, # pyright: ignore[reportUnknownVariableType] ) models_list: list[Model] = [] prefetch_related_objects(models_list, "pk") models_tuple: tuple[Model, ...] = () prefetch_related_objects(models_tuple, "pk") models_sequence: Sequence[Model] = [] prefetch_related_objects(models_sequence, "pk") # failure cases models_set: set[Model] = set() prefetch_related_objects(models_set, "pk") # type: ignore[arg-type] # pyright: ignore[reportArgumentType] # pyrefly: ignore[bad-argument-type] models_frozenset: frozenset[Model] = frozenset() prefetch_related_objects(models_frozenset, "pk") # type: ignore[arg-type] # pyright: ignore[reportArgumentType] # pyrefly: ignore[bad-argument-type] async def test_async() -> None: await aprefetch_related_objects(models_list, "pk") await aprefetch_related_objects(models_tuple, "pk") await aprefetch_related_objects(models_sequence, "pk") # failure cases await aprefetch_related_objects(models_set, "pk") # type: ignore[arg-type] # pyright: ignore[reportArgumentType] # pyrefly: ignore[bad-argument-type] await aprefetch_related_objects(models_frozenset, "pk") # type: ignore[arg-type] # pyright: ignore[reportArgumentType] # pyrefly: ignore[bad-argument-type] django-stubs-5.2.9/tests/assert_type/forms/000077500000000000000000000000001513401051600207555ustar00rootroot00000000000000django-stubs-5.2.9/tests/assert_type/forms/test_add_error.py000066400000000000000000000051101513401051600243240ustar00rootroot00000000000000from django.core.exceptions import ValidationError from django.forms import BaseForm from django.utils.functional import lazystr from typing_extensions import assert_type form = BaseForm() assert_type(form.add_error(None, "error"), None) assert_type(form.add_error("field", "error"), None) assert_type(form.add_error(None, lazystr("error")), None) assert_type(form.add_error("field", lazystr("error")), None) assert_type(form.add_error(None, ValidationError("error")), None) assert_type(form.add_error("field", ValidationError("error")), None) assert_type(form.add_error(None, ["error"]), None) assert_type(form.add_error("field", ["error"]), None) assert_type(form.add_error(None, [lazystr("error")]), None) assert_type(form.add_error("field", [lazystr("error")]), None) assert_type(form.add_error(None, [ValidationError("error")]), None) assert_type(form.add_error("field", [ValidationError("error")]), None) assert_type(form.add_error(None, {"field": "error"}), None) assert_type(form.add_error(None, {"field": lazystr("error")}), None) assert_type(form.add_error(None, {"field": ValidationError("error")}), None) assert_type(form.add_error(None, {"field": ["error"]}), None) assert_type(form.add_error(None, {"field": [lazystr("error")]}), None) assert_type(form.add_error(None, {"field": [ValidationError("error")]}), None) assert_type(form.add_error(None, ValidationError(["error"])), None) assert_type(form.add_error("field", ValidationError(["error"])), None) assert_type(form.add_error(None, ValidationError({"field": "error"})), None) form.add_error("field", {"field": "error"}) # type: ignore[call-overload] # pyright: ignore[reportCallIssue,reportArgumentType] # pyrefly: ignore[no-matching-overload] form.add_error("field", {"field": lazystr("error")}) # type: ignore[call-overload] # pyright: ignore[reportCallIssue,reportArgumentType] # pyrefly: ignore[no-matching-overload] form.add_error("field", {"field": ValidationError("error")}) # type: ignore[call-overload] # pyright: ignore[reportCallIssue,reportArgumentType] # pyrefly: ignore[no-matching-overload] form.add_error("field", {"field": ["error"]}) # type: ignore[call-overload] # pyright: ignore[reportCallIssue,reportArgumentType] # pyrefly: ignore[no-matching-overload] form.add_error("field", {"field": [lazystr("error")]}) # type: ignore[call-overload] # pyright: ignore[reportCallIssue,reportArgumentType] # pyrefly: ignore[no-matching-overload] form.add_error("field", {"field": [ValidationError("error")]}) # type: ignore[call-overload] # pyright: ignore[reportCallIssue,reportArgumentType] # pyrefly: ignore[no-matching-overload] django-stubs-5.2.9/tests/assert_type/http/000077500000000000000000000000001513401051600206065ustar00rootroot00000000000000django-stubs-5.2.9/tests/assert_type/http/test_redirect.py000066400000000000000000000005421513401051600240210ustar00rootroot00000000000000from django.conf import settings from django.http import HttpResponseRedirect from django.urls import reverse, reverse_lazy reversed_url = reverse("url") lazy_url = reverse_lazy("namespace:url") HttpResponseRedirect(reversed_url) HttpResponseRedirect(lazy_url) HttpResponseRedirect(settings.LOGIN_URL) HttpResponseRedirect(settings.LOGIN_REDIRECT_URL) django-stubs-5.2.9/tests/assert_type/http/test_request.py000066400000000000000000000023551513401051600237140ustar00rootroot00000000000000from collections.abc import Iterable, Iterator from django.http import QueryDict from django.http.request import _ImmutableQueryDict from typing_extensions import assert_type q = QueryDict("", False) # Test constructor overloads -- Mutable assert_type(QueryDict("querystring", True), QueryDict) assert_type(QueryDict("querystring", mutable=True), QueryDict) # Test constructor overloads -- Immutable assert_type(QueryDict(), _ImmutableQueryDict) assert_type(QueryDict("querystring"), _ImmutableQueryDict) assert_type(QueryDict("querystring", False), _ImmutableQueryDict) assert_type(QueryDict("querystring", mutable=False), _ImmutableQueryDict) # Test ImmutableQueryDict q = QueryDict() assert_type(q["a"], str) assert_type(q.get("a"), str | None) assert_type(q.items(), Iterator[tuple[str, str | list[object]]]) assert_type(q.getlist("a"), list[str]) assert_type(q.lists(), Iterable[tuple[str, list[str]]]) # Test MutableQueryDict mut_q = QueryDict(mutable=True) mut_q["a"] = "3" mut_q["a"] = ["1", "2"] # type: ignore[assignment] # pyright: ignore[reportArgumentType] # pyrefly: ignore[unsupported-operation] assert_type(mut_q.pop("a"), list[str]) assert_type(mut_q.pop("a", 12), list[str] | int) assert_type(mut_q.popitem(), tuple[str, list[str]]) django-stubs-5.2.9/tests/assert_type/middleware/000077500000000000000000000000001513401051600217445ustar00rootroot00000000000000django-stubs-5.2.9/tests/assert_type/middleware/__init__.py000066400000000000000000000000001513401051600240430ustar00rootroot00000000000000django-stubs-5.2.9/tests/assert_type/middleware/test_middleware.py000066400000000000000000000032031513401051600254700ustar00rootroot00000000000000from django.contrib.redirects.middleware import RedirectFallbackMiddleware from django.http.response import ( FileResponse, HttpResponse, HttpResponseGone, HttpResponsePermanentRedirect, HttpResponseRedirect, HttpResponseRedirectBase, ) from django.middleware.common import CommonMiddleware from django.middleware.locale import LocaleMiddleware class CustomCommonMiddleware(CommonMiddleware): response_redirect_class = HttpResponsePermanentRedirect class BrokenCustomCommonMiddleware(CommonMiddleware): response_redirect_class = FileResponse # type:ignore[assignment] # pyright: ignore[reportAssignmentType] # pyrefly: ignore[bad-assignment] class CustomLocaleMiddleware(LocaleMiddleware): response_redirect_class = HttpResponseRedirect class BrokenCustomLocaleMiddleware(CommonMiddleware): response_redirect_class = FileResponse # type:ignore[assignment] # pyright: ignore[reportAssignmentType] # pyrefly: ignore[bad-assignment] class CustomRedirectFallbackMiddleware(RedirectFallbackMiddleware): response_redirect_class = HttpResponseRedirect response_gone_class = HttpResponseGone class CustomRedirectFallbackMiddleware2(RedirectFallbackMiddleware): response_redirect_class = HttpResponseRedirectBase response_gone_class = HttpResponse class BrokenCustomRedirectFallbackMiddleware(RedirectFallbackMiddleware): response_redirect_class = HttpResponse # type:ignore[assignment] # pyright: ignore[reportAssignmentType] # pyrefly: ignore[bad-assignment] response_gone_class = 12 # type:ignore[assignment] # pyright: ignore[reportAssignmentType] # pyrefly: ignore[bad-assignment] django-stubs-5.2.9/tests/assert_type/test/000077500000000000000000000000001513401051600206065ustar00rootroot00000000000000django-stubs-5.2.9/tests/assert_type/test/client.py000066400000000000000000000012121513401051600224320ustar00rootroot00000000000000from django.test import Client from django.urls import reverse, reverse_lazy url_reverse = reverse("some:namespace") url_lazy = reverse_lazy("some:namespace") url_str = "/abc/def" client = Client() client.get(url_reverse) client.get(url_lazy) client.get(url_str) client.post(url_reverse) client.post(url_lazy) client.post(url_str) client.patch(url_reverse) client.patch(url_lazy) client.patch(url_str) client.put(url_reverse) client.put(url_lazy) client.put(url_str) client.delete(url_reverse) client.delete(url_lazy) client.delete(url_str) client.generic("GET", url_reverse) client.generic("POST", url_lazy) client.generic("DELETE", url_str) django-stubs-5.2.9/tests/assert_type/urls/000077500000000000000000000000001513401051600206145ustar00rootroot00000000000000django-stubs-5.2.9/tests/assert_type/urls/__init__.py000066400000000000000000000000001513401051600227130ustar00rootroot00000000000000django-stubs-5.2.9/tests/assert_type/urls/test_conf.py000066400000000000000000000043531513401051600231570ustar00rootroot00000000000000from django.conf.urls.i18n import urlpatterns as i18n_urlpatterns from django.contrib import admin from django.contrib.auth.views import LoginView from django.contrib.flatpages import urls as flatpages_urls from django.contrib.staticfiles.urls import staticfiles_urlpatterns from django.http import HttpResponse from django.urls import URLPattern, URLResolver, _AnyURL, include, path, re_path from django.utils.translation import gettext_lazy as _ from typing_extensions import assert_type # Test 'path' accepts mix of pattern and resolver object include1: tuple[list[_AnyURL], None, None] = ([], None, None) assert_type(path("test/", include1), URLResolver) # Test 'path' accepts pattern resolver union subset include2: tuple[list[URLPattern], None, None] = ([], None, None) assert_type(path("test/", include2), URLResolver) # Test 'path' assert_type(path("admin/", admin.site.urls), URLResolver) assert_type(path(_("admin/"), admin.site.urls, name="admin"), URLResolver) assert_type(path("login/", LoginView.as_view(), name="login1"), URLPattern) assert_type(path(_("login/"), LoginView.as_view(), name="login2"), URLPattern) def v1() -> HttpResponse: ... async def v2() -> HttpResponse: ... assert_type(path("v1/", v1), URLPattern) assert_type(path("v2/", v2), URLPattern) assert_type(re_path("^v1/", v1), URLPattern) assert_type(re_path("^v2/", v2), URLPattern) # Test 'include' patterns1: list[_AnyURL] = [] assert_type(re_path(_("^foo/"), include(patterns1)), URLResolver) assert_type(re_path("^foo/", include(patterns1, namespace="foo")), URLResolver) assert_type(re_path("^foo/", include((patterns1, "foo"), namespace="foo")), URLResolver) assert_type(re_path("^foo/", include(patterns1, "foo")), URLResolver) assert_type(path("flat/", include(flatpages_urls)), URLResolver) assert_type(path("flat/", include((flatpages_urls, "static"))), URLResolver) assert_type(path("i18n/", include(i18n_urlpatterns)), URLResolver) assert_type(path("i18n/", include((i18n_urlpatterns, "i18n"))), URLResolver) assert_type(path("admindocs/", include("django.contrib.admindocs.urls")), URLResolver) assert_type(path("admindocs/", include(("django.contrib.admindocs.urls", "i18n"))), URLResolver) assert_type(path("", include(staticfiles_urlpatterns(prefix="static/"))), URLResolver) django-stubs-5.2.9/tests/assert_type/urls/test_resolvers.py000066400000000000000000000004661513401051600242570ustar00rootroot00000000000000from django.urls.resolvers import ResolverMatch def f(x: ResolverMatch) -> None: _func, _args, _kwargs = x # does not error # would be nice but we can't really get this without tuple specialization # as `__getitem__` is implemented as `return (..., ...)[...]` # assert_type(_func, Callable) django-stubs-5.2.9/tests/assert_type/views/000077500000000000000000000000001513401051600207645ustar00rootroot00000000000000django-stubs-5.2.9/tests/assert_type/views/__init__.py000066400000000000000000000000001513401051600230630ustar00rootroot00000000000000django-stubs-5.2.9/tests/assert_type/views/test_generic.py000066400000000000000000000016721513401051600240170ustar00rootroot00000000000000from django.db import models from django.views.generic.detail import SingleObjectMixin from django.views.generic.list import ListView from typing_extensions import assert_type class MyModel(models.Model): ... class MyDetailView(SingleObjectMixin[MyModel]): ... detail_view = MyDetailView() assert_type(detail_view.model, type[MyModel]) assert_type(detail_view.queryset, models.QuerySet[MyModel, MyModel] | None) assert_type(detail_view.get_context_object_name(MyModel()), str) assert_type(detail_view.get_context_object_name(1), str | None) class MyListView(ListView[MyModel]): ... list_view = MyListView() assert_type(list_view.model, type[MyModel] | None) assert_type(list_view.queryset, models.QuerySet[MyModel, MyModel] | None) assert_type(list_view.get_context_object_name(models.QuerySet[MyModel]()), str) assert_type(list_view.get_context_object_name(MyModel()), str | None) assert_type(list_view.get_context_object_name(1), str | None) django-stubs-5.2.9/tests/test_error_handling.py000066400000000000000000000206051513401051600216760ustar00rootroot00000000000000import os import tempfile import uuid from collections.abc import Generator from contextlib import contextmanager from typing import Any from unittest import mock import pytest from mypy_django_plugin.config import DjangoPluginConfig TEMPLATE = """ (config) ... [mypy.plugins.django-stubs] django_settings_module = str (default: `os.getenv("DJANGO_SETTINGS_MODULE")`) strict_settings = bool (default: true) strict_model_abstract_attrs = bool (default: true) ... (django-stubs) mypy: error: {} """ TEMPLATE_TOML = """ (config) ... [tool.django-stubs] django_settings_module = str (default: `os.getenv("DJANGO_SETTINGS_MODULE")`) strict_settings = bool (default: true) strict_model_abstract_attrs = bool (default: true) ... (django-stubs) mypy: error: {} """ @contextmanager def write_to_file(file_contents: str, suffix: str | None = None) -> Generator[str, None, None]: with tempfile.NamedTemporaryFile(mode="w+", suffix=suffix) as config_file: config_file.write(file_contents) config_file.seek(0) yield config_file.name @pytest.mark.parametrize( ("config_file_contents", "message_part"), [ pytest.param( ["[not-really-django-stubs]"], "no section [mypy.plugins.django-stubs] found", id="missing-section", ), pytest.param( ["[mypy.plugins.django-stubs]", "\tnot_django_not_settings_module = badbadmodule"], ( "missing required 'django_settings_module' config.\n" "Either specify this config or set your `DJANGO_SETTINGS_MODULE` env var" ), id="missing-settings-module", ), pytest.param( ["[mypy.plugins.django-stubs]"], ( "missing required 'django_settings_module' config.\n" "Either specify this config or set your `DJANGO_SETTINGS_MODULE` env var" ), id="no-settings-given", ), pytest.param( ["[mypy.plugins.django-stubs]", "django_settings_module = some.module", "strict_settings = bad"], "invalid 'strict_settings': the setting must be a boolean", id="invalid-strict_settings", ), pytest.param( [ "[mypy.plugins.django-stubs]", "django_settings_module = some.module", "strict_model_abstract_attrs = bad", ], "invalid 'strict_model_abstract_attrs': the setting must be a boolean", id="invalid-strict_model_abstract_attrs", ), ], ) def test_misconfiguration_handling(capsys: Any, config_file_contents: list[str], message_part: str) -> None: """Invalid configuration raises `SystemExit` with a precise error message.""" contents = "\n".join(config_file_contents).expandtabs(4) with write_to_file(contents) as filename: with pytest.raises(SystemExit, match="2"): DjangoPluginConfig(filename) error_message = "usage: " + TEMPLATE.format(message_part) assert error_message == capsys.readouterr().err @pytest.mark.parametrize( "filename", [ pytest.param(uuid.uuid4().hex, id="not matching an existing file"), pytest.param("", id="as empty string"), pytest.param(None, id="as none"), ], ) def test_handles_filename(capsys: Any, filename: str) -> None: with pytest.raises(SystemExit, match="2"): DjangoPluginConfig(filename) error_message = "usage: " + TEMPLATE.format("mypy config file is not specified or found") assert error_message == capsys.readouterr().err @pytest.mark.parametrize( ("config_file_contents", "message_part"), [ pytest.param( """ [tool.django-stubs] django_settings_module = 123 """, "invalid 'django_settings_module': the setting must be a string", id="django_settings_module not string", ), pytest.param( """ [tool.not-really-django-stubs] django_settings_module = "my.module" """, "no section [tool.django-stubs] found", id="missing django-stubs section", ), pytest.param( """ [tool.django-stubs] not_django_not_settings_module = "badbadmodule" """, ( "missing required 'django_settings_module' config.\n" "Either specify this config or set your `DJANGO_SETTINGS_MODULE` env var" ), id="missing django_settings_module", ), pytest.param( "tool.django-stubs]", "could not load configuration file", id="invalid toml", ), pytest.param( """ [tool.django-stubs] django_settings_module = "some.module" strict_settings = "a" """, "invalid 'strict_settings': the setting must be a boolean", id="invalid strict_settings type", ), pytest.param( """ [tool.django-stubs] django_settings_module = "some.module" strict_model_abstract_attrs = "a" """, "invalid 'strict_model_abstract_attrs': the setting must be a boolean", id="invalid strict_model_abstract_attrs type", ), ], ) def test_toml_misconfiguration_handling(capsys: Any, config_file_contents: str, message_part: str) -> None: with write_to_file(config_file_contents, suffix=".toml") as filename: with pytest.raises(SystemExit, match="2"): DjangoPluginConfig(filename) error_message = "usage: " + TEMPLATE_TOML.format(message_part) assert error_message == capsys.readouterr().err @pytest.mark.parametrize("boolean_value", ["true", "false"]) def test_correct_toml_configuration(boolean_value: str) -> None: config_file_contents = f""" [tool.django-stubs] some_other_setting = "setting" django_settings_module = "my.module" strict_settings = {boolean_value} """ with write_to_file(config_file_contents, suffix=".toml") as filename: config = DjangoPluginConfig(filename) assert config.django_settings_module == "my.module" assert config.strict_settings is (boolean_value == "true") @pytest.mark.parametrize("boolean_value", ["true", "True", "false", "False"]) def test_correct_configuration(boolean_value: str) -> None: """Django settings module gets extracted given valid configuration.""" config_file_contents = "\n".join( [ "[mypy.plugins.django-stubs]", "some_other_setting = setting", "django_settings_module = my.module", f"strict_settings = {boolean_value}", ] ) with write_to_file(config_file_contents) as filename: config = DjangoPluginConfig(filename) assert config.django_settings_module == "my.module" assert config.strict_settings is (boolean_value.lower() == "true") @pytest.mark.parametrize("boolean_value", ["true", "false"]) def test_correct_toml_configuration_with_django_setting_from_env(boolean_value: str) -> None: config_file_contents = f""" [tool.django-stubs] some_other_setting = "setting" strict_settings = {boolean_value} """ django_settings_env_value = "my.module" with write_to_file(config_file_contents, suffix=".toml") as filename: with mock.patch.dict(os.environ, {"DJANGO_SETTINGS_MODULE": django_settings_env_value}): config = DjangoPluginConfig(filename) assert config.django_settings_module == django_settings_env_value assert config.strict_settings is (boolean_value == "true") @pytest.mark.parametrize("boolean_value", ["true", "True", "false", "False"]) def test_correct_configuration_with_django_setting_from_env(boolean_value: str) -> None: """Django settings module gets extracted given valid configuration.""" config_file_contents = "\n".join( [ "[mypy.plugins.django-stubs]", "some_other_setting = setting", f"strict_settings = {boolean_value}", ] ) django_settings_env_value = "my.module" with write_to_file(config_file_contents) as filename: with mock.patch.dict(os.environ, {"DJANGO_SETTINGS_MODULE": django_settings_env_value}): config = DjangoPluginConfig(filename) assert config.django_settings_module == django_settings_env_value assert config.strict_settings is (boolean_value.lower() == "true") django-stubs-5.2.9/tests/test_generic_consistency.py000066400000000000000000000105671513401051600227440ustar00rootroot00000000000000import ast import glob import importlib import os from typing import Any, final from unittest import mock import django from django_stubs_ext.patch import MPGeneric # The root directory of the django-stubs package STUBS_ROOT = os.path.abspath(os.path.join(os.path.dirname(__file__), "..", "django-stubs")) @final class GenericInheritanceVisitor(ast.NodeVisitor): """AST visitor to find classes inheriting from `typing.Generic` in stubs.""" def __init__(self) -> None: self.generic_classes: set[str] = set() def visit_ClassDef(self, node: ast.ClassDef) -> None: for base in node.bases: if ( isinstance(base, ast.Subscript) and isinstance(base.value, ast.Name) and base.value.id == "Generic" and not any(dec.id == "type_check_only" for dec in node.decorator_list if isinstance(dec, ast.Name)) ): self.generic_classes.add(node.name) break self.generic_visit(node) def test_find_classes_inheriting_from_generic() -> None: """ This test ensures that the `ext/django_stubs_ext/patch.py` stays up-to-date with the stubs. It works as follows: 1. Parse the ast of each .pyi file, and collects classes inheriting from Generic. 2. For each Generic in the stubs, import the associated module and capture every class in the MRO 3. Ensure that at least one class in the mro is patched in `ext/django_stubs_ext/patch.py`. """ with mock.patch.dict(os.environ, {"DJANGO_SETTINGS_MODULE": "scripts.django_tests_settings"}): # We need this to be able to do django import django.setup() # A dict of class_name -> [subclasses names] for each Generic in the stubs. all_generic_classes: dict[str, list[str]] = {} print(f"Searching for classes inheriting from Generic in: {STUBS_ROOT}") pyi_files = glob.glob("**/*.pyi", root_dir=STUBS_ROOT, recursive=True) for file_path in pyi_files: with open(os.path.join(STUBS_ROOT, file_path)) as f: source = f.read() tree = ast.parse(source) generic_visitor = GenericInheritanceVisitor() generic_visitor.visit(tree) # For each Generic in the stubs, import the associated module and capture every class in the MRO if generic_visitor.generic_classes: module_name = _get_module_from_pyi(file_path) django_module = importlib.import_module(module_name) all_generic_classes.update( { cls: [subcls.__name__ for subcls in getattr(django_module, cls).mro()[1:-1]] for cls in generic_visitor.generic_classes } ) print(f"Processed {len(pyi_files)} .pyi files.") print(f"Found {len(all_generic_classes)} unique classes inheriting from Generic in stubs") patched_classes = {mp_generic.cls.__name__ for mp_generic in _get_need_generic()} # Pretty-print missing patch in `ext/django_stubs_ext/patch.py` errors = [] for cls_name, subcls_names in all_generic_classes.items(): if not any(name in patched_classes for name in [*subcls_names, cls_name]): bases = f"({', '.join(subcls_names)})" if subcls_names else "" errors.append(f"{cls_name}{bases} is not patched in `ext/django_stubs_ext/patch.py`") assert not errors, "\n".join(errors) def _get_module_from_pyi(pyi_path: str) -> str: py_module = "django." + pyi_path.replace(".pyi", "").replace("/", ".") return py_module.removesuffix(".__init__") def _get_need_generic() -> list[MPGeneric[Any]]: """ Symbols in `django.contrib.auth.forms` are very hard to patch automatically because we end up importing the User model and it crashes if `django.setup()` was not called beforehand. It can also very easily introduce circular imports so we require the user to monkeypatch it manually. See README.md for more details """ import django_stubs_ext if django.VERSION >= (5, 1): from django.contrib.auth.forms import SetPasswordMixin, SetUnusablePasswordMixin return [MPGeneric(SetPasswordMixin), MPGeneric(SetUnusablePasswordMixin), *django_stubs_ext.patch._need_generic] from django.contrib.auth.forms import AdminPasswordChangeForm, SetPasswordForm return [MPGeneric(SetPasswordForm), MPGeneric(AdminPasswordChangeForm), *django_stubs_ext.patch._need_generic] django-stubs-5.2.9/tests/typecheck/000077500000000000000000000000001513401051600172445ustar00rootroot00000000000000django-stubs-5.2.9/tests/typecheck/conf/000077500000000000000000000000001513401051600201715ustar00rootroot00000000000000django-stubs-5.2.9/tests/typecheck/conf/test_settings.yml000066400000000000000000000047201513401051600236160ustar00rootroot00000000000000- case: test_setting_circular_import main: | from myapp import lib mypy_config: | [mypy.plugins.django-stubs] django_settings_module = myapp.settings files: - path: myapp/__init__.py - path: myapp/settings.py content: | from myapp.lib import function_returning_int, const_with_circular_import, const_unresolvable_circular IMMEDIATE_VALUE = 123 CIRCULAR_WITH_HINT: int = function_returning_int() CIRCULAR_WITHOUT_HINT_FUNCTION = function_returning_int() CIRCULAR_WITHOUT_HINT_CONST = const_with_circular_import UNRESOLVABLE_CIRCULAR = const_unresolvable_circular - path: myapp/lib.py content: | from typing import TYPE_CHECKING from typing_extensions import reveal_type import django.conf settings = django.conf.settings def test() -> None: reveal_type(settings.IMMEDIATE_VALUE) # N: Revealed type is "builtins.int" reveal_type(settings.CIRCULAR_WITH_HINT) # N: Revealed type is "builtins.int" reveal_type(settings.CIRCULAR_WITHOUT_HINT_FUNCTION) # N: Revealed type is "builtins.int" reveal_type(settings.CIRCULAR_WITHOUT_HINT_CONST) # N: Revealed type is "builtins.int" reveal_type(settings.UNRESOLVABLE_CIRCULAR) # N: Revealed type is "Any" def function_returning_int() -> int: return 42 if TYPE_CHECKING: const_with_circular_import = settings.IMMEDIATE_VALUE const_unresolvable_circular = settings.UNRESOLVABLE_CIRCULAR # E: Cannot determine type of "UNRESOLVABLE_CIRCULAR" [has-type] else: const_with_circular_import = 0 const_unresolvable_circular = ... - case: test_setting_login_urls main: | from typing_extensions import reveal_type from django.conf import settings reveal_type(settings.LOGIN_URL) # N: Revealed type is "builtins.str | django.utils.functional._StrPromise" reveal_type(settings.LOGIN_REDIRECT_URL) # N: Revealed type is "builtins.str | django.utils.functional._StrPromise" reveal_type(settings.LOGOUT_REDIRECT_URL) # N: Revealed type is "builtins.str | django.utils.functional._StrPromise | None" django-stubs-5.2.9/tests/typecheck/contrib/000077500000000000000000000000001513401051600207045ustar00rootroot00000000000000django-stubs-5.2.9/tests/typecheck/contrib/admin/000077500000000000000000000000001513401051600217745ustar00rootroot00000000000000django-stubs-5.2.9/tests/typecheck/contrib/admin/test_decorators.yml000066400000000000000000000111621513401051600257240ustar00rootroot00000000000000- case: test_admin_decorators_display main: | from typing_extensions import reveal_type from django.db import models from django.contrib import admin class MyModel(models.Model): @admin.display def display_bare(self) -> str: ... @admin.display(boolean=True, ordering="field", description="Something", empty_value="...") def display_fancy(self) -> bool: ... # Can also be a property @property @admin.display def display_property(self) -> str: ... @admin.display # E: Decorators on top of @property are not supported [prop-decorator] @property def incorrect_property(self) -> str: ... def method(self) -> None: reveal_type(self.display_bare) # N: Revealed type is "def () -> builtins.str" reveal_type(self.display_fancy) # N: Revealed type is "def () -> builtins.bool" reveal_type(self.display_fancy()) # N: Revealed type is "builtins.bool" reveal_type(self.display_property) # N: Revealed type is "builtins.str" @admin.display def freestanding_display_bare(obj: MyModel) -> str: ... @admin.display(boolean=True) def freestanding_display_fancy(obj: MyModel) -> bool: ... @admin.register(MyModel, MyModel, site=None) class MyModelAdmin(admin.ModelAdmin[MyModel]): list_display = [ "display_property", "display_fancy", "display_bare", "admin_display_bare", "admin_display_fancy", freestanding_display_bare, freestanding_display_fancy, ] @admin.display def admin_display_bare(self, obj: MyModel) -> str: ... @admin.display(boolean=True, ordering="field", description="Something", empty_value="Nuf") def admin_display_fancy(self, obj: MyModel) -> bool: ... - case: test_admin_decorators_action main: | from typing_extensions import reveal_type from django.db import models from django.contrib import admin from django.db.models import QuerySet from django.http import FileResponse, HttpRequest, HttpResponse class MyModel(models.Model): ... @admin.action def freestanding_action_bare(modeladmin: "MyModelAdmin", request: HttpRequest, queryset: QuerySet[MyModel]) -> None: ... @admin.action(description="Some text here", permissions=["test"]) def freestanding_action_fancy(modeladmin: "MyModelAdmin", request: HttpRequest, queryset: QuerySet[MyModel]) -> None: ... @admin.action def freestanding_action_http_response(modeladmin: "MyModelAdmin", request: HttpRequest, queryset: QuerySet[MyModel]) -> HttpResponse: ... @admin.action def freestanding_action_file_response(modeladmin: "MyModelAdmin", request: HttpRequest, queryset: QuerySet[MyModel]) -> FileResponse: ... @admin.register(MyModel) class MyModelAdmin(admin.ModelAdmin[MyModel]): actions = [freestanding_action_bare, freestanding_action_fancy, "method_action_bare", "method_action_fancy", freestanding_action_http_response, freestanding_action_file_response] @admin.action def method_action_bare(self, request: HttpRequest, queryset: QuerySet[MyModel]) -> None: ... @admin.action(description="Some text here", permissions=["test"]) def method_action_fancy(self, request: HttpRequest, queryset: QuerySet[MyModel]) -> None: ... @admin.action(description="Some text here", permissions=["test"]) def method_action_http_response(self, request: HttpRequest, queryset: QuerySet[MyModel]) -> HttpResponse: ... @admin.action(description="Some text here", permissions=["test"]) def method_action_file_response(self, request: HttpRequest, queryset: QuerySet[MyModel]) -> FileResponse: ... def method(self) -> None: reveal_type(self.method_action_bare) # N: Revealed type is "def (request: django.http.request.HttpRequest, queryset: django.db.models.query.QuerySet[main.MyModel, main.MyModel])" reveal_type(self.method_action_fancy) # N: Revealed type is "def (request: django.http.request.HttpRequest, queryset: django.db.models.query.QuerySet[main.MyModel, main.MyModel])" reveal_type(self.method_action_http_response) # N: Revealed type is "def (request: django.http.request.HttpRequest, queryset: django.db.models.query.QuerySet[main.MyModel, main.MyModel]) -> django.http.response.HttpResponse" reveal_type(self.method_action_file_response) # N: Revealed type is "def (request: django.http.request.HttpRequest, queryset: django.db.models.query.QuerySet[main.MyModel, main.MyModel]) -> django.http.response.FileResponse" django-stubs-5.2.9/tests/typecheck/contrib/admin/test_options.yml000066400000000000000000000144721513401051600252610ustar00rootroot00000000000000# "Happy path" test for model admin, trying to cover as many valid # configurations as possible. - case: test_full_admin main: | from django.contrib import admin, messages from django.forms import Form, ModelForm, Textarea from django.db import models from django.core.paginator import Paginator from django.contrib.admin.sites import AdminSite from django.db.models.options import Options from django.http.request import HttpRequest from django.db.models.query import QuerySet from django.utils.translation import gettext_lazy as _ def an_action(modeladmin: "A", request: HttpRequest, queryset: QuerySet) -> None: pass class TestModel(models.Model): pass class TestModelForm(ModelForm[TestModel]): pass class A(admin.ModelAdmin[TestModel]): # BaseModelAdmin autocomplete_fields = ("strs",) raw_id_fields = ["strs"] fields = ( "a field", ["a", "list of", "fields"], ) exclude = ("a", "b") fieldsets = [ (None, {"fields": ["a", "b"]}), ("group", {"fields": ("c",), "classes": ("a",), "description": "foo"}), (_("lazy"), {"fields": ["bar"]}) ] form = TestModelForm filter_vertical = ("fields",) filter_horizontal = ("plenty", "of", "fields") radio_fields = { "some_field": admin.VERTICAL, "another_field": admin.HORIZONTAL, } prepopulated_fields = {"slug": ("title",)} formfield_overrides = {models.TextField: {"widget": Textarea}} readonly_fields = ("date_modified",) ordering = ("-pk", "date_modified") sortable_by = ["pk"] view_on_site = True show_full_result_count = False # ModelAdmin list_display = ("pk",) list_display_links = ("str",) list_filter = ("str", admin.SimpleListFilter, ("str", admin.FieldListFilter)) list_select_related = True list_per_page = 1 list_max_show_all = 2 list_editable = ("a", "b") search_fields = ("c", "d") date_hierarchy = "f" save_as = False save_as_continue = True save_on_top = False paginator = Paginator presserve_filters = False inlines = (admin.TabularInline, admin.StackedInline) add_form_template = "template" change_form_template = "template" change_list_template = "template" delete_confirmation_template = "template" delete_selected_confirmation_template = "template" object_history_template = "template" popup_response_template = "template" actions = (an_action, "a_method_action") actions_on_top = True actions_on_bottom = False actions_selection_counter = True admin_site = AdminSite() # test generic ModelAdmin # https://github.com/typeddjango/django-stubs/pull/504 # this will fail if `model` has a type other than the generic specified in the class declaration model = TestModel def a_method_action(self, request: HttpRequest, queryset: QuerySet) -> None: pass def a_method_action_with_message_user(self, request: HttpRequest, queryset: QuerySet) -> None: self.message_user(request, _("Error message"), messages.ERROR) # This test is here to make sure we're not running into a mypy issue which is # worked around using a somewhat complicated _ListOrTuple union type. Once the # issue is solved upstream this test should pass even with the workaround # replaced by a simpler Sequence type. # https://github.com/python/mypy/issues/8921 - case: test_fieldset_workaround_regression main: | from django.contrib import admin class A(admin.ModelAdmin): fieldsets = ( (None, { 'fields': ('name',), }), ) - case: test_view_on_site_as_callable main: | from django.contrib import admin class A(admin.ModelAdmin): def view_on_site(self, obj: "A") -> str: return "http://example.org" - case: errors_on_omitting_fields_from_fieldset_opts main: | from django.contrib import admin class A(admin.ModelAdmin): fieldsets = [ (None, {}), # E: Missing key "fields" for TypedDict "_FieldOpts" [typeddict-item] ] - case: errors_on_invalid_radio_fields main: | from django.contrib import admin class A(admin.ModelAdmin): radio_fields = {"some_field": 0} # E: Dict entry 0 has incompatible type "str": "Literal[0]"; expected "str": "Literal[1, 2]" [dict-item] class B(admin.ModelAdmin): radio_fields = {1: admin.VERTICAL} # E: Dict entry 0 has incompatible type "int": "Literal[2]"; expected "str": "Literal[1, 2]" [dict-item] - case: errors_for_invalid_formfield_overrides main: | from django.contrib import admin from django.forms import Textarea class A(admin.ModelAdmin): formfield_overrides = { "not a field": { # E: Dict entry 0 has incompatible type "str": "dict[str, Any]"; expected "type[Field[Any, Any]]": "Mapping[str, Any]" [dict-item] "widget": Textarea } } - case: errors_for_invalid_action_signature main: | from django.contrib import admin from django.http.request import HttpRequest from django.db import models class MyModel(models.Model): ... def an_action(modeladmin: None) -> None: pass class A(admin.ModelAdmin[MyModel]): actions = [an_action] # E: List item 0 has incompatible type "Callable[[None], None]"; expected "Callable[[A, HttpRequest, QuerySet[MyModel, MyModel]], HttpResponseBase | None] | str" [list-item] - case: errors_for_invalid_model_admin_generic main: | from django.contrib.admin import ModelAdmin from django.db.models import Model class TestModel(Model): pass class A(ModelAdmin[TestModel]): model = int # E: Incompatible types in assignment (expression has type "type[int]", base class "ModelAdmin" defined the type as "type[TestModel]") [assignment] django-stubs-5.2.9/tests/typecheck/contrib/auth/000077500000000000000000000000001513401051600216455ustar00rootroot00000000000000django-stubs-5.2.9/tests/typecheck/contrib/auth/test_auth.yml000066400000000000000000000132561513401051600243770ustar00rootroot00000000000000- case: test_objects_using_auth_user_model_picks_up_configured_type main: | from typing_extensions import reveal_type from django.contrib.auth import authenticate, aauthenticate, get_user, get_user_model, login from django.contrib.auth.backends import ModelBackend from django.contrib.auth.decorators import user_passes_test from django.contrib.auth.models import AnonymousUser from django.http import HttpRequest, HttpResponse from myapp.models import MyUser reveal_type(authenticate()) # N: Revealed type is "myapp.models.MyUser | None" async def f() -> None: reveal_type(await aauthenticate()) # N: Revealed type is "myapp.models.MyUser | None" reveal_type(get_user_model()) # N: Revealed type is "type[myapp.models.MyUser]" reveal_type(login) # N: Revealed type is "def (request: django.http.request.HttpRequest, user: myapp.models.MyUser | None, backend: type[django.contrib.auth.backends.BaseBackend] | builtins.str | None =)" reveal_type(get_user) # N: Revealed type is "def (request: django.http.request.HttpRequest | django.test.client.Client) -> myapp.models.MyUser | django.contrib.auth.models.AnonymousUser" reveal_type(ModelBackend().authenticate(None)) # N: Revealed type is "myapp.models.MyUser | None" def check_user(user: MyUser | AnonymousUser) -> bool: return True @user_passes_test(check_user) def view(request: HttpRequest) -> HttpResponse: ... custom_settings: | INSTALLED_APPS = ("django.contrib.contenttypes", "django.contrib.auth", "myapp") AUTH_USER_MODEL = "myapp.MyUser" files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class MyUser(models.Model): ... - case: test_objects_using_auth_user_model_uses_builtin_auth_user_per_default main: | from typing_extensions import reveal_type from django.contrib.auth import authenticate, aauthenticate, get_user, get_user_model, login from django.contrib.auth.backends import ModelBackend from django.contrib.auth.decorators import user_passes_test from django.contrib.auth.models import AnonymousUser, User from django.http import HttpRequest, HttpResponse reveal_type(authenticate()) # N: Revealed type is "django.contrib.auth.models.User | None" async def f() -> None: reveal_type(await aauthenticate()) # N: Revealed type is "django.contrib.auth.models.User | None" reveal_type(get_user_model()) # N: Revealed type is "type[django.contrib.auth.models.User]" reveal_type(login) # N: Revealed type is "def (request: django.http.request.HttpRequest, user: django.contrib.auth.models.User | None, backend: type[django.contrib.auth.backends.BaseBackend] | builtins.str | None =)" reveal_type(get_user) # N: Revealed type is "def (request: django.http.request.HttpRequest | django.test.client.Client) -> django.contrib.auth.models.User | django.contrib.auth.models.AnonymousUser" reveal_type(ModelBackend().authenticate(None)) # N: Revealed type is "django.contrib.auth.models.User | None" def check_user(user: User | AnonymousUser) -> bool: return True @user_passes_test(check_user) def view(request: HttpRequest) -> HttpResponse: ... custom_settings: | INSTALLED_APPS = ("django.contrib.contenttypes", "django.contrib.auth", "myapp") files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class MyUser(models.Model): ... - case: test_objects_for_auth_user_model_returns_stub_types_when_contrib_auth_is_not_installed main: | from typing_extensions import reveal_type from django.contrib.auth import authenticate, aauthenticate, get_user, get_user_model, login from django.contrib.auth.backends import ModelBackend from django.contrib.auth.base_user import AbstractBaseUser from django.contrib.auth.decorators import user_passes_test from django.contrib.auth.models import AnonymousUser from django.http import HttpRequest, HttpResponse reveal_type(authenticate()) # N: Revealed type is "django.contrib.auth.base_user.AbstractBaseUser | None" async def f() -> None: reveal_type(await aauthenticate()) # N: Revealed type is "django.contrib.auth.base_user.AbstractBaseUser | None" reveal_type(get_user_model()) # N: Revealed type is "type[django.contrib.auth.base_user.AbstractBaseUser]" reveal_type(login) # N: Revealed type is "def (request: django.http.request.HttpRequest, user: django.contrib.auth.base_user.AbstractBaseUser | None, backend: type[django.contrib.auth.backends.BaseBackend] | builtins.str | None =)" reveal_type(get_user) # N: Revealed type is "def (request: django.http.request.HttpRequest | django.test.client.Client) -> django.contrib.auth.base_user.AbstractBaseUser | django.contrib.auth.models.AnonymousUser" reveal_type(ModelBackend().authenticate(None)) # N: Revealed type is "django.contrib.auth.base_user.AbstractBaseUser | None" def check_user(user: AbstractBaseUser | AnonymousUser) -> bool: return True @user_passes_test(check_user) def view(request: HttpRequest) -> HttpResponse: ... custom_settings: | INSTALLED_APPS = ("django.contrib.contenttypes", "myapp") files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class MyUser(models.Model): ... django-stubs-5.2.9/tests/typecheck/contrib/auth/test_decorators.yml000066400000000000000000000142611513401051600256000ustar00rootroot00000000000000- case: login_required main: | from typing import Any from typing_extensions import reveal_type from django.core.handlers.asgi import ASGIRequest from django.core.handlers.wsgi import WSGIRequest from django.contrib.auth.decorators import login_required from django.http import HttpRequest, HttpResponse # Bare: @login_required def view_func1(request: HttpRequest) -> HttpResponse: ... reveal_type(view_func1) # N: Revealed type is "def (request: django.http.request.HttpRequest) -> django.http.response.HttpResponse" @login_required async def view_func2(request: HttpRequest) -> HttpResponse: ... reveal_type(view_func2) # N: Revealed type is "def (request: django.http.request.HttpRequest) -> typing.Coroutine[Any, Any, django.http.response.HttpResponse]" # Fancy: @login_required(redirect_field_name='a', login_url='b') def view_func3(request: WSGIRequest, arg: str) -> HttpResponse: ... reveal_type(view_func3) # N: Revealed type is "def (request: django.core.handlers.wsgi.WSGIRequest, arg: builtins.str) -> django.http.response.HttpResponse" @login_required(redirect_field_name='a', login_url='b') async def view_func4(request: ASGIRequest, arg: str) -> HttpResponse: ... reveal_type(view_func4) # N: Revealed type is "def (request: django.core.handlers.asgi.ASGIRequest, arg: builtins.str) -> typing.Coroutine[Any, Any, django.http.response.HttpResponse]" # This is non-conventional usage, but covered in Django tests, so we allow it. def view_func5(request: HttpRequest) -> HttpResponse: ... wrapped_view = login_required(view_func5, redirect_field_name='a', login_url='b') reveal_type(wrapped_view) # N: Revealed type is "def (request: django.http.request.HttpRequest) -> django.http.response.HttpResponse" # Wrong: @login_required() # E: Value of type variable "_VIEW" of function cannot be "Callable[[Any], str]" [type-var] def view_func6(request: Any) -> str: ... custom_settings: | INSTALLED_APPS = ("django.contrib.contenttypes", "django.contrib.auth", "myapp") AUTH_USER_MODEL = "myapp.MyUser" files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class MyUser(models.Model): ... - case: login_required_default_settings main: | from typing import Any from typing_extensions import reveal_type from django.core.handlers.asgi import ASGIRequest from django.core.handlers.wsgi import WSGIRequest from django.contrib.auth.decorators import login_required from django.http import HttpRequest, HttpResponse @login_required def view_func1(request: HttpRequest) -> HttpResponse: ... reveal_type(view_func1) # N: Revealed type is "def (request: django.http.request.HttpRequest) -> django.http.response.HttpResponse" @login_required async def view_func2(request: HttpRequest) -> HttpResponse: ... reveal_type(view_func2) # N: Revealed type is "def (request: django.http.request.HttpRequest) -> typing.Coroutine[Any, Any, django.http.response.HttpResponse]" @login_required() # E: Value of type variable "_VIEW" of function cannot be "Callable[[Any], str]" [type-var] def view_func3(request: Any) -> str: ... - case: user_passes_test main: | from typing_extensions import reveal_type from django.contrib.auth.decorators import user_passes_test from django.http import HttpRequest, HttpResponse @user_passes_test(lambda u: u.is_authenticated and u.is_active) def view_func1(request: HttpRequest) -> HttpResponse: ... reveal_type(view_func1) # N: Revealed type is "def (request: django.http.request.HttpRequest) -> django.http.response.HttpResponse" @user_passes_test(lambda u: u.get_username().startswith('super')) async def view_func2(request: HttpRequest) -> HttpResponse: ... reveal_type(view_func2) # N: Revealed type is "def (request: django.http.request.HttpRequest) -> typing.Coroutine[Any, Any, django.http.response.HttpResponse]" # Wrong: @user_passes_test # E: Argument 1 to "user_passes_test" has incompatible type "Callable[[HttpRequest], HttpResponse]"; expected "Callable[[User | AnonymousUser], bool]" [arg-type] def view_func3(request: HttpRequest) -> HttpResponse: ... @user_passes_test(lambda u: u.get_username().startswith('super')) # E: Value of type variable "_VIEW" of function cannot be "Callable[[str], str]" [type-var] def view_func4(request: str) -> str: ... custom_settings: | INSTALLED_APPS = ("django.contrib.contenttypes", "django.contrib.auth") - case: permission_required main: | from typing import Any from typing_extensions import reveal_type from django.contrib.auth.decorators import permission_required from django.http import HttpRequest, HttpResponse @permission_required('polls.can_vote') def view_func1(request: HttpRequest) -> HttpResponse: ... reveal_type(view_func1) # N: Revealed type is "def (request: django.http.request.HttpRequest) -> django.http.response.HttpResponse" @permission_required(['polls.can_vote', 'polls.can_close'], login_url='/abc') async def view_func2(request: HttpRequest) -> HttpResponse: ... reveal_type(view_func2) # N: Revealed type is "def (request: django.http.request.HttpRequest) -> typing.Coroutine[Any, Any, django.http.response.HttpResponse]" # Wrong: @permission_required('polls.can_vote') # E: Value of type variable "_VIEW" of function cannot be "Callable[[Any], str]" [type-var] def view_func3(request: Any) -> str: ... @permission_required # E: Argument 1 to "permission_required" has incompatible type "Callable[[HttpRequest], HttpResponse]"; expected "Iterable[str] | str" [arg-type] def view_func4(request: HttpRequest) -> HttpResponse: ... custom_settings: | INSTALLED_APPS = ("django.contrib.contenttypes", "django.contrib.auth") django-stubs-5.2.9/tests/typecheck/contrib/auth/test_misc.yml000066400000000000000000000026421513401051600243660ustar00rootroot00000000000000- case: test_request_session main: | from django.contrib.auth import get_user from django.contrib.sessions.middleware import SessionMiddleware from django.http import HttpRequest, HttpResponse def get_response(request: HttpRequest, /) -> HttpResponse: return HttpResponse() request = HttpRequest() SessionMiddleware(get_response).process_request(request) get_user(request) - case: test_client_session main: | from django.contrib.auth import get_user from django.test import Client get_user(Client()) - case: test_user_fields main: | from django.contrib.auth.models import AnonymousUser, User anonymous: AnonymousUser anonymous_is_staff: bool = anonymous.is_staff anonymous_is_active: bool = anonymous.is_active anonymous_is_superuser: bool = anonymous.is_superuser anonymous_is_authenticated: bool = anonymous.is_authenticated user: User user_is_staff: bool = user.is_staff user_is_active: bool = user.is_active user_is_superuser: bool = user.is_superuser user_is_authenticated: bool = user.is_authenticated union: User | AnonymousUser union_is_staff: bool = union.is_staff union_is_active: bool = union.is_active union_is_superuser: bool = union.is_superuser union_is_authenticated: bool = union.is_authenticated django-stubs-5.2.9/tests/typecheck/contrib/contenttypes/000077500000000000000000000000001513401051600234435ustar00rootroot00000000000000django-stubs-5.2.9/tests/typecheck/contrib/contenttypes/test_models.yml000066400000000000000000000012101513401051600265020ustar00rootroot00000000000000- case: test_contenttypes_models main: | from typing_extensions import reveal_type from django.contrib.contenttypes.models import ContentType c = ContentType.objects.create(app_label='abc', model='abc') reveal_type(c.id) # N: Revealed type is "builtins.int" reveal_type(c.app_label) # N: Revealed type is "builtins.str" reveal_type(c.model) # N: Revealed type is "builtins.str" ContentType.objects.create(app_label=[]) # E: Incompatible type for "app_label" of "ContentType" (got "list[Any]", expected "str | int | Combinable") [misc] custom_settings: | INSTALLED_APPS = ("django.contrib.contenttypes",) django-stubs-5.2.9/tests/typecheck/contrib/gis/000077500000000000000000000000001513401051600214665ustar00rootroot00000000000000django-stubs-5.2.9/tests/typecheck/contrib/gis/test_fields.yml000066400000000000000000000041741513401051600245240ustar00rootroot00000000000000- case: fields_getter_and_setter main: | from typing_extensions import reveal_type from django.contrib.gis.geos import Point, LineString, Polygon, MultiPoint, MultiLineString, MultiPolygon, GeometryCollection from myapp.models import MyModel model = MyModel() reveal_type(model.point) # N: Revealed type is "django.contrib.gis.geos.point.Point" model.point = Point() reveal_type(model.line_string) # N: Revealed type is "django.contrib.gis.geos.linestring.LineString" model.line_string = LineString() reveal_type(model.polygon) # N: Revealed type is "django.contrib.gis.geos.polygon.Polygon" model.polygon = Polygon() reveal_type(model.multi_point) # N: Revealed type is "django.contrib.gis.geos.collections.MultiPoint" model.multi_point = MultiPoint() reveal_type(model.multi_line_string) # N: Revealed type is "django.contrib.gis.geos.collections.MultiLineString" model.multi_line_string = MultiLineString() reveal_type(model.multi_polygon) # N: Revealed type is "django.contrib.gis.geos.collections.MultiPolygon" model.multi_polygon = MultiPolygon() reveal_type(model.geometry_collection) # N: Revealed type is "django.contrib.gis.geos.collections.GeometryCollection" model.geometry_collection = GeometryCollection() installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db.models import Model from django.contrib.gis.db.models.fields import PointField, LineStringField, PolygonField, MultiPointField, MultiLineStringField, MultiPolygonField, GeometryCollectionField class MyModel(Model): point = PointField() line_string = LineStringField() polygon = PolygonField() multi_point = MultiPointField() multi_line_string = MultiLineStringField() multi_polygon = MultiPolygonField() geometry_collection = GeometryCollectionField() django-stubs-5.2.9/tests/typecheck/contrib/postgres/000077500000000000000000000000001513401051600225525ustar00rootroot00000000000000django-stubs-5.2.9/tests/typecheck/contrib/postgres/test_fields.yml000066400000000000000000000025071513401051600256060ustar00rootroot00000000000000- case: union_combinable_reduced_to_non_union main: | from myapp.models import MyModel array_val: list[int] = [1] MyModel(array=array_val) # E: Incompatible type for "array" of "MyModel" (got "list[int]", expected "Sequence[str] | Combinable") [misc] non_init = MyModel() non_init.array = array_val # E: Incompatible types in assignment (expression has type "list[int]", variable has type "Sequence[str] | Combinable") [assignment] installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models from django.contrib.postgres.fields import ArrayField class MyModel(models.Model): array = ArrayField(base_field=models.TextField()) - case: postgres_forms_simple_array_field main: | from myapp.forms import MyForm MyForm() installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/forms.py content: | from django import forms from django.contrib.postgres.forms import SimpleArrayField class MyForm(forms.Form): lots_of_dates = SimpleArrayField(forms.DateField(), required=False) django-stubs-5.2.9/tests/typecheck/contrib/postgres/test_indexes.yml000066400000000000000000000020231513401051600257700ustar00rootroot00000000000000- case: can_instantiate_index main: | from django.db import models from django.db.models.functions import Lower from django.contrib.postgres.indexes import {{ index }} {{ index }}(fields=["foo"]) {{ index }}(models.F("bar"), name="test") {{ index }}("foo", models.F("bar"), Lower("baz"), name="test") {{ index }}("foo", name="test", opclasses=["bar"]) {{ index }}("foo", name="test", condition=models.Q(foo=1)) {{ index }}("foo", name="test", include=["bar"]) parametrized: - index: BrinIndex - index: BTreeIndex - index: GinIndex - index: GistIndex - index: HashIndex - index: SpGistIndex - case: can_instantiate_opclass main: | from django.db.models import Index from django.db.models.functions import Lower from django.contrib.postgres.indexes import OpClass Index( OpClass(Lower('username'), name='varchar_pattern_ops'), name='lower_username_idx', ) django-stubs-5.2.9/tests/typecheck/contrib/sitemaps/000077500000000000000000000000001513401051600225315ustar00rootroot00000000000000django-stubs-5.2.9/tests/typecheck/contrib/sitemaps/test_generic_sitemap.yml000066400000000000000000000064151513401051600274570ustar00rootroot00000000000000- case: test_items_custom_model main: | from django.contrib.sitemaps import GenericSitemap, Sitemap from django.contrib.sitemaps.views import sitemap from django.db.models import QuerySet from django.urls import path, reverse from myapp.models import Offer class OfferSitemap(Sitemap[Offer]): priority = 1 changefreq = "always" def items(self) -> QuerySet[Offer]: return Offer.objects.all() def location(self, item: Offer) -> str: return reverse( "myapp:detail-offer", kwargs={ "provider_name": item.provider, "offer_name": item.trc, # E: "Offer" has no attribute "trc" [attr-defined] }, ) class WrongOfferSitemap(Sitemap[Offer]): def items(self) -> str: return "Yes" def location(self, item: str) -> int: return 1 info_dict = {"queryset": Offer.objects.all()} broken_info_dict = {"queryset": [1, 2]} urlpatterns = [ path( 'sitemap.xml', sitemap, {'sitemaps': {'offers': GenericSitemap[Offer](info_dict, priority=0.6)}}, name='django.contrib.sitemaps.views.sitemap' ), path( 'broken_sitemap.xml', sitemap, {'sitemaps': {'offers': GenericSitemap[Offer](broken_info_dict, priority=0.6)}}, name='django.contrib.sitemaps.views.broken_sitemap' ), ] out: | main:24: error: Return type "str" of "items" incompatible with return type "Iterable[Offer]" in supertype "django.contrib.sitemaps.Sitemap" [override] main:26: error: Return type "int" of "location" incompatible with return type "str" in supertype "django.contrib.sitemaps.Sitemap" [override] main:26: error: Argument 1 of "location" is incompatible with supertype "django.contrib.sitemaps.Sitemap"; supertype defines the argument type as "Offer" [override] main:26: note: This violates the Liskov substitution principle main:26: note: See https://mypy.readthedocs.io/en/stable/common_issues.html#incompatible-overrides main:40: error: Argument 1 to "GenericSitemap" has incompatible type "dict[str, list[int]]"; expected "Mapping[str, datetime | QuerySet[Offer, Offer] | str]" [arg-type] installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class Offer(models.Model): provider = models.ForeignKey("self", on_delete=models.CASCADE) url_name = models.CharField() - case: test_items_string_sequence main: | from django.contrib.sitemaps import Sitemap from django.urls import reverse class StaticViewSitemap(Sitemap[str]): priority = 1 changefreq = "always" def items(self) -> list[str]: return ["home", "about", "contact", "recommendations", "privacy-policy", "blog"] def location(self, item: str) -> str: return reverse(item) django-stubs-5.2.9/tests/typecheck/contrib/staticfiles/000077500000000000000000000000001513401051600232165ustar00rootroot00000000000000django-stubs-5.2.9/tests/typecheck/contrib/staticfiles/test_finders.yml000066400000000000000000000042401513401051600264320ustar00rootroot00000000000000- case: test_find_one main: | from typing_extensions import reveal_type from django.contrib.staticfiles import finders reveal_type(finders.find("filepath")) # N: Revealed type is "builtins.str | None" for finder in finders.get_finders(): reveal_type(finder.find("filepath")) # N: Revealed type is "builtins.str | None" reveal_type(finders.FileSystemFinder().find("filepath")) # N: Revealed type is "builtins.str | None" reveal_type(finders.AppDirectoriesFinder().find("filepath")) # N: Revealed type is "builtins.str | None" reveal_type(finders.DefaultStorageFinder().find("filepath")) # N: Revealed type is "builtins.str | None" - case: test_find_all main: | from typing_extensions import reveal_type from django.contrib.staticfiles import finders reveal_type(finders.find("filepath", find_all=True)) # N: Revealed type is "builtins.list[builtins.str]" for finder in finders.get_finders(): reveal_type(finder.find("filepath", find_all=True)) # N: Revealed type is "builtins.list[builtins.str]" reveal_type(finders.FileSystemFinder().find("filepath", find_all=True)) # N: Revealed type is "builtins.list[builtins.str]" reveal_type(finders.AppDirectoriesFinder().find("filepath", find_all=True)) # N: Revealed type is "builtins.list[builtins.str]" reveal_type(finders.DefaultStorageFinder().find("filepath", find_all=True)) # N: Revealed type is "builtins.list[builtins.str]" - case: test_file_system_finder # test methods *only* on FileSystemFinder main: | from typing_extensions import reveal_type from django.contrib.staticfiles.finders import FileSystemFinder finder = FileSystemFinder() reveal_type(finder.find_location(".", "filepath")) # N: Revealed type is "builtins.str | None" - case: test_app_directories_finder # test methods *only* on AppDirectoriesFinder main: | from typing_extensions import reveal_type from django.contrib.staticfiles.finders import AppDirectoriesFinder finder = AppDirectoriesFinder() reveal_type(finder.find_in_app("app", "filepath")) # N: Revealed type is "builtins.str | None" django-stubs-5.2.9/tests/typecheck/core/000077500000000000000000000000001513401051600201745ustar00rootroot00000000000000django-stubs-5.2.9/tests/typecheck/core/handlers/000077500000000000000000000000001513401051600217745ustar00rootroot00000000000000django-stubs-5.2.9/tests/typecheck/core/handlers/test_wsgi.yml000066400000000000000000000003341513401051600245270ustar00rootroot00000000000000- case: test_make_server main: | from wsgiref.simple_server import make_server from django.core.handlers.wsgi import WSGIHandler make_server( "0.0.0.0", 8080, WSGIHandler(), ) django-stubs-5.2.9/tests/typecheck/core/test_checks.yml000066400000000000000000000033101513401051600232130ustar00rootroot00000000000000- case: test_checks_register main: | from collections.abc import Sequence from typing import Any from typing_extensions import reveal_type from django.apps.config import AppConfig from django.core.checks import register, Warning, CheckMessage @register("foo", deploy=True) def check_foo(app_configs: Sequence[AppConfig] | None, databases: Sequence[str] | None, **kwargs: Any) -> list[Warning]: if databases and 'databass' in databases: return [Warning("Naughty list")] return [] reveal_type(check_foo) # N: Revealed type is "django.core.checks.registry._ProcessedCheckCallable[def (app_configs: typing.Sequence[django.apps.config.AppConfig] | None, databases: typing.Sequence[builtins.str] | None, **kwargs: Any) -> builtins.list[django.core.checks.messages.Warning]]" reveal_type(check_foo.tags) # N: Revealed type is "typing.Sequence[builtins.str]" @register def check_bar(*, app_configs: Sequence[AppConfig] | None, **kwargs: Any) -> list[CheckMessage]: ... reveal_type(check_bar) # N: Revealed type is "django.core.checks.registry._ProcessedCheckCallable[def (*, app_configs: typing.Sequence[django.apps.config.AppConfig] | None, **kwargs: Any) -> builtins.list[django.core.checks.messages.CheckMessage]]" @register def check_baz(**kwargs: Any) -> list[CheckMessage]: ... reveal_type(check_baz) # N: Revealed type is "django.core.checks.registry._ProcessedCheckCallable[def (**kwargs: Any) -> builtins.list[django.core.checks.messages.CheckMessage]]" @register() # E: Value of type variable "_C" of function cannot be "Callable[[int], list[CheckMessage]]" [type-var] def wrong_args(bla: int) -> list[CheckMessage]: ... django-stubs-5.2.9/tests/typecheck/core/test_exceptions.yml000066400000000000000000000013221513401051600241350ustar00rootroot00000000000000- case: ValidationError_nested_message main: | from django.core.exceptions import ValidationError ValidationError({ 'list': [ 'list error 1', 'list error 2' ], 'plain_str': 'message', 'plain_error': ValidationError('message'), 'list_error': [ ValidationError('list error 1', code='test'), ValidationError('list error 2', code='test'), ] }) ValidationError([ 'message 1', ValidationError('message 2'), ['nested 1', 'nested 2'], ]) django-stubs-5.2.9/tests/typecheck/db/000077500000000000000000000000001513401051600176315ustar00rootroot00000000000000django-stubs-5.2.9/tests/typecheck/db/migrations/000077500000000000000000000000001513401051600220055ustar00rootroot00000000000000django-stubs-5.2.9/tests/typecheck/db/migrations/test_classvar.yml000066400000000000000000000013611513401051600254060ustar00rootroot00000000000000- case: explicit main: | from typing import ClassVar from django.db import migrations from django.db.migrations.operations.base import Operation class Migration(migrations.Migration): operations: ClassVar[list[Operation]] = [] initial: ClassVar[bool] = True - case: explicit_incorrect expect_fail: true main: | from typing import ClassVar from django.db import migrations from django.db.migrations.operations.base import Operation class Migration(migrations.Migration): operations: list[Operation] = [] initial: bool = True - case: implicit main: | from django.db import migrations class Migration(migrations.Migration): operations = [] initial = True django-stubs-5.2.9/tests/typecheck/db/migrations/test_operations.yml000066400000000000000000000052041513401051600257530ustar00rootroot00000000000000- case: runsql_sqls_variants main: | from django.db.migrations import RunSQL RunSQL(sql="SOME SQL") RunSQL(sql=("SOME SQLS", "SOME SQLS"), reverse_sql=("SOME SQLS", "SOME SQLS")) RunSQL(sql=["SOME SQLS", "SOME SQLS"], reverse_sql=["SOME SQLS", "SOME SQLS"]) RunSQL(sql=["SOME SQLS", ("SOME SQLS %s", ("SQL PARAM AS A TUPLE",))], reverse_sql=["SOME SQLS", ("SOME SQLS %s", ("SQL PARAM AS A TUPLE",))]) RunSQL(sql=["SOME SQLS", ("SOME SQLS NO PARAM", None)], reverse_sql=["SOME SQLS", ("SOME SQLS NO PARAM", None)]) RunSQL(sql=["SOME SQLS", ("SOME SQLS %(VAL)s", {"VAL": "FOO"})], reverse_sql=["SOME SQLS", ("SOME SQLS %(VAL)s", {"VAL": "FOO"})]) RunSQL(sql=["SOME SQLS", ("SOME SQLS %s, %s", ["PARAM", "ANOTHER PARAM"])], reverse_sql=["SOME SQLS", ("SOME SQLS %s, %s", ["PARAM", "ANOTHER PARAM"])]) RunSQL("INSERT INTO musician (name) VALUES ('Reinhardt');") RunSQL([("INSERT INTO musician (name) VALUES ('Reinhardt');", None)]) RunSQL([("INSERT INTO musician (name) VALUES (%s);", ["Reinhardt"])]) query = "UPDATE posts SET category = %s WHERE category = ANY(%s);" RunSQL([(query, ['new category', ['retired category', 'another retired category']])]) RunSQL(sql=["SOME SQLS", ("SOME SQLS %s, %s", [object(), "ANOTHER PARAM"])]) RunSQL(sql=("SOME SQL", {})) # E: Argument "sql" to "RunSQL" has incompatible type "tuple[str, dict[Never, Never]]"; expected "str | list[str | tuple[str, dict[str, Any] | list[Any] | tuple[Any, ...] | tuple[()] | None]] | tuple[str | tuple[str, dict[str, Any] | list[Any] | tuple[Any, ...] | tuple[()] | None], ...] | tuple[()]" [arg-type] RunSQL(sql=("SOME SQL", 1)) # E: Argument "sql" to "RunSQL" has incompatible type "tuple[str, int]"; expected "str | list[str | tuple[str, dict[str, Any] | list[Any] | tuple[Any, ...] | tuple[()] | None]] | tuple[str | tuple[str, dict[str, Any] | list[Any] | tuple[Any, ...] | tuple[()] | None], ...] | tuple[()]" [arg-type] RunSQL(sql=("SOME SQL", None)) # E: Argument "sql" to "RunSQL" has incompatible type "tuple[str, None]"; expected "str | list[str | tuple[str, dict[str, Any] | list[Any] | tuple[Any, ...] | tuple[()] | None]] | tuple[str | tuple[str, dict[str, Any] | list[Any] | tuple[Any, ...] | tuple[()] | None], ...] | tuple[()]" [arg-type] RunSQL(sql=("SOME SQLS %(VAL)s", {1: "FOO"})) # E: Argument "sql" to "RunSQL" has incompatible type "tuple[str, dict[int, str]]"; expected "str | list[str | tuple[str, dict[str, Any] | list[Any] | tuple[Any, ...] | tuple[()] | None]] | tuple[str | tuple[str, dict[str, Any] | list[Any] | tuple[Any, ...] | tuple[()] | None], ...] | tuple[()]" [arg-type] django-stubs-5.2.9/tests/typecheck/db/models/000077500000000000000000000000001513401051600211145ustar00rootroot00000000000000django-stubs-5.2.9/tests/typecheck/db/models/test_fields_choices.yml000066400000000000000000000103711513401051600256430ustar00rootroot00000000000000- case: db_models_charfield_invalid_choices main: | from django.db import models class MyModel(models.Model): char1 = models.CharField(max_length=200, choices='test') out: | main:4: error: Argument "choices" to "CharField" has incompatible type "str"; expected "Iterable[tuple[Any, Any] | tuple[str, Iterable[tuple[Any, Any]]]] | Mapping[Any, Any] | type[Choices] | Callable[[], Iterable[tuple[Any, Any] | tuple[str, Iterable[tuple[Any, Any]]]] | Mapping[Any, Any]] | None" [arg-type] main:4: note: Following member(s) of "str" have conflicts: main:4: note: Expected: main:4: note: def __iter__(self) -> Iterator[tuple[Any, Any] | tuple[str, Iterable[tuple[Any, Any]]]] main:4: note: Got: main:4: note: def __iter__(self) -> Iterator[str] - case: db_models_integerfield_invalid_choices main: | from django.db import models class MyModel(models.Model): int1 = models.IntegerField(choices='test') out: | main:4: error: Argument "choices" to "IntegerField" has incompatible type "str"; expected "Iterable[tuple[Any, Any] | tuple[str, Iterable[tuple[Any, Any]]]] | Mapping[Any, Any] | type[Choices] | Callable[[], Iterable[tuple[Any, Any] | tuple[str, Iterable[tuple[Any, Any]]]] | Mapping[Any, Any]] | None" [arg-type] main:4: note: Following member(s) of "str" have conflicts: main:4: note: Expected: main:4: note: def __iter__(self) -> Iterator[tuple[Any, Any] | tuple[str, Iterable[tuple[Any, Any]]]] main:4: note: Got: main:4: note: def __iter__(self) -> Iterator[str] - case: db_models_valid_choices main: | from collections.abc import Callable, Mapping, Sequence from typing import TypeVar from django.db import models from typing_extensions import assert_type _T = TypeVar("_T") def to_named_seq(func: Callable[[], _T]) -> Callable[[], Sequence[tuple[str, _T]]]: def inner() -> Sequence[tuple[str, _T]]: return [("title", func())] return inner def to_named_mapping(func: Callable[[], _T]) -> Callable[[], Mapping[str, _T]]: def inner() -> Mapping[str, _T]: return {"title": func()} return inner def str_tuple() -> Sequence[tuple[str, str]]: return (("foo", "bar"), ("fuzz", "bazz")) def str_mapping() -> Mapping[str, str]: return {"foo": "bar", "fuzz": "bazz"} def int_tuple() -> Sequence[tuple[int, str]]: return ((1, "bar"), (2, "bazz")) def int_mapping() -> Mapping[int, str]: return {3: "bar", 4: "bazz"} class TestModel(models.Model): class TextChoices(models.TextChoices): FIRST = "foo", "bar" SECOND = "foo2", "bar" class IntegerChoices(models.IntegerChoices): FIRST = 1, "bar" SECOND = 2, "bar" char1 = models.CharField(max_length=5, choices=TextChoices, default="foo") char2 = models.CharField(max_length=5, choices=str_tuple, default="foo") char3 = models.CharField(max_length=5, choices=str_mapping, default="foo") char4 = models.CharField(max_length=5, choices=str_tuple(), default="foo") char5 = models.CharField(max_length=5, choices=str_mapping(), default="foo") char6 = models.CharField(max_length=5, choices=to_named_seq(str_tuple), default="foo") char7 = models.CharField(max_length=5, choices=to_named_mapping(str_mapping), default="foo") char8 = models.CharField(max_length=5, choices=to_named_seq(str_tuple)(), default="foo") char9 = models.CharField(max_length=5, choices=to_named_mapping(str_mapping)(), default="foo") int1 = models.IntegerField(choices=IntegerChoices, default=1) int2 = models.IntegerField(choices=int_tuple, default=1) int3 = models.IntegerField(choices=int_mapping, default=1) int4 = models.IntegerField(choices=int_tuple(), default=1) int5 = models.IntegerField(choices=int_mapping(), default=1) int6 = models.IntegerField(choices=to_named_seq(int_tuple), default=1) int7 = models.IntegerField(choices=to_named_seq(int_mapping), default=1) int8 = models.IntegerField(choices=to_named_seq(int_tuple)(), default=1) int9 = models.IntegerField(choices=to_named_seq(int_mapping)(), default=1) django-stubs-5.2.9/tests/typecheck/db/models/test_init.yml000066400000000000000000000023201513401051600236360ustar00rootroot00000000000000- case: field_to_many_and_to_one_attrs_bool_or_none_in_field_base_class main: | from django.db.models import Field field: Field my_bool: bool my_bool = field.one_to_many my_bool = field.one_to_one my_bool = field.many_to_many my_bool = field.many_to_one # Narrowing the types should give us bool assert field.one_to_many is not None my_bool = field.one_to_many assert field.one_to_one is not None my_bool = field.one_to_one assert field.many_to_many is not None my_bool = field.many_to_many assert field.many_to_one is not None my_bool = field.many_to_one out: | main:6: error: Incompatible types in assignment (expression has type "bool | None", variable has type "bool") [assignment] main:7: error: Incompatible types in assignment (expression has type "bool | None", variable has type "bool") [assignment] main:8: error: Incompatible types in assignment (expression has type "bool | None", variable has type "bool") [assignment] main:9: error: Incompatible types in assignment (expression has type "bool | None", variable has type "bool") [assignment] django-stubs-5.2.9/tests/typecheck/db/models/test_query.yml000066400000000000000000000055201513401051600240450ustar00rootroot00000000000000- case: django_db_models_query_module_has_ModelIterable main: | from django.db.models.query import ModelIterable from django.db.models import Model class IntModelIterable(ModelIterable[int]): pass class NoTypeParameterModelIterable(ModelIterable): pass class ModelModelIterable(ModelIterable[Model]): pass class MyModel(Model): pass class MyModelModelIterable(ModelIterable[MyModel]): pass out: | main:4: error: Type argument "int" of "ModelIterable" must be a subtype of "Model" [type-var] - case: django_db_models_query_module_has_ValuesListIterable main: | from django.db.models.query import ValuesListIterable class IntValuesListIterable(ValuesListIterable[tuple[int,int]]): pass class StringsValuesListIterable(ValuesListIterable[tuple[str,str,str]]): pass class MultiTypeValuesListIterable(ValuesListIterable[tuple[str,int,float]]): pass class NonTupleValuesListIterable(ValuesListIterable[int]): pass out: | main:10: error: Type argument "int" of "ValuesListIterable" must be a subtype of "tuple[Any, ...]" [type-var] - case: django_db_models_query_module_has_NamedValuesListIterable main: | from django.db.models.query import NamedValuesListIterable out: | - case: QuerySet_has__iterable_class_defined main: | from django.db.models.query import QuerySet, ValuesIterable, ModelIterable iterable_class = QuerySet._iterable_class QuerySet._iterable_class = ValuesIterable QuerySet._iterable_class = ModelIterable QuerySet._iterable_class = int out: | main:5: error: Incompatible types in assignment (expression has type "type[int]", variable has type "type[BaseIterable[Any]]") [assignment] - case: QuerySet_type_vars main: | from typing_extensions import reveal_type from django.db.models.query import QuerySet from django.contrib.auth.models import User from django_stubs_ext import ValuesQuerySet a: QuerySet[User] reveal_type(a) # N: Revealed type is "django.db.models.query.QuerySet[django.contrib.auth.models.User, django.contrib.auth.models.User]" b: QuerySet[User, int] reveal_type(b) # N: Revealed type is "django.db.models.query.QuerySet[django.contrib.auth.models.User, builtins.int]" c: ValuesQuerySet[User, int] reveal_type(c) # N: Revealed type is "django.db.models.query.QuerySet[django.contrib.auth.models.User, builtins.int]" d: QuerySet[int] # E: Type argument "int" of "QuerySet" must be a subtype of "Model" [type-var] e: ValuesQuerySet[int] # E: Type argument "int" of "QuerySet" must be a subtype of "Model" [type-var] django-stubs-5.2.9/tests/typecheck/db/test_connection.yml000066400000000000000000000020271513401051600235530ustar00rootroot00000000000000- case: raw_default_connection main: | from typing_extensions import reveal_type from django.db import connection with connection.cursor() as cursor: reveal_type(cursor) # N: Revealed type is "django.db.backends.utils.CursorWrapper" cursor.execute("SELECT %s", [123]) - case: raw_connection_psycopg2_composable main: | from django.db import connection from psycopg2.sql import SQL, Identifier # type: ignore [import-untyped] with connection.cursor() as cursor: cursor.execute(SQL("INSERT INTO {} VALUES (%s)").format(Identifier("my_table")), [123]) - case: raw_connections main: | from typing_extensions import reveal_type from django.db import connections reveal_type(connections["test"]) # N: Revealed type is "django.db.backends.base.base.BaseDatabaseWrapper" for connection in connections.all(): with connection.cursor() as cursor: reveal_type(cursor) # N: Revealed type is "django.db.backends.utils.CursorWrapper" django-stubs-5.2.9/tests/typecheck/db/test_transaction.yml000066400000000000000000000030251513401051600237400ustar00rootroot00000000000000- case: atomic_bare main: | from typing_extensions import reveal_type from django.db.transaction import atomic @atomic def func(x: int) -> list: ... reveal_type(func) # N: Revealed type is "def (x: builtins.int) -> builtins.list[Any]" - case: atomic_args main: | from typing_extensions import reveal_type from django.db.transaction import atomic @atomic(using='bla', savepoint=False) def func(x: int) -> list: ... reveal_type(func) # N: Revealed type is "def (x: builtins.int) -> builtins.list[Any]" - case: non_atomic_requests_bare main: | from typing import Any from typing_extensions import reveal_type from django.db.transaction import non_atomic_requests from django.http import HttpRequest, HttpResponse @non_atomic_requests def view_func(request: HttpRequest) -> HttpResponse: ... reveal_type(view_func) # N: Revealed type is "def (request: django.http.request.HttpRequest) -> django.http.response.HttpResponse" - case: non_atomic_requests_args main: | from typing_extensions import reveal_type from django.http.request import HttpRequest from django.http.response import HttpResponse from django.db.transaction import non_atomic_requests @non_atomic_requests def view_func(request: HttpRequest, arg: str) -> HttpResponse: ... reveal_type(view_func) # N: Revealed type is "def (request: django.http.request.HttpRequest, arg: builtins.str) -> django.http.response.HttpResponse" django-stubs-5.2.9/tests/typecheck/fields/000077500000000000000000000000001513401051600205125ustar00rootroot00000000000000django-stubs-5.2.9/tests/typecheck/fields/test_base.yml000066400000000000000000000217651513401051600232210ustar00rootroot00000000000000- case: test_model_fields_classes_present_as_primitives main: | from typing_extensions import reveal_type from myapp.models import User user = User(small_int=1, name='user', slug='user', text='user') reveal_type(user.id) # N: Revealed type is "builtins.int" reveal_type(user.small_int) # N: Revealed type is "builtins.int" reveal_type(user.name) # N: Revealed type is "builtins.str" reveal_type(user.slug) # N: Revealed type is "builtins.str" reveal_type(user.text) # N: Revealed type is "builtins.str" installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class User(models.Model): id = models.AutoField(primary_key=True) small_int = models.SmallIntegerField() name = models.CharField(max_length=255) slug = models.SlugField(max_length=255) text = models.TextField() - case: test_model_field_classes_from_existing_locations main: | from typing_extensions import reveal_type from myapp.models import Booking booking = Booking() reveal_type(booking.id) # N: Revealed type is "builtins.int" reveal_type(booking.time_range) # N: Revealed type is "Any" reveal_type(booking.some_decimal) # N: Revealed type is "decimal.Decimal" installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models from django.contrib.postgres import fields as pg_fields from decimal import Decimal class Booking(models.Model): id = models.AutoField(primary_key=True) time_range = pg_fields.DateTimeRangeField(null=False) some_decimal = models.DecimalField(max_digits=10, decimal_places=5) - case: test_add_id_field_if_no_primary_key_defined disable_cache: true main: | from typing_extensions import reveal_type from myapp.models import User reveal_type(User().id) # N: Revealed type is "builtins.int" installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class User(models.Model): pass - case: test_do_not_add_id_if_field_with_primary_key_True_defined disable_cache: true main: | from typing_extensions import reveal_type from myapp.models import User reveal_type(User().my_pk) # N: Revealed type is "builtins.int" User().id # E: "User" has no attribute "id" [attr-defined] installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class User(models.Model): my_pk = models.IntegerField(primary_key=True) - case: blank_and_null_char_field_allows_none main: | from typing_extensions import reveal_type from myapp.models import MyModel MyModel(nulltext="") MyModel(nulltext=None) MyModel().nulltext=None reveal_type(MyModel().nulltext) # N: Revealed type is "builtins.str | None" installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class MyModel(models.Model): nulltext=models.CharField(max_length=1, blank=True, null=True) - case: blank_and_not_null_charfield_does_not_allow_none main: | from typing_extensions import reveal_type from myapp.models import MyModel MyModel(notnulltext=None) # E: Incompatible type for "notnulltext" of "MyModel" (got "None", expected "str | int | Combinable") [misc] MyModel(notnulltext="") MyModel().notnulltext = None # E: Incompatible types in assignment (expression has type "None", variable has type "str | int | Combinable") [assignment] reveal_type(MyModel().notnulltext) # N: Revealed type is "builtins.str" installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class MyModel(models.Model): notnulltext=models.CharField(max_length=1, blank=True, null=False) - case: if_field_called_on_class_return_field_itself main: | from typing_extensions import reveal_type from myapp.models import MyUser reveal_type(MyUser.name.field) # N: Revealed type is "django.db.models.fields.CharField[builtins.str | builtins.int | django.db.models.expressions.Combinable, builtins.str]" installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class MyUser(models.Model): name = models.CharField(max_length=100) - case: fields_on_non_model_classes_resolve_to_field_type main: | from typing_extensions import reveal_type from django.db import models class MyClass: myfield: models.IntegerField[int, int] reveal_type(MyClass.myfield) # N: Revealed type is "django.db.models.fields._FieldDescriptor[django.db.models.fields.IntegerField[builtins.int, builtins.int]]" reveal_type(MyClass.myfield.field) # N: Revealed type is "django.db.models.fields.IntegerField[builtins.int, builtins.int]" reveal_type(MyClass().myfield) # N: Revealed type is "django.db.models.fields.IntegerField[builtins.int, builtins.int]" - case: fields_inside_mixins_used_in_model_subclasses_resolved_as_primitives main: | from typing_extensions import reveal_type from myapp.models import MyModel, AuthMixin reveal_type(MyModel().username) # N: Revealed type is "builtins.str" installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class AuthMixin(models.Model): class Meta: abstract = True username = models.CharField(max_length=100) class MyModel(AuthMixin, models.Model): pass - case: can_narrow_field_type main: | from typing import cast, NewType from typing_extensions import reveal_type from django.db import models Year = NewType("Year", int) class Book(models.Model): published = cast(models.Field[Year, Year], models.IntegerField()) book = Book() reveal_type(book.published) # N: Revealed type is "main.Year" book.published = 2006 # E: Incompatible types in assignment (expression has type "int", variable has type "Year") [assignment] book.published = Year(2006) reveal_type(book.published) # N: Revealed type is "main.Year" def accepts_int(arg: int) -> None: ... accepts_int(book.published) - case: test_binary_field_return_types main: | from typing_extensions import reveal_type from django.db import models class EncodedMessage(models.Model): message = models.BinaryField() obj = EncodedMessage(b'\x010') reveal_type(obj.message) # N: Revealed type is "builtins.bytes | builtins.memoryview[builtins.int]" - case: test_small_auto_field_class_presents_as_int main: | from typing_extensions import reveal_type from django.db import models class MyModel(models.Model): small = models.SmallAutoField(primary_key=True) obj = MyModel() reveal_type(obj.small) # N: Revealed type is "builtins.int" - case: test_ignores_renamed_field main: | # Ref: https://github.com/typeddjango/django-stubs/issues/1261 # Django modifies the model so it doesn't have 'modelname', but we don't follow # along. But the 'name=' argument to a field isn't a documented feature. from typing_extensions import reveal_type from myapp.models import RenamedField instance = RenamedField() reveal_type(instance.modelname) # N: Revealed type is "builtins.int" instance.fieldname # E: "RenamedField" has no attribute "fieldname" [attr-defined] instance.modelname = 1 instance.fieldname = 1 # E: "RenamedField" has no attribute "fieldname" [attr-defined] installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class RenamedField(models.Model): modelname = models.IntegerField(name="fieldname", choices=((1, 'One'),)) django-stubs-5.2.9/tests/typecheck/fields/test_custom_fields.yml000066400000000000000000000126231513401051600251400ustar00rootroot00000000000000- case: test_custom_model_fields_with_generic_type main: | from typing_extensions import reveal_type from myapp.models import User, CustomFieldValue user = User() reveal_type(user.id) # N: Revealed type is "builtins.int" reveal_type(user.my_custom_field1) # N: Revealed type is "myapp.models.CustomFieldValue" reveal_type(user.my_custom_field2) # N: Revealed type is "myapp.models.CustomFieldValue" reveal_type(user.my_custom_field3) # N: Revealed type is "builtins.bool" reveal_type(user.my_custom_field4) # N: Revealed type is "myapp.models.CustomFieldValue" reveal_type(user.my_custom_field5) # N: Revealed type is "myapp.models.CustomFieldValue" reveal_type(user.my_custom_field6) # N: Revealed type is "myapp.models.CustomFieldValue" reveal_type(user.my_custom_field7) # N: Revealed type is "builtins.bool" reveal_type(user.my_custom_field8) # N: Revealed type is "myapp.models.CustomFieldValue" reveal_type(user.my_custom_field9) # N: Revealed type is "myapp.models.CustomFieldValue" reveal_type(user.my_custom_field10) # N: Revealed type is "builtins.bool" reveal_type(user.my_custom_field11) # N: Revealed type is "builtins.bool" reveal_type(user.my_custom_field12) # N: Revealed type is "myapp.models.CustomFieldValue | None" reveal_type(user.my_custom_field13) # N: Revealed type is "myapp.models.CustomFieldValue | None" reveal_type(user.my_custom_field14) # N: Revealed type is "builtins.bool | None" reveal_type(user.my_custom_field15) # N: Revealed type is "None" reveal_type(user.my_custom_field_any1) # N: Revealed type is "Any" reveal_type(user.my_custom_field_any2) # N: Revealed type is "Any" reveal_type(user.my_custom_field_any3) # N: Revealed type is "Any" reveal_type(user.my_custom_field_any4) # N: Revealed type is "Any" monkeypatch: true installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models from django.db.models import fields from typing import Any, Generic, TypeVar _ST = TypeVar("_ST", contravariant=True) _GT = TypeVar("_GT", covariant=True) T = TypeVar("T") class CustomFieldValue: ... class GenericField(fields.Field[_ST, _GT]): ... class SingleTypeField(fields.Field[T, T]): ... class CustomValueField(fields.Field[CustomFieldValue | int, CustomFieldValue]): ... class AdditionalTypeVarField(fields.Field[_ST, _GT], Generic[_ST, _GT, T]): ... class CustomSmallIntegerField(fields.SmallIntegerField[_ST, _GT]): ... class FieldImplicitAny(fields.Field): ... class FieldExplicitAny(fields.Field[Any, Any]): ... class User(models.Model): id = models.AutoField(primary_key=True) my_custom_field1 = GenericField[CustomFieldValue | int, CustomFieldValue]() my_custom_field2 = CustomValueField() my_custom_field3 = SingleTypeField[bool]() my_custom_field4 = AdditionalTypeVarField[CustomFieldValue | int, CustomFieldValue, bool]() my_custom_field_any1 = FieldImplicitAny() my_custom_field_any2 = FieldExplicitAny() # test null=True on fields with non-optional generic types throw error my_custom_field5 = GenericField[CustomFieldValue | int, CustomFieldValue](null=True) # E: GenericField is nullable but its generic get type parameter is not optional [misc] my_custom_field6 = CustomValueField(null=True) # E: CustomValueField is nullable but its generic get type parameter is not optional [misc] my_custom_field7 = SingleTypeField[bool](null=True) # E: SingleTypeField is nullable but its generic get type parameter is not optional [misc] my_custom_field8 = AdditionalTypeVarField[CustomFieldValue | int, CustomFieldValue, bool](null=True) # E: AdditionalTypeVarField is nullable but its generic get type parameter is not optional [misc] my_custom_field9 = fields.Field[CustomFieldValue | int, CustomFieldValue](null=True) # E: Field is nullable but its generic get type parameter is not optional [misc] # test overriding fields that set _pyi_private_set_type or _pyi_private_get_type my_custom_field10 = fields.SmallIntegerField[bool, bool]() my_custom_field11 = CustomSmallIntegerField[bool, bool]() # test null=True on fields with non-optional generic types throw no errors my_custom_field12 = fields.Field[CustomFieldValue | int, CustomFieldValue | None](null=True) my_custom_field13 = GenericField[CustomFieldValue | int, CustomFieldValue | None](null=True) my_custom_field14 = SingleTypeField[bool | None](null=True) my_custom_field15 = fields.Field[None, None](null=True) # test null=True on Any does not raise my_custom_field_any3 = FieldImplicitAny(null=True) my_custom_field_any4 = FieldExplicitAny(null=True) django-stubs-5.2.9/tests/typecheck/fields/test_generic_foreign_key.yml000066400000000000000000000037331513401051600262770ustar00rootroot00000000000000- case: generic_foreign_key_could_point_to_any_model_and_is_always_optional main: | from typing_extensions import reveal_type from myapp.models import Tag, User myuser = User() Tag(content_object=None) Tag(content_object=myuser) Tag.objects.create(content_object=None) Tag.objects.create(content_object=myuser) reveal_type(Tag().content_object) # N: Revealed type is "Any | None" installed_apps: - myapp - django.contrib.contenttypes files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models from django.contrib.contenttypes import fields class User(models.Model): pass class Tag(models.Model): content_object = fields.GenericForeignKey() - case: generic_foreign_key_subclass_could_point_to_any_model_and_is_always_optional main: | from typing_extensions import reveal_type from myapp.models import Tag, User myuser = User() Tag(content_object=None) Tag(content_object=myuser) Tag.objects.create(content_object=None) Tag.objects.create(content_object=myuser) reveal_type(Tag().content_object) # N: Revealed type is "Any | None" installed_apps: - myapp - django.contrib.contenttypes files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models from django.contrib.contenttypes import fields class User(models.Model): pass class Tag(models.Model): content_object = fields.GenericForeignKey() # Simulate a GenericForeignKey subclass without type infos. Tag.content_object.__class__ = type('MyGenericForeignKey', (fields.GenericForeignKey,), {}) django-stubs-5.2.9/tests/typecheck/fields/test_nullable.yml000066400000000000000000000100471513401051600240740ustar00rootroot00000000000000- case: autofield_can_be_set_to_none main: | from myapp.models import MyModel, MyModelExplicitPK m = MyModel() m.id = 3 m.id = None m2 = MyModel(id=None) MyModel.objects.create(id=None) MyModel.objects.all().update(id=None) # Should give an error since there's a not-null constraint def foo(a: int) -> bool: return True m2 = MyModel() foo(m2.id) # At runtime, this would be an error, unless m.save() was called to populate the `id` field. # but the plugin cannot catch this. foo(m.id) exp = MyModelExplicitPK() exp.id = 3 exp.id = None installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class MyModel(models.Model): pass class MyModelExplicitPK(models.Model): id = models.AutoField(primary_key=True) - case: nullable_field_with_strict_optional_true main: | from typing_extensions import reveal_type from myapp.models import MyModel reveal_type(MyModel().text) # N: Revealed type is "builtins.str" reveal_type(MyModel().text_nullable) # N: Revealed type is "builtins.str | None" MyModel().text = None # E: Incompatible types in assignment (expression has type "None", variable has type "str | int | Combinable") [assignment] MyModel().text_nullable = None installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class MyModel(models.Model): text_nullable = models.CharField(max_length=100, null=True) text = models.CharField(max_length=100) - case: nullable_array_field main: | from typing_extensions import reveal_type from myapp.models import MyModel reveal_type(MyModel().lst) # N: Revealed type is "builtins.list[builtins.str] | None" installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models from django.contrib.postgres.fields import ArrayField class MyModel(models.Model): lst = ArrayField(base_field=models.CharField(max_length=100), null=True) - case: nullable_foreign_key main: | from typing_extensions import reveal_type from myapp.models import Publisher, Book reveal_type(Book().publisher) # N: Revealed type is "myapp.models.Publisher | None" Book().publisher = 11 # E: Incompatible types in assignment (expression has type "int", variable has type "Publisher | Combinable | None") [assignment] installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class Publisher(models.Model): pass class Book(models.Model): publisher = models.ForeignKey(to=Publisher, on_delete=models.CASCADE, null=True) - case: nullable_self_foreign_key main: | from typing_extensions import reveal_type from myapp.models import Inventory parent = Inventory() core = Inventory(parent_id=parent.id) reveal_type(core.parent_id) # N: Revealed type is "builtins.int | None" reveal_type(core.parent) # N: Revealed type is "myapp.models.Inventory | None" Inventory(parent=None) Inventory(parent_id=None) installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class Inventory(models.Model): parent = models.ForeignKey('self', on_delete=models.SET_NULL, null=True) django-stubs-5.2.9/tests/typecheck/fields/test_postgres_fields.yml000066400000000000000000000026431513401051600254750ustar00rootroot00000000000000- case: array_field_descriptor_access main: | from typing_extensions import reveal_type from myapp.models import User user = User(array=[]) reveal_type(user.array) # N: Revealed type is "builtins.list[Any]" installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models from django.contrib.postgres.fields import ArrayField class User(models.Model): array = ArrayField(base_field=models.Field()) - case: array_field_base_field_parsed_into_generic_typevar main: | from typing_extensions import reveal_type from myapp.models import User user = User() reveal_type(user.members) # N: Revealed type is "builtins.list[builtins.int]" reveal_type(user.members_as_text) # N: Revealed type is "builtins.list[builtins.str]" installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models from django.contrib.postgres.fields import ArrayField class User(models.Model): members = ArrayField(base_field=models.IntegerField()) members_as_text = ArrayField(base_field=models.CharField(max_length=255)) django-stubs-5.2.9/tests/typecheck/fields/test_related.yml000066400000000000000000002323641513401051600237260ustar00rootroot00000000000000- case: test_foreign_key_field_with_related_name main: | from typing_extensions import reveal_type from myapp.models import Book, Publisher book = Book() reveal_type(book.publisher) # N: Revealed type is "myapp.models.Publisher" publisher = Publisher() reveal_type(publisher.books) # N: Revealed type is "django.db.models.fields.related_descriptors.RelatedManager[myapp.models.Book]" installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class Publisher(models.Model): pass class Book(models.Model): publisher = models.ForeignKey(to=Publisher, on_delete=models.CASCADE, related_name='books') - case: foreign_key_field_creates_attribute_with_underscore_id main: | from typing_extensions import reveal_type from myapp.models import Book book = Book() reveal_type(book.publisher_id) # N: Revealed type is "builtins.int" reveal_type(book.owner_id) # N: Revealed type is "builtins.int" installed_apps: - django.contrib.auth - django.contrib.contenttypes - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class Publisher(models.Model): pass class Book(models.Model): publisher = models.ForeignKey(to=Publisher, on_delete=models.CASCADE) owner = models.ForeignKey(db_column='model_id', to='auth.User', on_delete=models.CASCADE) - case: foreign_key_field_custom_to_field main: | from typing_extensions import reveal_type from myapp.models import Book, Publisher from uuid import UUID book = Book() book.publisher = Publisher() reveal_type(book.publisher_id) # N: Revealed type is "uuid.UUID" book.publisher_id = '821850bb-c105-426f-b340-3974419d00ca' book.publisher_id = UUID('821850bb-c105-426f-b340-3974419d00ca') book.publisher_id = [1] # E: Incompatible types in assignment (expression has type "list[int]", variable has type "str | UUID") [assignment] book.publisher_id = Publisher() # E: Incompatible types in assignment (expression has type "Publisher", variable has type "str | UUID") [assignment] installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class Publisher(models.Model): id = models.BigAutoField(primary_key=True) uuid = models.UUIDField(unique=True) class Book(models.Model): publisher = models.ForeignKey(to=Publisher, to_field='uuid', on_delete=models.CASCADE) - case: foreign_key_field_different_order_of_params main: | from typing_extensions import reveal_type from myapp.models import Book, Publisher book = Book() reveal_type(book.publisher) # N: Revealed type is "myapp.models.Publisher" reveal_type(book.publisher2) # N: Revealed type is "myapp.models.Publisher" publisher = Publisher() reveal_type(publisher.books) # N: Revealed type is "django.db.models.fields.related_descriptors.RelatedManager[myapp.models.Book]" reveal_type(publisher.books2) # N: Revealed type is "django.db.models.fields.related_descriptors.RelatedManager[myapp.models.Book]" installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class Publisher(models.Model): pass class Book(models.Model): publisher = models.ForeignKey(on_delete=models.CASCADE, to=Publisher, related_name='books') publisher2 = models.ForeignKey(to=Publisher, related_name='books2', on_delete=models.CASCADE) - case: foreign_key_subclass main: | from typing_extensions import reveal_type from myapp.models import A reveal_type(A.objects.get().b) # N: Revealed type is "myapp.models.B" installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from typing import TypeVar from django.db import models _ST = TypeVar("_ST", contravariant=True) _GT = TypeVar("_GT", covariant=True) class MyForeignKey(models.ForeignKey[_ST, _GT]): ... class B(models.Model): ... class A(models.Model): b = models.ForeignKey(B, on_delete=models.CASCADE) - case: to_parameter_as_string_with_application_name__model_imported main: | from typing_extensions import reveal_type from myapp2.models import Book book = Book() reveal_type(book.publisher) # N: Revealed type is "myapp.models.Publisher" installed_apps: - myapp - myapp2 files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class Publisher(models.Model): pass - path: myapp2/__init__.py - path: myapp2/models.py content: | from django.db import models class Book(models.Model): publisher = models.ForeignKey(to='myapp.Publisher', on_delete=models.CASCADE) - case: one_to_one_field_no_related_name main: | from typing_extensions import reveal_type from myapp.models import User, Profile reveal_type(User().profile) # N: Revealed type is "myapp.models.Profile" reveal_type(Profile().user) # N: Revealed type is "myapp.models.User" installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class User(models.Model): pass class Profile(models.Model): user = models.OneToOneField(to=User, on_delete=models.CASCADE) - case: test_circular_dependency_in_imports_with_foreign_key main: | from myapp import models installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from typing_extensions import reveal_type from django.db import models class App(models.Model): def method(self) -> None: reveal_type(self.views) # N: Revealed type is "django.db.models.fields.related_descriptors.RelatedManager[myapp.models.View]" reveal_type(self.members) # N: Revealed type is "django.db.models.fields.related_descriptors.RelatedManager[myapp.models.Member]" reveal_type(self.sheets) # N: Revealed type is "django.db.models.fields.related_descriptors.RelatedManager[myapp.models.Sheet]" reveal_type(self.profile) # N: Revealed type is "myapp.models.Profile" class View(models.Model): app = models.ForeignKey(to=App, related_name='views', on_delete=models.CASCADE) class Member(models.Model): app = models.ForeignKey(related_name='members', on_delete=models.CASCADE, to=App) class Sheet(models.Model): app = models.ForeignKey(App, related_name='sheets', on_delete=models.CASCADE) class Profile(models.Model): app = models.OneToOneField(App, related_name='profile', on_delete=models.CASCADE) - case: test_circular_dependency_in_imports_with_string_based main: | from typing_extensions import reveal_type from myapp.models import View reveal_type(View().app.views) # N: Revealed type is "django.db.models.fields.related_descriptors.RelatedManager[myapp.models.View]" View().app.unknown # E: "App" has no attribute "unknown" [attr-defined] installed_apps: - myapp - myapp2 files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models from myapp2.models import App class View(models.Model): app = models.ForeignKey(to=App, related_name='views', on_delete=models.CASCADE) - path: myapp2/__init__.py - path: myapp2/models.py content: | from typing_extensions import reveal_type from django.db import models class App(models.Model): def method(self) -> None: reveal_type(self.views) # N: Revealed type is "django.db.models.fields.related_descriptors.RelatedManager[myapp.models.View]" - case: models_related_managers_work_with_direct_model_inheritance_and_with_inheritance_from_other_model main: | from typing_extensions import reveal_type from myapp.models import App reveal_type(App().views) # N: Revealed type is "django.db.models.fields.related_descriptors.RelatedManager[myapp.models.View]" reveal_type(App().views2) # N: Revealed type is "django.db.models.fields.related_descriptors.RelatedManager[myapp.models.View2]" installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class App(models.Model): pass class View(models.Model): app = models.ForeignKey(to=App, on_delete=models.CASCADE, related_name='views') class View2(View): app2 = models.ForeignKey(to=App, on_delete=models.CASCADE, related_name='views2') - case: models_imported_inside_init_file_foreign_key main: | from typing_extensions import reveal_type from myapp2.models import View reveal_type(View().app.views) # N: Revealed type is "django.db.models.fields.related_descriptors.RelatedManager[myapp2.models.View]" installed_apps: - myapp - myapp2 files: - path: myapp/__init__.py - path: myapp/models/__init__.py content: | from .app import App as App - path: myapp/models/app.py content: | from django.db import models class App(models.Model): pass - path: myapp2/__init__.py - path: myapp2/models.py content: | from django.db import models from myapp.models import App class View(models.Model): app = models.ForeignKey(to='myapp.App', related_name='views', on_delete=models.CASCADE) - case: models_imported_inside_init_file_one_to_one_field main: | from typing_extensions import reveal_type from myapp2.models import Profile reveal_type(Profile().user) # N: Revealed type is "myapp.models.user.User" reveal_type(Profile().user.profile) # N: Revealed type is "myapp2.models.Profile" reveal_type(Profile.user.field) # N: Revealed type is "django.db.models.fields.related.OneToOneField[myapp.models.user.User | django.db.models.expressions.Combinable, myapp.models.user.User]" installed_apps: - myapp - myapp2 files: - path: myapp/__init__.py - path: myapp/models/__init__.py content: | from .user import User as User - path: myapp/models/user.py content: | from django.db import models class User(models.Model): pass - path: myapp2/__init__.py - path: myapp2/models.py content: | from django.db import models from myapp.models import User class Profile(models.Model): user = models.OneToOneField(to='myapp.User', related_name='profile', on_delete=models.CASCADE) - case: models_triple_circular_reference main: | from typing_extensions import reveal_type from myapp.models import App reveal_type(App().owner) # N: Revealed type is "myapp.models.user.User" reveal_type(App().owner.profile) # N: Revealed type is "myapp.models.profile.Profile" installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models/__init__.py content: | from .user import User as User from .profile import Profile as Profile from .app import App as App - path: myapp/models/user.py content: | from django.db import models class User(models.Model): pass - path: myapp/models/profile.py content: | from django.db import models class Profile(models.Model): user = models.OneToOneField(to='myapp.User', related_name='profile', on_delete=models.CASCADE) - path: myapp/models/app.py content: | from django.db import models class App(models.Model): owner = models.ForeignKey(to='myapp.User', on_delete=models.CASCADE, related_name='apps') - case: many_to_many_field_converts_to_queryset_of_model_type main: | from typing_extensions import reveal_type from myapp.models import App, Member reveal_type(Member().apps) # N: Revealed type is "myapp.models.App_ManyRelatedManager[myapp.models.Member_apps]" reveal_type(Member().apps.get()) # N: Revealed type is "myapp.models.App" reveal_type(Member().apps.app_method()) # N: Revealed type is "builtins.str" Member().apps.add(App()) reveal_type(App().members) # N: Revealed type is "myapp.models.Member_ManyRelatedManager[myapp.models.Member_apps]" reveal_type(App().members.get()) # N: Revealed type is "myapp.models.Member" reveal_type(App().members.member_method()) # N: Revealed type is "builtins.int" App().members.add(Member()) reveal_type(Member.apps.field) # N: Revealed type is "django.db.models.fields.related.ManyToManyField[myapp.models.App, myapp.models.Member_apps]" reveal_type(App.members) # N: Revealed type is "django.db.models.fields.related_descriptors.ManyToManyDescriptor[myapp.models.Member, myapp.models.Member_apps]" installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class AppQuerySet(models.QuerySet["App"]): def app_method(self) -> str: return "abc" class App(models.Model): objects = AppQuerySet.as_manager() class MemberQuerySet(models.QuerySet["Member"]): def member_method(self) -> int: return 1 class Member(models.Model): apps = models.ManyToManyField(to=App, related_name='members') objects = MemberQuerySet.as_manager() - case: many_to_many_works_with_string_if_imported main: | from typing_extensions import reveal_type from myapp.models import Member reveal_type(Member().apps) # N: Revealed type is "myapp2.models.App_ManyRelatedManager[myapp.models.Member_apps]" installed_apps: - myapp - myapp2 files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class Member(models.Model): apps = models.ManyToManyField(to='myapp2.App', related_name='members') - path: myapp2/__init__.py - path: myapp2/models.py content: | from django.db import models class App(models.Model): pass - case: foreign_key_with_self main: | from typing_extensions import reveal_type from myapp.models import User reveal_type(User().parent) # N: Revealed type is "myapp.models.User" installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class User(models.Model): parent = models.ForeignKey('self', on_delete=models.CASCADE) - case: many_to_many_with_self main: | from typing_extensions import reveal_type from myapp.models import User reveal_type(User().friends) # N: Revealed type is "myapp.models.User_ManyRelatedManager[myapp.models.User_friends]" reveal_type(User().friends.get()) # N: Revealed type is "myapp.models.User" reveal_type(User.friends.through.objects.get()) # N: Revealed type is "myapp.models.User_friends" reveal_type(User.friends.through._default_manager) # N: Revealed type is "django.db.models.manager.Manager[myapp.models.User_friends]" reveal_type(User.friends.through().from_user) # N: Revealed type is "myapp.models.User" reveal_type(User.friends.through().from_user_id) # N: Revealed type is "builtins.int" reveal_type(User.friends.through().to_user) # N: Revealed type is "myapp.models.User" reveal_type(User.friends.through().to_user_id) # N: Revealed type is "builtins.int" reveal_type(User.friends.through) # N: Revealed type is "type[myapp.models.User_friends]" installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class User(models.Model): friends = models.ManyToManyField('self') - case: recursively_checking_for_base_model_in_to_parameter main: | installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class BaseModel(models.Model): pass class ParkingSpot(BaseModel): pass class Booking(BaseModel): parking_spot = models.ForeignKey(to=ParkingSpot, null=True, on_delete=models.SET_NULL) - case: if_no_related_name_is_passed_create_default_related_managers main: | from typing_extensions import reveal_type from myapp.models import Publisher reveal_type(Publisher().book_set) # N: Revealed type is "django.db.models.fields.related_descriptors.RelatedManager[myapp.models.Book]" installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class Publisher(models.Model): pass class Book(models.Model): publisher = models.ForeignKey(to=Publisher, on_delete=models.CASCADE) - case: underscore_id_attribute_has_set_type_of_primary_key_if_explicit main: | import datetime from typing_extensions import reveal_type from myapp.models import Book, Book2 reveal_type(Book().publisher_id) # N: Revealed type is "builtins.str" Book(publisher_id=1) Book(publisher_id='hello') Book(publisher_id=datetime.datetime.now()) # E: Incompatible type for "publisher_id" of "Book" (got "datetime", expected "str | int | Combinable") [misc] Book.objects.create(publisher_id=1) Book.objects.create(publisher_id='hello') reveal_type(Book2().publisher_id) # N: Revealed type is "builtins.int" Book2(publisher_id=1) Book2(publisher_id=[]) # E: Incompatible type for "publisher_id" of "Book2" (got "list[Any]", expected "float | int | str | Combinable") [misc] Book2.objects.create(publisher_id=1) Book2.objects.create(publisher_id=[]) # E: Incompatible type for "publisher_id" of "Book2" (got "list[Any]", expected "float | int | str | Combinable") [misc] installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models import datetime class Publisher(models.Model): mypk = models.CharField(max_length=100, primary_key=True) class Book(models.Model): publisher = models.ForeignKey(to=Publisher, on_delete=models.CASCADE) class Publisher2(models.Model): mypk = models.IntegerField(primary_key=True) class Book2(models.Model): publisher = models.ForeignKey(to=Publisher2, on_delete=models.CASCADE) - case: if_model_is_defined_as_name_of_the_class_look_for_it_in_the_same_app main: | from typing_extensions import reveal_type from myapp.models import Book reveal_type(Book().publisher) # N: Revealed type is "myapp.models.publisher.Publisher" installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models/__init__.py content: | from .publisher import Publisher as Publisher from .book import Book as Book - path: myapp/models/publisher.py content: | from django.db import models class Publisher(models.Model): pass - path: myapp/models/book.py content: | from django.db import models class Book(models.Model): publisher = models.ForeignKey(to='Publisher', on_delete=models.CASCADE) - case: fail_if_no_model_in_the_same_app_models_init_py main: | from myapp.models import Book installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models/__init__.py content: | from .book import Book as Book - path: myapp/models/publisher.py content: | from django.db import models class Publisher(models.Model): pass - path: myapp/models/book.py content: | from django.db import models class Book(models.Model): publisher = models.ForeignKey(to='Publisher', on_delete=models.CASCADE) # E: Cannot find model 'Publisher' referenced in field 'publisher' [misc] - case: test_foreign_key_field_without_backwards_relation main: | from typing_extensions import reveal_type from myapp.models import Book, Publisher book = Book() reveal_type(book.publisher) # N: Revealed type is "myapp.models.Publisher" publisher = Publisher() reveal_type(publisher.books) reveal_type(publisher.books2) # N: Revealed type is "django.db.models.fields.related_descriptors.RelatedManager[myapp.models.Book]" out: | main:7: error: "Publisher" has no attribute "books"; maybe "books2"? [attr-defined] main:7: note: Revealed type is "Any" installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class Publisher(models.Model): pass class Book(models.Model): publisher = models.ForeignKey(to=Publisher, on_delete=models.CASCADE, related_name='+') publisher2 = models.ForeignKey(to=Publisher, on_delete=models.CASCADE, related_name='books2') - case: to_parameter_could_be_resolved_if_passed_from_settings main: | from typing_extensions import reveal_type from myapp.models import Book book = Book() reveal_type(book.publisher) # N: Revealed type is "myapp.models.Publisher" custom_settings: | INSTALLED_APPS = ('django.contrib.contenttypes', 'myapp') BOOK_RELATED_MODEL = 'myapp.Publisher' files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.conf import settings from django.db import models class Publisher(models.Model): pass class Book(models.Model): publisher = models.ForeignKey(to=settings.BOOK_RELATED_MODEL, on_delete=models.CASCADE, related_name='books') - case: foreign_key_with_custom_app_name main: | from typing_extensions import reveal_type from myapp.models import MyMain reveal_type(MyMain().user) # N: Revealed type is "myapp2.models.MyUser" installed_apps: - myapp - myapp2.apps.MyApp2Config files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class MyMain(models.Model): user = models.ForeignKey('myapp2__user.MyUser', on_delete=models.CASCADE) - path: myapp2/__init__.py - path: myapp2/models.py content: | from django.db import models class MyUser(models.Model): pass - path: myapp2/apps.py content: | from django.apps.config import AppConfig class MyApp2Config(AppConfig): name = 'myapp2' label = 'myapp2__user' - case: related_field_to_extracted_from_function main: | from typing_extensions import reveal_type from myapp.models import Profile reveal_type(Profile().user) # N: Revealed type is "myapp.models.User" installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class User(models.Model): pass def get_user_model_name() -> str: return 'myapp.User' class Profile(models.Model): user = models.ForeignKey(to=get_user_model_name(), on_delete=models.CASCADE) - case: related_manager_name_defined_by_pattern main: | from typing_extensions import reveal_type from myapp.models import Publisher reveal_type(Publisher().books) # N: Revealed type is "django.db.models.fields.related_descriptors.RelatedManager[myapp.models.Book]" reveal_type(Publisher().articles) # N: Revealed type is "django.db.models.fields.related_descriptors.RelatedManager[myapp.models.Article]" installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class Publisher(models.Model): pass class Entry(models.Model): class Meta: abstract = True publisher = models.ForeignKey(to=Publisher, related_name='%(class)ss', on_delete=models.CASCADE) class Book(Entry): pass class Article(Entry): pass - case: test_related_fields_returned_as_descriptors_from_model_class main: | from typing_extensions import reveal_type from myapp.models import Author, Blog, Publisher, Profile reveal_type(Author.blogs) # N: Revealed type is "django.db.models.fields.related_descriptors.ManyToManyDescriptor[myapp.models.Blog, myapp.models.Author_blogs]" reveal_type(Author.blogs.through) # N: Revealed type is "type[myapp.models.Author_blogs]" reveal_type(Author().blogs) # N: Revealed type is "myapp.models.Blog_ManyRelatedManager[myapp.models.Author_blogs]" reveal_type(Blog.publisher) # N: Revealed type is "django.db.models.fields.related_descriptors.ForwardManyToOneDescriptor[django.db.models.fields.related.ForeignKey[myapp.models.Publisher | django.db.models.expressions.Combinable, myapp.models.Publisher]]" reveal_type(Publisher.profile) # N: Revealed type is "django.db.models.fields.related_descriptors.ForwardOneToOneDescriptor[django.db.models.fields.related.OneToOneField[myapp.models.Profile | django.db.models.expressions.Combinable, myapp.models.Profile]]" reveal_type(Author.file) # N: Revealed type is "django.db.models.fields.files.FileDescriptor" installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class Profile(models.Model): pass class Publisher(models.Model): profile = models.OneToOneField(Profile, on_delete=models.CASCADE) class Blog(models.Model): publisher = models.ForeignKey(Publisher, on_delete=models.CASCADE) class Author(models.Model): blogs = models.ManyToManyField(Blog) file = models.FileField() - case: test_foreign_key_from_superclass_inherits_correctly main: | from typing_extensions import reveal_type from myapp.models import MyUser, Book, Article, LibraryEntity reveal_type(Book().registered_by_user) # N: Revealed type is "myapp.models.MyUser" reveal_type(Article().registered_by_user) # N: Revealed type is "myapp.models.MyUser" user = MyUser() reveal_type(user.book_set) # N: Revealed type is "django.db.models.fields.related_descriptors.RelatedManager[myapp.models.Book]" reveal_type(user.article_set) # N: Revealed type is "django.db.models.fields.related_descriptors.RelatedManager[myapp.models.Article]" installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class MyUser(models.Model): pass class LibraryEntity(models.Model): class Meta: abstract = True registered_by_user = models.ForeignKey(MyUser, on_delete=models.CASCADE) class Book(LibraryEntity): pass class Article(LibraryEntity): pass - case: test_foreign_key_from_superclass_inherits_correctly_when_also_inheriting_manager main: | from typing_extensions import reveal_type from myapp.models import MyUser, Book, Article, LibraryEntity reveal_type(Book().registered_by_user) # N: Revealed type is "myapp.models.MyUser" reveal_type(Article().registered_by_user) # N: Revealed type is "myapp.models.MyUser" user = MyUser() reveal_type(user.book_set) # N: Revealed type is "myapp.models.Book_RelatedManager" reveal_type(user.article_set) # N: Revealed type is "myapp.models.Article_RelatedManager" reveal_type(user.book_set.add) # N: Revealed type is "def (*objs: myapp.models.Book | builtins.int, bulk: builtins.bool =)" reveal_type(user.article_set.add) # N: Revealed type is "def (*objs: myapp.models.Article | builtins.int, bulk: builtins.bool =)" reveal_type(user.book_set.filter) # N: Revealed type is "def (*args: Any, **kwargs: Any) -> myapp.models.LibraryEntityQuerySet" reveal_type(user.book_set.get()) # N: Revealed type is "myapp.models.Book" reveal_type(user.article_set.filter) # N: Revealed type is "def (*args: Any, **kwargs: Any) -> myapp.models.LibraryEntityQuerySet" reveal_type(user.article_set.get()) # N: Revealed type is "myapp.models.Article" reveal_type(user.book_set.queryset_method()) # N: Revealed type is "builtins.int" reveal_type(user.article_set.queryset_method()) # N: Revealed type is "builtins.int" installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class MyUser(models.Model): pass class LibraryEntityQuerySet(models.QuerySet): def queryset_method(self) -> int: return 1 LibraryEntityManager = models.Manager.from_queryset(LibraryEntityQuerySet) class LibraryEntity(models.Model): class Meta: abstract = True objects = LibraryEntityManager() registered_by_user = models.ForeignKey(MyUser, on_delete=models.CASCADE) class Book(LibraryEntity): pass class Article(LibraryEntity): pass - case: foreign_key_relationship_for_models_with_custom_manager main: | from myapp.models import Transaction installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models from django.db.models.manager import Manager class TransactionQuerySet(models.QuerySet): pass TransactionManager = Manager.from_queryset(TransactionQuerySet) class Transaction(models.Model): pk = 0 objects = TransactionManager() def test(self) -> None: self.transactionlog_set class TransactionLog(models.Model): transaction = models.ForeignKey(Transaction, on_delete=models.CASCADE) Transaction().test() - case: foreign_key_relationship_for_models_with_custom_manager_unsolvable main: | from myapp.models import Transaction installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from typing_extensions import reveal_type from django.db import models from django.db.models.manager import Manager class TransactionQuerySet(models.QuerySet): def custom(self) -> None: pass def TransactionManager() -> Manager: return Manager.from_queryset(TransactionQuerySet)() class Transaction(models.Model): objects = TransactionManager() def test(self) -> None: reveal_type(self.transactionlog_set) # We use a fallback Any type: reveal_type(Transaction.objects) reveal_type(Transaction.objects.custom()) class TransactionLog(models.Model): transaction = models.ForeignKey(Transaction, on_delete=models.CASCADE) out: | myapp/models:14: note: Revealed type is "django.db.models.fields.related_descriptors.RelatedManager[myapp.models.TransactionLog]" myapp/models:16: note: Revealed type is "myapp.models.ManagerFromTransactionQuerySet[myapp.models.Transaction]" myapp/models:17: note: Revealed type is "None" - case: resolve_primary_keys_for_foreign_keys_with_abstract_self_model main: | from typing_extensions import reveal_type from myapp.models import User reveal_type(User().parent) # N: Revealed type is "myapp.models.AbstractUser" reveal_type(User().parent_id) # N: Revealed type is "builtins.int" reveal_type(User().parent2) # N: Revealed type is "myapp.models.AbstractUser | None" reveal_type(User().parent2_id) # N: Revealed type is "builtins.int | None" installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class AbstractUser(models.Model): parent = models.ForeignKey('self', on_delete=models.CASCADE) parent2 = models.ForeignKey('self', null=True, on_delete=models.CASCADE) class Meta: abstract = True class User(AbstractUser): pass - case: nullable_foreign_key_with_init_overridden main: | from typing_extensions import reveal_type from myapp.models import A reveal_type(A.objects.get().b) # N: Revealed type is "myapp.models.B | None" installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from typing import Any, TypeVar from django.db import models _ST = TypeVar("_ST", contravariant=True) _GT = TypeVar("_GT", covariant=True) class FK(models.ForeignKey[_ST, _GT]): def __init__(self, *args: Any, **kwargs: Any) -> None: kwargs.setdefault('on_delete', models.CASCADE) super().__init__(*args, **kwargs) class B(models.Model): ... class A(models.Model): b = FK(B, null=True, on_delete=models.CASCADE) - case: related_manager_is_a_subclass_of_default_manager main: | from typing_extensions import reveal_type from myapp.models import User, Order, Product reveal_type(User().orders) # N: Revealed type is "myapp.models.Order_RelatedManager" reveal_type(User().orders.get()) # N: Revealed type is "myapp.models.Order" reveal_type(User().orders.manager_method()) # N: Revealed type is "builtins.int" reveal_type(Product.objects.queryset_method()) # N: Revealed type is "builtins.int" reveal_type(Order().products) # N: Revealed type is "myapp.models.Product_RelatedManager" reveal_type(Order().products.get()) # N: Revealed type is "myapp.models.Product" reveal_type(Order().products.queryset_method()) # N: Revealed type is "builtins.int" cond: bool if cond: manager = User().products else: manager = Order().products reveal_type(manager) # N: Revealed type is "myapp.models.Product_RelatedManager" installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class User(models.Model): pass class OrderManager(models.Manager): def manager_method(self) -> int: pass class Order(models.Model): objects = OrderManager() user = models.ForeignKey(to=User, on_delete=models.CASCADE, related_name='orders') class ProductQueryset(models.QuerySet): def queryset_method(self) -> int: pass ProductManager = models.Manager.from_queryset(ProductQueryset) class Product(models.Model): objects = ProductManager() order = models.ForeignKey(to=Order, on_delete=models.CASCADE, related_name='products') user = models.ForeignKey(to=User, on_delete=models.CASCADE, related_name='products') - case: related_manager_shared_between_multiple_relations main: | from typing_extensions import reveal_type from myapp.models.store import Store from myapp.models.user import User reveal_type(Store().purchases) # N: Revealed type is "myapp.models.purchase.Purchase_RelatedManager" reveal_type(Store().purchases.queryset_method()) # N: Revealed type is "myapp.models.querysets.PurchaseQuerySet" reveal_type(Store().purchases.filter()) # N: Revealed type is "myapp.models.querysets.PurchaseQuerySet" reveal_type(Store().purchases.get()) # N: Revealed type is "myapp.models.purchase.Purchase" reveal_type(Store().purchases.filter().queryset_method()) # N: Revealed type is "myapp.models.querysets.PurchaseQuerySet" reveal_type(User().purchases) # N: Revealed type is "myapp.models.purchase.Purchase_RelatedManager" reveal_type(User().purchases.queryset_method()) # N: Revealed type is "myapp.models.querysets.PurchaseQuerySet" reveal_type(User().purchases.filter()) # N: Revealed type is "myapp.models.querysets.PurchaseQuerySet" reveal_type(User().purchases.get()) # N: Revealed type is "myapp.models.purchase.Purchase" reveal_type(User().purchases.filter().queryset_method()) # N: Revealed type is "myapp.models.querysets.PurchaseQuerySet" installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models/__init__.py content: | from .purchase import Purchase from .store import Store from .user import User - path: myapp/models/store.py content: | from django.db import models class Store(models.Model): ... - path: myapp/models/user.py content: | from django.db import models class User(models.Model): ... - path: myapp/models/querysets.py content: | from django.db.models import QuerySet from typing import TYPE_CHECKING if TYPE_CHECKING: from .purchase import Purchase class PurchaseQuerySet(QuerySet['Purchase']): def queryset_method(self) -> "PurchaseQuerySet": return self.all() - path: myapp/models/purchase.py content: | from django.db import models from django.db.models.manager import Manager from .querysets import PurchaseQuerySet from .store import Store from .user import User PurchaseManager = Manager.from_queryset(PurchaseQuerySet) class Purchase(models.Model): objects = PurchaseManager() store = models.ForeignKey(to=Store, on_delete=models.CASCADE, related_name='purchases') user = models.ForeignKey(to=User, on_delete=models.CASCADE, related_name='purchases') - case: explicitly_declared_related_manager_is_not_overridden main: | from typing_extensions import reveal_type from myapp.models import User reveal_type(User().purchases) # N: Revealed type is "builtins.int" User().purchases.filter() # E: "int" has no attribute "filter" [attr-defined] installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models from django.db.models.manager import Manager class User(models.Model): purchases: int class PurchaseQuerySet(models.QuerySet['Purchase']): def queryset_method(self) -> "PurchaseQuerySet": return self.all() PurchaseManager = Manager.from_queryset(PurchaseQuerySet) class Purchase(models.Model): objects = PurchaseManager() user = models.ForeignKey(to=User, on_delete=models.CASCADE, related_name='purchases') - case: related_manager_no_conflict_from_star_import main: | import myapp.models installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models/__init__.py content: | from myapp.models.a import * # make sure generated related manager from address to user doesn't have # the same name with related manager from profile to user from myapp.models.b import * - path: myapp/models/a.py content: | from django.db import models class Address(models.Model): pass - path: myapp/models/b.py content: | from django.db import models from .a import Address class Profile(models.Model): pass class UserQuerySet(models.QuerySet): pass UserManager = models.Manager.from_queryset(UserQuerySet) class User(models.Model): address = models.ForeignKey(Address, on_delete=models.CASCADE) profile = models.ForeignKey(Profile, on_delete=models.CASCADE) objects = UserManager() - case: many_to_many_field_can_be_used_in_alias main: | from collections.abc import Sequence from typing import TypeVar from typing_extensions import TypeAlias from django.db import models T = TypeVar("T", bound=models.Model) ManyToManyFieldAlias: TypeAlias = models.ManyToManyField[T, T] - case: callable_reverse_manager main: | from typing_extensions import reveal_type from myapp.models import SalesMan sales_man = SalesMan() reveal_type(sales_man.client) # N: Revealed type is "myapp.models.CustomUser_ManyRelatedManager[myapp.models.SalesMan_client]" reveal_type(sales_man.client(manager="staffs")) # N: Revealed type is "django.db.models.fields.related_descriptors.ManyRelatedManager[myapp.models.CustomUser, myapp.models.SalesMan_client]" installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class CustomUser(models.Model): staffs = models.Manager() class SalesMan(models.Model): client = models.ManyToManyField(CustomUser) - case: test_fails_if_app_label_is_unknown_in_relation_field main: | from installed.models import InstalledModel InstalledModel.objects.filter(non_installed__isnull=True) installed_apps: - installed files: - path: installed/__init__.py - path: installed/models.py content: | from django.db import models class InstalledModel(models.Model): non_installed = models.ForeignKey( # E: Cannot find model 'not_installed.NonInstalledModel' referenced in field 'non_installed' [misc] "not_installed.NonInstalledModel", on_delete=models.CASCADE ) - case: test_foreign_key_to_as_string main: | from myapp.models import Book, Publisher publisher = Publisher.objects.create(name="Example Publisher") book = Book.objects.create(name="Book", publisher=publisher) Book.objects.filter(publisher=publisher) installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models/__init__.py content: | from django.db import models from django.db.models.query import QuerySet class Publisher(models.Model): name = models.CharField() class PrintedGood(models.Model): publisher = models.ForeignKey(to="myapp.Publisher", on_delete=models.CASCADE) class Meta: abstract = True class Book(PrintedGood): name = models.CharField() - case: test_foreign_key_to_as_string_filter_on_abstract main: | from myapp.models import Book, Publisher installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models/__init__.py content: | from django.db import models from django.db.models.query import QuerySet class Publisher(models.Model): name = models.CharField() class MyModel(models.Model): pass class PrintedGood(MyModel): publisher = models.ForeignKey(to="myapp.Publisher", on_delete=models.CASCADE) @property def siblings(self) -> QuerySet['PrintedGood']: return self.__class__.objects.filter(publisher=self.publisher) class Meta: abstract = True class Book(PrintedGood): name = models.CharField() - case: test_explicit_reverse_many_to_one_descriptor main: | from typing_extensions import reveal_type from myapp.models import Other reveal_type(Other.explicit_descriptor) # N: Revealed type is "django.db.models.fields.related_descriptors.ReverseManyToOneDescriptor[myapp.models.MyModel]" reveal_type(Other().explicit_descriptor) # N: Revealed type is "myapp.models.MyModel_RelatedManager" reveal_type(Other().explicit_descriptor.custom_method()) # N: Revealed type is "builtins.int" installed_apps: - myapp monkeypatch: true files: - path: myapp/__init__.py - path: myapp/models/__init__.py content: | from typing import ClassVar from django.db import models from django.db.models.fields.related_descriptors import ReverseManyToOneDescriptor class Other(models.Model): explicit_descriptor: ClassVar[ReverseManyToOneDescriptor["MyModel"]] class CustomManager(models.Manager["MyModel"]): def custom_method(self) -> int: ... class MyModel(models.Model): rel = models.ForeignKey( Other, on_delete=models.CASCADE, related_name="explicit_descriptor" ) objects = CustomManager() - case: test_reverse_one_to_one_descriptor main: | from typing_extensions import reveal_type from myapp.models import MyModel, Other reveal_type(MyModel.first.RelatedObjectDoesNotExist) reveal_type(Other.mymodel) reveal_type(Other.mymodel.get_queryset()) reveal_type(Other.mymodel.RelatedObjectDoesNotExist) reveal_type(Other.has_explicit_name.RelatedObjectDoesNotExist) try: other = Other.objects.get() reveal_type(other.mymodel) except Other.mymodel.RelatedObjectDoesNotExist: ... else: other.mymodel = MyModel() other.mymodel = Other() other.mymodel = None other.has_explicit_name = MyModel() other.has_explicit_name = Other() other.has_explicit_name = None out: | main:3: note: Revealed type is "type[django.core.exceptions.ObjectDoesNotExist]" main:4: note: Revealed type is "django.db.models.fields.related_descriptors.ReverseOneToOneDescriptor[myapp.models.Other, myapp.models.MyModel]" main:5: note: Revealed type is "django.db.models.query.QuerySet[myapp.models.MyModel, myapp.models.MyModel]" main:6: note: Revealed type is "type[django.core.exceptions.ObjectDoesNotExist]" main:7: note: Revealed type is "type[django.core.exceptions.ObjectDoesNotExist]" main:10: note: Revealed type is "myapp.models.MyModel" main:15: error: Incompatible types in assignment (expression has type "Other", variable has type "MyModel | None") [assignment] main:18: error: Incompatible types in assignment (expression has type "Other", variable has type "MyModel | None") [assignment] installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models/__init__.py content: | from django.db import models class Other(models.Model): ... class MyModel(models.Model): first = models.OneToOneField(Other, on_delete=models.CASCADE) second = models.OneToOneField( Other, on_delete=models.CASCADE, related_name="has_explicit_name" ) - case: test_many_to_many main: | from typing_extensions import reveal_type from myapp.models import MyModel, Other reveal_type(MyModel.auto_through.through.objects.get()) reveal_type(MyModel().auto_through.get()) reveal_type(Other().autos.get()) reveal_type(MyModel.custom_through.through.objects.get()) reveal_type(MyModel().custom_through.get()) reveal_type(MyModel.custom_through.through.objects.custom_qs_method()) reveal_type(Other().customs.get()) auto_through = MyModel.auto_through.through.objects.get() reveal_type(auto_through.id) reveal_type(auto_through.pk) reveal_type(auto_through.mymodel) reveal_type(auto_through.mymodel_id) reveal_type(auto_through.other) reveal_type(auto_through.other_id) reveal_type(MyModel.auto_through.through) reveal_type(MyModel.auto_through.through.mymodel) reveal_type(MyModel.auto_through.through._default_manager) reveal_type(MyModel.other_again.through) reveal_type(Other.autos) reveal_type(Other.autos.through) reveal_type(Other.autos.through.objects.get()) reveal_type(Other().autos.custom_qs_method()) reveal_type(Other().customs.custom_qs_method()) reveal_type(Other().autos.add) reveal_type(Other.autos.through.objects) reveal_type(Other.autos.through._default_manager) reveal_type(MyModel().auto_through) reveal_type(MyModel().auto_through.through) reveal_type(MyModel().auto_through.through.mymodel_id) reveal_type(MyModel().other_again) reveal_type(MyModel().other_again.through) reveal_type(MyModel().other_again.through.mymodel_id) reveal_type(MyModel().custom_through) reveal_type(MyModel().custom_through.through) reveal_type(MyModel().custom_through.through.my_model_id) out: | main:3: note: Revealed type is "myapp.models.MyModel_auto_through" main:4: note: Revealed type is "myapp.models.Other" main:5: note: Revealed type is "myapp.models.MyModel" main:7: note: Revealed type is "myapp.models.CustomThrough" main:8: note: Revealed type is "myapp.models.Other" main:9: note: Revealed type is "builtins.int" main:10: note: Revealed type is "myapp.models.MyModel" main:13: note: Revealed type is "builtins.int" main:14: note: Revealed type is "builtins.int" main:15: note: Revealed type is "myapp.models.MyModel" main:16: note: Revealed type is "builtins.int" main:17: note: Revealed type is "myapp.models.Other" main:18: note: Revealed type is "builtins.int" main:20: note: Revealed type is "type[myapp.models.MyModel_auto_through]" main:21: note: Revealed type is "django.db.models.fields.related_descriptors.ForwardManyToOneDescriptor[django.db.models.fields.related.ForeignKey[myapp.models.MyModel | django.db.models.expressions.Combinable, myapp.models.MyModel]]" main:22: note: Revealed type is "django.db.models.manager.Manager[myapp.models.MyModel_auto_through]" main:24: note: Revealed type is "type[myapp.models.MyModel_other_again]" main:25: note: Revealed type is "django.db.models.fields.related_descriptors.ManyToManyDescriptor[myapp.models.MyModel, myapp.models.MyModel_auto_through]" main:26: note: Revealed type is "type[myapp.models.MyModel_auto_through]" main:27: note: Revealed type is "myapp.models.MyModel_auto_through" main:29: note: Revealed type is "builtins.str" main:30: note: Revealed type is "builtins.str" main:31: note: Revealed type is "def (*objs: myapp.models.MyModel | builtins.int, through_defaults: typing.Mapping[builtins.str, Any] | None =)" main:33: note: Revealed type is "django.db.models.manager.Manager[myapp.models.MyModel_auto_through]" main:34: note: Revealed type is "django.db.models.manager.Manager[myapp.models.MyModel_auto_through]" main:36: note: Revealed type is "myapp.models.Other_ManyRelatedManager[myapp.models.MyModel_auto_through]" main:37: note: Revealed type is "type[myapp.models.MyModel_auto_through]" main:38: note: Revealed type is "django.db.models.fields._FieldDescriptor[django.db.models.fields.AutoField[django.db.models.expressions.Combinable | builtins.int | builtins.str | None, builtins.int]]" main:39: note: Revealed type is "myapp.models.Other_ManyRelatedManager[myapp.models.MyModel_other_again]" main:40: note: Revealed type is "type[myapp.models.MyModel_other_again]" main:41: note: Revealed type is "django.db.models.fields._FieldDescriptor[django.db.models.fields.AutoField[django.db.models.expressions.Combinable | builtins.int | builtins.str | None, builtins.int]]" main:42: note: Revealed type is "myapp.models.Other_ManyRelatedManager[myapp.models.CustomThrough]" main:43: note: Revealed type is "type[myapp.models.CustomThrough]" main:44: note: Revealed type is "django.db.models.fields._FieldDescriptor[django.db.models.fields.AutoField[django.db.models.expressions.Combinable | builtins.int | builtins.str, builtins.int]]" installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models/__init__.py content: | from django.db import models class Other(models.Model): ... class CustomThroughQuerySet(models.QuerySet["CustomThrough"]): def custom_qs_method(self) -> int: return 1 CustomThroughManager = models.Manager.from_queryset(CustomThroughQuerySet) class CustomThrough(models.Model): other = models.ForeignKey(Other, on_delete=models.CASCADE) my_model = models.ForeignKey("myapp.MyModel", on_delete=models.CASCADE) objects = CustomThroughManager() class MyModelQuerySet(models.QuerySet["MyModel"]): def custom_qs_method(self) -> str: return "abc" MyModelManager = models.Manager.from_queryset(MyModelQuerySet) class MyModel(models.Model): auto_through = models.ManyToManyField(Other, related_name="autos") # Have multiple M2Ms with implicit through other_again = models.ManyToManyField(Other, related_name="others_again") custom_through = models.ManyToManyField(Other, through=CustomThrough, related_name="customs") objects = MyModelManager() - case: test_many_to_many_with_lazy_references main: | from typing_extensions import reveal_type from first.models import First reveal_type(First().thirds.get()) reveal_type(First.thirds.through.objects.get()) reveal_type(First.thirds.through.objects.get().first) reveal_type(First.thirds.through.objects.get().third) from third.models import Third reveal_type(Third().fourths.get()) reveal_type(Third.fourths.through.objects.get()) out: | main:3: note: Revealed type is "third.models.Third" main:4: note: Revealed type is "second.models.Second" main:5: note: Revealed type is "first.models.First" main:6: note: Revealed type is "third.models.Third" main:9: note: Revealed type is "third.models.Fourth" main:10: note: Revealed type is "third.models.Third_fourths" installed_apps: - first - second - third files: - path: first/__init__.py - path: first/models/__init__.py content: | from django.db import models class First(models.Model): thirds = models.ManyToManyField("third.Third", through="second.Second") - path: second/__init__.py - path: second/models/__init__.py content: | from django.db import models class Second(models.Model): first = models.ForeignKey("first.First", on_delete=models.CASCADE) third = models.ForeignKey("third.Third", on_delete=models.CASCADE) - path: third/__init__.py - path: third/models/__init__.py content: | from django.db import models class Third(models.Model): fourths = models.ManyToManyField("third.Fourth", blank=True) class Fourth(models.Model): ... - case: test_many_to_many_lazy_references_with_implicit_app_label main: | from typing_extensions import reveal_type from myapp.models import Child reveal_type(Child.parents) reveal_type(Child().parents) out: | main:3: note: Revealed type is "django.db.models.fields.related_descriptors.ManyToManyDescriptor[Any, Any]" main:4: note: Revealed type is "django.db.models.fields.related_descriptors.ManyRelatedManager[Any, Any]" myapp/models/child:5: error: Need type annotation for "parents" [var-annotated] myapp/models/child:6: error: Need type annotation for "other_parents" [var-annotated] installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models/__init__.py content: | from .child import Child as Child from .parent import Parent as Parent - path: myapp/models/parent.py content: | from django.db import models class Parent(models.Model): ... - path: myapp/models/child.py content: | from django.db import models class Child(models.Model): # Reference without explicit app label parents = models.ManyToManyField("Parent") other_parents = models.ManyToManyField(to="Parent") - case: test_relations_with_bad_arguments main: | from typing_extensions import reveal_type from myapp.models import MyModel def f(arg: type[MyModel]) -> MyModel: instance = arg(field=1, unknown=2) reveal_type(instance.field) # N: Revealed type is "Any" reveal_type(instance.unknown) # N: Revealed type is "Any" reveal_type(instance.bad) # N: Revealed type is "django.db.models.fields.related_descriptors.ManyRelatedManager[Any, Any]" return instance installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class MyModel(models.Model): field = models.ForeignKey("slef", on_delete=models.CASCADE) # E: Cannot find model 'slef' referenced in field 'field' [misc] unknown = models.OneToOneField("unknown", on_delete=models.CASCADE) # E: Cannot find model 'unknown' referenced in field 'unknown' [misc] bad = models.ManyToManyField("bad") # E: Need type annotation for "bad" [var-annotated] - case: test_reverse_of_inherited_many_to_many_fields main: | from typing_extensions import reveal_type from myapp.models import Other other = Other() reveal_type(other.abstract_of_concrete_parent) # N: Revealed type is "myapp.models.ConcreteParent_ManyRelatedManager[myapp.models.ConcreteParent_m2m_1]" reveal_type(other.concrete_parent) # N: Revealed type is "myapp.models.ConcreteParent_ManyRelatedManager[myapp.models.ConcreteParent_m2m_2]" reveal_type(other.abstract_of_abstract_parent) # N: Revealed type is "myapp.models.MyModel_ManyRelatedManager[myapp.models.MyModel_m2m_3]" reveal_type(other.abstract_parent) # N: Revealed type is "myapp.models.MyModel_ManyRelatedManager[myapp.models.MyModel_m2m_4]" reveal_type(other.mymodel) # N: Revealed type is "myapp.models.MyModel_ManyRelatedManager[myapp.models.MyModel_m2m_5]" installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class Other(models.Model): ... class AbstractOfConcreteParent(models.Model): m2m_1 = models.ManyToManyField(Other, related_name="abstract_of_concrete_parent") class Meta: abstract = True class ConcreteParent(AbstractOfConcreteParent): m2m_2 = models.ManyToManyField(Other, related_name="concrete_parent") class AbstractOfAbstractParent(models.Model): m2m_3 = models.ManyToManyField(Other, related_name="abstract_of_abstract_parent") class Meta: abstract = True class AbstractParent(AbstractOfAbstractParent): m2m_4 = models.ManyToManyField(Other, related_name="abstract_parent") class Meta: abstract = True class MyModel(ConcreteParent, AbstractParent): m2m_5 = models.ManyToManyField(Other, related_name="mymodel") - case: test_m2m_related_managers_supports_renamed_imports main: | from typing_extensions import reveal_type from myapp.models import MyModel from other.models import Other reveal_type(MyModel.m2m_1.through.objects) # N: Revealed type is "django.db.models.manager.Manager[myapp.models.MyModel_m2m_1]" reveal_type(Other.auto_through.through.objects) # N: Revealed type is "django.db.models.manager.Manager[myapp.models.MyModel_m2m_1]" reveal_type(MyModel.m2m_2.through.objects) # N: Revealed type is "django.db.models.manager.Manager[myapp.models.Through]" reveal_type(Other.custom_through.through.objects) # N: Revealed type is "django.db.models.manager.Manager[myapp.models.Through]" installed_apps: - other - myapp files: - path: other/__init__.py - path: other/models.py content: | from django.db import models class Other(models.Model): ... - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models from other import models as other_models class Through(models.Model): mymodel = models.ForeignKey("myapp.MyModel", on_delete=models.CASCADE) other = models.ForeignKey(other_models.Other, on_delete=models.CASCADE) class MyModel(models.Model): m2m_1 = models.ManyToManyField(other_models.Other, related_name="auto_through") m2m_2 = models.ManyToManyField(other_models.Other, related_name="custom_through", through=Through) - case: test_m2m_from_abstract_model main: | from typing_extensions import reveal_type from myapp.models import First, Second reveal_type(First().others) # N: Revealed type is "myapp.models.Other_ManyRelatedManager[myapp.models.First_others]" reveal_type(First().others.get()) # N: Revealed type is "myapp.models.Other" reveal_type(First.others) # N: Revealed type is "django.db.models.fields.related_descriptors.ManyToManyDescriptor[myapp.models.Other, myapp.models.First_others]" reveal_type(First.others.through) # N: Revealed type is "type[myapp.models.First_others]" reveal_type(First.others.through.objects.get()) # N: Revealed type is "myapp.models.First_others" reveal_type(Second().others) # N: Revealed type is "myapp.models.Other_ManyRelatedManager[myapp.models.Second_others]" reveal_type(Second().others.get()) # N: Revealed type is "myapp.models.Other" reveal_type(Second.others) # N: Revealed type is "django.db.models.fields.related_descriptors.ManyToManyDescriptor[myapp.models.Other, myapp.models.Second_others]" reveal_type(Second.others.through) # N: Revealed type is "type[myapp.models.Second_others]" reveal_type(Second.others.through.objects.get()) # N: Revealed type is "myapp.models.Second_others" installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class Other(models.Model): ... class Parent(models.Model): others = models.ManyToManyField(Other) class Meta: abstract = True class First(Parent): ... class Second(Parent): ... - case: test_m2m_self_on_abstract_model main: | from typing_extensions import reveal_type from myapp.models import First, Second reveal_type(First().others) # N: Revealed type is "myapp.models.First_ManyRelatedManager[myapp.models.First_others]" reveal_type(First().others.get()) # N: Revealed type is "myapp.models.First" reveal_type(First.others) # N: Revealed type is "django.db.models.fields.related_descriptors.ManyToManyDescriptor[myapp.models.First, myapp.models.First_others]" reveal_type(First.others.through) # N: Revealed type is "type[myapp.models.First_others]" reveal_type(First.others.through.objects.get()) # N: Revealed type is "myapp.models.First_others" reveal_type(Second().others) # N: Revealed type is "myapp.models.Second_ManyRelatedManager[myapp.models.Second_others]" reveal_type(Second().others.get()) # N: Revealed type is "myapp.models.Second" reveal_type(Second.others) # N: Revealed type is "django.db.models.fields.related_descriptors.ManyToManyDescriptor[myapp.models.Second, myapp.models.Second_others]" reveal_type(Second.others.through) # N: Revealed type is "type[myapp.models.Second_others]" reveal_type(Second.others.through.objects.get()) # N: Revealed type is "myapp.models.Second_others" installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class Parent(models.Model): others = models.ManyToManyField("self") class Meta: abstract = True class First(Parent): ... class Second(Parent): ... - case: test_m2m_models_manager_filter_kwargs_checked main: | from myapp.models import MyModel, Other MyModel.objects.filter(xyz__isnull=False) # E: Cannot resolve keyword 'xyz' into field. Choices are: id, others [misc] MyModel.objects.get(xyz__isnull=False) # E: Cannot resolve keyword 'xyz' into field. Choices are: id, others [misc] MyModel.objects.exclude(xyz__isnull=False) # E: Cannot resolve keyword 'xyz' into field. Choices are: id, others [misc] other = Other() other.mymodel_set.filter(xyz__isnull=True) # E: Cannot resolve keyword 'xyz' into field. Choices are: id, others [misc] other.mymodel_set.get(xyz__isnull=True) # E: Cannot resolve keyword 'xyz' into field. Choices are: id, others [misc] other.mymodel_set.exclude(xyz__isnull=True) # E: Cannot resolve keyword 'xyz' into field. Choices are: id, others [misc] MyModel.others.through.objects.filter(xyz__isnull=False) # E: Cannot resolve keyword 'xyz' into field. Choices are: id, mymodel, mymodel_id, other, other_id [misc] MyModel.others.through.objects.get(xyz__isnull=False) # E: Cannot resolve keyword 'xyz' into field. Choices are: id, mymodel, mymodel_id, other, other_id [misc] MyModel.others.through.objects.exclude(xyz__isnull=False) # E: Cannot resolve keyword 'xyz' into field. Choices are: id, mymodel, mymodel_id, other, other_id [misc] installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class Other(models.Model): ... class MyModel(models.Model): others = models.ManyToManyField(Other) - case: test_reverse_m2m_relation_checks_other_model main: | from typing_extensions import reveal_type from myapp.models import Author # With builtin manager/queryset Author().book_set.filter(featured=True) Author().book_set.filter(xyz=True) # E: Cannot resolve keyword 'xyz' into field. Choices are: authors, featured, id [misc] reveal_type(Author().book_set.values_list("featured")) # N: Revealed type is "django.db.models.query.QuerySet[myapp.models.Book, tuple[builtins.bool]]" Author().book_set.values_list("xyz") # E: Cannot resolve keyword 'xyz' into field. Choices are: authors, featured, id [misc] reveal_type(Author().book_set.values("featured")) # N: Revealed type is "django.db.models.query.QuerySet[myapp.models.Book, TypedDict({'featured': builtins.bool})]" Author().book_set.values("xyz") # E: Cannot resolve keyword 'xyz' into field. Choices are: authors, featured, id [misc] reveal_type(Author().book_set.filter(featured=True).values_list("featured")) # N: Revealed type is "django.db.models.query.QuerySet[myapp.models.Book, tuple[builtins.bool]]" Author().book_set.filter(featured=True).values_list("xyz") # E: Cannot resolve keyword 'xyz' into field. Choices are: authors, featured, id [misc] reveal_type(Author().book_set.filter(featured=True).values("featured")) # N: Revealed type is "django.db.models.query.QuerySet[myapp.models.Book, TypedDict({'featured': builtins.bool})]" Author().book_set.filter(featured=True).values("xyz") # E: Cannot resolve keyword 'xyz' into field. Choices are: authors, featured, id [misc] # With a custom manager/queryset Author().other_set.filter(featured=True) Author().other_set.filter(xyz=True) # E: Cannot resolve keyword 'xyz' into field. Choices are: authors, featured, id [misc] reveal_type(Author().other_set.values_list("featured")) # N: Revealed type is "django.db.models.query.QuerySet[myapp.models.Other, tuple[builtins.bool]]" Author().other_set.values_list("xyz") # E: Cannot resolve keyword 'xyz' into field. Choices are: authors, featured, id [misc] reveal_type(Author().other_set.values("featured")) # N: Revealed type is "django.db.models.query.QuerySet[myapp.models.Other, TypedDict({'featured': builtins.bool})]" Author().other_set.values("xyz") # E: Cannot resolve keyword 'xyz' into field. Choices are: authors, featured, id [misc] reveal_type(Author().other_set.filter(featured=True).values_list("featured")) # N: Revealed type is "django.db.models.query.QuerySet[myapp.models.Other, tuple[builtins.bool]]" Author().other_set.filter(featured=True).values_list("xyz") # E: Cannot resolve keyword 'xyz' into field. Choices are: authors, featured, id [misc] reveal_type(Author().other_set.filter(featured=True).values("featured")) # N: Revealed type is "django.db.models.query.QuerySet[myapp.models.Other, TypedDict({'featured': builtins.bool})]" Author().other_set.filter(featured=True).values("xyz") # E: Cannot resolve keyword 'xyz' into field. Choices are: authors, featured, id [misc] installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from typing_extensions import Self from django.db import models class Author(models.Model): ... class Book(models.Model): featured = models.BooleanField(default=False) authors = models.ManyToManyField(Author) class OtherQuerySet(models.QuerySet["Other"]): def custom(self) -> Self: ... OtherManager = models.Manager.from_queryset(OtherQuerySet) class Other(models.Model): featured = models.BooleanField() authors = models.ManyToManyField(Author) objects = OtherManager() - case: test_many_to_many_field_null main: | from typing_extensions import reveal_type from django.db import models class Person(models.Model): friends = models.ManyToManyField("self", null=True, blank=True) p: Person reveal_type(p.friends) # N: Revealed type is "django.db.models.fields.related_descriptors.ManyRelatedManager[main.Person, main.Person_friends]" django-stubs-5.2.9/tests/typecheck/forms/000077500000000000000000000000001513401051600203725ustar00rootroot00000000000000django-stubs-5.2.9/tests/typecheck/forms/test_fields_choices.yml000066400000000000000000000057101513401051600251220ustar00rootroot00000000000000- case: forms_choicefield_invalid_choices main: | from django import forms class MyForm(forms.Form): my_choice = forms.ChoiceField(choices='test') out: | main:4: error: Argument "choices" to "ChoiceField" has incompatible type "str"; expected "Iterable[tuple[Any, Any] | tuple[str, Iterable[tuple[Any, Any]]]] | Mapping[Any, Any] | type[Choices] | Callable[[], Iterable[tuple[Any, Any] | tuple[str, Iterable[tuple[Any, Any]]]] | Mapping[Any, Any]] | _ChoicesCallable" [arg-type] main:4: note: "str" is missing following "_ChoicesCallable" protocol member: main:4: note: __call__ - case: forms_choicefield_valid_choices main: | from collections.abc import Callable, Mapping, Sequence from typing import TypeVar from django import forms from django.db import models from typing_extensions import assert_type _T = TypeVar("_T") def to_named_seq(func: Callable[[], _T]) -> Callable[[], Sequence[tuple[str, _T]]]: def inner() -> Sequence[tuple[str, _T]]: return [("title", func())] return inner def to_named_mapping(func: Callable[[], _T]) -> Callable[[], Mapping[str, _T]]: def inner() -> Mapping[str, _T]: return {"title": func()} return inner def str_tuple() -> Sequence[tuple[str, str]]: return (("foo", "bar"), ("fuzz", "bazz")) def str_mapping() -> Mapping[str, str]: return {"foo": "bar", "fuzz": "bazz"} def int_tuple() -> Sequence[tuple[int, str]]: return ((1, "bar"), (2, "bazz")) def int_mapping() -> Mapping[int, str]: return {3: "bar", 4: "bazz"} class TestForm(forms.Form): class TextChoices(models.TextChoices): FIRST = "foo", "bar" SECOND = "foo2", "bar" class IntegerChoices(models.IntegerChoices): FIRST = 1, "bar" SECOND = 2, "bar" char1 = forms.ChoiceField(choices=TextChoices) char2 = forms.ChoiceField(choices=str_tuple) char3 = forms.ChoiceField(choices=str_mapping) char4 = forms.ChoiceField(choices=str_tuple()) char5 = forms.ChoiceField(choices=str_mapping()) char6 = forms.ChoiceField(choices=to_named_seq(str_tuple)) char7 = forms.ChoiceField(choices=to_named_mapping(str_mapping)) char8 = forms.ChoiceField(choices=to_named_seq(str_tuple)()) char9 = forms.ChoiceField(choices=to_named_mapping(str_mapping)()) int1 = forms.ChoiceField(choices=IntegerChoices) int2 = forms.ChoiceField(choices=int_tuple) int3 = forms.ChoiceField(choices=int_mapping) int4 = forms.ChoiceField(choices=int_tuple()) int5 = forms.ChoiceField(choices=int_mapping()) int6 = forms.ChoiceField(choices=to_named_seq(int_tuple)) int7 = forms.ChoiceField(choices=to_named_seq(int_mapping)) int8 = forms.ChoiceField(choices=to_named_seq(int_tuple)()) int9 = forms.ChoiceField(choices=to_named_seq(int_mapping)()) django-stubs-5.2.9/tests/typecheck/http/000077500000000000000000000000001513401051600202235ustar00rootroot00000000000000django-stubs-5.2.9/tests/typecheck/http/test_response.yml000066400000000000000000000003501513401051600236410ustar00rootroot00000000000000- case: response_object_has_text_of_type_str main: | from typing_extensions import reveal_type from django.http.response import HttpResponse reveal_type(HttpResponse().text) # N: Revealed type is "builtins.str" django-stubs-5.2.9/tests/typecheck/managers/000077500000000000000000000000001513401051600210415ustar00rootroot00000000000000django-stubs-5.2.9/tests/typecheck/managers/querysets/000077500000000000000000000000001513401051600231055ustar00rootroot00000000000000django-stubs-5.2.9/tests/typecheck/managers/querysets/test_annotate.yml000066400000000000000000000573051513401051600265120ustar00rootroot00000000000000- case: annotate_using_with_annotations main: | from typing_extensions import Annotated, reveal_type from myapp.models import User from django_stubs_ext import WithAnnotations, Annotations from django.db.models.expressions import Value annotated_user = User.objects.annotate(foo=Value("")).get() unannotated_user = User.objects.get(id=1) print(annotated_user.asdf) # E: "User@AnnotatedWith[TypedDict({'foo': Any})]" has no attribute "asdf" [attr-defined] print(unannotated_user.asdf) # E: "User" has no attribute "asdf" [attr-defined] def func(user: Annotated[User, Annotations]) -> None: # E: Missing required TypedDict parameter for generic type Annotations [misc] user.asdf # E: "User" has no attribute "asdf" [attr-defined] # Due to the error on 'func' it should fall back to expecting 'User' reveal_type(func) # N: Revealed type is "def (user: myapp.models.User)" func(unannotated_user) func(annotated_user) def func2(user: WithAnnotations[User]) -> None: user.asdf # E: "User" has no attribute "asdf" [attr-defined] # With only one argument to 'WithAnnotations' it should fall back to expecting 'User' reveal_type(func2) # N: Revealed type is "def (user: myapp.models.User)" func2(unannotated_user) func2(annotated_user) def func3(user: WithAnnotations) -> None: ... # With no arguments to 'WithAnnotations' it should become 'Any' reveal_type(func3) # N: Revealed type is "def (user: Any)" func3(unannotated_user) func3(annotated_user) installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class User(models.Model): username = models.CharField(max_length=100) - case: annotate_using_with_annotations_typeddict main: | from typing import Any from typing_extensions import Annotated, TypedDict, reveal_type from myapp.models import User from django_stubs_ext import WithAnnotations, Annotations from django.db.models.expressions import Value class MyDict(TypedDict): foo: str def func(user: Annotated[User, Annotations[MyDict]]) -> str: print(user.asdf) # E: "User@AnnotatedWith[MyDict]" has no attribute "asdf" [attr-defined] return user.foo unannotated_user = User.objects.get(id=1) annotated_user = User.objects.annotate(foo=Value("")).get() other_annotated_user = User.objects.annotate(other=Value("")).get() func(unannotated_user) # E: Argument 1 to "func" has incompatible type "User"; expected "User@AnnotatedWith[MyDict]" [arg-type] x: WithAnnotations[User] # Declaring nothing annotated returns a user reveal_type(x) # N: Revealed type is "myapp.models.User" func(x) # E: Argument 1 to "func" has incompatible type "User"; expected "User@AnnotatedWith[MyDict]" [arg-type] func(annotated_user) func(other_annotated_user) # E: Argument 1 to "func" has incompatible type "User@AnnotatedWith[TypedDict({'other': Any})]"; expected "User@AnnotatedWith[MyDict]" [arg-type] def func2(user: WithAnnotations[User, MyDict]) -> str: print(user.asdf) # E: "User@AnnotatedWith[MyDict]" has no attribute "asdf" [attr-defined] return user.foo func2(unannotated_user) # E: Argument 1 to "func2" has incompatible type "User"; expected "User@AnnotatedWith[MyDict]" [arg-type] func2(annotated_user) func2(other_annotated_user) # E: Argument 1 to "func2" has incompatible type "User@AnnotatedWith[TypedDict({'other': Any})]"; expected "User@AnnotatedWith[MyDict]" [arg-type] installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class User(models.Model): username = models.CharField(max_length=100) - case: annotate_using_with_annotations_typeddict_subtypes main: | from typing_extensions import Annotated, TypedDict from myapp.models import User from django_stubs_ext import WithAnnotations, Annotations class BroadDict(TypedDict): foo: str bar: str class NarrowDict(TypedDict): foo: str class OtherDict(TypedDict): other: str def func(user: WithAnnotations[User, NarrowDict]) -> str: return user.foo x: WithAnnotations[User, NarrowDict] func(x) y: WithAnnotations[User, BroadDict] func(y) z: WithAnnotations[User, OtherDict] func(z) # E: Argument 1 to "func" has incompatible type "User@AnnotatedWith[OtherDict]"; expected "User@AnnotatedWith[NarrowDict]" [arg-type] installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class User(models.Model): username = models.CharField(max_length=100) - case: annotate_basic main: | from typing_extensions import reveal_type from myapp.models import User from django.db.models.expressions import F qs = User.objects.annotate(foo=F('id')) reveal_type(qs) # N: Revealed type is "django.db.models.query.QuerySet[myapp.models.User@AnnotatedWith[TypedDict({'foo': Any})], myapp.models.User@AnnotatedWith[TypedDict({'foo': Any})]]" annotated = qs.get() reveal_type(annotated) # N: Revealed type is "myapp.models.User@AnnotatedWith[TypedDict({'foo': Any})]" reveal_type(annotated.foo) # N: Revealed type is "Any" print(annotated.bar) # E: "User@AnnotatedWith[TypedDict({'foo': Any})]" has no attribute "bar" [attr-defined] reveal_type(annotated.username) # N: Revealed type is "builtins.str" installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class User(models.Model): username = models.CharField(max_length=100) - case: annotate_no_field_name main: | from typing_extensions import reveal_type from myapp.models import User from django.db.models import Count qs = User.objects.annotate(Count('id')) reveal_type(qs) # N: Revealed type is "django.db.models.query.QuerySet[myapp.models.User, myapp.models.User]" installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class User(models.Model): username = models.CharField(max_length=100) - case: annotate_model_usage_across_methods main: | from myapp.models import User, Animal from django.db.models import Count qs = User.objects.annotate(Count('id')) annotated_user = qs.get() def animals_only(param: Animal) -> None: pass # Make sure that the type is still checked when no annotation was produced animals_only(annotated_user) # E: Argument 1 to "animals_only" has incompatible type "User"; expected "Animal" [arg-type] def users_allowed(param: User) -> None: # But this function accepts only the original User type, so any attr access is not allowed within this function param.foo # E: "User" has no attribute "foo" [attr-defined] # Passing in the annotated User to a function taking a (unannotated) User is OK users_allowed(annotated_user) installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class User(models.Model): username = models.CharField(max_length=100) class Animal(models.Model): barks = models.BooleanField() - case: annotate_twice_works main: | from typing_extensions import reveal_type from myapp.models import User from django.db.models.expressions import F # Django annotations are additive qs = User.objects.annotate(foo=F('id')) qs = qs.annotate(bar=F('id')) annotated = qs.get() reveal_type(annotated) # N: Revealed type is "myapp.models.User@AnnotatedWith[TypedDict({'foo': Any, 'bar': Any})]" reveal_type(annotated.foo) # N: Revealed type is "Any" reveal_type(annotated.bar) # N: Revealed type is "Any" reveal_type(annotated.username) # N: Revealed type is "builtins.str" installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class User(models.Model): username = models.CharField(max_length=100) - case: annotate_using_queryset_across_methods main: | from myapp.models import User from django_stubs_ext import WithAnnotations from django.db.models import QuerySet from django.db.models.expressions import F from typing_extensions import TypedDict, reveal_type qs = User.objects.filter(id=1) class FooDict(TypedDict): foo: str def add_annotation(qs: QuerySet[User]) -> QuerySet[WithAnnotations[User, FooDict]]: return qs.annotate(foo=F('id')) def add_wrong_annotation(qs: QuerySet[User]) -> QuerySet[WithAnnotations[User, FooDict]]: return qs.annotate(bar=F('id')) # E: Incompatible return value type (got "QuerySet[User@AnnotatedWith[TypedDict({'bar': Any})], User@AnnotatedWith[TypedDict({'bar': Any})]]", expected "QuerySet[User@AnnotatedWith[FooDict], User@AnnotatedWith[FooDict]]") [return-value] qs = add_annotation(qs) reveal_type(qs.get().foo) # N: Revealed type is "builtins.str" qs.get().bar # E: "User@AnnotatedWith[FooDict]" has no attribute "bar" [attr-defined] installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class User(models.Model): username = models.CharField(max_length=100) - case: annotate_rejects_lookups_of_non_existent_field main: | from myapp.models import User from django.db.models.expressions import F User.objects.annotate(abc=F('id')).filter(abc=1).values_list() User.objects.annotate(abc=F('id')).filter(unknown_field=1).values_list() # E: Cannot resolve keyword 'unknown_field' into field. Choices are: id, abc [misc] installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class User(models.Model): pass - case: annotate_values_or_values_list_before_or_after_annotate_broadens_type main: | from typing_extensions import reveal_type from myapp.models import Blog from django.db.models.expressions import F values_list_double_annotate = Blog.objects.annotate(foo=F('id')).annotate(bar=F('id')).values_list('foo', 'bar').get() reveal_type(values_list_double_annotate) # N: Revealed type is "tuple[Any, Any]" values_list_named = Blog.objects.annotate(foo=F('id'), bar=F('isad')).values_list('foo', 'text', named=True).get() # We have to assume we don't know any of the tuple member types. reveal_type(values_list_named) # N: Revealed type is "tuple[Any, builtins.str, fallback=main.Row]" values_list_named.unknown # E: "Row" has no attribute "unknown" [attr-defined] reveal_type(values_list_named.foo) # N: Revealed type is "Any" reveal_type(values_list_named.text) # N: Revealed type is "builtins.str" values_list_flat_known = Blog.objects.annotate(foo=F('id')).values_list('text', flat=True).get() # Even though it's annotated, we still know the lookup's type. reveal_type(values_list_flat_known) # N: Revealed type is "builtins.str" values_list_flat_unknown = Blog.objects.annotate(foo=F('id')).values_list('foo', flat=True).get() # We don't know the type of an unknown lookup reveal_type(values_list_flat_unknown) # N: Revealed type is "Any" values_no_params = Blog.objects.annotate(foo=F('id')).values().get() reveal_type(values_no_params) # N: Revealed type is "builtins.dict[builtins.str, Any]" values_list_no_params = Blog.objects.annotate(foo=F('id')).values_list().get() reveal_type(values_list_no_params) # N: Revealed type is "builtins.tuple[Any, ...]" values_list_flat_no_params = Blog.objects.annotate(foo=F('id')).values_list(flat=True).get() reveal_type(values_list_flat_no_params) # N: Revealed type is "builtins.int" values_list_named_no_params = Blog.objects.annotate(foo=F('id')).values_list(named=True).get() reveal_type(values_list_named_no_params.foo) # N: Revealed type is "Any" reveal_type(values_list_named_no_params.text) # N: Revealed type is "builtins.str" # .values/.values_list BEFORE .annotate # The following should happen to the TypeVars: # 1st typevar (Model): Blog => django_stubs_ext.WithAnnotations[Blog] # 2nd typevar (Row): Should assume that we don't know what is in the row anymore (due to the annotation) # Since we can't trust that only 'text' is in the row type anymore. # It's possible to provide more precise types than than this, but without inspecting the # arguments to .annotate, these are the best types we can infer. qs1 = Blog.objects.values('text').annotate(foo=F('id')) reveal_type(qs1) # N: Revealed type is "django.db.models.query.QuerySet[myapp.models.Blog@AnnotatedWith[TypedDict({'foo': Any})], builtins.dict[builtins.str, Any]]" qs2 = Blog.objects.values_list('text').annotate(foo=F('id')) reveal_type(qs2) # N: Revealed type is "django.db.models.query.QuerySet[myapp.models.Blog@AnnotatedWith[TypedDict({'foo': Any})], builtins.tuple[Any, ...]]" qs3 = Blog.objects.values_list('text', named=True).annotate(foo=F('id')) # TODO: Would be nice to infer a NamedTuple which contains the field 'text' (str) + any number of other fields. # The reason it would have to appear to have any other fields is that annotate could potentially be called with # arbitrary parameters such that we wouldn't know how many extra fields there might be. # But it's not trivial to make such a NamedTuple, partly because since it is also an ordinary tuple, it would # have to have an arbitrary length, but still have certain fields at certain indices with specific types. # For now, Any :) reveal_type(qs3) # N: Revealed type is "django.db.models.query.QuerySet[myapp.models.Blog@AnnotatedWith[TypedDict({'foo': Any})], Any]" qs4 = Blog.objects.values_list('text', flat=True).annotate(foo=F('id')) reveal_type(qs4) # N: Revealed type is "django.db.models.query.QuerySet[myapp.models.Blog@AnnotatedWith[TypedDict({'foo': Any})], builtins.str]" before_values_no_params = Blog.objects.values().annotate(foo=F('id')).get() reveal_type(before_values_no_params) # N: Revealed type is "builtins.dict[builtins.str, Any]" before_values_list_no_params = Blog.objects.values_list().annotate(foo=F('id')).get() reveal_type(before_values_list_no_params) # N: Revealed type is "builtins.tuple[Any, ...]" before_values_list_flat_no_params = Blog.objects.values_list(flat=True).annotate(foo=F('id')).get() reveal_type(before_values_list_flat_no_params) # N: Revealed type is "builtins.int" before_values_list_named_no_params = Blog.objects.values_list(named=True).annotate(foo=F('id')).get() reveal_type(before_values_list_named_no_params.foo) # N: Revealed type is "Any" # TODO: Would be nice to infer builtins.str: reveal_type(before_values_list_named_no_params.text) # N: Revealed type is "Any" installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class Blog(models.Model): num_posts = models.IntegerField() text = models.CharField(max_length=100) - case: test_annotate_with_filter main: | from django.db import models from myapp.models import Blog qs = Blog.objects.annotate(xyz=models.Count("entry")) qs.filter(xyz=1) qs.filter(annotate_wrong__gt=5) qs2 = qs.alias(alias_entries=models.Count("entry")) qs2.filter(alias_entries__gt=5) qs2.filter(alias_wrong__gt=5, annotate_wrong__gt=5) Blog.objects.annotate().filter(xyz=1) ( Blog.objects.filter(xyz=1) .annotate(xyz=models.Count("entry")) .filter(xyz=1) ) out: | main:6: error: Cannot resolve keyword 'annotate_wrong' into field. Choices are: entry, id, xyz [misc] main:10: error: Cannot resolve keyword 'alias_wrong' into field. Choices are: entry, id, xyz, alias_entries [misc] main:10: error: Cannot resolve keyword 'annotate_wrong' into field. Choices are: entry, id, xyz, alias_entries [misc] main:12: error: Cannot resolve keyword 'xyz' into field. Choices are: entry, id [misc] main:14: error: Cannot resolve keyword 'xyz' into field. Choices are: entry, id [misc] installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class Blog(models.Model): pass class Entry(models.Model): blog = models.ForeignKey(Blog, on_delete=models.CASCADE) - case: test_annotate_allows_any_lookups_in_filter main: | from typing_extensions import reveal_type from django.db import models from myapp.models import Blog qs = Blog.objects.annotate(distance=0) reveal_type(qs) reveal_type(qs.filter(distance=10)) reveal_type(qs.filter(distance__lt=10)) qs.filter(distance__lt__lt=10) qs.filter(distance__unknown_lookup=10) out: | main:6: note: Revealed type is "django.db.models.query.QuerySet[myapp.models.Blog@AnnotatedWith[TypedDict({'distance': Any})], myapp.models.Blog@AnnotatedWith[TypedDict({'distance': Any})]]" main:7: note: Revealed type is "django.db.models.query.QuerySet[myapp.models.Blog@AnnotatedWith[TypedDict({'distance': Any})], myapp.models.Blog@AnnotatedWith[TypedDict({'distance': Any})]]" main:8: note: Revealed type is "django.db.models.query.QuerySet[myapp.models.Blog@AnnotatedWith[TypedDict({'distance': Any})], myapp.models.Blog@AnnotatedWith[TypedDict({'distance': Any})]]" installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class Blog(models.Model): pass - case: test_annotate_existing_field installed_apps: - django.contrib.auth - django.contrib.contenttypes main: | from typing import Any from typing_extensions import TypedDict from django.db import models from django.db.models import Prefetch, F, QuerySet from django.contrib.auth.models import User, Group from django_stubs_ext.annotations import WithAnnotations # Error on existing field / remapped field / previous annotation User.objects.annotate(username=F("username")) # E: Attribute "username" already defined on "django.contrib.auth.models.User" [no-redef] User.objects.values(foo=F("id")).annotate(foo=F("username")) # E: Attribute "foo" already defined on "django.contrib.auth.models.User" [no-redef] User.objects.annotate(computed=F('id')).annotate(computed=F('username')) # E: Attribute "computed" already defined on "django.contrib.auth.models.User@AnnotatedWith[TypedDict({'computed': Any})]" [no-redef] # Should be ok if filtered with `values` / `values_list` User.objects.values_list("id").annotate(username=F("username")) User.objects.values("id").annotate(username=F("username")) User.objects.values_list("id", named=True).annotate(username=F("username")) def get_with_values_list() -> QuerySet[User, tuple[int]]: return User.objects.values_list("id") get_with_values_list().annotate(username=F("username")) class OnlyIdDict(TypedDict): id: int def get_with_values() -> QuerySet[User, OnlyIdDict]: return User.objects.values("id") get_with_values().annotate(username=F("username")) # But still cause issue if overlapping with other symbols (methods, ...) User.objects.values_list("id").annotate(get_full_name=F("username")) # E: Attribute "get_full_name" already defined on "django.contrib.auth.models.User" [no-redef] User.objects.values("id").annotate(get_full_name=F("username")) # E: Attribute "get_full_name" already defined on "django.contrib.auth.models.User" [no-redef] # No false positive on approximative row types tuple_any_row: models.QuerySet[User, tuple[Any, ...]] tuple_any_row.annotate(username=F("username")) any_row: models.QuerySet[User, Any] any_row.annotate(username=F("username")) dict_row: models.QuerySet[User, dict] dict_row.annotate(username=F("username")) # Ensure collisions with methods are still errors in approximate contexts get_with_values_list().annotate(get_full_name=F("username")) # E: Attribute "get_full_name" already defined on "django.contrib.auth.models.User" [no-redef] tuple_any_row.annotate(get_full_name=F("username")) # E: Attribute "get_full_name" already defined on "django.contrib.auth.models.User" [no-redef] any_row.annotate(get_full_name=F("username")) # E: Attribute "get_full_name" already defined on "django.contrib.auth.models.User" [no-redef] dict_row.annotate(get_full_name=F("username")) # E: Attribute "get_full_name" already defined on "django.contrib.auth.models.User" [no-redef] # Named values_list # Test name collision with model methods in named values_list - should still error User.objects.values_list("id", named=True).annotate(get_full_name=F("username")) # E: Attribute "get_full_name" already defined on "django.contrib.auth.models.User" [no-redef] User.objects.values_list("username", named=True).annotate(get_full_name=F("first_name")) # E: Attribute "get_full_name" already defined on "django.contrib.auth.models.User" [no-redef] User.objects.values_list("id", named=True).annotate(is_anonymous=F("username")) # E: Attribute "is_anonymous" already defined on "django.contrib.auth.models.User" [no-redef] # Test name collision with model fields when field is NOT in values_list - should be OK User.objects.values_list("id", named=True).annotate(username=F("first_name")) User.objects.values_list("first_name", named=True).annotate(username=F("last_name")) # Test name collision with model fields when field IS in values_list - should error User.objects.values_list("username", named=True).annotate(username=F("first_name")) # E: Attribute "username" already defined on "django.contrib.auth.models.User" [no-redef] User.objects.values_list("id", "username", named=True).annotate(username=F("first_name")) # E: Attribute "username" already defined on "django.contrib.auth.models.User" [no-redef] django-stubs-5.2.9/tests/typecheck/managers/querysets/test_as_manager.yml000066400000000000000000000554061513401051600267760ustar00rootroot00000000000000- case: self_return_management main: | from typing_extensions import reveal_type from myapp.models import MyModel, MyModelWithoutSelf reveal_type(MyModel.objects.example_simple()) # N: Revealed type is "myapp.models.MyQuerySet[myapp.models.MyModel]" reveal_type(MyModel.objects.example_list()) # N: Revealed type is "builtins.list[myapp.models.MyQuerySet[myapp.models.MyModel]]" reveal_type(MyModel.objects.example_simple().just_int()) # N: Revealed type is "builtins.int" reveal_type(MyModel.objects.example_dict()) # N: Revealed type is "builtins.dict[builtins.str, myapp.models.MyQuerySet[myapp.models.MyModel]]" reveal_type(MyModelWithoutSelf.objects.method()) # N: Revealed type is "myapp.models.QuerySetWithoutSelf" installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models from typing import ClassVar, TypeVar from typing_extensions import Self M = TypeVar("M", bound=models.Model, covariant=True) class BaseQuerySet(models.QuerySet[M]): def example_dict(self) -> dict[str, Self]: ... class MyQuerySet(BaseQuerySet[M]): def example_simple(self) -> Self: ... def example_list(self) -> list[Self]: ... def just_int(self) -> int: ... class MyModel(models.Model): objects = MyQuerySet.as_manager() class QuerySetWithoutSelf(models.QuerySet["MyModelWithoutSelf"]): def method(self) -> "QuerySetWithoutSelf": return self class MyModelWithoutSelf(models.Model): objects = QuerySetWithoutSelf.as_manager() - case: declares_manager_type_like_django main: | from typing_extensions import reveal_type from myapp.models import MyModel reveal_type(MyModel.objects) # N: Revealed type is "myapp.models.ManagerFromMyQuerySet[myapp.models.MyModel]" installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class MyQuerySet(models.QuerySet): ... class MyModel(models.Model): objects = MyQuerySet.as_manager() - case: includes_django_methods_returning_queryset main: | from typing_extensions import reveal_type from myapp.models import MyModel reveal_type(MyModel.objects.none) # N: Revealed type is "def () -> myapp.models.MyQuerySet[myapp.models.MyModel]" reveal_type(MyModel.objects.all) # N: Revealed type is "def () -> myapp.models.MyQuerySet[myapp.models.MyModel]" reveal_type(MyModel.objects.filter) # N: Revealed type is "def (*args: Any, **kwargs: Any) -> myapp.models.MyQuerySet[myapp.models.MyModel]" installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from typing import TypeVar from django.db import models M = TypeVar("M", bound=models.Model, covariant=True) class MyQuerySet(models.QuerySet[M]): ... class MyModel(models.Model): objects = MyQuerySet.as_manager() - case: model_gets_generated_manager_as_default_manager main: | from typing_extensions import reveal_type from myapp.models import MyModel reveal_type(MyModel.objects) # N: Revealed type is "myapp.models.ManagerFromModelQuerySet[myapp.models.MyModel]" reveal_type(MyModel.objects.queryset_method()) # N: Revealed type is "builtins.str" reveal_type(MyModel._default_manager) # N: Revealed type is "myapp.models.ManagerFromModelQuerySet[myapp.models.MyModel]" installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class ModelQuerySet(models.QuerySet): def queryset_method(self) -> str: return 'hello' class MyModel(models.Model): objects = ModelQuerySet.as_manager() - case: resolves_name_collision_with_other_module_level_object main: | from typing_extensions import reveal_type from myapp.models import MyModel, ManagerFromModelQuerySet reveal_type(ManagerFromModelQuerySet) # N: Revealed type is "builtins.int" reveal_type(MyModel.objects) # N: Revealed type is "myapp.models.ManagerFromModelQuerySet1[myapp.models.MyModel]" reveal_type(MyModel._default_manager) # N: Revealed type is "myapp.models.ManagerFromModelQuerySet1[myapp.models.MyModel]" installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models ManagerFromModelQuerySet = 1 class ModelQuerySet(models.QuerySet): ... class MyModel(models.Model): objects = ModelQuerySet.as_manager() - case: includes_custom_queryset_methods main: | from typing_extensions import reveal_type from myapp.models import MyModel reveal_type(MyModel.objects.custom_queryset_method()) # N: Revealed type is "myapp.models.ModelQuerySet" reveal_type(MyModel.objects.all().custom_queryset_method()) # N: Revealed type is "myapp.models.ModelQuerySet" reveal_type(MyModel.objects.returns_int_sequence()) # N: Revealed type is "typing.Sequence[builtins.int]" installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from collections.abc import Sequence from django.db import models class ModelQuerySet(models.QuerySet["MyModel"]): def custom_queryset_method(self) -> "ModelQuerySet": return self.all() def returns_int_sequence(self) -> Sequence[int]: return [1] class MyModel(models.Model): objects = ModelQuerySet.as_manager() - case: includes_custom_queryset_methods_on_unions main: | from typing_extensions import reveal_type from myapp.models import MyModel1, MyModel2 kls: type[MyModel1 | MyModel2] = MyModel1 reveal_type(kls.objects.custom_queryset_method()) # N: Revealed type is "myapp.models.ModelQuerySet1 | myapp.models.ModelQuerySet2" reveal_type(kls.objects.all().custom_queryset_method()) # N: Revealed type is "myapp.models.ModelQuerySet1 | myapp.models.ModelQuerySet2" reveal_type(kls.objects.returns_thing()) # N: Revealed type is "builtins.int | builtins.str" reveal_type(kls.objects.get()) # N: Revealed type is "myapp.models.MyModel1 | myapp.models.MyModel2" installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from collections.abc import Sequence from django.db import models class ModelQuerySet1(models.QuerySet["MyModel1"]): def custom_queryset_method(self) -> "ModelQuerySet1": return self.all() def returns_thing(self) -> int: return 1 class ModelQuerySet2(models.QuerySet["MyModel2"]): def custom_queryset_method(self) -> "ModelQuerySet2": return self.all() def returns_thing(self) -> str: return "asdf" class MyModel1(models.Model): objects = ModelQuerySet1.as_manager() class MyModel2(models.Model): objects = ModelQuerySet2.as_manager() - case: handles_call_outside_of_model_class_definition main: | from typing_extensions import reveal_type from myapp.models import MyModel, MyModelManager reveal_type(MyModelManager) # N: Revealed type is "myapp.models.ManagerFromModelQuerySet[Any]" reveal_type(MyModel.objects) # N: Revealed type is "myapp.models.ManagerFromModelQuerySet[myapp.models.MyModel]" reveal_type(MyModel.objects.all()) # N: Revealed type is "myapp.models.ModelQuerySet" installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class ModelQuerySet(models.QuerySet["MyModel"]): ... MyModelManager = ModelQuerySet.as_manager() class MyModel(models.Model): objects = MyModelManager - case: handles_name_collision_when_declared_outside_of_model_class_body main: | from typing_extensions import reveal_type from myapp.models import MyModel, ManagerFromModelQuerySet reveal_type(ManagerFromModelQuerySet) # N: Revealed type is "myapp.models.ManagerFromModelQuerySet1[Any]" reveal_type(MyModel.objects) # N: Revealed type is "myapp.models.ManagerFromModelQuerySet1[myapp.models.MyModel]" reveal_type(MyModel.objects.all()) # N: Revealed type is "myapp.models.ModelQuerySet" installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class ModelQuerySet(models.QuerySet["MyModel"]): ... ManagerFromModelQuerySet = ModelQuerySet.as_manager() class MyModel(models.Model): objects = ManagerFromModelQuerySet - case: handles_type_var_in_subclasses_of_subclasses_of_queryset main: | from typing_extensions import reveal_type from myapp.models import MyModel, MyOtherModel reveal_type(MyModel.objects.example_2()) # N: Revealed type is "myapp.models.MyModel" reveal_type(MyModel.objects.example()) # N: Revealed type is "myapp.models.MyModel" reveal_type(MyModel.objects.example_2()) # N: Revealed type is "myapp.models.MyModel" reveal_type(MyModel.objects.override()) # N: Revealed type is "myapp.models.MyModel" reveal_type(MyModel.objects.override2()) # N: Revealed type is "myapp.models.MyModel" reveal_type(MyModel.objects.dummy_override()) # N: Revealed type is "myapp.models.MyModel" reveal_type(MyModel.objects.example_mixin(MyModel())) # N: Revealed type is "myapp.models.MyModel" reveal_type(MyModel.objects.example_other_mixin()) # N: Revealed type is "myapp.models.MyModel" reveal_type(MyModel.objects.example_union()) # N: Revealed type is "myapp.models.MyModel | builtins.list[myapp.models.MyModel]" reveal_type(MyOtherModel.objects.example()) # N: Revealed type is "myapp.models.MyOtherModel" reveal_type(MyOtherModel.objects.example_2()) # N: Revealed type is "myapp.models.MyOtherModel" reveal_type(MyOtherModel.objects.override()) # N: Revealed type is "myapp.models.MyOtherModel" reveal_type(MyOtherModel.objects.override2()) # N: Revealed type is "myapp.models.MyOtherModel" reveal_type(MyOtherModel.objects.dummy_override()) # N: Revealed type is "myapp.models.MyOtherModel" reveal_type(MyOtherModel.objects.example_mixin(MyOtherModel())) # N: Revealed type is "myapp.models.MyOtherModel" reveal_type(MyOtherModel.objects.example_other_mixin()) # N: Revealed type is "myapp.models.MyOtherModel" reveal_type(MyOtherModel.objects.test_self()) # N: Revealed type is "myapp.models._MyModelQuerySet2[myapp.models.MyOtherModel]" reveal_type(MyOtherModel.objects.test_sub_self()) # N: Revealed type is "myapp.models._MyModelQuerySet2[myapp.models.MyOtherModel]" reveal_type(MyOtherModel.objects.example_union()) # N: Revealed type is "myapp.models.MyOtherModel | builtins.list[myapp.models.MyOtherModel]" installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from typing import Generic, TypeVar from django.db import models from typing_extensions import Self T = TypeVar("T", bound=models.Model) T_2 = TypeVar("T_2", bound=models.Model) class SomeMixin: def example_mixin(self, a: T) -> T: ... class OtherMixin(models.QuerySet[T]): def example_other_mixin(self) -> T: ... def example_union(self) -> T | list[T]: ... class _MyModelQuerySet(OtherMixin[T], models.QuerySet[T], Generic[T]): def example(self) -> T: ... def override(self) -> T: ... def override2(self) -> T: ... def dummy_override(self) -> int: ... def test_sub_self(self) -> Self: ... class _MyModelQuerySet2(SomeMixin, _MyModelQuerySet[T_2]): def example_2(self) -> T_2: ... def override(self) -> T_2: ... def override2(self) -> T_2: ... def dummy_override(self) -> T_2: ... # type: ignore[override] def test_self(self) -> Self: ... class MyModelQuerySet(_MyModelQuerySet2["MyModel"]): def override(self) -> "MyModel": ... class MyModel(models.Model): objects = MyModelQuerySet.as_manager() class MyOtherModel(models.Model): objects = _MyModelQuerySet2.as_manager() - case: handles_type_vars main: | from typing_extensions import reveal_type from myapp.models import MyModel, BaseQuerySet reveal_type(MyModel.objects.example()) # N: Revealed type is "myapp.models.MyModel" reveal_type(MyModel.objects.example_list()) # N: Revealed type is "builtins.list[myapp.models.MyModel]" reveal_type(MyModel.objects.example_type()) # N: Revealed type is "type[myapp.models.MyModel]" reveal_type(MyModel.objects.example_tuple_simple()) # N: Revealed type is "tuple[myapp.models.MyModel]" reveal_type(MyModel.objects.example_tuple_list()) # N: Revealed type is "builtins.tuple[myapp.models.MyModel, ...]" reveal_type(MyModel.objects.example_tuple_double()) # N: Revealed type is "tuple[builtins.int, myapp.models.MyModel]" reveal_type(MyModel.objects.example_class()) # N: Revealed type is "myapp.models.Example[myapp.models.MyModel]" reveal_type(MyModel.objects.example_type_class()) # N: Revealed type is "type[myapp.models.Example[myapp.models.MyModel]]" reveal_type(MyModel.objects.example_collection()) # N: Revealed type is "typing.Collection[myapp.models.MyModel]" reveal_type(MyModel.objects.example_set()) # N: Revealed type is "builtins.set[myapp.models.MyModel]" reveal_type(MyModel.objects.example_dict()) # N: Revealed type is "builtins.dict[builtins.str, myapp.models.MyModel]" reveal_type(MyModel.objects.example_list_dict()) # N: Revealed type is "builtins.list[builtins.dict[builtins.str, myapp.models.MyModel]]" class TestQuerySet(BaseQuerySet[str]): ... # E: Type argument "str" of "BaseQuerySet" must be a subtype of "Model" [type-var] reveal_type(MyModel.objects.example_t(5)) # N: Revealed type is "builtins.int" MyModel.objects.example_arg(5, "5") # E: Argument 1 to "example_arg" of "BaseQuerySet" has incompatible type "int"; expected "MyModel" [arg-type] reveal_type(MyModel.objects.example_arg(MyModel(), "5")) # N: Revealed type is "myapp.models.MyModel" installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from __future__ import annotations from collections.abc import Collection from typing import Generic, TypeVar from django.db import models _CTE = TypeVar("_CTE", bound=models.Model) T = TypeVar("T") class Example(Generic[_CTE]): ... class BaseQuerySet(models.QuerySet[_CTE], Generic[_CTE]): def example(self) -> _CTE: ... def example_list(self) -> list[_CTE]: ... def example_type(self) -> type[_CTE]: ... def example_tuple_simple(self) -> tuple[_CTE]: ... def example_tuple_list(self) -> tuple[_CTE, ...]: ... def example_tuple_double(self) -> tuple[int, _CTE]: ... def example_class(self) -> Example[_CTE]: ... def example_type_class(self) -> type[Example[_CTE]]: ... def example_collection(self) -> Collection[_CTE]: ... def example_set(self) -> set[_CTE]: ... def example_dict(self) -> dict[str, _CTE]: ... def example_list_dict(self) -> list[dict[str, _CTE]]: ... def example_t(self, a: T) -> T: ... def example_arg(self, a: _CTE, b: str) -> _CTE: ... class MyModelQuerySet(BaseQuerySet["MyModel"]): ... class MyModel(models.Model): objects = MyModelQuerySet.as_manager() - case: reuses_generated_type_when_called_identically_for_multiple_managers main: | from typing_extensions import reveal_type from myapp.models import MyModel reveal_type(MyModel.objects_1) # N: Revealed type is "myapp.models.ManagerFromModelQuerySet[myapp.models.MyModel]" reveal_type(MyModel.objects_2) # N: Revealed type is "myapp.models.ManagerFromModelQuerySet[myapp.models.MyModel]" reveal_type(MyModel.objects_1.all()) # N: Revealed type is "myapp.models.ModelQuerySet" reveal_type(MyModel.objects_2.all()) # N: Revealed type is "myapp.models.ModelQuerySet" installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class ModelQuerySet(models.QuerySet["MyModel"]): ... class MyModel(models.Model): objects_1 = ModelQuerySet.as_manager() objects_2 = ModelQuerySet.as_manager() - case: generates_new_manager_class_when_name_colliding_with_explicit_manager main: | from typing_extensions import reveal_type from myapp.models import MyModel reveal_type(MyModel.objects) # N: Revealed type is "myapp.models.ManagerFromModelQuerySet1[myapp.models.MyModel]" reveal_type(MyModel.objects.custom_method()) # N: Revealed type is "builtins.int" installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class ManagerFromModelQuerySet(models.Manager): ... class ModelQuerySet(models.QuerySet["MyModel"]): def custom_method(self) -> int: return 1 class MyModel(models.Model): objects = ModelQuerySet.as_manager() - case: handles_type_collision_with_from_queryset main: | from typing_extensions import reveal_type from myapp.models import MyModel, FromQuerySet reveal_type(FromQuerySet) # N: Revealed type is "def [_T <: django.db.models.base.Model] () -> myapp.models.ManagerFromModelQuerySet[_T`1]" reveal_type(MyModel.from_queryset) # N: Revealed type is "myapp.models.ManagerFromModelQuerySet[myapp.models.MyModel]" reveal_type(MyModel.as_manager) # N: Revealed type is "myapp.models.ManagerFromModelQuerySet[myapp.models.MyModel]" installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class ModelQuerySet(models.QuerySet["MyModel"]): ... FromQuerySet = models.Manager.from_queryset(ModelQuerySet) class MyModel(models.Model): from_queryset = FromQuerySet() as_manager = ModelQuerySet.as_manager() - case: nested_queryset_class_definition main: | from typing_extensions import reveal_type from myapp.models import MyModel reveal_type(MyModel.objects) # N: Revealed type is "myapp.models.ManagerFromMyQuerySet[myapp.models.MyModel]" installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class MyModel(models.Model): class MyQuerySet(models.QuerySet): pass objects = MyQuerySet.as_manager() - case: queryset_as_manager_foreignkey_cycle main: | from typing_extensions import reveal_type from payments.models import Payout reveal_type(Payout.objects) # N: Revealed type is "payments.models.ManagerFromPayoutQuerySet[payments.models.Payout]" custom_settings: | INSTALLED_APPS = ("django.contrib.contenttypes", "django.contrib.auth", "payments", "accounts") AUTH_USER_MODEL = "accounts.Account" files: - path: payments/__init__.py - path: payments/models.py content: | from __future__ import annotations from typing_extensions import Self from django.contrib.auth import get_user_model from django.db import models UserModel = get_user_model() class Transaction(models.Model): user = models.ForeignKey( UserModel, on_delete=models.CASCADE, related_name="transactions" ) class PayoutQuerySet(models.QuerySet["Payout"]): def unapplied(self) -> Self: return self class Payout(models.Model): triggered_by = models.ForeignKey( Transaction, on_delete=models.CASCADE, related_name="payouts" ) objects = PayoutQuerySet.as_manager() - path: accounts/__init__.py - path: accounts/models.py content: | from django.contrib.auth.models import AbstractUser class Account(AbstractUser): pass django-stubs-5.2.9/tests/typecheck/managers/querysets/test_basic_methods.yml000066400000000000000000000566471513401051600275150ustar00rootroot00000000000000- case: queryset_basic_methods_return_type main: | from typing_extensions import reveal_type from django.utils import timezone from myapp.models import Blog qs = Blog.objects.all() reveal_type(qs) # N: Revealed type is "django.db.models.query.QuerySet[myapp.models.Blog, myapp.models.Blog]" reveal_type(qs.get(id=1)) # N: Revealed type is "myapp.models.Blog" reveal_type(iter(qs)) # N: Revealed type is "typing.Iterator[myapp.models.Blog]" reveal_type(qs.iterator()) # N: Revealed type is "typing.Iterator[myapp.models.Blog]" reveal_type(qs.first()) # N: Revealed type is "myapp.models.Blog | None" reveal_type(qs.earliest()) # N: Revealed type is "myapp.models.Blog" reveal_type(qs[0]) # N: Revealed type is "myapp.models.Blog" reveal_type(qs[:9]) # N: Revealed type is "django.db.models.query.QuerySet[myapp.models.Blog, myapp.models.Blog]" reveal_type(qs.create()) # N: Revealed type is "myapp.models.Blog" reveal_type(qs.get_or_create()) # N: Revealed type is "tuple[myapp.models.Blog, builtins.bool]" reveal_type(qs.exists()) # N: Revealed type is "builtins.bool" reveal_type(qs.none()) # N: Revealed type is "django.db.models.query.QuerySet[myapp.models.Blog, myapp.models.Blog]" reveal_type(qs.update_or_create()) # N: Revealed type is "tuple[myapp.models.Blog, builtins.bool]" reveal_type(qs.explain()) # N: Revealed type is "builtins.str" reveal_type(qs.raw(qs.explain())) # N: Revealed type is "django.db.models.query.RawQuerySet[myapp.models.Blog]" reveal_type(qs.distinct()) # N: Revealed type is "django.db.models.query.QuerySet[myapp.models.Blog, myapp.models.Blog]" reveal_type(qs.distinct("created_at")) # N: Revealed type is "django.db.models.query.QuerySet[myapp.models.Blog, myapp.models.Blog]" # .dates / .datetimes reveal_type(Blog.objects.dates("created_at", "day")) # N: Revealed type is "django.db.models.query.QuerySet[myapp.models.Blog, datetime.date]" reveal_type(Blog.objects.datetimes("created_at", "day")) # N: Revealed type is "django.db.models.query.QuerySet[myapp.models.Blog, datetime.datetime]" # defer / only reveal_type(qs.defer("created_at")) # N: Revealed type is "django.db.models.query.QuerySet[myapp.models.Blog, myapp.models.Blog]" reveal_type(qs.defer(None)) # N: Revealed type is "django.db.models.query.QuerySet[myapp.models.Blog, myapp.models.Blog]" reveal_type(qs.only("created_at")) # N: Revealed type is "django.db.models.query.QuerySet[myapp.models.Blog, myapp.models.Blog]" qs.only(None) # E: Argument 1 to "only" of "QuerySet" has incompatible type "None"; expected "str" [arg-type] # AND-ing QuerySets reveal_type(Blog.objects.all() & Blog.objects.all()) # N: Revealed type is "django.db.models.query.QuerySet[myapp.models.Blog, myapp.models.Blog]" # bulk methods reveal_type(qs.count()) # N: Revealed type is "builtins.int" reveal_type(qs.update(created_at=timezone.now())) # N: Revealed type is "builtins.int" reveal_type(qs.in_bulk()) # N: Revealed type is "builtins.dict[Any, myapp.models.Blog]" reveal_type(qs.bulk_update(list(qs), fields=["created_at"])) # N: Revealed type is "builtins.int" reveal_type(qs.bulk_create([])) # N: Revealed type is "builtins.list[myapp.models.Blog]" reveal_type(qs.delete()) # N: Revealed type is "tuple[builtins.int, builtins.dict[builtins.str, builtins.int]]" installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class Blog(models.Model): created_at = models.DateTimeField() - case: queryset_missing_method main: | from typing_extensions import reveal_type from myapp.models import User reveal_type(User.objects) # N: Revealed type is "django.db.models.manager.Manager[myapp.models.User]" User.objects.not_existing_method() # E: "Manager[User]" has no attribute "not_existing_method" [attr-defined] installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class User(models.Model): pass - case: queryset_method_of_union main: | from typing_extensions import TypedDict, reveal_type from django.contrib.auth.models import User from django.db import models from myapp.models import MyModel1, MyModel2 kls: type[MyModel1 | MyModel2] = MyModel1 reveal_type(kls.objects) # N: Revealed type is "django.db.models.manager.Manager[myapp.models.MyModel1] | django.db.models.manager.Manager[myapp.models.MyModel2]" reveal_type(kls.objects.all()) # N: Revealed type is "django.db.models.query.QuerySet[myapp.models.MyModel1, myapp.models.MyModel1] | django.db.models.query.QuerySet[myapp.models.MyModel2, myapp.models.MyModel2]" reveal_type(kls.objects.get()) # N: Revealed type is "myapp.models.MyModel1 | myapp.models.MyModel2" # Regular QuerySet foos = MyModel1.objects.all() bars = MyModel2.objects.all() reveal_type(foos.union(bars)) # N: Revealed type is "django.db.models.query.QuerySet[myapp.models.MyModel1, myapp.models.MyModel1]" reveal_type(foos.intersection(bars)) # N: Revealed type is "django.db.models.query.QuerySet[myapp.models.MyModel1, myapp.models.MyModel1]" reveal_type(foos.difference(bars)) # N: Revealed type is "django.db.models.query.QuerySet[myapp.models.MyModel1, myapp.models.MyModel1]" # `values_list()` QuerySet foos_list = MyModel1.objects.all().values_list("name") bars_list = MyModel2.objects.all().values_list("name") reveal_type(foos_list.union(bars_list)) # N: Revealed type is "django.db.models.query.QuerySet[myapp.models.MyModel1, tuple[builtins.str]]" reveal_type(foos_list.intersection(bars_list)) # N: Revealed type is "django.db.models.query.QuerySet[myapp.models.MyModel1, tuple[builtins.str]]" reveal_type(foos_list.difference(bars_list)) # N: Revealed type is "django.db.models.query.QuerySet[myapp.models.MyModel1, tuple[builtins.str]]" def union_values_list() -> models.QuerySet[models.Model, tuple[str]]: union = foos_list.union(bars_list) return union # `values()` QuerySet -- One field, same name foos_dict = MyModel1.objects.all().values("name") bars_dict = MyModel2.objects.all().values("name") reveal_type(foos_dict.union(bars_dict)) # N: Revealed type is "django.db.models.query.QuerySet[myapp.models.MyModel1, TypedDict({'name': builtins.str})]" reveal_type(foos_dict.intersection(bars_dict)) # N: Revealed type is "django.db.models.query.QuerySet[myapp.models.MyModel1, TypedDict({'name': builtins.str})]" reveal_type(foos_dict.difference(bars_dict)) # N: Revealed type is "django.db.models.query.QuerySet[myapp.models.MyModel1, TypedDict({'name': builtins.str})]" # `values()` QuerySet -- One field, different name, the first one takes precedence. # cf https://docs.djangoproject.com/en/5.2/ref/models/querysets/#django.db.models.query.QuerySet.union foos_dict2 = MyModel1.objects.all().values("name") bars_dict2 = MyModel2.objects.all().values("id") reveal_type(foos_dict2.union(bars_dict2)) # N: Revealed type is "django.db.models.query.QuerySet[myapp.models.MyModel1, TypedDict({'name': builtins.str})]" reveal_type(foos_dict2.intersection(bars_dict2)) # N: Revealed type is "django.db.models.query.QuerySet[myapp.models.MyModel1, TypedDict({'name': builtins.str})]" reveal_type(foos_dict2.difference(bars_dict2)) # N: Revealed type is "django.db.models.query.QuerySet[myapp.models.MyModel1, TypedDict({'name': builtins.str})]" # `values()` QuerySet -- Multiple field, same names foos_dict3 = MyModel1.objects.all().values("name", "id") bars_dict3 = MyModel2.objects.all().values("name", "id") reveal_type(foos_dict3.union(bars_dict3)) # N: Revealed type is "django.db.models.query.QuerySet[myapp.models.MyModel1, TypedDict({'name': builtins.str, 'id': builtins.int})]" reveal_type(foos_dict3.intersection(bars_dict3)) # N: Revealed type is "django.db.models.query.QuerySet[myapp.models.MyModel1, TypedDict({'name': builtins.str, 'id': builtins.int})]" reveal_type(foos_dict3.difference(bars_dict3)) # N: Revealed type is "django.db.models.query.QuerySet[myapp.models.MyModel1, TypedDict({'name': builtins.str, 'id': builtins.int})]" # Mixing `values()` and `values_list()` is apparently ok and takes the type of the first queryset foos_dict4 = MyModel1.objects.all().values("name", "id") bars_list4 = MyModel2.objects.all().values_list("name", "id") reveal_type(foos_dict4.union(bars_list4)) # N: Revealed type is "django.db.models.query.QuerySet[myapp.models.MyModel1, TypedDict({'name': builtins.str, 'id': builtins.int})]" reveal_type(foos_dict4.intersection(bars_list4)) # N: Revealed type is "django.db.models.query.QuerySet[myapp.models.MyModel1, TypedDict({'name': builtins.str, 'id': builtins.int})]" reveal_type(foos_dict4.difference(bars_list4)) # N: Revealed type is "django.db.models.query.QuerySet[myapp.models.MyModel1, TypedDict({'name': builtins.str, 'id': builtins.int})]" # TODO: Should be an error (mixed number of selected columns) -- runtime raises 'The used SELECT statements have a different number of columns' foos_dict5 = MyModel1.objects.all().values("name", "id") bars_dict5 = MyModel2.objects.all().values("name") reveal_type(foos_dict5.union(bars_dict5)) # N: Revealed type is "django.db.models.query.QuerySet[myapp.models.MyModel1, TypedDict({'name': builtins.str, 'id': builtins.int})]" reveal_type(foos_dict5.intersection(bars_dict5)) # N: Revealed type is "django.db.models.query.QuerySet[myapp.models.MyModel1, TypedDict({'name': builtins.str, 'id': builtins.int})]" reveal_type(foos_dict5.difference(bars_dict5)) # N: Revealed type is "django.db.models.query.QuerySet[myapp.models.MyModel1, TypedDict({'name': builtins.str, 'id': builtins.int})]" # TODO: Should be an error (mixed number of columns) -- runtime raises 'The used SELECT statements have a different number of columns' model2_qs = MyModel2.objects.all() user_qs = User.objects.all() reveal_type(model2_qs.union(bars_dict5)) # N: Revealed type is "django.db.models.query.QuerySet[myapp.models.MyModel2, myapp.models.MyModel2]" reveal_type(model2_qs.intersection(bars_dict5)) # N: Revealed type is "django.db.models.query.QuerySet[myapp.models.MyModel2, myapp.models.MyModel2]" reveal_type(model2_qs.difference(bars_dict5)) # N: Revealed type is "django.db.models.query.QuerySet[myapp.models.MyModel2, myapp.models.MyModel2]" installed_apps: - django.contrib.auth - django.contrib.contenttypes - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class MyModel1(models.Model): name = models.TextField(blank=False, null=False) class MyModel2(models.Model): name = models.TextField(blank=False, null=False) - case: select_related_returns_queryset main: | from typing_extensions import reveal_type from myapp.models import Book reveal_type(Book.objects.select_related()) reveal_type(Book.objects.filter(pk=1).select_related()) Book.objects.select_related() Book.objects.all().select_related() Book.objects.select_related(None) Book.objects.all().select_related(None) Book.objects.select_related("author", "dd") # E: Invalid field name "dd" in select_related lookup. Choices are: author [misc] Book.objects.all().select_related("author", "dd") # E: Invalid field name "dd" in select_related lookup. Choices are: author [misc] Book.objects.select_related("None", None) Book.objects.all().select_related("None", None) Book.objects.select_related(1) Book.objects.all().select_related(1) Book.objects.select_related(True) Book.objects.all().select_related(True) out: | main:3: note: Revealed type is "django.db.models.query.QuerySet[myapp.models.Book, myapp.models.Book]" main:4: note: Revealed type is "django.db.models.query.QuerySet[myapp.models.Book, myapp.models.Book]" main:13: error: No overload variant of "select_related" of "Manager" matches argument types "str", "None" [call-overload] main:13: note: Possible overload variants: main:13: note: def select_related(self, None, /) -> QuerySet[Book, Book] main:13: note: def select_related(self, *fields: str) -> QuerySet[Book, Book] main:14: error: No overload variant of "select_related" of "QuerySet" matches argument types "str", "None" [call-overload] main:14: note: Possible overload variants: main:14: note: def select_related(self, None, /) -> QuerySet[Book, Book] main:14: note: def select_related(self, *fields: str) -> QuerySet[Book, Book] main:15: error: No overload variant of "select_related" of "Manager" matches argument type "int" [call-overload] main:15: note: Possible overload variants: main:15: note: def select_related(self, None, /) -> QuerySet[Book, Book] main:15: note: def select_related(self, *fields: str) -> QuerySet[Book, Book] main:16: error: No overload variant of "select_related" of "QuerySet" matches argument type "int" [call-overload] main:16: note: Possible overload variants: main:16: note: def select_related(self, None, /) -> QuerySet[Book, Book] main:16: note: def select_related(self, *fields: str) -> QuerySet[Book, Book] main:17: error: No overload variant of "select_related" of "Manager" matches argument type "bool" [call-overload] main:17: note: Possible overload variants: main:17: note: def select_related(self, None, /) -> QuerySet[Book, Book] main:17: note: def select_related(self, *fields: str) -> QuerySet[Book, Book] main:18: error: No overload variant of "select_related" of "QuerySet" matches argument type "bool" [call-overload] main:18: note: Possible overload variants: main:18: note: def select_related(self, None, /) -> QuerySet[Book, Book] main:18: note: def select_related(self, *fields: str) -> QuerySet[Book, Book] installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class Person(models.Model): pass class Book(models.Model): author = models.ForeignKey(Person, on_delete=models.CASCADE) - case: prefetch_related_returns_queryset main: | from typing_extensions import reveal_type from myapp.models import Book reveal_type(Book.objects.prefetch_related()) reveal_type(Book.objects.filter(pk=1).prefetch_related()) Book.objects.prefetch_related() Book.objects.all().prefetch_related() Book.objects.prefetch_related(None) Book.objects.all().prefetch_related(None) Book.objects.prefetch_related("author", "dd") # E: Cannot find "dd" on "Book" object, "dd" is an invalid parameter to "prefetch_related()" [misc] Book.objects.all().prefetch_related("author", "dd") # E: Cannot find "dd" on "Book" object, "dd" is an invalid parameter to "prefetch_related()" [misc] Book.objects.prefetch_related("None", None) Book.objects.all().prefetch_related("None", None) Book.objects.prefetch_related(1) Book.objects.all().prefetch_related(1) Book.objects.prefetch_related(True) Book.objects.all().prefetch_related(True) out: | main:3: note: Revealed type is "django.db.models.query.QuerySet[myapp.models.Book, myapp.models.Book]" main:4: note: Revealed type is "django.db.models.query.QuerySet[myapp.models.Book, myapp.models.Book]" main:13: error: No overload variant of "prefetch_related" of "Manager" matches argument types "str", "None" [call-overload] main:13: note: Possible overload variants: main:13: note: def prefetch_related(self, None, /) -> QuerySet[Book, Book] main:13: note: def [_LookupT: str, _PrefetchedQuerySetT: QuerySet[Model, Model], _ToAttrT: str] prefetch_related(self, *lookups: str | Prefetch[_LookupT, _PrefetchedQuerySetT, _ToAttrT]) -> QuerySet[Book, Book] main:14: error: No overload variant of "prefetch_related" of "QuerySet" matches argument types "str", "None" [call-overload] main:14: note: Possible overload variants: main:14: note: def prefetch_related(self, None, /) -> QuerySet[Book, Book] main:14: note: def [_LookupT: str, _PrefetchedQuerySetT: QuerySet[Model, Model], _ToAttrT: str] prefetch_related(self, *lookups: str | Prefetch[_LookupT, _PrefetchedQuerySetT, _ToAttrT]) -> QuerySet[Book, Book] main:15: error: No overload variant of "prefetch_related" of "Manager" matches argument type "int" [call-overload] main:15: note: Possible overload variants: main:15: note: def prefetch_related(self, None, /) -> QuerySet[Book, Book] main:15: note: def [_LookupT: str, _PrefetchedQuerySetT: QuerySet[Model, Model], _ToAttrT: str] prefetch_related(self, *lookups: str | Prefetch[_LookupT, _PrefetchedQuerySetT, _ToAttrT]) -> QuerySet[Book, Book] main:16: error: No overload variant of "prefetch_related" of "QuerySet" matches argument type "int" [call-overload] main:16: note: Possible overload variants: main:16: note: def prefetch_related(self, None, /) -> QuerySet[Book, Book] main:16: note: def [_LookupT: str, _PrefetchedQuerySetT: QuerySet[Model, Model], _ToAttrT: str] prefetch_related(self, *lookups: str | Prefetch[_LookupT, _PrefetchedQuerySetT, _ToAttrT]) -> QuerySet[Book, Book] main:17: error: No overload variant of "prefetch_related" of "Manager" matches argument type "bool" [call-overload] main:17: note: Possible overload variants: main:17: note: def prefetch_related(self, None, /) -> QuerySet[Book, Book] main:17: note: def [_LookupT: str, _PrefetchedQuerySetT: QuerySet[Model, Model], _ToAttrT: str] prefetch_related(self, *lookups: str | Prefetch[_LookupT, _PrefetchedQuerySetT, _ToAttrT]) -> QuerySet[Book, Book] main:18: error: No overload variant of "prefetch_related" of "QuerySet" matches argument type "bool" [call-overload] main:18: note: Possible overload variants: main:18: note: def prefetch_related(self, None, /) -> QuerySet[Book, Book] main:18: note: def [_LookupT: str, _PrefetchedQuerySetT: QuerySet[Model, Model], _ToAttrT: str] prefetch_related(self, *lookups: str | Prefetch[_LookupT, _PrefetchedQuerySetT, _ToAttrT]) -> QuerySet[Book, Book] installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class Person(models.Model): pass class Book(models.Model): author = models.ForeignKey(Person, on_delete=models.CASCADE) - case: prefetch_related_returns_raw_queryset main: | from myapp.models import Book raw_qs = Book.objects.raw("SELECT 1") raw_qs_from_manager = Book.objects.raw("SELECT 1") raw_qs_from_manager.prefetch_related() raw_qs.prefetch_related() raw_qs_from_manager.prefetch_related(None) raw_qs.prefetch_related(None) raw_qs_from_manager.prefetch_related("author", "dd") # Should be Error on invalid lookup 'dd' ! raw_qs.prefetch_related("author", "dd") # Should be Error on invalid lookup 'dd' ! raw_qs_from_manager.prefetch_related("None", None) raw_qs.prefetch_related("None", None) raw_qs_from_manager.prefetch_related(1) raw_qs.prefetch_related(1) raw_qs_from_manager.prefetch_related(True) raw_qs.prefetch_related(True) out: | main:12: error: No overload variant of "prefetch_related" of "RawQuerySet" matches argument types "str", "None" [call-overload] main:12: note: Possible overload variants: main:12: note: def prefetch_related(self, None, /) -> RawQuerySet[Book] main:12: note: def [_LookupT: str, _PrefetchedQuerySetT: QuerySet[Model, Model], _ToAttrT: str] prefetch_related(self, *lookups: str | Prefetch[_LookupT, _PrefetchedQuerySetT, _ToAttrT]) -> RawQuerySet[Book] main:13: error: No overload variant of "prefetch_related" of "RawQuerySet" matches argument types "str", "None" [call-overload] main:13: note: Possible overload variants: main:13: note: def prefetch_related(self, None, /) -> RawQuerySet[Book] main:13: note: def [_LookupT: str, _PrefetchedQuerySetT: QuerySet[Model, Model], _ToAttrT: str] prefetch_related(self, *lookups: str | Prefetch[_LookupT, _PrefetchedQuerySetT, _ToAttrT]) -> RawQuerySet[Book] main:14: error: No overload variant of "prefetch_related" of "RawQuerySet" matches argument type "int" [call-overload] main:14: note: Possible overload variants: main:14: note: def prefetch_related(self, None, /) -> RawQuerySet[Book] main:14: note: def [_LookupT: str, _PrefetchedQuerySetT: QuerySet[Model, Model], _ToAttrT: str] prefetch_related(self, *lookups: str | Prefetch[_LookupT, _PrefetchedQuerySetT, _ToAttrT]) -> RawQuerySet[Book] main:15: error: No overload variant of "prefetch_related" of "RawQuerySet" matches argument type "int" [call-overload] main:15: note: Possible overload variants: main:15: note: def prefetch_related(self, None, /) -> RawQuerySet[Book] main:15: note: def [_LookupT: str, _PrefetchedQuerySetT: QuerySet[Model, Model], _ToAttrT: str] prefetch_related(self, *lookups: str | Prefetch[_LookupT, _PrefetchedQuerySetT, _ToAttrT]) -> RawQuerySet[Book] main:16: error: No overload variant of "prefetch_related" of "RawQuerySet" matches argument type "bool" [call-overload] main:16: note: Possible overload variants: main:16: note: def prefetch_related(self, None, /) -> RawQuerySet[Book] main:16: note: def [_LookupT: str, _PrefetchedQuerySetT: QuerySet[Model, Model], _ToAttrT: str] prefetch_related(self, *lookups: str | Prefetch[_LookupT, _PrefetchedQuerySetT, _ToAttrT]) -> RawQuerySet[Book] main:17: error: No overload variant of "prefetch_related" of "RawQuerySet" matches argument type "bool" [call-overload] main:17: note: Possible overload variants: main:17: note: def prefetch_related(self, None, /) -> RawQuerySet[Book] main:17: note: def [_LookupT: str, _PrefetchedQuerySetT: QuerySet[Model, Model], _ToAttrT: str] prefetch_related(self, *lookups: str | Prefetch[_LookupT, _PrefetchedQuerySetT, _ToAttrT]) -> RawQuerySet[Book] installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class Person(models.Model): pass class Book(models.Model): author = models.ForeignKey(Person, on_delete=models.CASCADE) django-stubs-5.2.9/tests/typecheck/managers/querysets/test_bulk_update.yml000066400000000000000000000260371513401051600271760ustar00rootroot00000000000000- case: bulk_update_valid_fields installed_apps: - myapp main: | from myapp.models import Article, Author, Category # Valid single field updates articles = Article.objects.all() Article.objects.bulk_update(articles, ["title"]) Article.objects.bulk_update(articles, ["content"]) Article.objects.bulk_update(articles, ["published"]) # Valid multiple field updates Article.objects.bulk_update(articles, ("title", "content")) Article.objects.bulk_update(articles, {"title", "content", "published"}) # Valid foreign key field updates (by field name and attname) Article.objects.bulk_update(articles, ["author"]) Article.objects.bulk_update(articles, ["author_id"]) Article.objects.bulk_update(articles, ["category"]) Article.objects.bulk_update(articles, ["category_id"]) # Valid updates on different models authors = Author.objects.all() Author.objects.bulk_update(authors, ["name"]) Author.objects.bulk_update(authors, ["email"]) categories = Category.objects.all() Category.objects.bulk_update(categories, ["name"]) Category.objects.bulk_update(categories, ["parent"]) Category.objects.bulk_update(categories, ["parent_id"]) # Variables containing field names field_name = "title" Article.objects.bulk_update(articles, [field_name]) # Dynamic field lists def get_fields() -> list[str]: return ["title"] Article.objects.bulk_update(articles, get_fields()) async def test_async_bulk_update() -> None: # Valid single field updates articles = Article.objects.all() await Article.objects.abulk_update(articles, {"published"}) # Valid multiple field updates await Article.objects.abulk_update(articles, ("title", "content", "published")) # Valid foreign key field updates (by field name and attname) await Article.objects.abulk_update(articles, ["category_id"]) # Valid updates on different models authors = Author.objects.all() await Author.objects.abulk_update(authors, ["email"]) categories = Category.objects.all() await Category.objects.abulk_update(categories, ["parent_id"]) # Variables containing field names field_name = "title" await Article.objects.abulk_update(articles, [field_name]) # Dynamic field lists def get_fields() -> list[str]: return ["title"] await Article.objects.abulk_update(articles, get_fields()) files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class Category(models.Model): name = models.CharField(max_length=100) parent = models.ForeignKey('self', on_delete=models.CASCADE, null=True, blank=True) class Author(models.Model): name = models.CharField(max_length=100) email = models.EmailField() class Tag(models.Model): name = models.CharField(max_length=50) class Article(models.Model): title = models.CharField(max_length=200) content = models.TextField() published = models.BooleanField(default=False) author = models.ForeignKey(Author, on_delete=models.CASCADE) category = models.ForeignKey(Category, on_delete=models.CASCADE) tags = models.ManyToManyField(Tag) - case: bulk_update_invalid_fields installed_apps: - myapp main: | from myapp.models import Article, Author, Category from typing import Literal articles = Article.objects.all() # Empty fields list Article.objects.bulk_update() # E: Missing positional arguments "objs", "fields" in call to "bulk_update" of "Manager" [call-arg] Article.objects.bulk_update(articles, []) # E: Field names must be given to "bulk_update()" [misc] # Invalid field names (Django's FieldError) Article.objects.bulk_update(articles, ["nonexistent"]) # E: Article has no field named 'nonexistent' [misc] Article.objects.bulk_update(articles, ["invalid_field"]) # E: Article has no field named 'invalid_field' [misc] # Cannot update primary key fields Article.objects.bulk_update(articles, ["id"]) # E: "bulk_update()" cannot be used with primary key fields. Got "id" [misc] # Mixed valid and invalid fields Article.objects.bulk_update(articles, {"title", "nonexistent"}) # E: Article has no field named 'nonexistent' [misc] Article.objects.bulk_update(articles, ("id", "title")) # E: "bulk_update()" cannot be used with primary key fields. Got "id" [misc] # Whitespace-only field names Article.objects.bulk_update(articles, [""]) # E: Article has no field named '' [misc] Article.objects.bulk_update(articles, [" "]) # E: Article has no field named ' ' [misc] # ManyToMany is not a concrete updatable field Article.objects.bulk_update(articles, {"tags"}) # E: "bulk_update()" can only be used with concrete fields. Got "tags" [misc] # Nested field lookups are not supported Article.objects.bulk_update(articles, ["author__name"]) # E: Article has no field named 'author__name' [misc] Article.objects.bulk_update(articles, ["category__parent__name"]) # E: Article has no field named 'category__parent__name' [misc] # Multiple invalid fields Article.objects.bulk_update(articles, ["nonexistent1", "nonexistent2"]) # E: Article has no field named 'nonexistent1' [misc] # E: Article has no field named 'nonexistent2' [misc] # Primary key with valid fields Article.objects.bulk_update(articles, ["title", "id", "content"]) # E: "bulk_update()" cannot be used with primary key fields. Got "id" [misc] # Literal type variables are validated invalid_field: Literal["nonexistent"] = "nonexistent" Article.objects.bulk_update(articles, [invalid_field]) # E: Article has no field named 'nonexistent' [misc] pk_field: Literal["id"] = "id" Article.objects.bulk_update(articles, [pk_field]) # E: "bulk_update()" cannot be used with primary key fields. Got "id" [misc] # Test with different models authors = Author.objects.all() Author.objects.bulk_update(authors, ["id"]) # E: "bulk_update()" cannot be used with primary key fields. Got "id" [misc] Author.objects.bulk_update(authors, ["invalid"]) # E: Author has no field named 'invalid' [misc] categories = Category.objects.all() Category.objects.bulk_update(categories, ["id"]) # E: "bulk_update()" cannot be used with primary key fields. Got "id" [misc] Category.objects.bulk_update(categories, ["invalid"]) # E: Category has no field named 'invalid' [misc] # Async version async def test_async_bulk_update_invalid() -> None: articles = Article.objects.all() # Empty fields list await Article.objects.abulk_update() # E: Missing positional arguments "objs", "fields" in call to "abulk_update" of "Manager" [call-arg] await Article.objects.abulk_update(articles, []) # E: Field names must be given to "abulk_update()" [misc] # Invalid field names (Django's FieldError) await Article.objects.abulk_update(articles, ["invalid_field"]) # E: Article has no field named 'invalid_field' [misc] # Cannot update primary key fields await Article.objects.abulk_update(articles, ["id"]) # E: "abulk_update()" cannot be used with primary key fields. Got "id" [misc] # Mixed valid and invalid fields await Article.objects.abulk_update(articles, ["id", "title"]) # E: "abulk_update()" cannot be used with primary key fields. Got "id" [misc] # Whitespace-only field names await Article.objects.abulk_update(articles, [" "]) # E: Article has no field named ' ' [misc] # ManyToMany is not a concrete updatable field await Article.objects.abulk_update(articles, ["tags"]) # E: "abulk_update()" can only be used with concrete fields. Got "tags" [misc] # Nested field lookups are not supported await Article.objects.abulk_update(articles, ["author__name"]) # E: Article has no field named 'author__name' [misc] await Article.objects.abulk_update(articles, ["category__parent__name"]) # E: Article has no field named 'category__parent__name' [misc] # Multiple invalid fields await Article.objects.abulk_update(articles, ("nonexistent1", "nonexistent2")) # E: Article has no field named 'nonexistent1' [misc] # E: Article has no field named 'nonexistent2' [misc] # Primary key with valid fields await Article.objects.abulk_update(articles, ["title", "id", "content"]) # E: "abulk_update()" cannot be used with primary key fields. Got "id" [misc] # Literal type variables are validated invalid_field: Literal["nonexistent"] = "nonexistent" await Article.objects.abulk_update(articles, {invalid_field}) # E: Article has no field named 'nonexistent' [misc] pk_field: Literal["id"] = "id" await Article.objects.abulk_update(articles, [pk_field]) # E: "abulk_update()" cannot be used with primary key fields. Got "id" [misc] # Test with different models authors = Author.objects.all() await Author.objects.abulk_update(authors, ["invalid"]) # E: Author has no field named 'invalid' [misc] categories = Category.objects.all() await Category.objects.abulk_update(categories, ["invalid"]) # E: Category has no field named 'invalid' [misc] files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class Category(models.Model): name = models.CharField(max_length=100) parent = models.ForeignKey('self', on_delete=models.CASCADE, null=True, blank=True) class Author(models.Model): name = models.CharField(max_length=100) email = models.EmailField() class Article(models.Model): title = models.CharField(max_length=200) content = models.TextField() published = models.BooleanField(default=False) author = models.ForeignKey(Author, on_delete=models.CASCADE) category = models.ForeignKey(Category, on_delete=models.CASCADE) tags = models.ManyToManyField('myapp.Tag') class Tag(models.Model): name = models.CharField(max_length=50) django-stubs-5.2.9/tests/typecheck/managers/querysets/test_filter.yml000066400000000000000000000340731513401051600261630ustar00rootroot00000000000000- case: filtering_with_proper_types main: | from myapp.models import User User.objects.filter(username='maksim') User.objects.get(username='maksim') User.objects.exclude(username='maksim') installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class User(models.Model): username = models.CharField(max_length=100) - case: no_such_field_for_filter main: | from myapp.models import User User.objects.filter(unknown_field=True) # E: Cannot resolve keyword 'unknown_field' into field. Choices are: id [misc] installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class User(models.Model): pass - case: filter_with_invalid_type main: | from myapp.models import User User.objects.filter(age=User()) # E: Incompatible type for lookup 'age': (got "User", expected "str | int") [misc] installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models from django.db import models class User(models.Model): age = models.IntegerField() # Regression test for #2831 - case: filter_with_decimal main: | from myapp.models import MyModel from decimal import Decimal MyModel.objects.filter(a=1) MyModel.objects.filter(a="1.0") MyModel.objects.filter(a=Decimal(1.0)) MyModel.objects.filter(a=1.0) # E: Incompatible type for lookup 'a': (got "float", expected "str | int | Decimal") [misc] installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class MyModel(models.Model): a = models.DecimalField() - case: filter_with_multiple_fields main: | from myapp.models import User User.objects.filter(age=User(), gender=User()) installed_apps: - myapp out: | main:2: error: Incompatible type for lookup 'age': (got "User", expected "str | int") [misc] main:2: error: Incompatible type for lookup 'gender': (got "User", expected "str | int") [misc] files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class User(models.Model): age = models.IntegerField() gender = models.IntegerField() - case: valid_filter_with_lookup main: | from myapp.models import User User.objects.filter(username__contains='hello') User.objects.filter(age__gt=1) installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class User(models.Model): username = models.CharField(max_length=100) age = models.IntegerField() - case: invalid_filter_with_lookup main: | from myapp.models import User User.objects.filter(username__contains=1) # E: Incompatible type for lookup 'username__contains': (got "int", expected "str") [misc] User.objects.filter(username__icontains=1) # E: Incompatible type for lookup 'username__icontains': (got "int", expected "str") [misc] User.objects.filter(username__isnull=1) # E: Incompatible type for lookup 'username__isnull': (got "int", expected "bool") [misc] User.objects.filter(created_at=User()) # E: Incompatible type for lookup 'created_at': (got "User", expected "str | datetime") [misc] installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class User(models.Model): username = models.CharField(max_length=100) age = models.IntegerField() created_at = models.DateTimeField() - case: strings_are_allowed_for_exact_for_dates main: | from myapp.models import User User.objects.filter(created_at='2018') User.objects.filter(created_at__exact='2018') installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class User(models.Model): created_at = models.DateTimeField() - case: related_model_foreign_key_lookups main: | from myapp.models import Blog, Publisher blog = Blog() publisher = Publisher() Blog.objects.filter(publisher=publisher) Blog.objects.filter(publisher_id=1) Blog.objects.filter(publisher__id=1) Blog.objects.filter(publisher=blog) # E: Incompatible type for lookup 'publisher': (got "Blog", expected "Publisher | int | None") [misc] Blog.objects.filter(publisher_id=blog) # E: Incompatible type for lookup 'publisher_id': (got "Blog", expected "str | int") [misc] installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class Publisher(models.Model): pass class Blog(models.Model): publisher = models.ForeignKey(Publisher, on_delete=models.CASCADE, related_name='blogs') - case: related_model_reverse_foreign_key_lookup main: | from myapp.models import Blog, Publisher blog = Blog() publisher = Publisher() Publisher.objects.filter(blogs=Blog()) Publisher.objects.filter(blogs__id=1) Publisher.objects.filter(blogs=publisher) # E: Incompatible type for lookup 'blogs': (got "Publisher", expected "Blog | int | None") [misc] Publisher.objects.filter(blogs__id=publisher) # E: Incompatible type for lookup 'blogs__id': (got "Publisher", expected "str | int") [misc] installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class Publisher(models.Model): pass class Blog(models.Model): publisher = models.ForeignKey(Publisher, on_delete=models.CASCADE, related_name='blogs') - case: many_to_many_lookups main: | from myapp.models import Book, Author book = Book() author = Author() Book.objects.filter(authors=author) Book.objects.filter(authors=book) # E: Incompatible type for lookup 'authors': (got "Book", expected "Author | int | None") [misc] Book.objects.filter(authors='hello') # E: Incompatible type for lookup 'authors': (got "str", expected "Author | int | None") [misc] Author.objects.filter(books=book) Author.objects.filter(books=author) # E: Incompatible type for lookup 'books': (got "Author", expected "Book | int | None") [misc] Author.objects.filter(books='hello') # E: Incompatible type for lookup 'books': (got "str", expected "Book | int | None") [misc] installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class Book(models.Model): pass class Author(models.Model): books = models.ManyToManyField(Book, related_name='authors') - case: one_to_one_lookups main: | from myapp.models import User, Profile user = User() profile = Profile() User.objects.filter(profile=profile) User.objects.filter(profile=user) # E: Incompatible type for lookup 'profile': (got "User", expected "Profile | int | None") [misc] User.objects.filter(profile='hello') # E: Incompatible type for lookup 'profile': (got "str", expected "Profile | int | None") [misc] Profile.objects.filter(user=user) Profile.objects.filter(user=profile) # E: Incompatible type for lookup 'user': (got "Profile", expected "User | int | None") [misc] Profile.objects.filter(user='hello') # E: Incompatible type for lookup 'user': (got "str", expected "User | int | None") [misc] installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class User(models.Model): pass class Profile(models.Model): user = models.OneToOneField(User, on_delete=models.CASCADE, related_name='profile') # TODO - case: f_expression_simple_case main: | from myapp.models import User from django.db import models User.objects.filter(username=models.F('username2')) User.objects.filter(username=models.F('age')) installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class User(models.Model): username = models.TextField() username2 = models.TextField() age = models.IntegerField() # TODO - case: f_expression_with_expression_math_is_not_supported main: | from myapp.models import User from django.db import models User.objects.filter(username=models.F('username2') + 'hello') installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class User(models.Model): username = models.TextField() username2 = models.TextField() age = models.IntegerField() - case: alias_and_annotate_can_be_used_with_dynamic_new_fields main: | from django.db import models from myapp.models import Blog Blog.objects.alias(alias_entries=models.Count("entry")).annotate( annotate_entries=models.Count("entry"), ).filter(alias_entries__gt=5, annotate_entries__gt=5) Blog.objects.alias(alias_entries=models.Count("entry")).filter(alias_entries=5) Blog.objects.alias(alias_entries=models.Count("entry")).filter(alias_entries__gt=5) Blog.objects.alias( # E: Cannot resolve keyword 'alias_e' into field. Choices are: entry, id, alias_entries [misc] alias_entries=models.Count("entry") ).filter( # Wrong name: alias_e=5 ) installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class Blog(models.Model): pass class Entry(models.Model): blog = models.ForeignKey(Blog, on_delete=models.CASCADE) # Regression test for #1172 - case: chained_filter_lookups main: | from myapp.models import Cheese Cheese.objects.filter(field=True).filter(field2=True) qs = Cheese.objects.all() qs.filter(field=True) out: | main:3: error: Cannot resolve keyword 'field' into field. Choices are: a, id [misc] main:3: error: Cannot resolve keyword 'field2' into field. Choices are: a, id [misc] main:5: error: Cannot resolve keyword 'field' into field. Choices are: a, id [misc] installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class Cheese(models.Model): a = models.BooleanField() - case: lookups_from_custom_queryset main: | from myapp.models import MyModel qs = MyModel.objects.all() qs.filter(unknown_field=True) # E: Cannot resolve keyword 'unknown_field' into field. Choices are: age, id [misc] qs.filter(age=MyModel()) # E: Incompatible type for lookup 'age': (got "MyModel", expected "str | int") [misc] installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class MyQuerySet(models.QuerySet["MyModel"]): ... class MyModel(models.Model): age = models.IntegerField() objects = MyQuerySet.as_manager() - case: async_filtering_with_aget main: | from myapp.models import User async def test_async_get() -> None: # Valid aget calls user = await User.objects.aget(username='maksim') user2 = await User.objects.aget(age=25) user3 = await User.objects.aget(username__contains='hello') user4 = await User.objects.aget(age__gt=1) # Invalid field await User.objects.aget(unknown_field=True) # E: Cannot resolve keyword 'unknown_field' into field. Choices are: age, id, username [misc] # Invalid type await User.objects.aget(age=User()) # E: Incompatible type for lookup 'age': (got "User", expected "str | int") [misc] # Invalid lookup type await User.objects.aget(username__contains=1) # E: Incompatible type for lookup 'username__contains': (got "int", expected "str") [misc] installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class User(models.Model): username = models.CharField(max_length=100) age = models.IntegerField() django-stubs-5.2.9/tests/typecheck/managers/querysets/test_from_queryset.yml000066400000000000000000001354371513401051600276100ustar00rootroot00000000000000- case: from_queryset_self_return_management main: | from typing_extensions import reveal_type from myapp.models import MyModel, MyModelWithoutSelf reveal_type(MyModel.objects.example_simple()) # N: Revealed type is "myapp.models.MyQuerySet[myapp.models.MyModel]" reveal_type(MyModel.objects.example_list()) # N: Revealed type is "builtins.list[myapp.models.MyQuerySet[myapp.models.MyModel]]" reveal_type(MyModel.objects.example_simple().just_int()) # N: Revealed type is "builtins.int" reveal_type(MyModel.objects.example_dict()) # N: Revealed type is "builtins.dict[builtins.str, myapp.models.MyQuerySet[myapp.models.MyModel]]" reveal_type(MyModel.objects.test_custom_manager()) # N: Revealed type is "myapp.models.CustomManagerFromMyQuerySet[myapp.models.MyModel]" reveal_type(MyModelWithoutSelf.objects.method()) # N: Revealed type is "myapp.models.QuerySetWithoutSelf" installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models from django.db.models.manager import Manager from typing import TypeVar from typing_extensions import Self M = TypeVar("M", covariant=True, bound=models.Model) class CustomManager(Manager[M]): def test_custom_manager(self) -> Self: ... class BaseQuerySet(models.QuerySet[M]): def example_dict(self) -> dict[str, Self]: ... class MyQuerySet(BaseQuerySet[M]): def example_simple(self) -> Self: ... def example_list(self) -> list[Self]: ... def just_int(self) -> int: ... NewManager = CustomManager.from_queryset(MyQuerySet) class MyModel(models.Model): objects = NewManager() class QuerySetWithoutSelf(models.QuerySet["MyModelWithoutSelf"]): def method(self) -> "QuerySetWithoutSelf": return self ManagerWithoutSelf = Manager.from_queryset(QuerySetWithoutSelf) class MyModelWithoutSelf(models.Model): objects = ManagerWithoutSelf() - case: from_queryset_model_inheritance main: | from typing_extensions import reveal_type from myapp.models import Base, Sub reveal_type(Base.objects) # N: Revealed type is "myapp.models.MyManager[myapp.models.Base]" reveal_type(Sub.objects) # N: Revealed type is "myapp.models.MyManager[myapp.models.Sub]" installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from typing import ClassVar from typing_extensions import Self from django.db.models import Model from django.db.models.manager import Manager from django.db.models.query import QuerySet MyManager = Manager.from_queryset(QuerySet, "MyManager") class Base(Model): objects: ClassVar[MyManager[Self]] = MyManager() class Sub(Base): pass - case: from_queryset_with_base_manager main: | from typing_extensions import reveal_type from myapp.models import MyModel reveal_type(MyModel().objects) # N: Revealed type is "myapp.models.ManagerFromModelQuerySet[myapp.models.MyModel]" reveal_type(MyModel().objects.get()) # N: Revealed type is "myapp.models.MyModel" reveal_type(MyModel().objects.queryset_method()) # N: Revealed type is "builtins.str" reveal_type(MyModel.objects.filter(id=1).queryset_method()) # N: Revealed type is "builtins.str" reveal_type(MyModel.objects.filter(id=1)) # N: Revealed type is "myapp.models.ModelQuerySet[myapp.models.MyModel]" installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from typing import TypeVar from django.db import models from django.db.models.manager import Manager M = TypeVar("M", bound=models.Model, covariant=True) class ModelQuerySet(models.QuerySet[M]): def queryset_method(self) -> str: return 'hello' NewManager = Manager.from_queryset(ModelQuerySet) class MyModel(models.Model): objects = NewManager() - case: from_queryset_queryset_imported_from_other_module main: | from typing_extensions import reveal_type from myapp.models import MyModel reveal_type(MyModel.objects) # N: Revealed type is "myapp.models.ManagerFromModelQuerySet[myapp.models.MyModel]" reveal_type(MyModel.objects) # N: Revealed type is "myapp.models.ManagerFromModelQuerySet[myapp.models.MyModel]" reveal_type(MyModel.objects.get()) # N: Revealed type is "myapp.models.MyModel" reveal_type(MyModel.objects.queryset_method()) # N: Revealed type is "myapp.querysets.ModelQuerySet" reveal_type(MyModel.objects.queryset_method_2()) # N: Revealed type is "typing.Iterable[myapp.querysets.Custom]" reveal_type(MyModel.objects.queryset_method_3()) # N: Revealed type is "builtins.str" reveal_type(MyModel.objects.queryset_method_4([])) # N: Revealed type is "None" reveal_type(MyModel.objects.filter(id=1).queryset_method()) # N: Revealed type is "myapp.querysets.ModelQuerySet" reveal_type(MyModel.objects.filter(id=1)) # N: Revealed type is "myapp.querysets.ModelQuerySet" installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/querysets.py content: | from collections.abc import Iterable, Sequence from typing import TYPE_CHECKING from django.db import models if TYPE_CHECKING: from .models import MyModel class Custom: ... class ModelQuerySet(models.QuerySet["MyModel"]): def queryset_method(self) -> "ModelQuerySet": return self.filter() def queryset_method_2(self) -> Iterable[Custom]: return [] def queryset_method_3(self) -> str: return 'hello' def queryset_method_4(self, arg: Sequence) -> None: return None - path: myapp/models.py content: | from django.db import models from django.db.models.manager import Manager from .querysets import ModelQuerySet NewManager = Manager.from_queryset(ModelQuerySet) class MyModel(models.Model): objects = NewManager() - case: from_queryset_custom_manager_subclass main: | from typing_extensions import reveal_type from myapp.models import NewManager reveal_type(NewManager().example()) # N: Revealed type is "myapp.models.MyModel" installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/querysets.py content: | from typing import TypeVar, TYPE_CHECKING from django.db import models from django.db.models.manager import Manager if TYPE_CHECKING: from .models import MyModel _CTE = TypeVar("_CTE", bound=models.Model) class _MyModelQuerySet(models.QuerySet[_CTE]): def example(self) -> _CTE: ... class MyModelQuerySet(_MyModelQuerySet["MyModel"]): ... - path: myapp/models.py content: | from django.db import models from django.db.models.manager import Manager from .querysets import MyModelQuerySet class TypedManager(Manager["MyModel"]): ... NewManager = TypedManager.from_queryset(MyModelQuerySet) class MyModel(models.Model): objects = NewManager() - case: handles_subclasses_of_queryset main: | from typing_extensions import reveal_type from myapp.models import MyModel reveal_type(MyModel.objects.example()) # N: Revealed type is "myapp.models.MyModel" installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/querysets.py content: | from typing import TypeVar, TYPE_CHECKING from django.db import models from django.db.models.manager import Manager if TYPE_CHECKING: from .models import MyModel _CTE = TypeVar("_CTE", bound=models.Model) class _MyModelQuerySet(models.QuerySet[_CTE]): def example(self) -> _CTE: ... class MyModelQuerySet(_MyModelQuerySet["MyModel"]): ... - path: myapp/models.py content: | from django.db import models from django.db.models.manager import Manager from .querysets import MyModelQuerySet NewManager = Manager.from_queryset(MyModelQuerySet) class MyModel(models.Model): objects = NewManager() - case: from_queryset_generated_manager_imported_from_other_module main: | from typing_extensions import reveal_type from myapp.models import MyModel reveal_type(MyModel.objects) # N: Revealed type is "myapp.querysets.ManagerFromModelQuerySet[myapp.models.MyModel]" reveal_type(MyModel.objects.get()) # N: Revealed type is "myapp.models.MyModel" reveal_type(MyModel.objects.queryset_method()) # N: Revealed type is "myapp.querysets.ModelQuerySet" reveal_type(MyModel.objects.queryset_method_2()) # N: Revealed type is "typing.Iterable[myapp.querysets.Custom]" reveal_type(MyModel.objects.queryset_method_3()) # N: Revealed type is "builtins.str" reveal_type(MyModel.objects.queryset_method_4([])) # N: Revealed type is "None" reveal_type(MyModel.objects.filter(id=1).queryset_method()) # N: Revealed type is "myapp.querysets.ModelQuerySet" reveal_type(MyModel.objects.filter(id=1)) # N: Revealed type is "myapp.querysets.ModelQuerySet" installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/querysets.py content: | from collections.abc import Iterable, Sequence from typing import TYPE_CHECKING from django.db import models from django.db.models.manager import Manager if TYPE_CHECKING: from .models import MyModel class Custom: ... class ModelQuerySet(models.QuerySet["MyModel"]): def queryset_method(self) -> "ModelQuerySet": return self.filter() def queryset_method_2(self) -> Iterable[Custom]: return [] def queryset_method_3(self) -> str: return 'hello' def queryset_method_4(self, arg: Sequence) -> None: return None NewManager = Manager.from_queryset(ModelQuerySet) - path: myapp/models.py content: | from django.db import models from .querysets import NewManager class MyModel(models.Model): objects = NewManager() - case: from_queryset_annotates_manager_variable_as_type main: | from typing_extensions import reveal_type from myapp.models import NewManager reveal_type(NewManager) # N: Revealed type is "def [_T <: django.db.models.base.Model] () -> myapp.models.ManagerFromModelQuerySet[_T`1]" installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class ModelQuerySet(models.QuerySet): ... NewManager = models.Manager.from_queryset(ModelQuerySet) - case: from_queryset_with_manager main: | from typing_extensions import reveal_type from myapp.models import MyModel reveal_type(MyModel().objects) # N: Revealed type is "myapp.models.ManagerFromModelQuerySet[myapp.models.MyModel]" reveal_type(MyModel().objects.get()) # N: Revealed type is "myapp.models.MyModel" reveal_type(MyModel().objects.queryset_method()) # N: Revealed type is "builtins.str" installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class ModelQuerySet(models.QuerySet): def queryset_method(self) -> str: return 'hello' NewManager = models.Manager.from_queryset(ModelQuerySet) class MyModel(models.Model): objects = NewManager() - case: from_queryset_with_manager_of_union main: | from typing_extensions import reveal_type from myapp.models import MyModel1, MyModel2 kls: type[MyModel1 | MyModel2] = MyModel1 reveal_type(kls.objects) # N: Revealed type is "myapp.models.ManagerFromModelQuerySet1[myapp.models.MyModel1] | myapp.models.ManagerFromModelQuerySet2[myapp.models.MyModel2]" reveal_type(kls.objects.all()) # N: Revealed type is "myapp.models.ModelQuerySet1 | myapp.models.ModelQuerySet2" reveal_type(kls.objects.get()) # N: Revealed type is "myapp.models.MyModel1 | myapp.models.MyModel2" reveal_type(kls.objects.queryset_method()) # N: Revealed type is "builtins.int | builtins.str" installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class ModelQuerySet1(models.QuerySet["MyModel1"]): def queryset_method(self) -> int: return 1 class ModelQuerySet2(models.QuerySet["MyModel2"]): def queryset_method(self) -> str: return 'hello' NewManager1 = models.Manager.from_queryset(ModelQuerySet1) class MyModel1(models.Model): objects = NewManager1() NewManager2 = models.Manager.from_queryset(ModelQuerySet2) class MyModel2(models.Model): objects = NewManager2() - case: from_queryset_returns_intersection_of_manager_and_queryset main: | from typing_extensions import reveal_type from myapp.models import MyModel, NewManager reveal_type(NewManager()) # N: Revealed type is "myapp.models.ModelBaseManagerFromModelQuerySet[Never]" reveal_type(MyModel.objects) # N: Revealed type is "myapp.models.ModelBaseManagerFromModelQuerySet[myapp.models.MyModel]" reveal_type(MyModel.objects.get()) # N: Revealed type is "myapp.models.MyModel" reveal_type(MyModel.objects.manager_only_method()) # N: Revealed type is "builtins.int" reveal_type(MyModel.objects.manager_and_queryset_method()) # N: Revealed type is "builtins.str" installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class ModelBaseManager(models.Manager): def manager_only_method(self) -> int: return 1 class ModelQuerySet(models.QuerySet): def manager_and_queryset_method(self) -> str: return 'hello' NewManager = ModelBaseManager.from_queryset(ModelQuerySet) class MyModel(models.Model): objects = NewManager() - case: from_queryset_with_class_name_provided main: | from typing_extensions import reveal_type from myapp.models import MyModel, NewManager, OtherModel, OtherManager reveal_type(NewManager()) # N: Revealed type is "myapp.models.NewManager[Never]" reveal_type(MyModel.objects) # N: Revealed type is "myapp.models.NewManager[myapp.models.MyModel]" reveal_type(MyModel.objects.get()) # N: Revealed type is "myapp.models.MyModel" reveal_type(MyModel.objects.manager_only_method()) # N: Revealed type is "builtins.int" reveal_type(MyModel.objects.manager_and_queryset_method()) # N: Revealed type is "builtins.str" reveal_type(OtherManager()) # N: Revealed type is "myapp.models.X[Never]" reveal_type(OtherModel.objects) # N: Revealed type is "myapp.models.X[myapp.models.OtherModel]" reveal_type(OtherModel.objects.manager_only_method()) # N: Revealed type is "builtins.int" reveal_type(OtherModel.objects.manager_and_queryset_method()) # N: Revealed type is "builtins.str" installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class ModelBaseManager(models.Manager): def manager_only_method(self) -> int: return 1 class ModelQuerySet(models.QuerySet): def manager_and_queryset_method(self) -> str: return 'hello' NewManager = ModelBaseManager.from_queryset(ModelQuerySet, class_name='NewManager') class MyModel(models.Model): objects = NewManager() OtherManager = ModelBaseManager.from_queryset(ModelQuerySet, class_name='X') class OtherModel(models.Model): objects = OtherManager() - case: from_queryset_with_class_inheritance main: | from typing_extensions import reveal_type from myapp.models import MyModel reveal_type(MyModel().objects) # N: Revealed type is "myapp.models.ManagerFromModelQuerySet[myapp.models.MyModel]" reveal_type(MyModel().objects.get()) # N: Revealed type is "myapp.models.MyModel" reveal_type(MyModel().objects.queryset_method()) # N: Revealed type is "builtins.str" installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models from django.db.models.manager import Manager class BaseQuerySet(models.QuerySet): def queryset_method(self) -> str: return 'hello' class ModelQuerySet(BaseQuerySet): pass NewManager = Manager.from_queryset(ModelQuerySet) class MyModel(models.Model): objects = NewManager() - case: from_queryset_with_manager_in_another_directory_and_imports main: | from typing_extensions import reveal_type from myapp.models import MyModel reveal_type(MyModel().objects) # N: Revealed type is "myapp.managers.ManagerFromModelQuerySet[myapp.models.MyModel]" reveal_type(MyModel().objects.get()) # N: Revealed type is "myapp.models.MyModel" reveal_type(MyModel().objects.queryset_method) # N: Revealed type is "def (param: builtins.str | None =) -> builtins.str | None" reveal_type(MyModel().objects.queryset_method('str')) # N: Revealed type is "builtins.str | None" installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models from myapp.managers import NewManager class MyModel(models.Model): objects = NewManager() - path: myapp/managers.py content: | from django.db import models class ModelQuerySet(models.QuerySet): def queryset_method(self, param: str | None = None) -> str | None: return param NewManager = models.Manager.from_queryset(ModelQuerySet) - case: from_queryset_with_inherited_manager_and_typing_no_return disable_cache: true main: | from typing_extensions import reveal_type from myapp.models import MyModel reveal_type(MyModel().objects) # N: Revealed type is "myapp.managers.ManagerFromModelQuerySet[myapp.models.MyModel]" reveal_type(MyModel().objects.get()) # N: Revealed type is "myapp.models.MyModel" reveal_type(MyModel().objects.base_queryset_method) # N: Revealed type is "def (param: builtins.int | builtins.str) -> Never" reveal_type(MyModel().objects.base_queryset_method(2)) # N: Revealed type is "Never" installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models from myapp.managers import NewManager class MyModel(models.Model): objects = NewManager() - path: myapp/managers.py content: | from django.db import models from myapp.base_queryset import BaseQuerySet class ModelQuerySet(BaseQuerySet): pass NewManager = models.Manager.from_queryset(ModelQuerySet) - path: myapp/base_queryset.py content: | from typing import NoReturn from django.db import models class BaseQuerySet(models.QuerySet): def base_queryset_method(self, param: int | str) -> NoReturn: raise ValueError - case: from_queryset_with_decorated_queryset_methods main: | from typing_extensions import reveal_type from myapp.models import MyModel reveal_type(MyModel().objects) # N: Revealed type is "myapp.models.ManagerFromModelQuerySet[myapp.models.MyModel]" reveal_type(MyModel().objects.queryset_method()) # N: Revealed type is "builtins.str" reveal_type(MyModel.objects.queryset_method_2()) # N: Revealed type is "builtins.int" installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models, transaction class ModelQuerySet(models.QuerySet): @transaction.atomic def queryset_method(self) -> str: return 'hello' @transaction.atomic @transaction.atomic def queryset_method_2(self) -> int: return 2 NewManager = models.Manager.from_queryset(ModelQuerySet) class MyModel(models.Model): objects = NewManager() - case: from_queryset_model_gets_generated_manager_as_default_manager main: | from typing_extensions import reveal_type from myapp.models import MyModel reveal_type(MyModel.objects) # N: Revealed type is "myapp.models.ManagerFromModelQuerySet[myapp.models.MyModel]" reveal_type(MyModel.objects.queryset_method()) # N: Revealed type is "builtins.str" reveal_type(MyModel._default_manager) # N: Revealed type is "myapp.models.ManagerFromModelQuerySet[myapp.models.MyModel]" # Overloads reveal_type(MyModel.objects.overloaded_method(1)) # N: Revealed type is "builtins.int" reveal_type(MyModel.objects.overloaded_method('a')) # N: Revealed type is "builtins.str" installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from typing import overload from django.db import models class ModelQuerySet(models.QuerySet): def queryset_method(self) -> str: return 'hello' @overload def overloaded_method(self, arg: int) -> int: ... @overload def overloaded_method(self, arg: str) -> str: ... def overloaded_method(self, arg: int | str) -> int | str: return arg NewManager = models.Manager.from_queryset(ModelQuerySet) class MyModel(models.Model): objects = NewManager() - case: from_queryset_can_resolve_explicit_any_methods main: | from typing_extensions import reveal_type from myapp.models import MyModel reveal_type(MyModel.objects) # N: Revealed type is "myapp.models.MyManagerFromModelQuerySet[myapp.models.MyModel]" reveal_type(MyModel.objects.queryset_method(1)) # N: Revealed type is "Any" reveal_type(MyModel.objects.queryset_method) # N: Revealed type is "def (qarg: Any) -> Any" reveal_type(MyModel.objects.manager_method(2)) # N: Revealed type is "Any" reveal_type(MyModel.objects.manager_method) # N: Revealed type is "def (marg: Any) -> Any" installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models from typing import Any class ModelQuerySet(models.QuerySet): def queryset_method(self, qarg: Any) -> Any: return 'hello' class MyManager(models.Manager): def manager_method(self, marg: Any) -> Any: return 'hello' NewManager = MyManager.from_queryset(ModelQuerySet) class MyModel(models.Model): objects = NewManager() - case: test_queryset_in_model_class_body main: | from typing_extensions import reveal_type from myapp.models import MyModel reveal_type(MyModel.objects) # N: Revealed type is "myapp.models.MyManagerFromMyQuerySet" reveal_type(MyModel._default_manager) # N: Revealed type is "myapp.models.MyManagerFromMyQuerySet" reveal_type(MyModel.objects.all) # N: Revealed type is "def () -> myapp.models.MyQuerySet" reveal_type(MyModel.objects.custom) # N: Revealed type is "def () -> myapp.models.MyQuerySet" reveal_type(MyModel.objects.all().filter) # N: Revealed type is "def (*args: Any, **kwargs: Any) -> myapp.models.MyQuerySet" reveal_type(MyModel.objects.custom().filter) # N: Revealed type is "def (*args: Any, **kwargs: Any) -> myapp.models.MyQuerySet" reveal_type(MyModel.objects2) # N: Revealed type is "myapp.models.MyManagerFromMyQuerySet" reveal_type(MyModel._default_manager) # N: Revealed type is "myapp.models.MyManagerFromMyQuerySet" installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class MyManager(models.Manager["MyModel"]): pass class MyQuerySet(models.QuerySet["MyModel"]): def custom(self) -> "MyQuerySet": pass class MyModel(models.Model): objects = MyManager.from_queryset(MyQuerySet)() objects2 = MyManager.from_queryset(MyQuerySet)() - case: test_queryset_in_model_class_body_subclass main: | from typing_extensions import reveal_type from myapp.models import MyModel reveal_type(MyModel.objects) # N: Revealed type is "myapp.models.BaseManagerFromBaseQuerySet" reveal_type(MyModel.objects.get()) # N: Revealed type is "myapp.models.BaseModel" reveal_type(MyModel.objects.filter()) # N: Revealed type is "myapp.models.BaseQuerySet" reveal_type(MyModel.objects.filter().get()) # N: Revealed type is "myapp.models.BaseModel" installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class BaseManager(models.Manager["BaseModel"]): pass class BaseQuerySet(models.QuerySet["BaseModel"]): def custom(self) -> "BaseQuerySet": pass class BaseModel(models.Model): objects = BaseManager.from_queryset(BaseQuerySet)() class MyModel(BaseModel): pass - case: from_queryset_includes_methods_returning_queryset main: | from typing_extensions import reveal_type from myapp.models import MyModel reveal_type(MyModel.objects.alias) # N: Revealed type is "def (*args: Any, **kwargs: Any) -> myapp.models.MyQuerySet" reveal_type(MyModel.objects.all) # N: Revealed type is "def () -> myapp.models.MyQuerySet" reveal_type(MyModel.objects.annotate) # N: Revealed type is "def (*args: Any, **kwargs: Any) -> myapp.models.MyQuerySet" reveal_type(MyModel.objects.complex_filter) # N: Revealed type is "def (filter_obj: Any) -> myapp.models.MyQuerySet" reveal_type(MyModel.objects.defer) # N: Revealed type is "Overload(def (None) -> myapp.models.MyQuerySet, def (*fields: builtins.str) -> myapp.models.MyQuerySet)" reveal_type(MyModel.objects.difference) # N: Revealed type is "def (*other_qs: django.db.models.query.QuerySet[django.db.models.base.Model, Any]) -> myapp.models.MyQuerySet" reveal_type(MyModel.objects.distinct) # N: Revealed type is "def (*field_names: builtins.str) -> myapp.models.MyQuerySet" reveal_type(MyModel.objects.exclude) # N: Revealed type is "def (*args: Any, **kwargs: Any) -> myapp.models.MyQuerySet" reveal_type(MyModel.objects.extra) # N: Revealed type is "def (select: builtins.dict[builtins.str, Any] | None =, where: typing.Sequence[builtins.str] | None =, params: typing.Sequence[Any] | None =, tables: typing.Sequence[builtins.str] | None =, order_by: typing.Sequence[builtins.str | django.db.models.expressions.Combinable] | None =, select_params: typing.Sequence[Any] | None =) -> myapp.models.MyQuerySet" reveal_type(MyModel.objects.filter) # N: Revealed type is "def (*args: Any, **kwargs: Any) -> myapp.models.MyQuerySet" reveal_type(MyModel.objects.intersection) # N: Revealed type is "def (*other_qs: django.db.models.query.QuerySet[django.db.models.base.Model, Any]) -> myapp.models.MyQuerySet" reveal_type(MyModel.objects.none) # N: Revealed type is "def () -> myapp.models.MyQuerySet" reveal_type(MyModel.objects.only) # N: Revealed type is "def (*fields: builtins.str) -> myapp.models.MyQuerySet" reveal_type(MyModel.objects.order_by) # N: Revealed type is "def (*field_names: builtins.str | django.db.models.expressions.Combinable) -> myapp.models.MyQuerySet" reveal_type(MyModel.objects.prefetch_related) # N: Revealed type is "Overload(def (None) -> myapp.models.MyQuerySet, def (*lookups: builtins.str | django.db.models.query.Prefetch[_LookupT`-1, _PrefetchedQuerySetT`-2 = django.db.models.query.QuerySet[django.db.models.base.Model, django.db.models.base.Model], _ToAttrT`-3 = builtins.str]) -> myapp.models.MyQuerySet)" reveal_type(MyModel.objects.reverse) # N: Revealed type is "def () -> myapp.models.MyQuerySet" reveal_type(MyModel.objects.select_for_update) # N: Revealed type is "def (nowait: builtins.bool =, skip_locked: builtins.bool =, of: typing.Sequence[builtins.str] =, no_key: builtins.bool =) -> myapp.models.MyQuerySet" reveal_type(MyModel.objects.select_related) # N: Revealed type is "Overload(def (None) -> myapp.models.MyQuerySet, def (*fields: builtins.str) -> myapp.models.MyQuerySet)" reveal_type(MyModel.objects.union) # N: Revealed type is "def (*other_qs: django.db.models.query.QuerySet[django.db.models.base.Model, Any], all: builtins.bool =) -> myapp.models.MyQuerySet" reveal_type(MyModel.objects.using) # N: Revealed type is "def (alias: builtins.str | None) -> myapp.models.MyQuerySet" installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models from django.db.models.manager import Manager class MyQuerySet(models.QuerySet["MyModel"]): ... MyManager = Manager.from_queryset(MyQuerySet) class MyModel(models.Model): objects = MyManager() # This tests a regression where mypy would generate phantom warnings about # undefined types due to unresolved types when copying methods from QuerySet to # a manager dynamically created using Manager.from_queryset(). # # For details see: https://github.com/typeddjango/django-stubs/issues/1022 - case: from_queryset_custom_auth_user_model # Cache needs to be disabled to consistently reproduce the bug disable_cache: true main: | from users.models import User custom_settings: | AUTH_USER_MODEL = "users.User" INSTALLED_APPS = ("django.contrib.auth", "django.contrib.contenttypes", "users") files: - path: users/__init__.py - path: users/models.py content: | from django.contrib.auth.models import AbstractBaseUser from django.db import models from .querysets import UserQuerySet UserManager = models.Manager.from_queryset(UserQuerySet) class User(AbstractBaseUser): email = models.EmailField(unique=True) objects = UserManager() USERNAME_FIELD = "email" - path: users/querysets.py content: | from django.db import models from typing import TYPE_CHECKING if TYPE_CHECKING: from .models import User class UserQuerySet(models.QuerySet["User"]): pass - case: reuses_type_when_called_twice_identically main: | from typing_extensions import reveal_type from myapp.models import MyModel, FirstManager, SecondManager reveal_type(FirstManager) # N: Revealed type is "def [_T <: django.db.models.base.Model] () -> myapp.models.ManagerFromModelQuerySet[_T`1]" reveal_type(SecondManager) # N: Revealed type is "def [_T <: django.db.models.base.Model] () -> myapp.models.ManagerFromModelQuerySet[_T`1]" reveal_type(MyModel.first) # N: Revealed type is "myapp.models.ManagerFromModelQuerySet[myapp.models.MyModel]" reveal_type(MyModel.second) # N: Revealed type is "myapp.models.ManagerFromModelQuerySet[myapp.models.MyModel]" installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models from django.db.models.manager import Manager class ModelQuerySet(models.QuerySet["MyModel"]): ... FirstManager = Manager.from_queryset(ModelQuerySet) SecondManager = Manager.from_queryset(ModelQuerySet) class MyModel(models.Model): first = FirstManager() second = SecondManager() - case: handles_name_collision_with_generated_type main: | from typing_extensions import reveal_type from myapp.models import MyModel, ManagerFromModelQuerySet reveal_type(ManagerFromModelQuerySet()) # N: Revealed type is "myapp.models.ManagerFromModelQuerySet[Never]" reveal_type(MyModel.objects) # N: Revealed type is "myapp.models.ManagerFromModelQuerySet[myapp.models.MyModel]" installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models from django.db.models.manager import Manager class ModelQuerySet(models.QuerySet["MyModel"]): ... ManagerFromModelQuerySet = Manager.from_queryset(ModelQuerySet) class MyModel(models.Model): objects = ManagerFromModelQuerySet() - case: resolves_name_collision_with_other_module_level_object main: | from typing_extensions import reveal_type from myapp.models import MyModel, Generated, ManagerFromModelQuerySet reveal_type(ManagerFromModelQuerySet) # N: Revealed type is "builtins.int" reveal_type(Generated()) # N: Revealed type is "myapp.models.ManagerFromModelQuerySet2[Never]" reveal_type(MyModel.objects) # N: Revealed type is "myapp.models.ManagerFromModelQuerySet2[myapp.models.MyModel]" installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models from django.db.models.manager import Manager class ModelQuerySet(models.QuerySet["MyModel"]): ... ManagerFromModelQuerySet = 1 Generated = Manager.from_queryset(ModelQuerySet) class MyModel(models.Model): objects = Generated() - case: accepts_explicit_none_as_class_name main: | from typing_extensions import reveal_type from myapp.models import PositionalNone, NoneAsKwarg reveal_type(PositionalNone) # N: Revealed type is "def [_T <: django.db.models.base.Model] () -> myapp.models.ManagerFromModelQuerySet[_T`1]" reveal_type(NoneAsKwarg) # N: Revealed type is "def [_T <: django.db.models.base.Model] () -> myapp.models.ManagerFromModelQuerySet[_T`1]" installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models from django.db.models.manager import Manager class ModelQuerySet(models.QuerySet): ... PositionalNone = Manager.from_queryset(ModelQuerySet, None) NoneAsKwarg = Manager.from_queryset(ModelQuerySet, class_name=None) - case: uses_fallback_class_name_when_argument_is_not_string_expression main: | from typing_extensions import reveal_type from myapp.models import StrCallable reveal_type(StrCallable) # N: Revealed type is "def [_T <: django.db.models.base.Model] () -> myapp.models.ManagerFromModelQuerySet[_T`1]" installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models from django.db.models.manager import Manager class ModelQuerySet(models.QuerySet): ... StrCallable = Manager.from_queryset(ModelQuerySet, class_name=str(1)) - case: queryset_inheritable_does_not_clobber_super_init main: | from typing_extensions import reveal_type from myapp.models import BaseManager reveal_type(BaseManager().ttl) # N: Revealed type is "builtins.int" installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from typing import Any, TYPE_CHECKING from django.db import models from django.db.models.manager import Manager from django.db.models.query import QuerySet if TYPE_CHECKING: from django.db.models.manager import _T from django.db.models.query import _Model, _Row class MyQuerySet(QuerySet["_Model", "_Row"]): def __init__(self, *a: Any, **k: Any) -> None: super().__init__(*a, **k) _base = Manager.from_queryset(MyQuerySet) class BaseManager(_base["_T"]): def __init__(self, *a: Any, ttl: int = 0, **k: Any) -> None: self.ttl = ttl super().__init__(*a, **k) - case: test_from_queryset_with_deferral main: | from typing_extensions import reveal_type from myapp.models import Concrete reveal_type(Concrete.objects.qs_meth()) # N: Revealed type is "builtins.int" reveal_type(Concrete.objects.manager_meth()) # N: Revealed type is "builtins.str" mypy_config: | [mypy.plugins.django-stubs] django_settings_module = myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from typing import TypeVar, ClassVar from typing_extensions import Self from django.db import models from django.db.models.manager import Manager M = TypeVar("M", bound=models.Model, covariant=True) # bogus forward-`metaclass=` to trigger second semanal pass similar to #2224 class CustomQuerySet(models.QuerySet[M], metaclass=MCS): def qs_meth(self) -> int: return 1 _base = Manager.from_queryset(CustomQuerySet) class CustomBase(_base[M]): def manager_meth(self) -> str: return 'hi' class Concrete(models.Model): objects: ClassVar[CustomBase[Self]] = CustomBase() class MCS(type): pass - case: test_from_queryset_with_concrete_subclass main: | from typing_extensions import reveal_type from myapp.models import Concrete reveal_type(Concrete.objects) # N: Revealed type is "myapp.models.ConcreteManager" reveal_type(Concrete.objects.get()) # N: Revealed type is "myapp.models.Concrete" reveal_type(Concrete.objects.all()) # N: Revealed type is "myapp.models.CustomQuerySet[myapp.models.Concrete, myapp.models.Concrete]" reveal_type(Concrete.objects.all().get()) # N: Revealed type is "myapp.models.Concrete" installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from typing import ClassVar from typing_extensions import Self, TypeVar from django.db.models import Model, QuerySet from django.db.models.manager import Manager M = TypeVar("M", bound=Model, covariant=True) D = TypeVar("D", covariant=True, default=M) class CustomQuerySet(QuerySet[M, D]): pass _base = Manager.from_queryset(CustomQuerySet) class CustomBase(_base[M]): ... class BaseModel(Model): objects: ClassVar[CustomBase[Self]] = CustomBase() class ConcreteManager(CustomBase["Concrete"]): ... class Concrete(BaseModel): objects: ClassVar[ConcreteManager] = ConcreteManager() - case: test_queryset_arg_as_unsupported_expressions main: | from typing import Generic, TypeVar from typing_extensions import TypeAlias, reveal_type from django.db import models from django.db.models.manager import Manager class QS1(models.QuerySet[models.Model]): ... class QS2(models.QuerySet[models.Model]): ... Alias: TypeAlias = QS1 | QS2 reveal_type(Manager[models.Model].from_queryset(Alias)) T = TypeVar("T") class NonQSGeneric(Generic[T]): ... reveal_type(Manager[models.Model].from_queryset(NonQSGeneric[int])) out: | main:12: note: Revealed type is "type[django.db.models.manager.Manager[django.db.models.base.Model]]" main:12: error: Argument 1 to "from_queryset" of "BaseManager" has incompatible type "UnionType[QS1, QS2]"; expected "type[QuerySet[Model, Model]]" [arg-type] main:17: note: Revealed type is "type[django.db.models.manager.Manager[django.db.models.base.Model]]" main:17: error: Argument 1 to "from_queryset" of "BaseManager" has incompatible type "type[NonQSGeneric[int]]"; expected "type[QuerySet[Model, Model]]" [arg-type] - case: test_reverse_manager_with_foreign_key main: | from typing_extensions import reveal_type from myapp.models import B reveal_type(B().a_set.filter(field="something")) # N: Revealed type is "myapp.models.QS" installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class B(models.Model): ... class QS(models.QuerySet["A"]): ... Manager = models.Manager.from_queryset(QS) class A(models.Model): field = models.CharField() b = models.ForeignKey(B, on_delete=models.CASCADE) objects = Manager() # Regression test for #2373: Ensure from_queryset handles repeated deferrals # correctly. When create_manager_info_from_from_queryset_call returns None due # to forward references, PlaceholderNode should only be added once, not on # every iteration. - case: test_from_queryset_repeated_deferral_with_forward_metaclass main: | from typing_extensions import reveal_type from myapp.models import MyModel reveal_type(MyModel.objects.custom_method()) out: | main:3: error: Access to generic instance variables via class is ambiguous [misc] main:3: note: Revealed type is "builtins.str" mypy_config: | [mypy.plugins.django-stubs] django_settings_module = myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from typing import TypeVar from django.db import models from django.db.models.manager import Manager M = TypeVar("M", bound=models.Model, covariant=True) # Forward reference to metaclass triggers deferral, causing # create_manager_info_from_from_queryset_call to return None # on initial passes. The fix ensures PlaceholderNode is not # re-added on each iteration, preventing progress flag from # being set repeatedly. class CustomQuerySet(models.QuerySet[M], metaclass=ForwardMCS): def custom_method(self) -> str: return "test" CustomManager = Manager.from_queryset(CustomQuerySet) class MyModel(models.Model): objects = CustomManager() # Forward-referenced metaclass defined after use class ForwardMCS(type): pass django-stubs-5.2.9/tests/typecheck/managers/querysets/test_iteration.yml000066400000000000000000000017751513401051600266770ustar00rootroot00000000000000- case: sync_for main: | from typing_extensions import reveal_type from myapp.models import User for user in User.objects.all(): reveal_type(user) # N: Revealed type is "myapp.models.User" installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class User(models.Model): pass - case: async_for main: | from typing_extensions import reveal_type from myapp.models import User async def main() -> None: async for user in User.objects.all(): reveal_type(user) # N: Revealed type is "myapp.models.User" installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class User(models.Model): pass django-stubs-5.2.9/tests/typecheck/managers/querysets/test_prefetch_related.yml000066400000000000000000000774401513401051600302030ustar00rootroot00000000000000- case: prefetch_related_to_attr installed_apps: - myapp main: | from myapp.models import Article, Tag from django.db.models import Prefetch, F, QuerySet from django.db import models from typing_extensions import Literal, TypedDict, reveal_type from django_stubs_ext import WithAnnotations ### Noop (to_attr not provided) reveal_type(Article.objects.prefetch_related(Prefetch("tags")).all()) # N: Revealed type is "django.db.models.query.QuerySet[myapp.models.Article, myapp.models.Article]" reveal_type(Article.objects.prefetch_related(Prefetch("tags", Tag.objects.all())).all()) # N: Revealed type is "django.db.models.query.QuerySet[myapp.models.Article, myapp.models.Article]" reveal_type(Prefetch("tags")) # N: Revealed type is "django.db.models.query.Prefetch[Literal['tags'], django.db.models.query.QuerySet[django.db.models.base.Model, django.db.models.base.Model], builtins.str]" reveal_type(Prefetch("tags", Tag.objects.all())) # N: Revealed type is "django.db.models.query.Prefetch[Literal['tags'], django.db.models.query.QuerySet[myapp.models.Tag, myapp.models.Tag], builtins.str]" # Prefetch created in a function with no to_attr def get_prefetch_no_to_attr() -> Prefetch[Literal["tags"], QuerySet[Tag]]: return Prefetch("tags", Tag.objects.all()) reveal_type(Article.objects.prefetch_related(get_prefetch_no_to_attr()).all()) # N: Revealed type is "django.db.models.query.QuerySet[myapp.models.Article, myapp.models.Article]" # Prefetch created in a function with no to_attr and no queryset def get_prefetch_no_to_attr_no_qs() -> Prefetch[Literal["tags"]]: return Prefetch("tags") reveal_type(Article.objects.prefetch_related(get_prefetch_no_to_attr_no_qs()).all()) # N: Revealed type is "django.db.models.query.QuerySet[myapp.models.Article, myapp.models.Article]" # On the QuerySet article_qs = Article.objects.all().prefetch_related(Prefetch("tags", Tag.objects.all(), to_attr="every_tags")) reveal_type(article_qs) # N: Revealed type is "django.db.models.query.QuerySet[myapp.models.Article@AnnotatedWith[TypedDict({'every_tags': builtins.list[myapp.models.Tag]})], myapp.models.Article@AnnotatedWith[TypedDict({'every_tags': builtins.list[myapp.models.Tag]})]]" reveal_type(article_qs.get().every_tags) # N: Revealed type is "builtins.list[myapp.models.Tag]" reveal_type( Tag.objects.all().prefetch_related( # N: Revealed type is "builtins.list[myapp.models.Article]" Prefetch("tags", Article.objects.all(), to_attr="every_articles") ).get().every_articles ) # On the Manager reveal_type( Article.objects.prefetch_related( # N: Revealed type is "builtins.list[myapp.models.Tag]" Prefetch("tags", Tag.objects.all(), to_attr="every_tags") ).get().every_tags ) reveal_type( Tag.objects.prefetch_related( # N: Revealed type is "builtins.list[myapp.models.Article]" Prefetch("tags", Article.objects.all(), to_attr="every_articles") ).get().every_articles ) # Member expr reveal_type( Article.objects.prefetch_related( # N: Revealed type is "django.db.models.query.QuerySet[myapp.models.Article@AnnotatedWith[TypedDict({'every_tags': builtins.list[myapp.models.Tag]})], myapp.models.Article@AnnotatedWith[TypedDict({'every_tags': builtins.list[myapp.models.Tag]})]]" models.Prefetch("tags", Tag.objects.all(), to_attr="every_tags") ).all() ) # pos args only reveal_type( Article.objects.prefetch_related( # N: Revealed type is "django.db.models.query.QuerySet[myapp.models.Article@AnnotatedWith[TypedDict({'every_tags': builtins.list[myapp.models.Tag]})], myapp.models.Article@AnnotatedWith[TypedDict({'every_tags': builtins.list[myapp.models.Tag]})]]" models.Prefetch("tags", Tag.objects.all(), "every_tags") ).all() ) # Multiple Prefetch items: both `to_attr` annotations should be present multi_qs = Article.objects.all().prefetch_related( Prefetch("tags", Tag.objects.all(), to_attr="ts"), Prefetch("tags", Tag.objects.all(), to_attr="ts2"), ) reveal_type(multi_qs) # N: Revealed type is "django.db.models.query.QuerySet[myapp.models.Article@AnnotatedWith[TypedDict({'ts': builtins.list[myapp.models.Tag], 'ts2': builtins.list[myapp.models.Tag]})], myapp.models.Article@AnnotatedWith[TypedDict({'ts': builtins.list[myapp.models.Tag], 'ts2': builtins.list[myapp.models.Tag]})]]" reveal_type(multi_qs.get().ts) # N: Revealed type is "builtins.list[myapp.models.Tag]" reveal_type(multi_qs.get().ts2) # N: Revealed type is "builtins.list[myapp.models.Tag]" # Mixed inline `Prefetch` and plain lookup string in one call; string should be ignored mixed_plain = Article.objects.prefetch_related( "tags", Prefetch("tags", Article.objects.all(), to_attr="arts3"), ) reveal_type(mixed_plain) # N: Revealed type is "django.db.models.query.QuerySet[myapp.models.Article@AnnotatedWith[TypedDict({'arts3': builtins.list[myapp.models.Article]})], myapp.models.Article@AnnotatedWith[TypedDict({'arts3': builtins.list[myapp.models.Article]})]]" # Intermediary variable -- function scope def foo() -> None: tag_prefetch = Prefetch("tags", Tag.objects.all(), to_attr="every_tags") reveal_type(Article.objects.prefetch_related(tag_prefetch).all()) # N: Revealed type is "django.db.models.query.QuerySet[myapp.models.Article@AnnotatedWith[TypedDict({'every_tags': builtins.list[myapp.models.Tag]})], myapp.models.Article@AnnotatedWith[TypedDict({'every_tags': builtins.list[myapp.models.Tag]})]]" # Intermediary variable -- module scope tag_prefetch = Prefetch("tags", Tag.objects.all(), to_attr="every_tags") reveal_type(Article.objects.prefetch_related(tag_prefetch).all()) # N: Revealed type is "django.db.models.query.QuerySet[myapp.models.Article@AnnotatedWith[TypedDict({'every_tags': builtins.list[myapp.models.Tag]})], myapp.models.Article@AnnotatedWith[TypedDict({'every_tags': builtins.list[myapp.models.Tag]})]]" # Prefetch created in a function def get_invalid_prefetch() -> Prefetch[Literal["tags"], QuerySet[Tag], Literal["every_tags"]]: return Prefetch("tags", Tag.objects.all(), to_attr="foo") # E: Incompatible return value type (got "Prefetch[Literal['tags'], QuerySet[Tag, Tag], Literal['foo']]", expected "Prefetch[Literal['tags'], QuerySet[Tag, Tag], Literal['every_tags']]") [return-value] # E: Argument "to_attr" to "Prefetch" has incompatible type "Literal['foo']"; expected "Literal['every_tags'] | None" [arg-type] def get_prefetch() -> Prefetch[Literal["tags"], QuerySet[Tag], Literal["every_tags"]]: return Prefetch("tags", Tag.objects.all(), to_attr="every_tags") reveal_type(Article.objects.prefetch_related(get_prefetch()).all()) # N: Revealed type is "django.db.models.query.QuerySet[myapp.models.Article@AnnotatedWith[TypedDict({'every_tags': builtins.list[myapp.models.Tag]})], myapp.models.Article@AnnotatedWith[TypedDict({'every_tags': builtins.list[myapp.models.Tag]})]]" # Prefetch created in a function with to_attr as an intermediary variable def get_prefetch_with_var() -> Prefetch[Literal["tags"], QuerySet[Tag], Literal["every_tags"]]: to_attr = "every_tags" return Prefetch("tags", Tag.objects.all(), to_attr) # E: Argument 3 to "Prefetch" has incompatible type "str"; expected "Literal['every_tags'] | None" [arg-type] reveal_type(Article.objects.prefetch_related(get_prefetch_with_var()).all()) # N: Revealed type is "django.db.models.query.QuerySet[myapp.models.Article@AnnotatedWith[TypedDict({'every_tags': builtins.list[myapp.models.Tag]})], myapp.models.Article@AnnotatedWith[TypedDict({'every_tags': builtins.list[myapp.models.Tag]})]]" # Mixed inline `Prefetch` and variable `Prefetch` in one call mixed_qs = Article.objects.prefetch_related( tag_prefetch, Prefetch("tags", Article.objects.all(), to_attr="arts2"), ) reveal_type(mixed_qs) # N: Revealed type is "django.db.models.query.QuerySet[myapp.models.Article@AnnotatedWith[TypedDict({'every_tags': builtins.list[myapp.models.Tag], 'arts2': builtins.list[myapp.models.Article]})], myapp.models.Article@AnnotatedWith[TypedDict({'every_tags': builtins.list[myapp.models.Tag], 'arts2': builtins.list[myapp.models.Article]})]]" # Prefetch with `to_attr` arg but without the `queryset` arg reveal_type(Article.objects.prefetch_related(models.Prefetch("tags", to_attr="just_tags")).get().just_tags) # N: Revealed type is "builtins.list[myapp.models.Tag]" # Prefetch with annotated `queryset` reveal_type(Article.objects.prefetch_related( # N: Revealed type is "builtins.list[myapp.models.Tag@AnnotatedWith[TypedDict({'foo': Any})]]" models.Prefetch("tags", Tag.objects.annotate(foo=F("id")).all(), to_attr="just_tags")).get().just_tags ) class MyDict(TypedDict): foo: str def get_prefetch_with_annotations() -> Prefetch[Literal["tags"], QuerySet[WithAnnotations[Tag, MyDict]], Literal["every_tags"]]: return Prefetch("tags", Tag.objects.annotate(foo=F("id")), "every_tags") reveal_type(Article.objects.prefetch_related(get_prefetch_with_annotations()).all()) # N: Revealed type is "django.db.models.query.QuerySet[myapp.models.Article@AnnotatedWith[TypedDict({'every_tags': builtins.list[myapp.models.Tag@AnnotatedWith[TypedDict('main.MyDict', {'foo': builtins.str})]]})], myapp.models.Article@AnnotatedWith[TypedDict({'every_tags': builtins.list[myapp.models.Tag@AnnotatedWith[TypedDict('main.MyDict', {'foo': builtins.str})]]})]]" reveal_type(Article.objects.prefetch_related(get_prefetch_with_annotations()).get().every_tags[0].foo) # N: Revealed type is "builtins.str" # *args prefetch first_prefetch = Prefetch("tags", Tag.objects.all(), to_attr="every_tags") second_prefetch = Prefetch("tags", Tag.objects.all(), to_attr="every_tags2") third_prefetch = Prefetch("tags", Tag.objects.all(), to_attr="every_tags3") fourth_prefetch = Prefetch("tags", Tag.objects.all(), to_attr="every_tags4") prefetch_objs = (first_prefetch, second_prefetch) reveal_type(Article.objects.prefetch_related(*prefetch_objs).all()) # N: Revealed type is "django.db.models.query.QuerySet[myapp.models.Article@AnnotatedWith[TypedDict({'every_tags': builtins.list[myapp.models.Tag], 'every_tags2': builtins.list[myapp.models.Tag]})], myapp.models.Article@AnnotatedWith[TypedDict({'every_tags': builtins.list[myapp.models.Tag], 'every_tags2': builtins.list[myapp.models.Tag]})]]" reveal_type(Article.objects.prefetch_related(third_prefetch, *prefetch_objs).all()) # N: Revealed type is "django.db.models.query.QuerySet[myapp.models.Article@AnnotatedWith[TypedDict({'every_tags3': builtins.list[myapp.models.Tag], 'every_tags': builtins.list[myapp.models.Tag], 'every_tags2': builtins.list[myapp.models.Tag]})], myapp.models.Article@AnnotatedWith[TypedDict({'every_tags3': builtins.list[myapp.models.Tag], 'every_tags': builtins.list[myapp.models.Tag], 'every_tags2': builtins.list[myapp.models.Tag]})]]" reveal_type(Article.objects.prefetch_related(*prefetch_objs, third_prefetch).all()) # N: Revealed type is "django.db.models.query.QuerySet[myapp.models.Article@AnnotatedWith[TypedDict({'every_tags': builtins.list[myapp.models.Tag], 'every_tags2': builtins.list[myapp.models.Tag], 'every_tags3': builtins.list[myapp.models.Tag]})], myapp.models.Article@AnnotatedWith[TypedDict({'every_tags': builtins.list[myapp.models.Tag], 'every_tags2': builtins.list[myapp.models.Tag], 'every_tags3': builtins.list[myapp.models.Tag]})]]" reveal_type(Article.objects.prefetch_related(fourth_prefetch, *prefetch_objs, third_prefetch).all()) # N: Revealed type is "django.db.models.query.QuerySet[myapp.models.Article@AnnotatedWith[TypedDict({'every_tags4': builtins.list[myapp.models.Tag], 'every_tags': builtins.list[myapp.models.Tag], 'every_tags2': builtins.list[myapp.models.Tag], 'every_tags3': builtins.list[myapp.models.Tag]})], myapp.models.Article@AnnotatedWith[TypedDict({'every_tags4': builtins.list[myapp.models.Tag], 'every_tags': builtins.list[myapp.models.Tag], 'every_tags2': builtins.list[myapp.models.Tag], 'every_tags3': builtins.list[myapp.models.Tag]})]]" # *args prefetch from helper function def _get_prefetches() -> tuple[ Prefetch[Literal["tags"], QuerySet[Tag], Literal["every_tags"]], Prefetch[Literal["tags"], QuerySet[Tag], Literal["every_tags2"]], ]: return prefetch_objs reveal_type(Article.objects.prefetch_related(*_get_prefetches()).all()) # N: Revealed type is "django.db.models.query.QuerySet[myapp.models.Article@AnnotatedWith[TypedDict({'every_tags': builtins.list[myapp.models.Tag], 'every_tags2': builtins.list[myapp.models.Tag]})], myapp.models.Article@AnnotatedWith[TypedDict({'every_tags': builtins.list[myapp.models.Tag], 'every_tags2': builtins.list[myapp.models.Tag]})]]" files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class Tag(models.Model): ... class Article(models.Model): tags = models.ManyToManyField(to=Tag, related_name="articles", blank=True) - case: prefetch_related_and_annotate installed_apps: - django.contrib.auth - django.contrib.contenttypes main: | from django.db.models import Prefetch, F from django.contrib.auth.models import User, Group from typing_extensions import reveal_type user = ( User.objects .annotate(annotated_user=F("username")) .prefetch_related(Prefetch("groups", Group.objects.all(), to_attr="to_attr_groups")) .get() ) reveal_type(user.annotated_user) # N: Revealed type is "Any" reveal_type(user.to_attr_groups) # N: Revealed type is "builtins.list[django.contrib.auth.models.Group]" - case: prefetch_related_to_attr_conflict_with_annotate installed_apps: - django.contrib.auth - django.contrib.contenttypes main: | from django.db.models import Prefetch, F from django.contrib.auth.models import User, Group # When mixing `.annotate(foo=...)` and `prefetch_related(Prefetch(...,to_attr=foo))` # The last annotate in the chain takes precedence (even if it is prior to the prefetch_related) annotate_into_prefetch = ( User.objects # E: Attribute "foo" already defined on "django.contrib.auth.models.User@AnnotatedWith[TypedDict({'foo': Any})]" [no-redef] .annotate(foo=F("username")) .prefetch_related(Prefetch("groups", Group.objects.all(), to_attr="foo")) .get() ) prefetch_into_annotate = ( User.objects # E: Attribute "foo" already defined on "django.contrib.auth.models.User@AnnotatedWith[TypedDict({'foo': builtins.list[django.contrib.auth.models.Group]})]" [no-redef] .prefetch_related(Prefetch("groups", Group.objects.all(), to_attr="foo")) .annotate(foo=F("username")) .get() ) - case: prefetch_related_to_attr_conflict_with_model_attr installed_apps: - myapp main: | from django.db.models import Prefetch, F from myapp.models import Article, Tag Article.objects.prefetch_related(Prefetch("tags", Tag.objects.all(), to_attr="pk")) # E: Attribute "pk" already defined on "myapp.models.Article" [no-redef] Article.objects.prefetch_related(Prefetch("tags", Tag.objects.all(), to_attr="id")) # E: Attribute "id" already defined on "myapp.models.Article" [no-redef] Article.objects.prefetch_related(Prefetch("tags", Tag.objects.all(), to_attr="tags")) # E: Attribute "tags" already defined on "myapp.models.Article" [no-redef] Article.objects.prefetch_related(Prefetch("tags", Tag.objects.all(), to_attr="my_property")) # E: Attribute "my_property" already defined on "myapp.models.Article" [no-redef] Article.objects.prefetch_related(Prefetch("tags", Tag.objects.all(), to_attr="my_method")) # E: Attribute "my_method" already defined on "myapp.models.Article" [no-redef] Article.objects.prefetch_related(Prefetch("tags", Tag.objects.all(), to_attr="my_classmethod")) # E: Attribute "my_classmethod" already defined on "myapp.models.Article" [no-redef] Article.objects.prefetch_related(Prefetch("tags", Tag.objects.all(), to_attr="my_staticmethod")) # E: Attribute "my_staticmethod" already defined on "myapp.models.Article" [no-redef] Tag.objects.prefetch_related(Prefetch("articles", Article.objects.all(), to_attr="articles")) # E: Attribute "articles" already defined on "myapp.models.Tag" [no-redef] files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class Tag(models.Model): ... class Article(models.Model): tags = models.ManyToManyField(to=Tag, related_name="articles", blank=True) @property def my_property(self) -> int: ... def my_method(self) -> int: ... @staticmethod def my_staticmethod() -> int: ... @classmethod def my_classmethod(cls) -> int: ... - case: raw_queryset_prefetch_related_signatures main: | from typing_extensions import reveal_type from myapp.models import Person, Book from django.db.models import Prefetch raw_qs = Book.objects.raw("SELECT 1") reveal_type(raw_qs.prefetch_related()) # N: Revealed type is "django.db.models.query.RawQuerySet[myapp.models.Book]" reveal_type(raw_qs.prefetch_related(None)) # N: Revealed type is "django.db.models.query.RawQuerySet[myapp.models.Book]" reveal_type(raw_qs.prefetch_related("author")) # N: Revealed type is "django.db.models.query.RawQuerySet[myapp.models.Book]" reveal_type(raw_qs.prefetch_related(Prefetch("author"))) # N: Revealed type is "django.db.models.query.RawQuerySet[myapp.models.Book]" installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class Person(models.Model): ... class Book(models.Model): author = models.ForeignKey(Person, on_delete=models.CASCADE) - case: prefetch_related_conflicting_prefetches_on_same_attr installed_apps: - django.contrib.auth - django.contrib.contenttypes main: | from django.db.models import Prefetch from django.contrib.auth.models import User, Group User.objects.prefetch_related( # E: Attribute "new_attr" already defined on "django.contrib.auth.models.User" [no-redef] Prefetch("groups", Group.objects.filter(name="test"), to_attr="new_attr"), Prefetch("groups", Group.objects.all(), to_attr="new_attr"), ) User.objects.prefetch_related( # E: Attribute "new_attr" already defined on "django.contrib.auth.models.User@AnnotatedWith[TypedDict({'new_attr': builtins.list[django.contrib.auth.models.Group]})]" [no-redef] Prefetch("groups", Group.objects.all(), to_attr="new_attr"), ).prefetch_related( Prefetch("groups", Group.objects.all(), to_attr="new_attr"), ) # Mostly mirror https://github.com/django/django/blob/0a67611b81567687cd24d2be1c0e390931f06262/tests/prefetch_related/tests.py#L574-L619 - case: prefetch_related_ambiguous_prefetches installed_apps: - django.contrib.auth - django.contrib.contenttypes main: | from django.db.models import Prefetch from django.contrib.auth.models import User, Group User.objects.prefetch_related("groups", Prefetch("groups")) # Ok User.objects.prefetch_related("groups", "groups__user_set") # Ok User.objects.prefetch_related("groups__user_set", Prefetch("groups", to_attr="groups_lst")) # Ok User.objects.prefetch_related("groups", Prefetch("groups", Group.objects.filter(name="test"), to_attr="another_attr")) # Ok User.objects.prefetch_related("groups", Prefetch("groups", Group.objects.filter(name="test"))) # E: Lookup "groups" was already seen with a different queryset [no-redef] User.objects.prefetch_related(Prefetch("groups"), Prefetch("groups", Group.objects.filter(name="test"))) # E: Lookup "groups" was already seen with a different queryset [no-redef] User.objects.prefetch_related(Prefetch("groups", Group.objects.filter(name="test")), "groups") # E: Lookup "groups" was already seen with a different queryset [no-redef] - case: prefetch_related_check_valid_lookup main: | from django.db.models import Prefetch, F from myapp.models import Article, Tag, Author, Category from django.contrib.auth.models import User Tag.objects.prefetch_related("tagged_items__content_object") Article.objects.prefetch_related("tags") Article.objects.prefetch_related("tags__articles") Article.objects.prefetch_related("tags__articles__tags") Article.objects.prefetch_related("related_articles__tags") Article.objects.prefetch_related("subject") Author.objects.prefetch_related("article_set") Author.objects.prefetch_related("article_set__tags") Article.objects.prefetch_related("xyz") # E: Cannot find "xyz" on "Article" object, "xyz" is an invalid parameter to "prefetch_related()" [misc] Article.objects.prefetch_related("id") # E: "id" does not resolve to an item that supports prefetching - this is an invalid parameter to "prefetch_related()" [misc] ## M2M -- forward / backward Article.objects.prefetch_related("tags__xyz") # E: Cannot find "xyz" on "Tag" object, "tags__xyz" is an invalid parameter to "prefetch_related()" [misc] Article.objects.prefetch_related("tags__id") # E: "tags__id" does not resolve to an item that supports prefetching - this is an invalid parameter to "prefetch_related()" [misc] Tag.objects.prefetch_related("articles__xyz") # E: Cannot find "xyz" on "Article" object, "articles__xyz" is an invalid parameter to "prefetch_related()" [misc] Tag.objects.prefetch_related("articles__id") # E: "articles__id" does not resolve to an item that supports prefetching - this is an invalid parameter to "prefetch_related()" [misc] ## FK -- forward / backward Article.objects.prefetch_related("author__xyz") # E: Cannot find "xyz" on "Author" object, "author__xyz" is an invalid parameter to "prefetch_related()" [misc] Author.objects.prefetch_related("article_set__xyz") # E: Cannot find "xyz" on "Article" object, "article_set__xyz" is an invalid parameter to "prefetch_related()" [misc] Article.objects.prefetch_related("author__id") # E: "author__id" does not resolve to an item that supports prefetching - this is an invalid parameter to "prefetch_related()" [misc] Author.objects.prefetch_related("article_set__id") # E: "article_set__id" does not resolve to an item that supports prefetching - this is an invalid parameter to "prefetch_related()" [misc] ## OneToOne -- forward / backward Author.objects.prefetch_related("user__xyz") # E: Cannot find "xyz" on "User" object, "user__xyz" is an invalid parameter to "prefetch_related()" [misc] User.objects.prefetch_related("author_profile__xyz") # E: Cannot find "xyz" on "Author" object, "author_profile__xyz" is an invalid parameter to "prefetch_related()" [misc] Author.objects.prefetch_related("user__id") # E: "user__id" does not resolve to an item that supports prefetching - this is an invalid parameter to "prefetch_related()" [misc] User.objects.prefetch_related("author_profile__id") # E: "author_profile__id" does not resolve to an item that supports prefetching - this is an invalid parameter to "prefetch_related()" [misc] ## Generic FK -- forward / backward Article.objects.prefetch_related("subject") # Generic foreign keys can point to any model, so we cannot validate lookups after Article.objects.prefetch_related("subject__xyz") Article.objects.prefetch_related("subject__id") ## GenericRelation -- forward / backward Tag.objects.prefetch_related("tagged_items") Category.objects.prefetch_related("tagged_items") Tag.objects.prefetch_related("tagged_items__content_object") Tag.objects.prefetch_related("tagged_items__xyz") # E: Cannot find "xyz" on "TaggedItem" object, "tagged_items__xyz" is an invalid parameter to "prefetch_related()" [misc] Tag.objects.prefetch_related("tagged_items__id") # E: "tagged_items__id" does not resolve to an item that supports prefetching - this is an invalid parameter to "prefetch_related()" [misc] installed_apps: - myapp - django.contrib.auth - django.contrib.contenttypes files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models from django.contrib.auth.models import User from django.contrib.contenttypes.models import ContentType from django.contrib.contenttypes.fields import GenericForeignKey, GenericRelation class Category(models.Model): tagged_items = GenericRelation('TaggedItem') class Tag(models.Model): category = models.ForeignKey(Category, on_delete=models.CASCADE, related_name="tags") tagged_items = GenericRelation('TaggedItem') class Author(models.Model): user = models.OneToOneField(User, on_delete=models.CASCADE, related_name="author_profile") class TaggedItem(models.Model): content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE) object_id = models.PositiveIntegerField() content_object = GenericForeignKey('content_type', 'object_id') class Article(models.Model): author = models.ForeignKey(Author, on_delete=models.CASCADE) tags = models.ManyToManyField(Tag, related_name="articles", blank=True) category = models.ForeignKey(Category, on_delete=models.CASCADE, related_name="articles") related_articles = models.ManyToManyField("self", related_name="articles", blank=True) subject_content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE) subject_id = models.PositiveIntegerField() subject = GenericForeignKey("subject_content_type", "subject_id") - case: django_contrib_contenttypes_generic_prefetch installed_apps: - django.contrib.contenttypes - myapp main: | from django.contrib.contenttypes.prefetch import GenericPrefetch from myapp.models import Bookmark, Animal, TaggedItem from typing_extensions import reveal_type # Basic GenericPrefetch usage prefetch = GenericPrefetch( "content_object", [Bookmark.objects.all(), Animal.objects.only("name")] ) reveal_type(prefetch) # N: Revealed type is "django.contrib.contenttypes.prefetch.GenericPrefetch[Literal['content_object'], builtins.list[django.db.models.query.QuerySet[django.db.models.base.Model, django.db.models.base.Model]], builtins.str]" # Using GenericPrefetch with prefetch_related qs = TaggedItem.objects.prefetch_related(prefetch).all() reveal_type(qs) # N: Revealed type is "django.db.models.query.QuerySet[myapp.models.TaggedItem, myapp.models.TaggedItem]" # GenericPrefetch with to_attr prefetch_with_attr = GenericPrefetch( "content_object", [Bookmark.objects.all(), Animal.objects.only("name")], to_attr="prefetched_object" ) qs_with_attr = TaggedItem.objects.prefetch_related(prefetch_with_attr).all() reveal_type(qs_with_attr) # N: Revealed type is "django.db.models.query.QuerySet[myapp.models.TaggedItem@AnnotatedWith[TypedDict({'prefetched_object': builtins.list[Any]})], myapp.models.TaggedItem@AnnotatedWith[TypedDict({'prefetched_object': builtins.list[Any]})]]" reveal_type(qs_with_attr.get().prefetched_object) # N: Revealed type is "builtins.list[Any]" # GenericPrefetch on invalid field (not a GenericForeignKey) regular_fk_prefetch = GenericPrefetch( "content_type", [Bookmark.objects.all(), Animal.objects.only("name")], ) TaggedItem.objects.prefetch_related(regular_fk_prefetch).all() # E: "content_type" on "TaggedItem" is not a GenericForeignKey, GenericPrefetch can only be used with GenericForeignKey fields [misc] regular_field_prefetch = GenericPrefetch( "tag", [Bookmark.objects.all(), Animal.objects.only("name")], ) TaggedItem.objects.prefetch_related(regular_field_prefetch).all() # E: "tag" on "TaggedItem" is not a GenericForeignKey, GenericPrefetch can only be used with GenericForeignKey fields [misc] files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models from django.contrib.contenttypes.models import ContentType from django.contrib.contenttypes.fields import GenericForeignKey class Bookmark(models.Model): url = models.URLField() class Animal(models.Model): name = models.CharField(max_length=100) class TaggedItem(models.Model): tag = models.CharField(max_length=100) content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE) object_id = models.PositiveIntegerField() content_object = GenericForeignKey('content_type', 'object_id') - case: uninstalled_django_contrib_contenttypes_generic_prefetch installed_apps: - myapp main: | from django.contrib.contenttypes.prefetch import GenericPrefetch from myapp.models import Bookmark, Animal, TaggedItem from typing_extensions import reveal_type # Basic GenericPrefetch usage prefetch = GenericPrefetch( "content_object", [Bookmark.objects.all(), Animal.objects.only("name")] ) reveal_type(prefetch) # N: Revealed type is "django.contrib.contenttypes.prefetch.GenericPrefetch[Literal['content_object'], builtins.list[django.db.models.query.QuerySet[django.db.models.base.Model, django.db.models.base.Model]], builtins.str]" # Using GenericPrefetch with prefetch_related qs = TaggedItem.objects.prefetch_related(prefetch).all() # E: Cannot find "content_object" on "TaggedItem" object, "content_object" is an invalid parameter to "prefetch_related()" [misc] reveal_type(qs) # N: Revealed type is "django.db.models.query.QuerySet[myapp.models.TaggedItem, myapp.models.TaggedItem]" files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class Bookmark(models.Model): url = models.URLField() class Animal(models.Model): name = models.CharField(max_length=100) class TaggedItem(models.Model): tag = models.CharField(max_length=100) django-stubs-5.2.9/tests/typecheck/managers/querysets/test_querysetany.yml000066400000000000000000000027741513401051600272720ustar00rootroot00000000000000- case: queryset_isinstance_check main: | from typing import Any from typing_extensions import reveal_type from django.db.models.query import QuerySet from django_stubs_ext import QuerySetAny def foo(q: QuerySet[Any]) -> None: pass def bar(q: QuerySetAny) -> None: pass def baz(obj: object) -> None: if isinstance(obj, QuerySetAny): reveal_type(obj) # N: Revealed type is "django.db.models.query.QuerySet[Any, Any]" foo(obj) bar(obj) if isinstance(obj, QuerySet): reveal_type(obj) # N: Revealed type is "django.db.models.query.QuerySet[Any, Any]" foo(obj) bar(obj) - case: queryset_list main: | from django.db.models.query import QuerySet from django_stubs_ext import QuerySetAny from myapp.models import User, Book def try_append(queryset_instance: QuerySetAny, queryset: QuerySet[User], queryset_book: QuerySet[Book]) -> None: user_querysets: list[QuerySet[User]] = [] user_querysets.append(queryset_instance) user_querysets.append(queryset) user_querysets.append(queryset_book) # E: Argument 1 to "append" of "list" has incompatible type "QuerySet[Book, Book]"; expected "QuerySet[User, User]" [arg-type] installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class User(models.Model): pass class Book(models.Model): pass django-stubs-5.2.9/tests/typecheck/managers/querysets/test_select_related.yml000066400000000000000000000147041513401051600276540ustar00rootroot00000000000000- case: select_related_valid_lookups installed_apps: - myapp main: | from myapp.models import Article, Author, Category, Blog, Post # Valid forward relations Article.objects.select_related("author") Article.objects.select_related("category") # Valid reverse relations (unique=True) Author.objects.select_related("profile") # Valid chained lookups Article.objects.select_related("author__profile") Article.objects.select_related("category__parent") Post.objects.select_related("blog__owner") Post.objects.select_related("category__parent__parent") # Multiple valid lookups Article.objects.select_related("author", "category") Article.objects.select_related("author__profile", "category") # Self-referential relationships Category.objects.select_related("parent") Category.objects.select_related("parent__parent") # Variables containing strings author_lookup = "aaa" Article.objects.select_related(author_lookup) # Dynamic lookups (should not be validated) def get_lookup() -> str: return "author" Article.objects.select_related(get_lookup()) # Chaining select_related calls qs1 = Article.objects.select_related("author") qs2 = qs1.select_related("category") Article.objects.select_related("author").select_related("category") files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class Category(models.Model): parent = models.ForeignKey('self', on_delete=models.CASCADE, null=True, blank=True) class Author(models.Model): pass class AuthorProfile(models.Model): author = models.OneToOneField(Author, on_delete=models.CASCADE, related_name='profile') class Blog(models.Model): owner = models.ForeignKey(Author, on_delete=models.CASCADE) class Article(models.Model): title = models.CharField(max_length=200) # Keep for testing non-relation field author = models.ForeignKey(Author, on_delete=models.CASCADE) category = models.ForeignKey(Category, on_delete=models.CASCADE) class Post(models.Model): blog = models.ForeignKey(Blog, on_delete=models.CASCADE) author = models.ForeignKey(Author, on_delete=models.CASCADE) category = models.ForeignKey(Category, on_delete=models.CASCADE) - case: select_related_invalid_lookups installed_apps: - myapp main: | from myapp.models import Article, Author, Category, Post from typing import Literal # Invalid field names Article.objects.select_related("nonexistent") # E: Invalid field name "nonexistent" in select_related lookup. Choices are: author, category [misc] Article.objects.select_related("title") # E: Invalid field name "title" in select_related lookup. Choices are: author, category [misc] # Invalid chained lookups Article.objects.select_related("author__nonexistent") # E: Invalid field name "nonexistent" in select_related lookup. Choices are: profile [misc] Article.objects.select_related("category__invalid") # E: Invalid field name "invalid" in select_related lookup. Choices are: parent [misc] # Reverse many-to-many (not allowed) Category.objects.select_related("article_set") # E: Invalid field name "article_set" in select_related lookup. Choices are: parent [misc] # Mixed valid and invalid in same call Post.objects.select_related("blog", "invalid") # E: Invalid field name "invalid" in select_related lookup. Choices are: author, blog, category [misc] # Intermediary variable not validated if non literal invalid_lookup = "nonexistent" Article.objects.select_related(invalid_lookup) # No error - variables not validated # Intermediary variable validated if literal invalid_lookup2: Literal["nonexistent"] = "nonexistent" Article.objects.select_related(invalid_lookup2) # E: Invalid field name "nonexistent" in select_related lookup. Choices are: author, category [misc] # Chaining with invalid lookups qs3 = Article.objects.select_related("author").select_related("invalid") # E: Invalid field name "invalid" in select_related lookup. Choices are: author, category [misc] Article.objects.select_related("author").select_related("invalid") # E: Invalid field name "invalid" in select_related lookup. Choices are: author, category [misc] # Multiple arguments with invalid lookups Article.objects.select_related("author", "invalid", "category") # E: Invalid field name "invalid" in select_related lookup. Choices are: author, category [misc] # Whitespace-only lookup (invalid) Article.objects.select_related("") # E: Invalid field name "" in select_related lookup [misc] Article.objects.select_related(" ") # E: Invalid field name " " in select_related lookup [misc] files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class Category(models.Model): parent = models.ForeignKey('self', on_delete=models.CASCADE, null=True, blank=True) class Author(models.Model): pass class AuthorProfile(models.Model): author = models.OneToOneField(Author, on_delete=models.CASCADE, related_name='profile') class Blog(models.Model): owner = models.ForeignKey(Author, on_delete=models.CASCADE) class Article(models.Model): title = models.CharField(max_length=200) # Keep for testing non-relation field author = models.ForeignKey(Author, on_delete=models.CASCADE) category = models.ForeignKey(Category, on_delete=models.CASCADE) class Post(models.Model): blog = models.ForeignKey(Blog, on_delete=models.CASCADE) author = models.ForeignKey(Author, on_delete=models.CASCADE) category = models.ForeignKey(Category, on_delete=models.CASCADE) django-stubs-5.2.9/tests/typecheck/managers/querysets/test_union_type.yml000066400000000000000000000024741513401051600270670ustar00rootroot00000000000000- case: union_queryset_custom_method main: | from typing_extensions import reveal_type from django.db.models import QuerySet from myapp.models import User, Order instance: Order | User = User() model_cls = type(instance) reveal_type(model_cls) # N: Revealed type is "type[myapp.models.Order] | type[myapp.models.User]" reveal_type(model_cls.objects) # N: Revealed type is "myapp.models.ManagerFromMyQuerySet[myapp.models.Order] | myapp.models.ManagerFromMyQuerySet[myapp.models.User]" reveal_type(model_cls.objects.my_method()) # N: Revealed type is "myapp.models.MyQuerySet" installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from __future__ import annotations from django.db import models class MyQuerySet(models.QuerySet): def my_method(self) -> MyQuerySet: pass UserManager = models.Manager.from_queryset(MyQuerySet) class User(models.Model): objects = UserManager() OrderManager = models.Manager.from_queryset(MyQuerySet) class Order(models.Model): objects = OrderManager() django-stubs-5.2.9/tests/typecheck/managers/querysets/test_values.yml000066400000000000000000000227751513401051600262030ustar00rootroot00000000000000- case: queryset_values_method_returns_typeddict main: | from typing_extensions import reveal_type from myapp.models import Blog values = Blog.objects.values('num_posts', 'text').get() reveal_type(values) # N: Revealed type is "TypedDict({'num_posts': builtins.int, 'text': builtins.str})" reveal_type(values["num_posts"]) # N: Revealed type is "builtins.int" reveal_type(values["text"]) # N: Revealed type is "builtins.str" values_pk = Blog.objects.values('pk').get() reveal_type(values_pk) # N: Revealed type is "TypedDict({'pk': builtins.int})" reveal_type(values_pk["pk"]) # N: Revealed type is "builtins.int" installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class Blog(models.Model): num_posts = models.IntegerField() text = models.CharField(max_length=100) - case: queryset_values_all_values main: | from typing_extensions import reveal_type from myapp.models import Blog all_values_dict = Blog.objects.values().get() reveal_type(all_values_dict) # N: Revealed type is "TypedDict({'id': builtins.int, 'num_posts': builtins.int, 'text': builtins.str})" reveal_type(all_values_dict["id"]) # N: Revealed type is "builtins.int" reveal_type(all_values_dict["num_posts"]) # N: Revealed type is "builtins.int" reveal_type(all_values_dict["text"]) # N: Revealed type is "builtins.str" installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class Publisher(models.Model): pass class Blog(models.Model): num_posts = models.IntegerField() text = models.CharField(max_length=100) - case: queryset_foreign_key_object_always_a_primary_key main: | from typing_extensions import reveal_type from myapp.models import Blog values1 = Blog.objects.values('publisher').get() reveal_type(values1) # N: Revealed type is "TypedDict({'publisher': builtins.int})" reveal_type(values1['publisher']) # N: Revealed type is "builtins.int" values2 = Blog.objects.values('publisher_id').get() reveal_type(values2) # N: Revealed type is "TypedDict({'publisher_id': builtins.int})" reveal_type(values2["publisher_id"]) # N: Revealed type is "builtins.int" # all values return _id version all_values = Blog.objects.values().get() reveal_type(all_values) # N: Revealed type is "TypedDict({'id': builtins.int, 'publisher_id': builtins.int})" installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class Publisher(models.Model): pass class Blog(models.Model): publisher = models.ForeignKey(to=Publisher, on_delete=models.CASCADE) - case: values_with_related_model_fields main: | from typing_extensions import reveal_type from myapp.models import Entry values = Entry.objects.values('blog__num_articles', 'blog__publisher__name').get() reveal_type(values) # N: Revealed type is "TypedDict({'blog__num_articles': builtins.int, 'blog__publisher__name': builtins.str})" pk_values = Entry.objects.values('blog__pk', 'blog__publisher__pk').get() reveal_type(pk_values) # N: Revealed type is "TypedDict({'blog__pk': builtins.int, 'blog__publisher__pk': builtins.int})" installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class Publisher(models.Model): name = models.CharField(max_length=100) class Blog(models.Model): num_articles = models.IntegerField() publisher = models.ForeignKey(to=Publisher, on_delete=models.CASCADE) class Entry(models.Model): blog = models.ForeignKey(Blog, on_delete=models.CASCADE) - case: select_all_related_model_values_for_every_current_value main: | from typing_extensions import reveal_type from myapp.models import Publisher related_model_values = Publisher.objects.values('id', 'blog__name').get() reveal_type(related_model_values) # N: Revealed type is "TypedDict({'id': builtins.int, 'blog__name': builtins.str})" installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class Publisher(models.Model): pass class Blog(models.Model): name = models.CharField(max_length=100) publisher = models.ForeignKey(Publisher, on_delete=models.CASCADE) - case: values_of_many_to_many_field main: | from typing_extensions import reveal_type from myapp.models import Author, Book reveal_type(Book.objects.values('authors')) # N: Revealed type is "django.db.models.query.QuerySet[myapp.models.Book, TypedDict({'authors': builtins.int})]" reveal_type(Author.objects.values('books')) # N: Revealed type is "django.db.models.query.QuerySet[myapp.models.Author, TypedDict({'books': builtins.int})]" installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class Author(models.Model): pass class Book(models.Model): authors = models.ManyToManyField(Author, related_name='books') - case: queryset_values_blank_charfield main: | from typing_extensions import reveal_type from myapp.models import Blog values = Blog.objects.values('text').get() reveal_type(values) # N: Revealed type is "TypedDict({'text': builtins.str})" reveal_type(values["text"]) # N: Revealed type is "builtins.str" installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class Blog(models.Model): num_posts = models.IntegerField() text = models.CharField(max_length=100, blank=True) - case: queryset_values_with_expressions main: | from typing_extensions import reveal_type from django.db.models import F from django.db.models.functions import Lower from myapp.models import Blog reveal_type(Blog.objects.values("id")) reveal_type(Blog.objects.values("id", "num_posts", "text")) reveal_type(Blog.objects.values(foo=F("id"))) reveal_type(Blog.objects.values("id", foo=F("id"))) reveal_type(Blog.objects.values("id", lower_text=Lower("text"))) out: | main:6: note: Revealed type is "django.db.models.query.QuerySet[myapp.models.Blog, TypedDict({'id': builtins.int})]" main:7: note: Revealed type is "django.db.models.query.QuerySet[myapp.models.Blog, TypedDict({'id': builtins.int, 'num_posts': builtins.int, 'text': builtins.str})]" main:8: note: Revealed type is "django.db.models.query.QuerySet[myapp.models.Blog, TypedDict({'foo': Any})]" main:9: note: Revealed type is "django.db.models.query.QuerySet[myapp.models.Blog, TypedDict({'id': builtins.int, 'foo': Any})]" main:10: note: Revealed type is "django.db.models.query.QuerySet[myapp.models.Blog, TypedDict({'id': builtins.int, 'lower_text': Any})]" installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class Blog(models.Model): num_posts = models.IntegerField() text = models.CharField(max_length=100) - case: queryset_values_m2m_fk_with_expressions main: | from typing_extensions import reveal_type from django.db.models import F from django.db.models.functions import Lower from myapp.models import Book reveal_type(Book.objects.values(premium_price=F("premiumbookdetails__price"))) reveal_type(Book.objects.values(team_name=F("authors__name"))) out: | main:6: note: Revealed type is "django.db.models.query.QuerySet[myapp.models.Book, TypedDict({'premium_price': Any})]" main:7: note: Revealed type is "django.db.models.query.QuerySet[myapp.models.Book, TypedDict({'team_name': Any})]" installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class Author(models.Model): name = models.CharField(max_length=100) class Book(models.Model): authors = models.ManyToManyField(Author, related_name='books') class PremiumBookDetails(models.Model): book = models.OneToOneField(Book, on_delete=models.CASCADE) price = models.DecimalField(max_digits=10, decimal_places=2) django-stubs-5.2.9/tests/typecheck/managers/querysets/test_values_list.yml000066400000000000000000000407611513401051600272310ustar00rootroot00000000000000- case: values_list_simple_field_returns_queryset_of_tuples main: | from typing_extensions import reveal_type from myapp.models import MyUser reveal_type(MyUser.objects.values_list('name').get()) # N: Revealed type is "tuple[builtins.str]" reveal_type(MyUser.objects.values_list('id', 'name').get()) # N: Revealed type is "tuple[builtins.int, builtins.str]" values_tuple = MyUser.objects.values_list('name', 'age').get() reveal_type(values_tuple[0]) # N: Revealed type is "builtins.str" reveal_type(values_tuple[1]) # N: Revealed type is "builtins.int" # no fields specified return all fields all_values_tuple = MyUser.objects.values_list().get() reveal_type(all_values_tuple) # N: Revealed type is "tuple[builtins.int, builtins.str, builtins.int]" # pk as field pk_values = MyUser.objects.values_list('pk').get() reveal_type(pk_values) # N: # N: Revealed type is "tuple[builtins.int]" installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class MyUser(models.Model): name = models.CharField(max_length=100) age = models.IntegerField() - case: values_list_field_repetition main: | from typing_extensions import reveal_type from myapp.models import MyUser # Values tuples can have the same field repeated values_tuple = MyUser.objects.values_list('name', 'age', 'name').get() reveal_type(values_tuple) # N: Revealed type is "tuple[builtins.str, builtins.int, builtins.str]" reveal_type(values_tuple[0]) # N: Revealed type is "builtins.str" reveal_type(values_tuple[1]) # N: Revealed type is "builtins.int" reveal_type(values_tuple[2]) # N: Revealed type is "builtins.str" installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class MyUser(models.Model): name = models.CharField(max_length=100) age = models.IntegerField() - case: values_list_types_are_field_types main: | from typing_extensions import reveal_type from myapp.models import Concrete ret = list(Concrete.objects.values_list('id', 'data')) reveal_type(ret) # N: Revealed type is "builtins.list[tuple[builtins.int, builtins.dict[builtins.str, builtins.str]]]" installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from __future__ import annotations from django.db import models class JSONField(models.TextField): pass # incomplete class Concrete(models.Model): id = models.IntegerField() data: models.Field[dict[str, str], dict[str, str]] = JSONField() - case: values_list_supports_queryset_methods main: | from typing_extensions import reveal_type from myapp.models import MyUser from django.db.models.functions import Length query = MyUser.objects.values_list('name') reveal_type(query.order_by("name").get()) # N: Revealed type is "tuple[builtins.str]" reveal_type(query.distinct("name").get()) # N: Revealed type is "tuple[builtins.str]" reveal_type(query.distinct().get()) # N: Revealed type is "tuple[builtins.str]" reveal_type(query.all().get()) # N: Revealed type is "tuple[builtins.str]" reveal_type(query.filter(age__gt=16).get()) # N: Revealed type is "tuple[builtins.str]" reveal_type(query.exclude(age__lte=16).get()) # N: Revealed type is "tuple[builtins.str]" reveal_type(query.annotate(name_length=Length("name")).get()) # N: Revealed type is "builtins.tuple[Any, ...]" installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class MyUser(models.Model): name = models.CharField(max_length=100) age = models.IntegerField() - case: values_list_related_model_fields main: | from typing_extensions import reveal_type from myapp.models import Post, Blog values_tuple = Post.objects.values_list('blog', 'blog__num_posts', 'blog__publisher', 'blog__publisher__name').get() reveal_type(values_tuple[0]) # N: Revealed type is "builtins.int" reveal_type(values_tuple[1]) # N: Revealed type is "builtins.int" reveal_type(values_tuple[2]) # N: Revealed type is "builtins.int" reveal_type(values_tuple[3]) # N: Revealed type is "builtins.str" reverse_fields_list = Blog.objects.values_list('post__text').get() reveal_type(reverse_fields_list) # N: Revealed type is "tuple[builtins.str]" installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class Publisher(models.Model): name = models.CharField(max_length=100) class Blog(models.Model): num_posts = models.IntegerField() publisher = models.ForeignKey(to=Publisher, on_delete=models.CASCADE) class Post(models.Model): text = models.CharField(max_length=100) blog = models.ForeignKey(to=Blog, on_delete=models.CASCADE) - case: values_list_flat_true_methods main: | from typing_extensions import reveal_type from myapp.models import MyUser, MyUser2 reveal_type(MyUser.objects.values_list('name', flat=True).get()) # N: Revealed type is "builtins.str" reveal_type(MyUser.objects.values_list('name', 'age', flat=True).get()) # flat=True without specified fields returns primary key values reveal_type(MyUser.objects.values_list(flat=True)[0]) # N: Revealed type is "builtins.int" reveal_type(MyUser2.objects.values_list(flat=True)[0]) # N: Revealed type is "builtins.str" out: | main:4: error: 'flat' is not valid when 'values_list' is called with more than one field [misc] main:4: note: Revealed type is "Any" installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class MyUser(models.Model): name = models.CharField(max_length=100) age = models.IntegerField() class MyUser2(models.Model): name = models.CharField(max_length=100, primary_key=True) - case: values_list_named_true main: | from typing_extensions import reveal_type from myapp.models import MyUser values_named_tuple = MyUser.objects.values_list('name', 'age', named=True).get() reveal_type(values_named_tuple) # N: Revealed type is "tuple[builtins.str, builtins.int, fallback=main.Row]" reveal_type(values_named_tuple.name) # N: Revealed type is "builtins.str" reveal_type(values_named_tuple.age) # N: Revealed type is "builtins.int" # no fields specified, returns all fields namedtuple all_values_named_tuple = MyUser.objects.values_list(named=True).get() reveal_type(all_values_named_tuple.id) # N: Revealed type is "builtins.int" reveal_type(all_values_named_tuple.name) # N: Revealed type is "builtins.str" reveal_type(all_values_named_tuple.age) # N: Revealed type is "builtins.int" reveal_type(all_values_named_tuple.is_admin) # N: Revealed type is "builtins.bool" # pk as field pk_values = MyUser.objects.values_list('pk', named=True).get() reveal_type(pk_values) # N: Revealed type is "tuple[builtins.int, fallback=main.Row2]" reveal_type(pk_values.pk) # N: # N: Revealed type is "builtins.int" # values_list(named=True) inside function def func() -> None: from myapp.models import MyUser reveal_type(MyUser.objects.values_list('name', named=True).get()) # N: Revealed type is "tuple[builtins.str, fallback=main.Row3]" installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class MyUser(models.Model): name = models.CharField(max_length=100) age = models.IntegerField() is_admin = models.BooleanField() - case: values_list_flat_true_named_true_error main: | from typing_extensions import reveal_type from myapp.models import MyUser reveal_type(MyUser.objects.values_list('name', flat=True, named=True).get()) out: | main:3: error: 'flat' and 'named' can't be used together [misc] main:3: note: Revealed type is "Any" installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class MyUser(models.Model): name = models.CharField(max_length=100) - case: invalid_lookups main: | from typing_extensions import reveal_type from myapp.models import Blog reveal_type(Blog.objects.values_list('unknown').get()) reveal_type(Blog.objects.values_list('unknown', flat=True).get()) reveal_type(Blog.objects.values_list('unknown', named=True).get()) reveal_type(Blog.objects.values_list('publisher__unknown').get()) out: | main:3: error: Cannot resolve keyword 'unknown' into field. Choices are: id, publisher, publisher_id [misc] main:3: note: Revealed type is "Any" main:4: error: Cannot resolve keyword 'unknown' into field. Choices are: id, publisher, publisher_id [misc] main:4: note: Revealed type is "Any" main:5: error: Cannot resolve keyword 'unknown' into field. Choices are: id, publisher, publisher_id [misc] main:5: note: Revealed type is "Any" main:6: note: Revealed type is "tuple[Any]" installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class Publisher(models.Model): pass class Blog(models.Model): publisher = models.ForeignKey(to=Publisher, on_delete=models.CASCADE) - case: named_true_with_related_model_fields main: | from typing_extensions import reveal_type from myapp.models import Entry, Blog values = Entry.objects.values_list('blog__num_articles', 'blog__publisher__name', named=True).get() reveal_type(values.blog__num_articles) # N: Revealed type is "builtins.int" reveal_type(values.blog__publisher__name) # N: Revealed type is "builtins.str" pk_values = Entry.objects.values_list('blog__pk', 'blog__publisher__pk', named=True).get() reveal_type(pk_values.blog__pk) # N: Revealed type is "builtins.int" reveal_type(pk_values.blog__publisher__pk) # N: Revealed type is "builtins.int" # reverse relation reverse_values = Blog.objects.values_list('entry__text', named=True).get() reveal_type(reverse_values.entry__text) # N: Revealed type is "builtins.str" installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class Publisher(models.Model): name = models.CharField(max_length=100) class Blog(models.Model): num_articles = models.IntegerField() publisher = models.ForeignKey(to=Publisher, on_delete=models.CASCADE) class Entry(models.Model): text = models.CharField(max_length=100) blog = models.ForeignKey(Blog, on_delete=models.CASCADE) - case: values_list_flat_true_with_ids main: | from typing_extensions import reveal_type from myapp.models import Blog, Publisher reveal_type(Blog.objects.values_list('id', flat=True)) # N: Revealed type is "django.db.models.query.QuerySet[myapp.models.Blog, builtins.int]" reveal_type(Blog.objects.values_list('publisher', flat=True)) # N: Revealed type is "django.db.models.query.QuerySet[myapp.models.Blog, builtins.int]" reveal_type(Blog.objects.values_list('publisher_id', flat=True)) # N: Revealed type is "django.db.models.query.QuerySet[myapp.models.Blog, builtins.int]" # is Iterable[int] reveal_type(list(Blog.objects.values_list('id', flat=True))) # N: Revealed type is "builtins.list[builtins.int]" installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class Publisher(models.Model): pass class Blog(models.Model): publisher = models.ForeignKey(to=Publisher, on_delete=models.CASCADE) - case: subclass_of_queryset_has_proper_typings_on_methods main: | from typing_extensions import reveal_type from myapp.models import TransactionQuerySet reveal_type(TransactionQuerySet()) # N: Revealed type is "myapp.models.TransactionQuerySet" reveal_type(TransactionQuerySet().values()) # N: Revealed type is "django.db.models.query.QuerySet[myapp.models.Transaction, TypedDict({'id': builtins.int, 'total': builtins.int})]" reveal_type(TransactionQuerySet().values_list()) # N: Revealed type is "django.db.models.query.QuerySet[myapp.models.Transaction, tuple[builtins.int, builtins.int]]" installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class TransactionQuerySet(models.QuerySet['Transaction']): pass class Transaction(models.Model): total = models.IntegerField() - case: values_list_of_many_to_many_field main: | from typing_extensions import reveal_type from myapp.models import Author, Book reveal_type(Book.objects.values_list('authors')) # N: Revealed type is "django.db.models.query.QuerySet[myapp.models.Book, tuple[builtins.int]]" reveal_type(Author.objects.values_list('books')) # N: Revealed type is "django.db.models.query.QuerySet[myapp.models.Author, tuple[builtins.int]]" installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class Author(models.Model): pass class Book(models.Model): authors = models.ManyToManyField(Author, related_name='books') - case: queryset_values_list_blank_charfield main: | from typing_extensions import reveal_type from myapp.models import Blog values = Blog.objects.values_list('text').get() reveal_type(values) # N: Revealed type is "tuple[builtins.str]" installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class Blog(models.Model): num_posts = models.IntegerField() text = models.CharField(max_length=100, blank=True) - case: handles_field_with_same_name_on_other_model main: | from typing_extensions import reveal_type from myapp.models import A reveal_type(A.objects.values_list("name", "b__name").get()) # N: Revealed type is "tuple[builtins.int, builtins.str]" installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class B(models.Model): name = models.CharField() class A(models.Model): b = models.ForeignKey(B, on_delete=models.CASCADE) name = models.IntegerField() django-stubs-5.2.9/tests/typecheck/managers/test_managers.yml000066400000000000000000001156011513401051600244240ustar00rootroot00000000000000- case: test_every_model_has_objects_queryset_available main: | from typing_extensions import reveal_type from myapp.models import User reveal_type(User.objects) # N: Revealed type is "django.db.models.manager.Manager[myapp.models.User]" reveal_type(User.objects.get()) # N: Revealed type is "myapp.models.User" installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class User(models.Model): pass - case: every_model_has_its_own_objects_queryset main: | from typing_extensions import reveal_type from myapp.models import Parent, Child reveal_type(Parent.objects) # N: Revealed type is "django.db.models.manager.Manager[myapp.models.Parent]" reveal_type(Child.objects) # N: Revealed type is "django.db.models.manager.Manager[myapp.models.Child]" installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class Parent(models.Model): pass class Child(Parent): pass - case: test_model_objects_attribute_present_in_case_of_model_cls_passed_as_generic_parameter main: | from typing_extensions import reveal_type from myapp.models import Base, MyModel base_instance = Base(MyModel) reveal_type(base_instance.model_cls._default_manager) # N: Revealed type is "django.db.models.manager.Manager[myapp.models.MyModel]" installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from typing import Generic, TypeVar from typing_extensions import reveal_type from django.db import models _T = TypeVar('_T', bound=models.Model) class Base(Generic[_T]): def __init__(self, model_cls: type[_T]) -> None: self.model_cls = model_cls reveal_type(self.model_cls._default_manager) # N: Revealed type is "django.db.models.manager.Manager[_T`1]" class MyModel(models.Model): pass class Child(Base[MyModel]): def method(self) -> None: reveal_type(self.model_cls._default_manager) # N: Revealed type is "django.db.models.manager.Manager[myapp.models.MyModel]" - case: test_base_manager_called_on_model_cls_as_generic_parameter main: | from typing_extensions import reveal_type from myapp.models import Base, MyModel base_instance = Base(MyModel) reveal_type(base_instance.model_cls._base_manager) # N: Revealed type is "django.db.models.manager.Manager[myapp.models.MyModel]" installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from typing import Generic, TypeVar from typing_extensions import reveal_type from django.db import models _T = TypeVar('_T', bound=models.Model) class Base(Generic[_T]): def __init__(self, model_cls: type[_T]) -> None: self.model_cls = model_cls reveal_type(self.model_cls._base_manager) # N: Revealed type is "django.db.models.manager.Manager[_T`1]" class MyModel(models.Model): pass class Child(Base[MyModel]): def method(self) -> None: reveal_type(self.model_cls._base_manager) # N: Revealed type is "django.db.models.manager.Manager[myapp.models.MyModel]" - case: if_custom_manager_defined_it_is_set_to_default_manager main: | from typing_extensions import reveal_type from myapp.models import MyModel reveal_type(MyModel._default_manager) # N: Revealed type is "myapp.models.CustomManager[myapp.models.MyModel]" installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from typing import TypeVar from django.db import models _T = TypeVar('_T', bound=models.Model) class CustomManager(models.Manager[_T]): pass class MyModel(models.Model): manager = CustomManager['MyModel']() - case: if_default_manager_name_is_passed_set_default_manager_to_it main: | from typing_extensions import reveal_type from myapp.models import MyModel reveal_type(MyModel._default_manager) # N: Revealed type is "myapp.models.Manager2[myapp.models.MyModel]" installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from typing import TypeVar from django.db import models from django_stubs_ext.db.models import TypedModelMeta _T = TypeVar('_T', bound=models.Model) class Manager1(models.Manager[_T]): pass class Manager2(models.Manager[_T]): pass class MyModel(models.Model): class Meta(TypedModelMeta): default_manager_name = 'm2' m1 = Manager1['MyModel']() m2 = Manager2['MyModel']() - case: test_leave_as_is_if_objects_is_set_and_fill_typevars_with_outer_class main: | from typing_extensions import reveal_type from myapp.models import MyUser reveal_type(MyUser.objects) # N: Revealed type is "myapp.models.UserManager" reveal_type(MyUser.objects.get()) # N: Revealed type is "myapp.models.MyUser" reveal_type(MyUser.objects.get_or_404()) # N: Revealed type is "myapp.models.MyUser" installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class UserManager(models.Manager['MyUser']): def get_or_404(self) -> 'MyUser': pass class MyUser(models.Model): objects = UserManager() - case: model_imported_from_different_file main: | from typing_extensions import reveal_type from myapp.models import Inventory, Band reveal_type(Inventory.objects) # N: Revealed type is "django.db.models.manager.Manager[myapp.models.main.Inventory]" reveal_type(Band.objects) # N: Revealed type is "django.db.models.manager.Manager[myapp.models.Band]" installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models/__init__.py content: | from django.db import models from .main import Inventory as Inventory class Band(models.Model): pass - path: myapp/models/main.py content: | from django.db import models class Inventory(models.Model): pass - case: managers_that_defined_on_other_models_do_not_influence main: | from typing_extensions import reveal_type from myapp.models import AbstractPerson, Book reveal_type(AbstractPerson.abstract_persons) # N: Revealed type is "django.db.models.manager.Manager[myapp.models.AbstractPerson]" reveal_type(Book.published_objects) # N: Revealed type is "myapp.models.PublishedBookManager" Book.published_objects.create(title='hello') reveal_type(Book.annotated_objects) # N: Revealed type is "myapp.models.AnnotatedBookManager" Book.annotated_objects.create(title='hello') installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class AbstractPerson(models.Model): abstract_persons = models.Manager['AbstractPerson']() class PublishedBookManager(models.Manager['Book']): pass class AnnotatedBookManager(models.Manager['Book']): pass class Book(models.Model): title = models.CharField(max_length=50) published_objects = PublishedBookManager() annotated_objects = AnnotatedBookManager() - case: managers_inherited_from_abstract_classes_multiple_inheritance main: | from typing_extensions import reveal_type from myapp.models import AbstractBase1, AbstractBase2, Child reveal_type(Child.manager1) reveal_type(Child.restricted) reveal_type(AbstractBase1.manager1) reveal_type(AbstractBase2.restricted) out: | main:3: note: Revealed type is "myapp.models.CustomManager1" main:4: note: Revealed type is "myapp.models.CustomManager2" main:5: note: Revealed type is "myapp.models.CustomManager1" main:6: note: Revealed type is "myapp.models.CustomManager2" installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class CustomManager1(models.Manager['AbstractBase1']): pass class AbstractBase1(models.Model): class Meta: abstract = True name = models.CharField(max_length=50) manager1 = CustomManager1() class CustomManager2(models.Manager['AbstractBase2']): pass class AbstractBase2(models.Model): class Meta: abstract = True value = models.CharField(max_length=50) restricted = CustomManager2() class Child(AbstractBase1, AbstractBase2): pass - case: managers_inherited_from_abstract_classes_multiple_inheritance_with_generic main: | from typing_extensions import reveal_type from myapp.models import AbstractBase1, AbstractBase2, Child reveal_type(Child.manager1) # N: Revealed type is "myapp.models.CustomManager1[myapp.models.Child]" reveal_type(Child.manager1.get()) # N: Revealed type is "myapp.models.Child" reveal_type(Child.restricted) # N: Revealed type is "myapp.models.CustomManager2[myapp.models.Child]" reveal_type(Child.restricted.get()) # N: Revealed type is "myapp.models.Child" reveal_type(AbstractBase1.manager1) # N: Revealed type is "myapp.models.CustomManager1[myapp.models.AbstractBase1]" reveal_type(AbstractBase1.manager1.get()) # N: Revealed type is "myapp.models.AbstractBase1" reveal_type(AbstractBase2.restricted) # N: Revealed type is "myapp.models.CustomManager2[myapp.models.AbstractBase2]" reveal_type(AbstractBase2.restricted.get()) # N: Revealed type is "myapp.models.AbstractBase2" installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from typing import Generic, TypeVar from django.db import models T1 = TypeVar("T1", bound="AbstractBase1") class CustomManager1(models.Manager[T1], Generic[T1]): ... class AbstractBase1(models.Model): class Meta: abstract = True name = models.CharField(max_length=50) manager1 = CustomManager1() T2 = TypeVar("T2", bound="AbstractBase2") class CustomManager2(models.Manager[T2], Generic[T2]): ... class AbstractBase2(models.Model): class Meta: abstract = True value = models.CharField(max_length=50) restricted = CustomManager2() class Child(AbstractBase1, AbstractBase2): ... - case: model_has_a_manager_of_the_same_type main: | from typing_extensions import reveal_type from myapp.models import UnrelatedModel, MyModel reveal_type(UnrelatedModel.objects) # N: Revealed type is "django.db.models.manager.Manager[myapp.models.UnrelatedModel]" reveal_type(UnrelatedModel.objects.first()) # N: Revealed type is "myapp.models.UnrelatedModel | None" reveal_type(MyModel.objects) # N: Revealed type is "django.db.models.manager.Manager[myapp.models.MyModel]" reveal_type(MyModel.objects.first()) # N: Revealed type is "myapp.models.MyModel | None" installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class UnrelatedModel(models.Model): objects = models.Manager['UnrelatedModel']() class MyModel(models.Model): pass - case: manager_without_annotation_of_the_model_gets_it_from_outer_one main: | from typing_extensions import reveal_type from myapp.models import UnrelatedModel2, MyModel2 reveal_type(UnrelatedModel2.objects) # N: Revealed type is "django.db.models.manager.Manager[myapp.models.UnrelatedModel2]" reveal_type(UnrelatedModel2.objects.first()) # N: Revealed type is "myapp.models.UnrelatedModel2 | None" reveal_type(MyModel2.objects) # N: Revealed type is "django.db.models.manager.Manager[myapp.models.MyModel2]" reveal_type(MyModel2.objects.first()) # N: Revealed type is "myapp.models.MyModel2 | None" installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class UnrelatedModel2(models.Model): objects = models.Manager() class MyModel2(models.Model): pass - case: inherited_manager_has_the_proper_type_of_model main: | from typing_extensions import reveal_type from myapp.models import ParentOfMyModel3, MyModel3 reveal_type(ParentOfMyModel3.objects) # N: Revealed type is "django.db.models.manager.Manager[myapp.models.ParentOfMyModel3]" reveal_type(ParentOfMyModel3.objects.first()) # N: Revealed type is "myapp.models.ParentOfMyModel3 | None" reveal_type(MyModel3.objects) # N: Revealed type is "django.db.models.manager.Manager[myapp.models.MyModel3]" reveal_type(MyModel3.objects.first()) # N: Revealed type is "myapp.models.MyModel3 | None" installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class ParentOfMyModel3(models.Model): objects = models.Manager() class MyModel3(ParentOfMyModel3): pass - case: inheritance_with_explicit_type_on_child_manager main: | from typing_extensions import reveal_type from myapp.models import ParentOfMyModel4, MyModel4 reveal_type(ParentOfMyModel4.objects) # N: Revealed type is "django.db.models.manager.Manager[myapp.models.ParentOfMyModel4]" reveal_type(ParentOfMyModel4.objects.first()) # N: Revealed type is "myapp.models.ParentOfMyModel4 | None" reveal_type(MyModel4.objects) # N: Revealed type is "django.db.models.manager.Manager[myapp.models.MyModel4]" reveal_type(MyModel4.objects.first()) # N: Revealed type is "myapp.models.MyModel4 | None" installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from typing import ClassVar from django.db import models class ParentOfMyModel4(models.Model): objects = models.Manager() class MyModel4(ParentOfMyModel4): objects: ClassVar[models.Manager["MyModel4"]] = models.Manager["MyModel4"]() # TODO: make it work someday #- case: inheritance_of_two_models_with_custom_objects_manager # main: | # from typing_extensions import reveal_type # from myapp.models import MyBaseUser, MyUser # reveal_type(MyBaseUser.objects) # N: Revealed type is "myapp.models.MyBaseManager[myapp.models.MyBaseUser]" # reveal_type(MyBaseUser.objects.get()) # N: Revealed type is "myapp.models.MyBaseUser" # # reveal_type(MyUser.objects) # N: Revealed type is "myapp.models.MyManager[myapp.models.MyUser]" # reveal_type(MyUser.objects.get()) # N: Revealed type is "myapp.models.MyUser" # installed_apps: # - myapp # files: # - path: myapp/__init__.py # - path: myapp/models.py # content: | # from django.db import models # # class MyBaseManager(models.Manager): # pass # class MyBaseUser(models.Model): # objects = MyBaseManager() # # class MyManager(models.Manager): # pass # class MyUser(MyBaseUser): # objects = MyManager() - case: custom_manager_returns_proper_model_types main: | from typing_extensions import reveal_type from myapp.models import User reveal_type(User.objects) # N: Revealed type is "myapp.models.MyManager[myapp.models.User]" reveal_type(User.objects.select_related()) # N: Revealed type is "django.db.models.query.QuerySet[myapp.models.User, myapp.models.User]" reveal_type(User.objects.get()) # N: Revealed type is "myapp.models.User" reveal_type(User.objects.get_instance()) # N: Revealed type is "builtins.int" reveal_type(User.objects.get_instance_untyped('hello')) # N: Revealed type is "Any" from myapp.models import ChildUser reveal_type(ChildUser.objects) # N: Revealed type is "myapp.models.MyManager[myapp.models.ChildUser]" reveal_type(ChildUser.objects.select_related()) # N: Revealed type is "django.db.models.query.QuerySet[myapp.models.ChildUser, myapp.models.ChildUser]" reveal_type(ChildUser.objects.get()) # N: Revealed type is "myapp.models.ChildUser" reveal_type(ChildUser.objects.get_instance()) # N: Revealed type is "builtins.int" reveal_type(ChildUser.objects.get_instance_untyped('hello')) # N: Revealed type is "Any" installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from typing import Any from django.db import models class MyManager(models.Manager): def get_instance(self) -> int: pass def get_instance_untyped(self, name: str): # type: ignore[no-untyped-def] pass class User(models.Model): objects = MyManager() class ChildUser(models.Model): objects = MyManager() - case: custom_manager_annotate_method_before_type_declaration main: | from typing_extensions import reveal_type from myapp.models import ModelA, ModelB, ManagerA reveal_type(ModelA.objects) # N: Revealed type is "myapp.models.ManagerA[myapp.models.ModelA]" reveal_type(ModelA.objects.do_something) # N: Revealed type is "def (other_obj: myapp.models.ModelB) -> builtins.str" installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class ManagerA(models.Manager): def do_something(self, other_obj: "ModelB") -> str: return 'test' class ModelA(models.Model): title = models.TextField() objects = ManagerA() class ModelB(models.Model): movie = models.TextField() - case: override_manager_create1 main: | from myapp.models import MyModel installed_apps: - myapp out: | myapp/models:5: error: Return type "MyModel" of "create" incompatible with return type "_T" in supertype "django.db.models.manager.Manager" [override] myapp/models:6: error: Incompatible return value type (got "_T", expected "MyModel") [return-value] files: - path: myapp/__init__.py - path: myapp/models.py content: | from typing import Any from django.db import models class MyModelManager(models.Manager): def create(self, **kwargs: Any) -> 'MyModel': return super().create(**kwargs) class MyModel(models.Model): objects = MyModelManager() - case: override_manager_create2 main: | from myapp.models import MyModel MyModel.objects.create() installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from typing import Any from django.db import models class MyModelManager(models.Manager['MyModel']): def create(self, **kwargs: Any) -> 'MyModel': return super().create(**kwargs) class MyModel(models.Model): objects = MyModelManager() - case: regression_manager_scope_foreign main: | from typing_extensions import reveal_type from myapp.models import MyModel reveal_type(MyModel.on_site) # N: Revealed type is "django.contrib.sites.managers.CurrentSiteManager[myapp.models.MyModel]" installed_apps: - myapp - django.contrib.sites files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models from django.contrib.sites.models import Site from django.contrib.sites.managers import CurrentSiteManager class MyModel(models.Model): site = models.ForeignKey(Site, on_delete=models.CASCADE) on_site = CurrentSiteManager() - case: test_emits_error_for_unresolved_managers main: | from myapp import models installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from typing_extensions import reveal_type from django.db import models def LocalManager() -> models.Manager: """ Returns a manager instance of an inlined manager type that can't be resolved. """ class InnerManager(models.Manager): ... return InnerManager() class User(models.Model): name = models.TextField() class Booking(models.Model): renter = models.ForeignKey(User, on_delete=models.PROTECT) owner = models.ForeignKey(User, on_delete=models.PROTECT, related_name='bookingowner_set') objects = LocalManager() class TwoUnresolvable(models.Model): objects = LocalManager() second_objects = LocalManager() class AbstractUnresolvable(models.Model): objects = LocalManager() class Meta: abstract = True class InvisibleUnresolvable(AbstractUnresolvable): text = models.TextField() def process_booking(user: User) -> None: reveal_type(User.objects) reveal_type(User._default_manager) reveal_type(Booking.objects) reveal_type(Booking._default_manager) reveal_type(TwoUnresolvable.objects) reveal_type(TwoUnresolvable.second_objects) reveal_type(TwoUnresolvable._default_manager) reveal_type(InvisibleUnresolvable.objects) reveal_type(InvisibleUnresolvable._default_manager) reveal_type(user.bookingowner_set) reveal_type(user.booking_set) # Check QuerySet methods on UnknownManager reveal_type(Booking.objects.all) reveal_type(Booking.objects.custom) reveal_type(Booking.objects.all().filter) reveal_type(Booking.objects.all().custom) reveal_type(Booking.objects.first()) reveal_type(Booking.objects.get()) reveal_type([booking for booking in Booking.objects.all()]) reveal_type([booking for booking in Booking.objects.all().filter()]) # Check QuerySet methods for unresolvable manager reveal_type(user.booking_set.all) reveal_type(user.booking_set.custom) reveal_type(user.booking_set.all().filter) reveal_type(user.booking_set.all().custom) reveal_type(user.booking_set.all().first()) out: | myapp/models:14: error: Couldn't resolve related manager 'booking_set' for relation 'myapp.models.Booking.renter'. [django-manager-missing] myapp/models:14: error: Couldn't resolve related manager 'bookingowner_set' for relation 'myapp.models.Booking.owner'. [django-manager-missing] myapp/models:21: error: Could not resolve manager type for "myapp.models.Booking.objects" [django-manager-missing] myapp/models:24: error: Could not resolve manager type for "myapp.models.TwoUnresolvable.objects" [django-manager-missing] myapp/models:25: error: Could not resolve manager type for "myapp.models.TwoUnresolvable.second_objects" [django-manager-missing] myapp/models:28: error: Could not resolve manager type for "myapp.models.AbstractUnresolvable.objects" [django-manager-missing] myapp/models:37: note: Revealed type is "django.db.models.manager.Manager[myapp.models.User]" myapp/models:38: note: Revealed type is "django.db.models.manager.Manager[myapp.models.User]" myapp/models:40: note: Revealed type is "myapp.models.UnknownManager[myapp.models.Booking]" myapp/models:41: note: Revealed type is "django.db.models.manager.Manager[myapp.models.Booking]" myapp/models:43: note: Revealed type is "myapp.models.UnknownManager[myapp.models.TwoUnresolvable]" myapp/models:44: note: Revealed type is "myapp.models.UnknownManager[myapp.models.TwoUnresolvable]" myapp/models:45: note: Revealed type is "django.db.models.manager.Manager[myapp.models.TwoUnresolvable]" myapp/models:47: note: Revealed type is "myapp.models.UnknownManager[myapp.models.InvisibleUnresolvable]" myapp/models:48: note: Revealed type is "django.db.models.manager.Manager[myapp.models.InvisibleUnresolvable]" myapp/models:50: note: Revealed type is "django.db.models.fields.related_descriptors.RelatedManager[myapp.models.Booking]" myapp/models:51: note: Revealed type is "django.db.models.fields.related_descriptors.RelatedManager[myapp.models.Booking]" myapp/models:54: note: Revealed type is "def () -> myapp.models.UnknownQuerySet[myapp.models.Booking, myapp.models.Booking]" myapp/models:55: note: Revealed type is "Any" myapp/models:56: note: Revealed type is "def (*args: Any, **kwargs: Any) -> myapp.models.UnknownQuerySet[myapp.models.Booking, myapp.models.Booking]" myapp/models:57: note: Revealed type is "Any" myapp/models:58: note: Revealed type is "myapp.models.Booking | None" myapp/models:59: note: Revealed type is "myapp.models.Booking" myapp/models:60: note: Revealed type is "builtins.list[myapp.models.Booking]" myapp/models:61: note: Revealed type is "builtins.list[myapp.models.Booking]" myapp/models:65: note: Revealed type is "def () -> django.db.models.query.QuerySet[myapp.models.Booking, myapp.models.Booking]" myapp/models:66: error: "RelatedManager[Booking]" has no attribute "custom" [attr-defined] myapp/models:66: note: Revealed type is "Any" myapp/models:67: note: Revealed type is "def (*args: Any, **kwargs: Any) -> django.db.models.query.QuerySet[myapp.models.Booking, myapp.models.Booking]" myapp/models:68: error: "QuerySet[Booking, Booking]" has no attribute "custom" [attr-defined] myapp/models:68: note: Revealed type is "Any" myapp/models:69: note: Revealed type is "myapp.models.Booking | None" - case: subclass_manager_without_type_parameters main: | from typing_extensions import reveal_type from myapp.models import MySubModel reveal_type(MySubModel.objects) # N: Revealed type is "myapp.models.MySubManager[myapp.models.MySubModel]" reveal_type(MySubModel.objects.get()) # N: Revealed type is "myapp.models.MySubModel" installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from typing import ClassVar, TypeVar from typing_extensions import Self from django.db import models T = TypeVar("T", bound="MyModel") class MyManager(models.Manager[T]): pass class MySubManager(MyManager): pass class MyModel(models.Model): pass class MySubModel(MyModel): objects: ClassVar[MySubManager[Self]] = MySubManager() - case: subclass_manager_without_type_parameters_disallow_any_generics main: | from typing_extensions import reveal_type from myapp.models import MySubModel reveal_type(MySubModel.objects) reveal_type(MySubModel.objects.get()) installed_apps: - myapp mypy_config: | [mypy-myapp.models] disallow_any_generics = true out: | main:3: note: Revealed type is "myapp.models.MySubManager" main:4: note: Revealed type is "Any" myapp/models:9: error: Missing type parameters for generic type "MyManager" [type-arg] files: - path: myapp/__init__.py - path: myapp/models.py content: | from typing import ClassVar, TypeVar from django.db import models T = TypeVar("T", bound="MyModel") class MyManager(models.Manager[T]): pass class MySubManager(MyManager): pass class MyModel(models.Model): pass class MySubModel(MyModel): objects: ClassVar[MySubManager] = MySubManager() - case: nested_manager_class_definition main: | from typing_extensions import reveal_type from myapp.models import MyModel reveal_type(MyModel.objects) reveal_type(MyModel.objects.get()) installed_apps: - myapp out: | main:3: note: Revealed type is "myapp.models.MyModel.MyManager[myapp.models.MyModel]" main:4: note: Revealed type is "myapp.models.MyModel" files: - path: myapp/__init__.py - path: myapp/models.py content: | from typing import Any from django.db import models class MyModel(models.Model): class MyManager(models.Manager): def get_instance(self) -> int: pass objects = MyManager() - case: test_typechecks_filter_methods_of_queryset_type main: | from myapp.models import MyModel MyModel.objects.filter(id=1).filter(invalid=1) # E: Cannot resolve keyword 'invalid' into field. Choices are: id [misc] MyModel.objects.filter(id=1).get(invalid=1) # E: Cannot resolve keyword 'invalid' into field. Choices are: id [misc] MyModel.objects.filter(id=1).exclude(invalid=1) # E: Cannot resolve keyword 'invalid' into field. Choices are: id [misc] MyModel.objects.filter(id=1).create(invalid=1) # E: Unexpected attribute "invalid" for model "MyModel" [misc] installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class MyModel(models.Model): ... - case: test_does_not_populate_an_unexpected_type_argument main: | from typing_extensions import reveal_type from myapp.models import MyModel reveal_type(MyModel.populated_manager) # N: Revealed type is "myapp.models.PopulatedManager" reveal_type(MyModel.populated_manager.get()) # N: Revealed type is "myapp.models.MyModel" reveal_type(MyModel.populated_manager.filter()) # N: Revealed type is "django.db.models.query.QuerySet[myapp.models.MyModel, myapp.models.MyModel]" reveal_type(MyModel.populated_manager_from_generic_queryset) # N: Revealed type is "myapp.models.PopulatedManagerFromQuerySet" reveal_type(MyModel.populated_manager_from_generic_queryset.get()) # N: Revealed type is "myapp.models.MyModel" reveal_type(MyModel.populated_manager_from_generic_queryset.filter()) # N: Revealed type is "django.db.models.query.QuerySet[myapp.models.MyModel, myapp.models.MyModel]" reveal_type(MyModel.populated_manager_from_populated_queryset) # N: Revealed type is "myapp.models.PopulatedManagerFromPopulatedQuerySet" reveal_type(MyModel.populated_manager_from_populated_queryset.get()) # N: Revealed type is "myapp.models.MyModel" reveal_type(MyModel.populated_manager_from_populated_queryset.filter()) # N: Revealed type is "myapp.models.PopulatedQuerySet" reveal_type(MyModel.generic_manager) # N: Revealed type is "django.db.models.manager.Manager[myapp.models.MyModel]" reveal_type(MyModel.generic_manager.get()) # N: Revealed type is "myapp.models.MyModel" reveal_type(MyModel.generic_manager.filter()) # N: Revealed type is "django.db.models.query.QuerySet[myapp.models.MyModel, myapp.models.MyModel]" reveal_type(MyModel.generic_manager_from_generic_queryset) # N: Revealed type is "myapp.models.ManagerFromQuerySet[myapp.models.MyModel]" reveal_type(MyModel.generic_manager_from_generic_queryset.get()) # N: Revealed type is "myapp.models.MyModel" reveal_type(MyModel.generic_manager_from_generic_queryset.filter()) # N: Revealed type is "django.db.models.query.QuerySet[myapp.models.MyModel, myapp.models.MyModel]" reveal_type(MyModel.generic_manager_from_populated_queryset) # N: Revealed type is "myapp.models.ManagerFromPopulatedQuerySet[myapp.models.MyModel]" reveal_type(MyModel.generic_manager_from_populated_queryset.get()) # N: Revealed type is "myapp.models.MyModel" reveal_type(MyModel.generic_manager_from_populated_queryset.filter()) # N: Revealed type is "myapp.models.PopulatedQuerySet" installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class PopulatedManager(models.Manager["MyModel"]): ... class PopulatedQuerySet(models.QuerySet["MyModel"]): ... PopulatedManagerFromGenericQuerySet = PopulatedManager.from_queryset(models.QuerySet) PopulatedManagerFromPopulatedQuerySet = PopulatedManager.from_queryset(PopulatedQuerySet) GenericManagerFromGenericQuerySet = models.Manager.from_queryset(models.QuerySet) GenericManagerFromPopulatedQuerySet = models.Manager.from_queryset(PopulatedQuerySet) class MyModel(models.Model): populated_manager = PopulatedManager() populated_manager_from_generic_queryset = PopulatedManagerFromGenericQuerySet() populated_manager_from_populated_queryset = PopulatedManagerFromPopulatedQuerySet() generic_manager = models.Manager() generic_manager_from_generic_queryset = GenericManagerFromGenericQuerySet() generic_manager_from_populated_queryset = GenericManagerFromPopulatedQuerySet() # Regression test for #2304 - case: test_objects_managers_is_kept_with_specific_import_graph main: | from typing_extensions import reveal_type from zerver.models import RealmFilter reveal_type(RealmFilter.objects) # N: Revealed type is "django.db.models.manager.Manager[zerver.models.linkifiers.RealmFilter]" installed_apps: - django.contrib.auth - django.contrib.contenttypes - confirmation - zerver files: - path: confirmation/__init__.py - path: confirmation/models.py content: | from django.db import models from zerver.models import Realm class Confirmation(models.Model): realm = models.ForeignKey(Realm, on_delete=models.CASCADE) - path: zerver/__init__.py - path: zerver/models/__init__.py content: | from zerver.models.linkifiers import RealmFilter as RealmFilter from zerver.models.realms import Realm as Realm from zerver.models.streams import Stream as Stream from zerver.models.users import UserProfile as UserProfile RealmFilter.objects - path: zerver/models/linkifiers.py content: | from django.db import models class RealmFilter(models.Model): pass - path: zerver/models/realms.py content: | from django.db import models class Realm(models.Model): pass - path: zerver/models/streams.py content: | from django.db import models from zerver.models.realms import Realm from zerver.models.users import UserProfile class Stream(models.Model): realm = models.ForeignKey(Realm, on_delete=models.RESTRICT) creator = models.ForeignKey(UserProfile, on_delete=models.RESTRICT) - path: zerver/models/users.py content: | from django.contrib.auth.models import AbstractBaseUser, PermissionsMixin class UserProfile(AbstractBaseUser, PermissionsMixin): pass django-stubs-5.2.9/tests/typecheck/models/000077500000000000000000000000001513401051600205275ustar00rootroot00000000000000django-stubs-5.2.9/tests/typecheck/models/test_abstract.yml000066400000000000000000000174321513401051600241230ustar00rootroot00000000000000- case: test_filter_on_abstract_user_pk main: | from typing_extensions import reveal_type from django.contrib.auth.models import AbstractUser AbstractUser.objects.get(pk=1) AbstractUser.objects.get(pk__in=[1]) au: AbstractUser reveal_type(au.pk) # N: Revealed type is "Any" installed_apps: - django.contrib.auth - django.contrib.contenttypes - case: test_filter_on_abstract_user_pk_wrong_name main: | from django.contrib.auth.models import AbstractUser AbstractUser.objects.get(pkey=1) # ER: Cannot resolve keyword 'pkey' into field..* installed_apps: - django.contrib.auth - django.contrib.contenttypes - case: test_fetch_pk_with_custom_manager_on_abstract_model main: | from myapp.models import MyModel installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from typing_extensions import reveal_type from django.db import models class BaseManager(models.Manager): pass class BaseModel(models.Model): objects = BaseManager() class Meta: abstract = True def lock(self) -> None: reveal_type(type(self).objects.values_list("pk")) # N: Revealed type is "django.db.models.query.QuerySet[myapp.models.BaseModel, tuple[Any]]" class MyModel(BaseModel): field = models.IntegerField() - case: test_can_instantiate_with_recursive_relation_on_abstract_model main: | from myapp.models import Concrete, Recursive first = Concrete.objects.create(parent=None) Concrete.objects.create(parent=first) Recursive.objects.create(parent=None) Recursive(parent=Recursive(parent=None)) Concrete(parent=Concrete(parent=None)) out: | main:4: error: "type[Recursive]" has no attribute "objects" [attr-defined] main:5: error: Cannot instantiate abstract class "Recursive" with abstract attributes "DoesNotExist" and "MultipleObjectsReturned" [abstract] main:5: error: Unexpected attribute "parent" for model "Recursive" [misc] installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class Recursive(models.Model): parent = models.ForeignKey("self", null=True, on_delete=models.CASCADE) class Meta: abstract = True class Concrete(Recursive): ... - case: test_abstract_model_type_cannot_be_used_as_runtime_arg main: | from myapp.models import Abstract, Concrete, LiteralAbstract from typing import Generic, TypeVar, overload Abstract() # E: Cannot instantiate abstract class "Abstract" with abstract attributes "DoesNotExist" and "MultipleObjectsReturned" [abstract] LiteralAbstract() # E: Cannot instantiate abstract class "LiteralAbstract" with abstract attributes "DoesNotExist" and "MultipleObjectsReturned" [abstract] def f(klass: type[Abstract]) -> None: return None f(Abstract) # E: Only concrete class can be given where "type[Abstract]" is expected [type-abstract] f(Concrete) def second_arg(arg: str, klass: type[Abstract]) -> None: return None second_arg("abc", Abstract) # E: Only concrete class can be given where "type[Abstract]" is expected [type-abstract] second_arg(Abstract, Concrete) # E: Argument 1 to "second_arg" has incompatible type "type[Abstract]"; expected "str" [arg-type] T = TypeVar("T", bound=Abstract) def g(klass: type[T]) -> None: return None g(Abstract) # E: Only concrete class can be given where "type[Abstract]" is expected [type-abstract] g(Concrete) @overload def o(klass: type[T], arg: str) -> None: ... @overload def o(klass: type[T], arg: int) -> None: ... def o(klass: type[T], arg: str | int) -> None: return None o(Abstract, "a") # E: Only concrete class can be given where "type[Abstract]" is expected [type-abstract] o(Abstract, 1) # E: Only concrete class can be given where "type[Abstract]" is expected [type-abstract] o(Concrete, 1) class M: def method(self, klass: type[Abstract]) -> None: return None @overload def overloaded(self, arg: int, klass: type[Abstract]) -> None: ... @overload def overloaded(self, arg: str, klass: type[Abstract]) -> None: ... def overloaded(self, arg: str | int, klass: type[Abstract]) -> None: return None M().method(Abstract) # E: Only concrete class can be given where "type[Abstract]" is expected [type-abstract] M().overloaded(1, Abstract) # E: Only concrete class can be given where "type[Abstract]" is expected [type-abstract] M().overloaded("1", Abstract) # E: Only concrete class can be given where "type[Abstract]" is expected [type-abstract] class G(Generic[T]): def method(self, klass: type[T]) -> None: return None G[Abstract]().method(Abstract) # E: Only concrete class can be given where "type[Abstract]" is expected [type-abstract] # Additional plugin coverage unknown(Abstract) # E: Name "unknown" is not defined [name-defined] M().unknown(Abstract) # E: "M" has no attribute "unknown" [attr-defined] installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models from typing import Literal, ClassVar class Abstract(models.Model): field = models.CharField() class Meta: abstract = True class Concrete(Abstract): ... class LiteralAbstract(models.Model): class Meta: abstract: ClassVar[Literal[True]] - case: test_use_abstract_model main: | from myapp.models import create_animal, create_animal_generic, Cat, Animal, ExplicitConcrete create_animal(Cat, "Garfield") create_animal(Animal, "Animal") # E: Only concrete class can be given where "type[Animal]" is expected [type-abstract] create_animal_generic(Cat, "Grumpy") create_animal_generic(Animal, "Animal") # E: Only concrete class can be given where "type[Animal]" is expected [type-abstract] Animal() # E: Cannot instantiate abstract class "Animal" with abstract attributes "DoesNotExist" and "MultipleObjectsReturned" [abstract] ExplicitConcrete() installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from typing import Protocol, TypeVar from typing_extensions import reveal_type from django.db import models from django_stubs_ext.db.models import TypedModelMeta class Animal(models.Model): name = models.CharField(max_length=100) class Meta(TypedModelMeta): abstract = True class Cat(Animal): # Concrete model pass class ExplicitConcrete(Animal): class Meta: abstract = False def f() -> None: x: type[Animal] x() return None def create_animal(klass: type[Animal], name: str) -> Animal: obj = klass(name=name) obj.save() return obj T = TypeVar("T", bound=Animal) def create_animal_generic(klass: type[T], name: str) -> T: reveal_type(klass) # N: Revealed type is "type[T`-1]" return klass._default_manager.create(name=name) django-stubs-5.2.9/tests/typecheck/models/test_contrib_models.yml000066400000000000000000000217651513401051600253270ustar00rootroot00000000000000- case: contrib_auth_model_fields main: | from typing_extensions import reveal_type from django.contrib.auth.models import User reveal_type(User().username) # N: Revealed type is "builtins.str" reveal_type(User().password) # N: Revealed type is "builtins.str" reveal_type(User().first_name) # N: Revealed type is "builtins.str" reveal_type(User().last_name) # N: Revealed type is "builtins.str" reveal_type(User().email) # N: Revealed type is "builtins.str" reveal_type(User().is_staff) # N: Revealed type is "builtins.bool" reveal_type(User().is_active) # N: Revealed type is "builtins.bool" reveal_type(User().date_joined) # N: Revealed type is "datetime.datetime" reveal_type(User().last_login) # N: Revealed type is "datetime.datetime | None" reveal_type(User().is_authenticated) # N: Revealed type is "Literal[True]" reveal_type(User().is_anonymous) # N: Revealed type is "Literal[False]" reveal_type(User().groups.get()) # N: Revealed type is "django.contrib.auth.models.Group" reveal_type(User().user_permissions.get()) # N: Revealed type is "django.contrib.auth.models.Permission" reveal_type(User.groups) # N: Revealed type is "django.db.models.fields.related_descriptors.ManyToManyDescriptor[django.contrib.auth.models.Group, django.contrib.auth.models.User_groups]" reveal_type(User.user_permissions) # N: Revealed type is "django.db.models.fields.related_descriptors.ManyToManyDescriptor[django.contrib.auth.models.Permission, django.db.models.base.Model]" from django.contrib.auth.models import AnonymousUser reveal_type(AnonymousUser().is_authenticated) # N: Revealed type is "Literal[False]" reveal_type(AnonymousUser().is_anonymous) # N: Revealed type is "Literal[True]" from django.contrib.auth.models import Permission reveal_type(Permission().name) # N: Revealed type is "builtins.str" reveal_type(Permission().codename) # N: Revealed type is "builtins.str" from django.contrib.auth.models import PermissionsMixin p: type[PermissionsMixin] reveal_type(p().is_superuser) # N: Revealed type is "builtins.bool" from django.contrib.auth.models import Group reveal_type(Group().name) # N: Revealed type is "builtins.str" reveal_type(Group().permissions.get()) # N: Revealed type is "django.contrib.auth.models.Permission" reveal_type(Group.permissions) # N: Revealed type is "django.db.models.fields.related_descriptors.ManyToManyDescriptor[django.contrib.auth.models.Permission, django.contrib.auth.models.Group_permissions]" - case: can_override_abstract_user_manager main: | from typing_extensions import reveal_type from myapp.models import MyBaseUser, MyUser reveal_type(MyBaseUser.objects) # N: Revealed type is "myapp.models.MyBaseUserManager" reveal_type(MyBaseUser.objects.all()) # N: Revealed type is "django.db.models.query.QuerySet[myapp.models.MyBaseUser, myapp.models.MyBaseUser]" reveal_type(MyUser.objects) # N: Revealed type is "myapp.models.MyUserManager" reveal_type(MyUser.objects.all()) # N: Revealed type is "django.db.models.query.QuerySet[myapp.models.MyUser, myapp.models.MyUser]" installed_apps: - django.contrib.auth - django.contrib.contenttypes - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.contrib.auth.base_user import AbstractBaseUser, BaseUserManager from django.contrib.auth.models import AbstractUser, UserManager from typing import ClassVar class MyBaseUserManager(BaseUserManager["MyBaseUser"]): ... class MyBaseUser(AbstractBaseUser): objects = MyBaseUserManager() class MyUserManager(UserManager["MyUser"]): ... class MyUser(AbstractUser): objects: ClassVar[MyUserManager] = MyUserManager() - case: can_combine_permissions_mixin_and_abstract_base_user main: | from typing_extensions import reveal_type from django.contrib.auth.base_user import AbstractBaseUser from django.contrib.auth.models import PermissionsMixin from myapp.models import AuthUser reveal_type(AuthUser._meta) reveal_type(AuthUser()._meta) reveal_type(PermissionsMixin._meta) reveal_type(AbstractBaseUser._meta) out: | main:5: note: Revealed type is "django.db.models.options.Options[myapp.models.AuthUser]" main:6: note: Revealed type is "django.db.models.options.Options[myapp.models.AuthUser]" main:7: note: Revealed type is "django.db.models.options.Options[django.contrib.auth.models.PermissionsMixin]" main:8: note: Revealed type is "django.db.models.options.Options[django.contrib.auth.base_user.AbstractBaseUser]" installed_apps: - django.contrib.auth - django.contrib.contenttypes - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.contrib.auth.base_user import AbstractBaseUser from django.contrib.auth.models import PermissionsMixin class AuthUser(AbstractBaseUser, PermissionsMixin): class Meta: abstract = False db_table = "auth_user" - case: test_relation_specified_by_auth_user_model main: | from typing_extensions import reveal_type from other.models import Other reveal_type(Other().users.get()) reveal_type(Other.users.through) reveal_type(Other.users.through().myuser) reveal_type(Other.users.through.objects.get().myuser) reveal_type(Other().user) reveal_type(Other().unq_user) out: | main:3: note: Revealed type is "myapp.models.MyUser" main:4: note: Revealed type is "type[other.models.Other_users]" main:5: note: Revealed type is "myapp.models.MyUser" main:6: note: Revealed type is "myapp.models.MyUser" main:8: note: Revealed type is "myapp.models.MyUser" main:10: note: Revealed type is "myapp.models.MyUser" custom_settings: | INSTALLED_APPS = ('django.contrib.contenttypes', 'django.contrib.auth', 'myapp', 'other') AUTH_USER_MODEL='myapp.MyUser' files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class MyUser(models.Model): ... - path: other/__init__.py - path: other/models.py content: | from django.conf import settings from django.db import models class Other(models.Model): users = models.ManyToManyField(settings.AUTH_USER_MODEL) user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE) unq_user = models.OneToOneField(settings.AUTH_USER_MODEL, on_delete=models.CASCADE) - case: test_relate_to_auth_user_model_when_auth_not_installed main: | from typing_extensions import reveal_type from other.models import Other reveal_type(Other().user) out: | main:3: note: Revealed type is "myapp.models.MyUser" custom_settings: | INSTALLED_APPS = ('django.contrib.contenttypes', 'myapp', 'other') AUTH_USER_MODEL='myapp.MyUser' files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class MyUser(models.Model): ... - path: other/__init__.py - path: other/models.py content: | from django.conf import settings from django.db import models class Other(models.Model): user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE) - case: test_permissions_inherited_reverse_relations main: | from typing_extensions import reveal_type from django.contrib.auth.models import Group, Permission from django.contrib.contenttypes.models import ContentType reveal_type(Permission().user_set) # N: Revealed type is "django.contrib.auth.models.User_ManyRelatedManager[django.contrib.auth.models.User_user_permissions]" reveal_type(Group().user_set) # N: Revealed type is "django.contrib.auth.models.User_ManyRelatedManager[django.contrib.auth.models.User_groups]" reveal_type(ContentType.permission_set) # N: Revealed type is "django.db.models.fields.related_descriptors.ReverseManyToOneDescriptor[django.contrib.auth.models.Permission]" reveal_type(ContentType().permission_set) # N: Revealed type is "django.contrib.auth.models.Permission_RelatedManager" custom_settings: | INSTALLED_APPS = ('django.contrib.contenttypes', 'django.contrib.auth') AUTH_USER_MODEL='auth.User' django-stubs-5.2.9/tests/typecheck/models/test_create.yml000066400000000000000000000175041513401051600235630ustar00rootroot00000000000000- case: default_manager_create_is_typechecked main: | from myapp.models import User User.objects.create(pk=1, name='Max', age=10) User.objects.create(age=[]) # E: Incompatible type for "age" of "User" (got "list[Any]", expected "float | int | str | Combinable") [misc] installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class User(models.Model): name = models.CharField(max_length=100) age = models.IntegerField() - case: model_recognises_parent_attributes main: | from typing_extensions import reveal_type from myapp.models import Child c = Child.objects.create(name='Maxim', lastname='Maxim2') reveal_type(c.id) # N: Revealed type is "builtins.int" reveal_type(c.name) # N: Revealed type is "builtins.str" reveal_type(c.lastname) # N: Revealed type is "builtins.str" installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class Parent(models.Model): name = models.CharField(max_length=100) class Child(Parent): lastname = models.CharField(max_length=100) - case: deep_multiple_inheritance_with_create main: | from myapp.models import Child4 Child4.objects.create(name1='n1', name2='n2', value=1, value4=4) installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class Parent1(models.Model): name1 = models.CharField(max_length=50) class Parent2(models.Model): id2 = models.AutoField(primary_key=True) name2 = models.CharField(max_length=50) class Child1(Parent1, Parent2): value = models.IntegerField() class Child4(Child1): value4 = models.IntegerField() - case: mro_is_walked_for_field_annotations main: | from myapp.models import Child Child.objects.create(dct={"hello": "world"}) # no errors installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from __future__ import annotations from django.db import models class JSONField(models.TextField): pass # incomplete class Base(models.Model): dct: models.Field[dict[str, str], dict[str, str]] = JSONField() class Child(Base): pass - case: optional_id_fields_for_create_is_error_if_not_autofield main: | from myapp.models import Publisher, Book Book.objects.create(id=None) # E: Incompatible type for "id" of "Book" (got "None", expected "float | int | str | Combinable") [misc] Book.objects.create(publisher=None) # E: Incompatible type for "publisher" of "Book" (got "None", expected "Publisher | Combinable") [misc] Book.objects.create(publisher_id=None) # E: Incompatible type for "publisher_id" of "Book" (got "None", expected "Combinable | int | str") [misc] installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class Publisher(models.Model): pass class Book(models.Model): id = models.IntegerField(primary_key=True) publisher = models.ForeignKey(Publisher, on_delete=models.CASCADE) - case: none_for_primary_key_is_allowed_if_field_is_autogenerated main: | from myapp.models import Book Book.objects.create(id=None) installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class Book(models.Model): pass - case: when_default_for_primary_key_is_specified_allow_none_to_be_set main: | from typing_extensions import reveal_type from myapp.models import MyModel first = MyModel(id=None) reveal_type(first.id) # N: Revealed type is "builtins.int" first = MyModel.objects.create(id=None) reveal_type(first.id) # N: Revealed type is "builtins.int" first = MyModel() first.id = None reveal_type(first.id) # N: Revealed type is "builtins.int" from myapp.models import MyModel2 MyModel2(id=None) # E: Incompatible type for "id" of "MyModel2" (got "None", expected "float | int | str | Combinable") [misc] MyModel2.objects.create(id=None) # E: Incompatible type for "id" of "MyModel2" (got "None", expected "float | int | str | Combinable") [misc] second = MyModel2() second.id = None # E: Incompatible types in assignment (expression has type "None", variable has type "float | int | str | Combinable") [assignment] reveal_type(second.id) # N: Revealed type is "builtins.int" # default set but no primary key doesn't allow None from myapp.models import MyModel3 MyModel3(default=None) # E: Incompatible type for "default" of "MyModel3" (got "None", expected "float | int | str | Combinable") [misc] MyModel3.objects.create(default=None) # E: Incompatible type for "default" of "MyModel3" (got "None", expected "float | int | str | Combinable") [misc] third = MyModel3() third.default = None # E: Incompatible types in assignment (expression has type "None", variable has type "float | int | str | Combinable") [assignment] reveal_type(third.default) # N: Revealed type is "builtins.int" installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models def return_int() -> int: return 0 class MyModel(models.Model): id = models.IntegerField(primary_key=True, default=return_int) class MyModel2(models.Model): id = models.IntegerField(primary_key=True) class MyModel3(models.Model): default = models.IntegerField(default=return_int) - case: default_manager_acreate_is_typechecked main: | import asyncio from typing_extensions import reveal_type from myapp.models import User async def amain() -> None: reveal_type(await User.objects.acreate(pk=1, name='Max', age=10)) # N: Revealed type is "myapp.models.User" await User.objects.acreate(age=[]) # E: Incompatible type for "age" of "User" (got "list[Any]", expected "float | int | str | Combinable") [misc] installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class User(models.Model): name = models.CharField(max_length=100) age = models.IntegerField() - case: too_many_keyword_arguments_on_create main: | from myapp.models import MyUser MyUser.objects.create(id=1, foo="bbb") # E: Unexpected attribute "foo" for model "MyUser" [misc] installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class MyUser(models.Model): pass django-stubs-5.2.9/tests/typecheck/models/test_extra_methods.yml000066400000000000000000000053101513401051600251560ustar00rootroot00000000000000- case: if_field_has_choices_set_model_has_get_FIELDNAME_display_method main: | from typing_extensions import reveal_type from myapp.models import MyUser user = MyUser(name='user', gender='M') user.get_name_display() # E: "MyUser" has no attribute "get_name_display"; maybe "get_gender_display"? [attr-defined] reveal_type(user.get_gender_display()) # N: Revealed type is "builtins.str" installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models GENDER_CHOICES = ( ('M', 'Male'), ('F', 'Female'), ) class MyUser(models.Model): name = models.CharField(max_length=100) gender = models.CharField(max_length=100, choices=GENDER_CHOICES) - case: date_datetime_fields_have_get_next_by_get_previous_by disable_cache: true parametrized: - allow_any: "true" - allow_any: "false" mypy_config: | [mypy-myapp.models] disallow_any_generics = {{ allow_any }} disallow_any_explicit = {{ allow_any }} main: | from typing_extensions import reveal_type from myapp.models import MyUser reveal_type(MyUser().get_next_by_date()) # N: Revealed type is "myapp.models.MyUser" reveal_type(MyUser().get_next_by_datetime()) # N: Revealed type is "myapp.models.MyUser" reveal_type(MyUser().get_previous_by_date()) # N: Revealed type is "myapp.models.MyUser" reveal_type(MyUser().get_previous_by_datetime()) # N: Revealed type is "myapp.models.MyUser" # accept arbitrary kwargs MyUser().get_next_by_date(arg1=1, arg2=2) installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class MyUser(models.Model): date = models.DateField() datetime = models.DateTimeField() - case: get_next_by_get_previous_by_absent_if_null_true main: | from myapp.models import MyUser MyUser().get_next_by_date() # E: "MyUser" has no attribute "get_next_by_date" [attr-defined] MyUser().get_previous_by_date() # E: "MyUser" has no attribute "get_previous_by_date" [attr-defined] installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class MyUser(models.Model): date = models.DateField(null=True) django-stubs-5.2.9/tests/typecheck/models/test_indexes.yml000066400000000000000000000007261513401051600237550ustar00rootroot00000000000000- case: model_index main: | from django.db import models from django.db.models.functions import Lower models.Index(fields=["foo"]) models.Index(models.F("bar"), name="test") models.Index("foo", models.F("bar"), Lower("baz"), name="test") models.Index("foo", name="test", opclasses=["bar"]) models.Index("foo", name="test", condition=models.Q(foo=1)) models.Index("foo", name="test", include=["bar"]) django-stubs-5.2.9/tests/typecheck/models/test_inheritance.yml000066400000000000000000000124551513401051600246110ustar00rootroot00000000000000- case: test_meta_nested_class_allows_subclassing_in_multiple_inheritance main: | from typing import Any from django.db import models class Mixin1(models.Model): class Meta: abstract = True class Mixin2(models.Model): class Meta: abstract = True class User(Mixin1, Mixin2): pass - case: test_inheritance_from_abstract_model_does_not_fail_if_field_with_id_exists main: | from django.db import models class Abstract(models.Model): class Meta: abstract = True class User(Abstract): id = models.AutoField(primary_key=True) - case: test_typechecking_for_model_subclasses main: | from myapp.models import A, B, C def service(a: A) -> int: pass b_instance = B() service(b_instance) # E: Argument 1 to "service" has incompatible type "B"; expected "A" [arg-type] a_instance = A() c_instance = C() service(a_instance) service(c_instance) installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class A(models.Model): pass class B(models.Model): b_attr = 1 pass class C(A): pass - case: fail_if_no_such_attribute_on_model main: | from typing_extensions import reveal_type from myapp.models import B b_instance = B() reveal_type(b_instance.b_attr) # N: Revealed type is "builtins.int" b_instance.non_existent_attribute # E: "B" has no attribute "non_existent_attribute" [attr-defined] b_instance.non_existent_attribute = 2 # E: "B" has no attribute "non_existent_attribute" [attr-defined] installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class B(models.Model): b_attr = 1 pass - case: fields_recognized_if_base_model_is_subclass_of_models_model main: | from typing_extensions import reveal_type from myapp.models import User reveal_type(User().username) # N: Revealed type is "builtins.str" installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models from myapp.utils import MyBaseModel class User(MyBaseModel): username = models.CharField(max_length=100) - path: myapp/utils.py content: | from django.db.models import Model class MyBaseModel(Model): pass - case: django_contrib_gis_base_model_mixin_inheritance main: | from typing_extensions import reveal_type from myapp.models import User reveal_type(User().name) # N: Revealed type is "builtins.str" reveal_type(User().updated_at) # N: Revealed type is "datetime.datetime" installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models from django.contrib.gis.db import models as gis_models class Mixin1(gis_models.Model): class Meta: abstract = True class Mixin2(gis_models.Model): updated_at = models.DateTimeField(auto_now=True) class Meta: abstract = True class User(Mixin1, Mixin2): name = models.TextField() - case: test_manager_typevar_through_bounds main: | from typing_extensions import reveal_type from myapp.models import ResultProcessorConcrete reveal_type(ResultProcessorConcrete().f()) # N: Revealed type is "myapp.models.Concrete" installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from __future__ import annotations from django.db.models import Model from django.db.models.manager import Manager from typing import ClassVar, Generic, TypeVar from typing_extensions import Self M = TypeVar("M", bound=Model, covariant=True) class BaseManager(Manager[M]): ... class Base(Model): custom_objects: ClassVar[BaseManager[Self]] = BaseManager() class Bound(Base): pass T = TypeVar("T", bound=Bound) class ResultProcessorBase(Generic[T]): @property def model_cls(self) -> type[T]: raise NotImplementedError def f(self) -> T: return self.model_cls.custom_objects.get() class Concrete(Bound): pass class ResultProcessorConcrete(ResultProcessorBase[Concrete]): pass django-stubs-5.2.9/tests/typecheck/models/test_init.yml000066400000000000000000000325131513401051600232600ustar00rootroot00000000000000- case: arguments_to_init_unexpected_attributes main: | from myapp.models import MyUser user = MyUser(name=1, age=12) out: | main:2: error: Unexpected attribute "name" for model "MyUser" [misc] main:2: error: Unexpected attribute "age" for model "MyUser" [misc] installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class MyUser(models.Model): pass - case: plain_function_which_returns_model main: | from myapp.models import MyUser def func(i: int) -> MyUser: pass func("hello") # E: Argument 1 to "func" has incompatible type "str"; expected "int" [arg-type] installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class MyUser(models.Model): pass - case: arguments_to_init_from_class_incompatible_type main: | from myapp.models import MyUser user = MyUser(name='hello', age=[]) out: | main:2: error: Incompatible type for "age" of "MyUser" (got "list[Any]", expected "float | int | str | Combinable") [misc] installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class MyUser(models.Model): name = models.CharField(max_length=100) age = models.IntegerField() - case: arguments_to_init_combined_from_base_classes main: | from myapp.models import BaseUser, ChildUser user = ChildUser(name='Max', age=12, lastname='Lastname') installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class BaseUser(models.Model): name = models.CharField(max_length=100) age = models.IntegerField() class ChildUser(BaseUser): lastname = models.CharField(max_length=100) - case: fields_from_abstract_user_propagate_to_init main: | from myapp.models import MyUser user = MyUser(name='Maxim', number=1) installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class AbstractUser(models.Model): class Meta: abstract = True name = models.CharField(max_length=100) class MyUser(AbstractUser): number = models.IntegerField() - case: pk_refers_to_primary_key_and_could_be_passed_to_init main: | from myapp.models import MyUser1, MyUser2 user2 = MyUser1(pk='hello') user3 = MyUser2(pk=1, name='maxim') installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class MyUser1(models.Model): mypk = models.CharField(primary_key=True) class MyUser2(models.Model): name = models.CharField(max_length=100) - case: typechecking_of_pk main: | from myapp.models import MyUser1 user = MyUser1(pk=[]) # E: Incompatible type for "pk" of "MyUser1" (got "list[Any]", expected "float | int | str | Combinable | None") [misc] installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class MyUser1(models.Model): mypk = models.IntegerField(primary_key=True) - case: set_foreign_key_by_its_primary_key main: | from datetime import datetime now = datetime.now() from myapp.models import Publisher, PublisherDatetime, Book Book(publisher_id=1, publisher_dt_id=now) Book(publisher_id=[], publisher_dt_id=now) # E: Incompatible type for "publisher_id" of "Book" (got "list[Any]", expected "Combinable | int | str") [misc] Book(publisher_id=1, publisher_dt_id=1) # E: Incompatible type for "publisher_dt_id" of "Book" (got "int", expected "str | datetime | date | Combinable") [misc] installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class Publisher(models.Model): pass class PublisherDatetime(models.Model): dt_pk = models.DateTimeField(primary_key=True) class Book(models.Model): publisher = models.ForeignKey(Publisher, on_delete=models.CASCADE) publisher_dt = models.ForeignKey(PublisherDatetime, on_delete=models.CASCADE) - case: setting_value_to_an_array_of_ints main: | from myapp.models import MyModel array_val: tuple[int, ...] = (1,) MyModel(array=array_val) array_val2: list[int] = [1] MyModel(array=array_val2) class NotAValid: pass array_val3: list[NotAValid] = [NotAValid()] MyModel(array=array_val3) # E: Incompatible type for "array" of "MyModel" (got "list[NotAValid]", expected "Sequence[float | int | str] | Combinable") [misc] non_init = MyModel() non_init.array = array_val non_init.array = array_val2 non_init.array = array_val3 # E: Incompatible types in assignment (expression has type "list[NotAValid]", variable has type "Sequence[float | int | str] | Combinable") [assignment] installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models from django.contrib.postgres.fields import ArrayField class MyModel(models.Model): array = ArrayField(base_field=models.IntegerField()) - case: if_no_explicit_primary_key_id_can_be_passed main: | from myapp.models import MyModel MyModel(id=1, name='maxim') installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class MyModel(models.Model): name = models.CharField(max_length=100) - case: arguments_can_be_passed_as_positionals main: | from myapp.models import MyModel, MyModel2 MyModel(1) MyModel2(1, 12) MyModel2(1, []) # E: Incompatible type for "name" of "MyModel2" (got "list[Any]", expected "float | int | str | Combinable") [misc] installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class MyModel(models.Model): pass class MyModel2(models.Model): name = models.IntegerField() - case: charfield_with_integer_choices main: | from myapp.models import MyModel MyModel(day=1) installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class MyModel(models.Model): day = models.CharField(max_length=3, choices=((1, 'Fri'), (2, 'Sat'))) - case: optional_id_fields_allowed_in_init main: | from myapp.models import Book, Publisher Book(id=None) Book(publisher=None) Book(publisher_id=None) installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class Publisher(models.Model): name = models.CharField(primary_key=True, max_length=100) class Book(models.Model): publisher = models.ForeignKey(Publisher, on_delete=models.CASCADE, null=True) - case: init_in_abstract_model_classmethod_should_not_throw_error_for_valid_fields main: | from myapp.models import MyModel MyModel.base_init() installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models from typing_extensions import Self class AbstractModel(models.Model): class Meta: abstract = True text = models.CharField(max_length=100) @classmethod def base_init(cls) -> Self: return cls(text='mytext') class MyModel(AbstractModel): pass - case: field_set_type_honors_type_redefinition main: | from typing_extensions import reveal_type from myapp.models import MyModel non_init = MyModel() reveal_type(non_init.redefined_set_type) reveal_type(non_init.redefined_union_set_type) reveal_type(non_init.redefined_array_set_type) reveal_type(non_init.default_set_type) reveal_type(non_init.unset_set_type) non_init.redefined_set_type = "invalid" non_init.redefined_union_set_type = "invalid" array_val: list[str] = ["invalid"] non_init.redefined_array_set_type = array_val non_init.default_set_type = [] non_init.unset_set_type = [] MyModel( redefined_set_type="invalid", redefined_union_set_type="invalid", redefined_array_set_type=33, default_set_type=[], unset_set_type=[], ) out: | main:4: note: Revealed type is "builtins.int" main:5: note: Revealed type is "builtins.int" main:6: note: Revealed type is "builtins.list[builtins.int]" main:7: note: Revealed type is "builtins.int" main:8: note: Revealed type is "Any" main:9: error: Incompatible types in assignment (expression has type "str", variable has type "int") [assignment] main:10: error: Incompatible types in assignment (expression has type "str", variable has type "int | float") [assignment] main:12: error: Incompatible types in assignment (expression has type "list[str]", variable has type "Sequence[int | float]") [assignment] main:13: error: Incompatible types in assignment (expression has type "list[Never]", variable has type "float | int | str | Combinable") [assignment] main:15: error: Incompatible type for "redefined_set_type" of "MyModel" (got "str", expected "int") [misc] main:15: error: Incompatible type for "redefined_union_set_type" of "MyModel" (got "str", expected "int | float") [misc] main:15: error: Incompatible type for "redefined_array_set_type" of "MyModel" (got "int", expected "Sequence[int | float]") [misc] main:15: error: Incompatible type for "default_set_type" of "MyModel" (got "list[Any]", expected "float | int | str | Combinable") [misc] installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.contrib.postgres.fields import ArrayField from django.db import models from collections.abc import Sequence from typing import cast class MyModel(models.Model): redefined_set_type = cast("models.Field[int, int]", models.IntegerField()) redefined_union_set_type = cast("models.Field[int | float, int]", models.IntegerField()) redefined_array_set_type = cast( "ArrayField[Sequence[int | float], list[int]]", ArrayField(base_field=models.IntegerField()), ) default_set_type = models.IntegerField() unset_set_type = cast("models.Field", models.IntegerField()) - case: too_many_positional_arguments_on_init main: | from myapp.models import MyUser default_args: list[int] default_kwargs: dict[str, int] MyUser(1, "BB") # E: Too many arguments for "MyUser" [call-arg] MyUser("bbb", id=2) # E: Too many arguments for "MyUser" [call-arg] MyUser(1, "BB", *default_args) # E: Too many arguments for "MyUser" [call-arg] MyUser(1, "BB", **default_kwargs) # E: Too many arguments for "MyUser" [call-arg] # Should be ok because we cannot easily determine arg count MyUser(*"BB") MyUser(1, *["BB"]) MyUser(1, *("BB",)) MyUser(1, *default_args) MyUser(1, **default_kwargs) installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class MyUser(models.Model): pass django-stubs-5.2.9/tests/typecheck/models/test_meta_options.yml000066400000000000000000000241701513401051600250160ustar00rootroot00000000000000- case: meta_attribute_has_a_type_of_current_model main: | from typing_extensions import reveal_type from myapp.models import MyUser reveal_type(MyUser._meta) # N: Revealed type is "django.db.models.options.Options[myapp.models.MyUser]" installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class MyUser(models.Model): pass - case: get_field_returns_proper_field_type main: | from typing_extensions import reveal_type from myapp.models import MyUser reveal_type(MyUser._meta.get_field('base_name')) # N: Revealed type is "django.db.models.fields.CharField[builtins.str | builtins.int | django.db.models.expressions.Combinable, builtins.str]" reveal_type(MyUser.base_name.field) # N: Revealed type is "django.db.models.fields.CharField[builtins.str | builtins.int | django.db.models.expressions.Combinable, builtins.str]" reveal_type(MyUser._meta.get_field('name')) # N: Revealed type is "django.db.models.fields.CharField[builtins.str | builtins.int | django.db.models.expressions.Combinable, builtins.str]" reveal_type(MyUser.name.field) # N: Revealed type is "django.db.models.fields.CharField[builtins.str | builtins.int | django.db.models.expressions.Combinable, builtins.str]" reveal_type(MyUser._meta.get_field('age')) # N: Revealed type is "django.db.models.fields.IntegerField[builtins.float | builtins.int | builtins.str | django.db.models.expressions.Combinable, builtins.int]" reveal_type(MyUser.age.field) # N: Revealed type is "django.db.models.fields.IntegerField[builtins.float | builtins.int | builtins.str | django.db.models.expressions.Combinable, builtins.int]" reveal_type(MyUser._meta.get_field('to_user')) # N: Revealed type is "django.db.models.fields.related.ForeignKey[myapp.models.MyUser | django.db.models.expressions.Combinable, myapp.models.MyUser]" reveal_type(MyUser.to_user.field) # N: Revealed type is "django.db.models.fields.related.ForeignKey[myapp.models.MyUser | django.db.models.expressions.Combinable, myapp.models.MyUser]" MyUser._meta.get_field('unknown') # E: MyUser has no field named 'unknown' [misc] installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class MyBaseUser(models.Model): base_name = models.CharField(max_length=100) class MyUser(MyBaseUser): name = models.CharField(max_length=100) age = models.IntegerField() to_user = models.ForeignKey('self', on_delete=models.SET_NULL) - case: get_field_with_abstract_inheritance main: | from typing_extensions import reveal_type from myapp.models import MyModel MyModel._meta.get_field('non_existant') # E: MyModel has no field named 'non_existant' [misc] reveal_type(MyModel._meta.get_field('field')) # N: Revealed type is "django.contrib.postgres.fields.array.ArrayField[typing.Sequence[builtins.float | builtins.int | builtins.str] | django.db.models.expressions.Combinable, builtins.list[builtins.int]]" field: str reveal_type(MyModel._meta.get_field(field)) # N: Revealed type is "django.db.models.fields.Field[Any, Any] | django.db.models.fields.reverse_related.ForeignObjectRel | django.contrib.contenttypes.fields.GenericForeignKey" installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models from django.contrib.postgres.fields import ArrayField from django_stubs_ext.db.models import TypedModelMeta class AbstractModel(models.Model): class Meta(TypedModelMeta): abstract = True class MyModel(AbstractModel): field = ArrayField(models.IntegerField(), default=[]) - case: get_field_reverse_fk_with_related_query_name main: | from typing_extensions import reveal_type from myapp.models import ModelA reveal_type(ModelA._meta.get_field("model_b")) # N: Revealed type is "django.db.models.fields.reverse_related.ManyToOneRel" reveal_type(ModelA.modelb_set.field) # N: Revealed type is "django.db.models.fields.related.ForeignKey[myapp.models.ModelB, myapp.models.ModelB]" reveal_type(ModelA._meta.get_field("model_b_bis")) # N: Revealed type is "django.db.models.fields.reverse_related.ManyToOneRel" reveal_type(ModelA.model_b_bis.field) # N: Revealed type is "django.db.models.fields.related.ForeignKey[myapp.models.ModelB, myapp.models.ModelB]" installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class ModelA(models.Model): ... class ModelB(models.Model): model_a = models.ForeignKey(ModelA, on_delete=models.CASCADE, related_query_name="model_b") model_a_bis = models.ForeignKey(ModelA, on_delete=models.CASCADE, related_name="model_b_bis") - case: base_model_meta_incompatible_types main: | from django.db import models from django.contrib.postgres.fields import ArrayField from django_stubs_ext.db.models import TypedModelMeta class MyModel(models.Model): example = models.CharField(max_length=100) class Meta(TypedModelMeta): abstract = 7 # E: Incompatible types in assignment (expression has type "int", base class "TypedModelMeta" defined the type as "bool") [assignment] verbose_name = ['test'] # E: Incompatible types in assignment (expression has type "list[str]", base class "TypedModelMeta" defined the type as "str | _StrPromise") [assignment] unique_together = {1: 2} # E: Incompatible types in assignment (expression has type "dict[int, int]", base class "TypedModelMeta" defined the type as "Sequence[Sequence[str]]") [assignment] unknown_attr = True # can't check this class MyModelMultipleBaseMeta(models.Model): class Meta(MyModel.Meta, TypedModelMeta): abstract = 7 # E: Incompatible types in assignment (expression has type "int", base class "TypedModelMeta" defined the type as "bool") [assignment] - case: auto_base_model_meta_incompatible_types main: | from myapp.models import MyModelWithAutoTypedMeta installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class MyModelWithAutoTypedMeta(models.Model): example = models.CharField(max_length=100) class Meta: abstract = 0 # E: Incompatible types in assignment (expression has type "int", base class "TypedModelMeta" defined the type as "bool") [assignment] verbose_name = ['test'] # E: Incompatible types in assignment (expression has type "list[str]", base class "TypedModelMeta" defined the type as "str | _StrPromise") [assignment] unique_together = {1: 2} # E: Incompatible types in assignment (expression has type "dict[int, int]", base class "TypedModelMeta" defined the type as "Sequence[Sequence[str]]") [assignment] class DefinitelyNotAModel: class Meta: abstract = 7 verbose_name = ['test'] unique_together = {1: 2} unknown_attr = True - case: auto_base_model_meta_incompatible_types_multiple_inheritance main: | from myapp.models import MyModel, MyModel2, MyModel3 installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class MyModel(models.Model): class Meta: abstract = 5 # E: Incompatible types in assignment (expression has type "int", base class "TypedModelMeta" defined the type as "bool") [assignment] class MyModel2(models.Model): class Meta: abstract = 5 # E: Incompatible types in assignment (expression has type "int", base class "TypedModelMeta" defined the type as "bool") [assignment] class MyModel3(models.Model): class Meta(MyModel.Meta, MyModel2.Meta): abstract = 0 # OK because both base classes currently define this as int verbose_name = ['test'] # E: Incompatible types in assignment (expression has type "list[str]", base class "TypedModelMeta" defined the type as "str | _StrPromise") [assignment] unique_together = {1: 2} # E: Incompatible types in assignment (expression has type "dict[int, int]", base class "TypedModelMeta" defined the type as "Sequence[Sequence[str]]") [assignment] - case: instantiate_abstract_model main: | from myapp.models import AbstractModel, MyModel # Should not raise: MyModel(field=1) MyModel.objects.create(field=2) AbstractModel._default_manager.create() # Errors: AbstractModel() # E: Cannot instantiate abstract class "AbstractModel" with abstract attributes "DoesNotExist" and "MultipleObjectsReturned" [abstract] AbstractModel.objects.create() # E: "type[AbstractModel]" has no attribute "objects" [attr-defined] installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class AbstractModel(models.Model): base = models.TextField() class Meta: abstract = True class MyModel(AbstractModel): field = models.IntegerField() django-stubs-5.2.9/tests/typecheck/models/test_metaclass.yml000066400000000000000000000240071513401051600242700ustar00rootroot00000000000000- case: test_contributions_from_modelbase_metaclass main: | from typing_extensions import reveal_type from myapp.models import Abstract1, Abstract2, Concrete1, Concrete2, Concrete3 from django.db import models models.Model.DoesNotExist # E: "type[Model]" has no attribute "DoesNotExist" [attr-defined] models.Model.MultipleObjectsReturned # E: "type[Model]" has no attribute "MultipleObjectsReturned" [attr-defined] reveal_type(Abstract1.DoesNotExist) # N: Revealed type is "type[django.core.exceptions.ObjectDoesNotExist]" reveal_type(Abstract2.DoesNotExist) # N: Revealed type is "type[django.core.exceptions.ObjectDoesNotExist]" reveal_type(Concrete1.DoesNotExist) # N: Revealed type is "def (*args: builtins.object) -> myapp.models.Concrete1.DoesNotExist" reveal_type(Concrete2.DoesNotExist) # N: Revealed type is "def (*args: builtins.object) -> myapp.models.Concrete2.DoesNotExist" reveal_type(Abstract1.MultipleObjectsReturned) # N: Revealed type is "type[django.core.exceptions.MultipleObjectsReturned]" reveal_type(Abstract2.MultipleObjectsReturned) # N: Revealed type is "type[django.core.exceptions.MultipleObjectsReturned]" reveal_type(Concrete1.MultipleObjectsReturned) # N: Revealed type is "def (*args: builtins.object) -> myapp.models.Concrete1.MultipleObjectsReturned" reveal_type(Concrete2.MultipleObjectsReturned) # N: Revealed type is "def (*args: builtins.object) -> myapp.models.Concrete2.MultipleObjectsReturned" reveal_type(super(Concrete1, Concrete1()).DoesNotExist()) # N: Revealed type is "django.core.exceptions.ObjectDoesNotExist" reveal_type(super(Concrete2, Concrete2()).DoesNotExist()) # N: Revealed type is "myapp.models.Concrete1.DoesNotExist" a: type[Concrete1.DoesNotExist] a = Concrete1.DoesNotExist a = Concrete2.DoesNotExist a = Concrete3.DoesNotExist b: type[Concrete2.DoesNotExist] b = Concrete1.DoesNotExist # E: Incompatible types in assignment (expression has type "type[myapp.models.Concrete1.DoesNotExist]", variable has type "type[myapp.models.Concrete2.DoesNotExist]") [assignment] b = Concrete2.DoesNotExist b = Concrete3.DoesNotExist c: type[Concrete3.DoesNotExist] c = Concrete1.DoesNotExist # E: Incompatible types in assignment (expression has type "type[myapp.models.Concrete1.DoesNotExist]", variable has type "type[myapp.models.Concrete3.DoesNotExist]") [assignment] c = Concrete2.DoesNotExist # E: Incompatible types in assignment (expression has type "type[myapp.models.Concrete2.DoesNotExist]", variable has type "type[myapp.models.Concrete3.DoesNotExist]") [assignment] c = Concrete3.DoesNotExist d: type[Concrete1.MultipleObjectsReturned] d = Concrete1.MultipleObjectsReturned d = Concrete2.MultipleObjectsReturned d = Concrete3.MultipleObjectsReturned e: type[Concrete2.MultipleObjectsReturned] e = Concrete1.MultipleObjectsReturned # E: Incompatible types in assignment (expression has type "type[myapp.models.Concrete1.MultipleObjectsReturned]", variable has type "type[myapp.models.Concrete2.MultipleObjectsReturned]") [assignment] e = Concrete2.MultipleObjectsReturned e = Concrete3.MultipleObjectsReturned f: type[Concrete3.MultipleObjectsReturned] f = Concrete1.MultipleObjectsReturned # E: Incompatible types in assignment (expression has type "type[myapp.models.Concrete1.MultipleObjectsReturned]", variable has type "type[myapp.models.Concrete3.MultipleObjectsReturned]") [assignment] f = Concrete2.MultipleObjectsReturned # E: Incompatible types in assignment (expression has type "type[myapp.models.Concrete2.MultipleObjectsReturned]", variable has type "type[myapp.models.Concrete3.MultipleObjectsReturned]") [assignment] f = Concrete3.MultipleObjectsReturned installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class Abstract1(models.Model): class Meta: abstract = True class Abstract2(Abstract1): class Meta: abstract = True class Concrete1(Abstract2): ... class Concrete2(Concrete1): ... class Concrete3(Concrete2): ... - case: test_contributions_from_modelbase_metaclass_no_processing mypy_config: | [mypy.plugins.django-stubs] django_settings_module = mysettings strict_model_abstract_attrs = false main: | from typing_extensions import reveal_type from myapp.models import Abstract1, Abstract2, Concrete1, Concrete2, Concrete3 from django.db import models reveal_type(models.Model.DoesNotExist) # N: Revealed type is "type[django.core.exceptions.ObjectDoesNotExist]" reveal_type(models.Model.MultipleObjectsReturned) # N: Revealed type is "type[django.core.exceptions.MultipleObjectsReturned]" reveal_type(models.Model.objects) # N: Revealed type is "django.db.models.manager.Manager[django.db.models.base.Model]" reveal_type(Abstract1.DoesNotExist) # N: Revealed type is "type[django.core.exceptions.ObjectDoesNotExist]" reveal_type(Abstract2.DoesNotExist) # N: Revealed type is "type[django.core.exceptions.ObjectDoesNotExist]" reveal_type(Concrete1.DoesNotExist) # N: Revealed type is "def (*args: builtins.object) -> myapp.models.Concrete1.DoesNotExist" reveal_type(Concrete2.DoesNotExist) # N: Revealed type is "def (*args: builtins.object) -> myapp.models.Concrete2.DoesNotExist" reveal_type(Abstract1.MultipleObjectsReturned) # N: Revealed type is "type[django.core.exceptions.MultipleObjectsReturned]" reveal_type(Abstract2.MultipleObjectsReturned) # N: Revealed type is "type[django.core.exceptions.MultipleObjectsReturned]" reveal_type(Concrete1.MultipleObjectsReturned) # N: Revealed type is "def (*args: builtins.object) -> myapp.models.Concrete1.MultipleObjectsReturned" reveal_type(Concrete2.MultipleObjectsReturned) # N: Revealed type is "def (*args: builtins.object) -> myapp.models.Concrete2.MultipleObjectsReturned" reveal_type(super(Concrete1, Concrete1()).DoesNotExist()) # N: Revealed type is "django.core.exceptions.ObjectDoesNotExist" reveal_type(super(Concrete2, Concrete2()).DoesNotExist()) # N: Revealed type is "myapp.models.Concrete1.DoesNotExist" a: type[Concrete1.DoesNotExist] a = Concrete1.DoesNotExist a = Concrete2.DoesNotExist a = Concrete3.DoesNotExist b: type[Concrete2.DoesNotExist] b = Concrete1.DoesNotExist # E: Incompatible types in assignment (expression has type "type[myapp.models.Concrete1.DoesNotExist]", variable has type "type[myapp.models.Concrete2.DoesNotExist]") [assignment] b = Concrete2.DoesNotExist b = Concrete3.DoesNotExist c: type[Concrete3.DoesNotExist] c = Concrete1.DoesNotExist # E: Incompatible types in assignment (expression has type "type[myapp.models.Concrete1.DoesNotExist]", variable has type "type[myapp.models.Concrete3.DoesNotExist]") [assignment] c = Concrete2.DoesNotExist # E: Incompatible types in assignment (expression has type "type[myapp.models.Concrete2.DoesNotExist]", variable has type "type[myapp.models.Concrete3.DoesNotExist]") [assignment] c = Concrete3.DoesNotExist d: type[Concrete1.MultipleObjectsReturned] d = Concrete1.MultipleObjectsReturned d = Concrete2.MultipleObjectsReturned d = Concrete3.MultipleObjectsReturned e: type[Concrete2.MultipleObjectsReturned] e = Concrete1.MultipleObjectsReturned # E: Incompatible types in assignment (expression has type "type[myapp.models.Concrete1.MultipleObjectsReturned]", variable has type "type[myapp.models.Concrete2.MultipleObjectsReturned]") [assignment] e = Concrete2.MultipleObjectsReturned e = Concrete3.MultipleObjectsReturned f: type[Concrete3.MultipleObjectsReturned] f = Concrete1.MultipleObjectsReturned # E: Incompatible types in assignment (expression has type "type[myapp.models.Concrete1.MultipleObjectsReturned]", variable has type "type[myapp.models.Concrete3.MultipleObjectsReturned]") [assignment] f = Concrete2.MultipleObjectsReturned # E: Incompatible types in assignment (expression has type "type[myapp.models.Concrete2.MultipleObjectsReturned]", variable has type "type[myapp.models.Concrete3.MultipleObjectsReturned]") [assignment] f = Concrete3.MultipleObjectsReturned installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class Abstract1(models.Model): class Meta: abstract = True class Abstract2(Abstract1): class Meta: abstract = True class Concrete1(Abstract2): ... class Concrete2(Concrete1): ... class Concrete3(Concrete2): ... - case: test_custom_model_base_metaclass main: | from typing_extensions import reveal_type from myapp.models import This, Other this = This(field=Other()) reveal_type(this.field) # N: Revealed type is "myapp.models.Other" installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models from django.db.models.base import ModelBase class MyBase(ModelBase): ... class MyModel(models.Model, metaclass=MyBase): ... class Other(MyModel): ... class This(MyModel): field = models.ForeignKey(Other, on_delete=models.CASCADE) django-stubs-5.2.9/tests/typecheck/models/test_primary_key.yml000066400000000000000000000054301513401051600246460ustar00rootroot00000000000000- case: test_access_to_id_field_through_self_if_no_primary_key_defined main: | from typing_extensions import reveal_type from myapp.models import MyModel x = MyModel.objects.get(id=1) reveal_type(x.id) # N: Revealed type is "builtins.int" reveal_type(x.pk) # N: Revealed type is "builtins.int" MyModel.objects.get(pk=1) installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from typing_extensions import reveal_type from django.db import models class MyModel(models.Model): def __str__(self) -> str: reveal_type(self.id) # N: Revealed type is "builtins.int" reveal_type(self.pk) # N: Revealed type is "builtins.int" return '' - case: test_access_to_id_field_through_self_if_primary_key_is_defined main: | from typing_extensions import reveal_type from myapp.models import MyModel x = MyModel.objects.get(id='a') reveal_type(x.id) # N: Revealed type is "builtins.str" reveal_type(x.pk) # N: Revealed type is "builtins.str" MyModel.objects.get(pk='a') installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from typing_extensions import reveal_type from django.db import models class MyModel(models.Model): id = models.CharField(max_length=10, primary_key=True) def __str__(self) -> str: reveal_type(self.id) # N: Revealed type is "builtins.str" reveal_type(self.pk) # N: Revealed type is "builtins.str" return self.id - case: test_access_to_id_field_through_self_if_primary_key_has_different_name main: | from typing_extensions import reveal_type from myapp.models import MyModel x = MyModel.objects.get(primary='a') reveal_type(x.primary) # N: Revealed type is "builtins.str" reveal_type(x.pk) # N: Revealed type is "builtins.str" x.id # E: "MyModel" has no attribute "id" [attr-defined] MyModel.objects.get(pk='a') MyModel.objects.get(id='a') # E: Cannot resolve keyword 'id' into field. Choices are: primary [misc] installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from typing_extensions import reveal_type from django.db import models class MyModel(models.Model): primary = models.CharField(max_length=10, primary_key=True) def __str__(self) -> str: reveal_type(self.primary) # N: Revealed type is "builtins.str" reveal_type(self.pk) # N: Revealed type is "builtins.str" self.id # E: "MyModel" has no attribute "id" [attr-defined] return self.primary django-stubs-5.2.9/tests/typecheck/models/test_proxy_models.yml000066400000000000000000000017621513401051600250430ustar00rootroot00000000000000- case: foreign_key_to_proxy_model_accepts_first_non_proxy_model main: | from typing_extensions import reveal_type from myapp.models import Blog, Publisher, PublisherProxy Blog(publisher=Publisher()) Blog.objects.create(publisher=Publisher()) Blog().publisher = Publisher() reveal_type(Blog().publisher) # N: Revealed type is "myapp.models.PublisherProxy" installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models from django_stubs_ext.db.models import TypedModelMeta class Publisher(models.Model): pass class PublisherProxy(Publisher): class Meta(TypedModelMeta): proxy = True class Blog(models.Model): publisher = models.ForeignKey(to=PublisherProxy, on_delete=models.CASCADE) django-stubs-5.2.9/tests/typecheck/models/test_related_fields.yml000066400000000000000000000161011513401051600252560ustar00rootroot00000000000000- case: test_related_name_custom_manager main: | from typing_extensions import reveal_type from app1.models import Model1 from app2.models import Model2 reveal_type(Model1().test) # N: Revealed type is "app3.models.Model3_RelatedManager" reveal_type(Model2().test) # N: Revealed type is "app3.models.Model3_RelatedManager" reveal_type(Model1().test2) # N: Revealed type is "app3.models.Model4_RelatedManager" reveal_type(Model2().test2) # N: Revealed type is "app3.models.Model4_RelatedManager" installed_apps: - base - users - app1 - app2 - app3 files: - path: base/__init__.py - path: base/models.py content: | from django.db import models class OwnedModel(models.Model): owner = models.ForeignKey("users.User", on_delete=models.CASCADE) class Meta: abstract = True - path: users/__init__.py - path: users/models.py content: | from django.db import models class User(models.Model): pass - path: app1/__init__.py - path: app1/models.py content: | from django.db import models from base.models import OwnedModel from typing import TYPE_CHECKING if TYPE_CHECKING: from app3.models import Model3 class CustomQuerySet(models.QuerySet): pass Model1Manager = models.Manager.from_queryset(CustomQuerySet) class Model1(OwnedModel): objects = Model1Manager() - path: app2/__init__.py - path: app2/models.py content: | from django.db import models from base.models import OwnedModel from typing import TYPE_CHECKING if TYPE_CHECKING: from app3.models import Model3 class CustomQuerySet(models.QuerySet): pass Model2Manager = models.Manager.from_queryset(CustomQuerySet) class Model2(OwnedModel): objects = Model2Manager() - path: app3/__init__.py - path: app3/models.py content: | from django.db import models from app1.models import Model1 from app2.models import Model2 from base.models import OwnedModel class CustomQuerySet(models.QuerySet): pass Model3Manager = models.Manager.from_queryset(CustomQuerySet) class Model3(OwnedModel): a = models.ForeignKey(Model1, related_name="test", on_delete=models.CASCADE) b = models.ForeignKey(Model2, related_name="test", on_delete=models.CASCADE) objects = Model3Manager() Model4Manager = models.Manager.from_queryset(CustomQuerySet) class Model4(OwnedModel): a = models.ForeignKey(Model1, related_name="test2", on_delete=models.CASCADE) b = models.ForeignKey(Model2, related_name="test2", on_delete=models.CASCADE) objects = Model4Manager() - case: test_related_name_foreign_object_multi_column main: | from typing_extensions import reveal_type from app1.models import Model1, Model2 reveal_type(Model2.model_1.field) # N: Revealed type is "django.db.models.fields.related.ForeignObject[app1.models.Model1, app1.models.Model1]" reveal_type(Model2().model_1) # N: Revealed type is "app1.models.Model1" reveal_type(Model1.model_2s) # N: Revealed type is "django.db.models.fields.related_descriptors.ReverseManyToOneDescriptor[app1.models.Model2]" reveal_type(Model1().model_2s) # N: Revealed type is "django.db.models.fields.related_descriptors.RelatedManager[app1.models.Model2]" installed_apps: - app1 files: - path: app1/__init__.py - path: app1/models.py content: | from django.db import models from django.db.models.fields.related import ForeignObject class Model1(models.Model): type = models.TextField() ref = models.TextField() class Model2(models.Model): name = models.TextField() model_1_type = models.TextField() model_2_ref = models.TextField() model_1 = ForeignObject( Model1, to_fields=["type", "ref"], from_fields=["model_1_type", "model_2_ref"], on_delete=models.CASCADE, related_name="model_2s", ) - case: test_processes_other_relations_when_one_field_is_broken main: | from typing_extensions import reveal_type from myapp.models import MyModel reveal_type(MyModel().others) # N: Revealed type is "django.db.models.fields.related_descriptors.RelatedManager[myapp.models.Other]" installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class MyModel(models.Model): # Plugin doesn't handle lazy reference without app label broken = models.ManyToManyField("MyModel", related_name="mymodels") # type: ignore[var-annotated] class Other(models.Model): field = models.ForeignKey(MyModel, related_name="others", on_delete=models.CASCADE) - case: test_related_fields_with_two_generic_parameters main: | from typing_extensions import reveal_type from myapp.models import Address, School, Student reveal_type(Student().school) # N: Revealed type is "myapp.models.School" reveal_type(Student().address) # N: Revealed type is "myapp.models.Address" s = Student() s.school = School() s.address = Address() installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class School(models.Model): pass class Address(models.Model): pass class Student(models.Model): school = models.ForeignKey["School","School"](to="School", on_delete=models.CASCADE) address = models.OneToOneField["Address","Address"](to="Address", on_delete=models.CASCADE) - case: test_related_fields_with_one_generic_parameter expect_fail: True main: | from typing_extensions import reveal_type from myapp.models import Address, School, Student reveal_type(Student().school) # N: Revealed type is "myapp.models.School" reveal_type(Student().address) # N: Revealed type is "myapp.models.Address" s = Student() s.school = School() s.address = Address() installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class School(models.Model): pass class Address(models.Model): pass class Student(models.Model): school = models.ForeignKey["School"](to="School", on_delete=models.CASCADE) address = models.OneToOneField["Address"](to="Address", on_delete=models.CASCADE) django-stubs-5.2.9/tests/typecheck/models/test_state.yml000066400000000000000000000010171513401051600234300ustar00rootroot00000000000000- case: state_attribute_has_a_type_of_model_state main: | from typing_extensions import reveal_type from myapp.models import MyUser user = MyUser(pk=1) reveal_type(user._state) # N: Revealed type is "django.db.models.base.ModelState" installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class MyUser(models.Model): pass django-stubs-5.2.9/tests/typecheck/template/000077500000000000000000000000001513401051600210575ustar00rootroot00000000000000django-stubs-5.2.9/tests/typecheck/template/test_library.yml000066400000000000000000000115511513401051600243100ustar00rootroot00000000000000- case: register_filter_unnamed main: | from typing_extensions import reveal_type from django import template register = template.Library() @register.filter def lower(value: str) -> str: return value.lower() reveal_type(lower) # N: Revealed type is "def (value: builtins.str) -> builtins.str" - case: register_filter_named main: | from typing_extensions import reveal_type from django import template register = template.Library() @register.filter(name="tolower") def lower(value: str) -> str: return value.lower() reveal_type(lower) # N: Revealed type is "def (value: builtins.str) -> builtins.str" - case: register_simple_tag_no_args main: | from typing_extensions import reveal_type import datetime from django import template register = template.Library() @register.simple_tag def current_time(format_string: str) -> str: return datetime.datetime.now().strftime(format_string) reveal_type(current_time) # N: Revealed type is "def (format_string: builtins.str) -> builtins.str" - case: register_simple_tag_context main: | from typing_extensions import reveal_type from django import template from typing import Any register = template.Library() @register.simple_tag(takes_context=True) def current_time(context: dict[str, Any], format_string: str) -> str: timezone = context['timezone'] return "test" reveal_type(current_time) # N: Revealed type is "def (context: builtins.dict[builtins.str, Any], format_string: builtins.str) -> builtins.str" - case: register_simple_tag_named main: | from typing_extensions import reveal_type from django import template register = template.Library() @register.simple_tag(name='minustwo') def some_function(value: int) -> int: return value - 2 reveal_type(some_function) # N: Revealed type is "def (value: builtins.int) -> builtins.int" - case: register_simple_tag_via_call main: | from typing_extensions import reveal_type from django import template register = template.Library() def f(s: str) -> str: return s * 2 reveal_type(register.simple_tag(f, name='double')) # N: Revealed type is "def (s: builtins.str) -> builtins.str" - case: register_simple_block_tag main: | from typing_extensions import reveal_type import datetime from django import template register = template.Library() def f(s: str) -> str: return s * 2 reveal_type(register.simple_block_tag(f, name='double')) # N: Revealed type is "def (s: builtins.str) -> builtins.str" @register.simple_block_tag def current_time(format_string: str) -> str: return datetime.datetime.now().strftime(format_string) reveal_type(current_time) # N: Revealed type is "def (format_string: builtins.str) -> builtins.str" @register.simple_block_tag(name='minustwo') def some_function(value: int) -> int: return value - 2 reveal_type(some_function) # N: Revealed type is "def (value: builtins.int) -> builtins.int" - case: register_tag_no_args main: | from typing_extensions import reveal_type from django import template from django.template.base import Parser, Token from django.template.defaulttags import CycleNode register = template.Library() @register.tag def cycle(parser: Parser, token: Token) -> CycleNode: return CycleNode([]) reveal_type(cycle) # N: Revealed type is "def (parser: django.template.base.Parser, token: django.template.base.Token) -> django.template.defaulttags.CycleNode" - case: register_tag_named main: | from typing_extensions import reveal_type from django import template from django.template.base import Parser, Token from django.template.defaulttags import CycleNode register = template.Library() @register.tag(name="cycle") def cycle_impl(parser: Parser, token: Token) -> CycleNode: return CycleNode([]) reveal_type(cycle_impl) # N: Revealed type is "def (parser: django.template.base.Parser, token: django.template.base.Token) -> django.template.defaulttags.CycleNode" - case: register_inclusion_tag main: | from typing_extensions import reveal_type from django import template register = template.Library() @register.inclusion_tag('results.html') def format_results(results: list[str]) -> str: return ', '.join(results) reveal_type(format_results) # N: Revealed type is "def (results: builtins.list[builtins.str]) -> builtins.str" django-stubs-5.2.9/tests/typecheck/test/000077500000000000000000000000001513401051600202235ustar00rootroot00000000000000django-stubs-5.2.9/tests/typecheck/test/test_client.yml000066400000000000000000000052151513401051600232660ustar00rootroot00000000000000- case: client_methods main: | from typing_extensions import reveal_type from django.test.client import Client client = Client() response = client.get('foo') reveal_type(response.wsgi_request) # N: Revealed type is "django.core.handlers.wsgi.WSGIRequest" reveal_type(response.request) # N: Revealed type is "builtins.dict[builtins.str, Any]" reveal_type(response.templates) # N: Revealed type is "builtins.list[django.template.base.Template]" reveal_type(response.client) # N: Revealed type is "django.test.client.Client" reveal_type(response.context) # N: Revealed type is "django.test.utils.ContextList | builtins.dict[builtins.str, Any]" reveal_type(response.context_data) # N: Revealed type is "builtins.dict[builtins.str, Any] | None" reveal_type(response.content) # N: Revealed type is "builtins.bytes" reveal_type(response.redirect_chain) # N: Revealed type is "builtins.list[tuple[builtins.str, builtins.int]]" reveal_type(response.text) # N: Revealed type is "builtins.str" response.json() - case: async_client_methods main: | from typing_extensions import reveal_type from django.test.client import AsyncClient async def main() -> None: client = AsyncClient() response = await client.get('foo') reveal_type(response.asgi_request) # N: Revealed type is "django.core.handlers.asgi.ASGIRequest" reveal_type(response.request) # N: Revealed type is "builtins.dict[builtins.str, Any]" reveal_type(response.templates) # N: Revealed type is "builtins.list[django.template.base.Template]" reveal_type(response.client) # N: Revealed type is "django.test.client.AsyncClient" reveal_type(response.context) # N: Revealed type is "django.test.utils.ContextList | builtins.dict[builtins.str, Any]" reveal_type(response.context_data) # N: Revealed type is "builtins.dict[builtins.str, Any] | None" reveal_type(response.content) # N: Revealed type is "builtins.bytes" reveal_type(response.redirect_chain) # N: Revealed type is "builtins.list[tuple[builtins.str, builtins.int]]" response.json() - case: request_factories main: | from typing_extensions import reveal_type from django.test.client import RequestFactory, AsyncRequestFactory factory = RequestFactory() request = factory.get('foo') reveal_type(request) # N: Revealed type is "django.core.handlers.wsgi.WSGIRequest" async_factory = AsyncRequestFactory() async_request = async_factory.get('foo') reveal_type(async_request) # N: Revealed type is "django.core.handlers.asgi.ASGIRequest" django-stubs-5.2.9/tests/typecheck/test/test_testcase.yml000066400000000000000000000012771513401051600236270ustar00rootroot00000000000000- case: testcase_client_attr main: | from typing_extensions import reveal_type from django.test.testcases import TestCase class ExampleTestCase(TestCase): def test_method(self) -> None: reveal_type(self.client) # N: Revealed type is "django.test.client.Client" resp = self.client.post('/url', {'doit': 'srs'}, 'application/json', False, True, extra='value') reveal_type(resp.status_code) # N: Revealed type is "builtins.int" # Attributes monkey-patched by test Client class: resp.json() reveal_type(resp.wsgi_request) # N: Revealed type is "django.core.handlers.wsgi.WSGIRequest" django-stubs-5.2.9/tests/typecheck/test/test_utils.yml000066400000000000000000000005011513401051600231410ustar00rootroot00000000000000- case: override_settings main: | from typing_extensions import reveal_type from django.test import override_settings from django.conf import settings @override_settings(FOO='bar') def test() -> None: pass reveal_type(test) # N: Revealed type is "def ()" django-stubs-5.2.9/tests/typecheck/test_annotated.yml000066400000000000000000000020701513401051600230020ustar00rootroot00000000000000# Regression test for #893 - case: annotated_should_not_interfere main: | from dataclasses import dataclass from typing_extensions import Annotated, TypedDict, reveal_type from myapp.models import Blog class IntegerType: def __init__(self, min_value: int, max_value: int) -> None: pass @dataclass(unsafe_hash=True) class RatingComposite: max_value: Annotated[int, IntegerType(min_value=1, max_value=10)] = 5 class Obj(TypedDict): foo: int class X: x: Annotated[Blog, Obj] reveal_type(X().x) # N: Revealed type is "myapp.models.Blog" reveal_type(X().x.foo) # E: "Blog" has no attribute "foo" [attr-defined] # N: Revealed type is "Any" installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class Blog(models.Model): text = models.CharField(max_length=100) django-stubs-5.2.9/tests/typecheck/test_config.yml000066400000000000000000000051371513401051600223010ustar00rootroot00000000000000- case: pyproject_toml_config main: | from typing_extensions import reveal_type from myapp.models import MyModel mymodel = MyModel(user_id=1) reveal_type(mymodel.id) # N: Revealed type is "builtins.int" reveal_type(mymodel.user) # N: Revealed type is "django.contrib.auth.models.User" reveal_type(mymodel.objects) # N: Revealed type is "django.db.models.manager.Manager[myapp.models.MyModel]" mypy_config: | [mypy.plugins.django-stubs] django_settings_module = mysettings custom_settings: | SECRET_KEY = '1' INSTALLED_APPS = ('django.contrib.contenttypes', 'django.contrib.auth', 'myapp') files: - path: myapp/__init__.py - path: myapp/models.py content: | from typing_extensions import reveal_type from typing import TYPE_CHECKING from typing_extensions import reveal_type from django.db import models class MyModel(models.Model): user = models.ForeignKey('auth.User', on_delete=models.CASCADE) if TYPE_CHECKING: reveal_type(MyModel().user) # N: Revealed type is "django.contrib.auth.models.User" - case: generate_pyproject_toml_and_settings_file_from_installed_apps_key main: | from typing_extensions import reveal_type from myapp.models import MyModel mymodel = MyModel(user_id=1) reveal_type(mymodel.id) # N: Revealed type is "builtins.int" installed_apps: - django.contrib.auth - django.contrib.contenttypes - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class MyModel(models.Model): user = models.ForeignKey('auth.User', on_delete=models.CASCADE) - case: add_mypy_path_to_package_search main: | import extra_module mypy_config: | [mypy] mypy_path = ./extras [mypy.plugins.django-stubs] django_settings_module = mysettings files: - path: extras/extra_module.py content: | def extra_fn() -> None: pass - case: add_mypypath_env_var_to_package_search main: | import extra_module mypy_config: | [mypy.plugins.django-stubs] django_settings_module = mysettings files: - path: extras/extra_module.py content: | def extra_fn() -> None: pass env: - MYPYPATH=./extras django-stubs-5.2.9/tests/typecheck/test_forms.yml000066400000000000000000000143031513401051600221550ustar00rootroot00000000000000- case: no_incompatible_meta_nested_class_false_positive main: | from django import forms from myapp.models import Article, Category class ArticleForm(forms.ModelForm): class Meta: model = Article fields = '__all__' class CategoryForm(forms.ModelForm): class Meta: model = Category fields = '__all__' class CompositeForm(ArticleForm, CategoryForm): pass installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class Article(models.Model): pass class Category(models.Model): pass - case: formview_methods_on_forms_return_proper_types main: | from typing import Any from typing_extensions import reveal_type from django import forms from django.http import HttpRequest, HttpResponse from django.views.generic.edit import FormView class MyForm(forms.ModelForm): pass class MyForm2(forms.ModelForm): pass # FormView generic param provided class MyView(FormView[MyForm]): form_class = MyForm def post(self, request: HttpRequest, *args: Any, **kwds: Any) -> HttpResponse: form_class = self.get_form_class() reveal_type(form_class) # N: Revealed type is "type[main.MyForm]" reveal_type(self.get_form(None)) # N: Revealed type is "main.MyForm" reveal_type(self.get_form()) # N: Revealed type is "main.MyForm" reveal_type(self.get_form(form_class)) # N: Revealed type is "main.MyForm" reveal_type(self.get_form(MyForm2)) # N: Revealed type is "main.MyForm" # E: Argument 1 to "get_form" of "FormMixin" has incompatible type "type[MyForm2]"; expected "type[MyForm] | None" [arg-type] return HttpResponse() # FormView generic param omitted -- fallback to TypeVar default class MyView2(FormView): form_class = MyForm def post(self, request: HttpRequest, *args: Any, **kwds: Any) -> HttpResponse: form_class = self.get_form_class() reveal_type(form_class) # N: Revealed type is "type[Any]" reveal_type(self.get_form(None)) # N: Revealed type is "Any" reveal_type(self.get_form()) # N: Revealed type is "Any" reveal_type(self.get_form(form_class)) # N: Revealed type is "Any" reveal_type(self.get_form(MyForm2)) # N: Revealed type is "Any" return HttpResponse() - case: formview_form_valid_proper_type main: | from django.http import HttpRequest, HttpResponse from django.forms import models from django.views.generic.edit import FormView class RegistrationForm(models.ModelForm): ... class RegistrationViewNoGeneric(FormView): form_class = RegistrationForm template_name = 'web_app/registration.html' def form_valid(self, form: RegistrationForm) -> HttpResponse: form.save() return super().form_valid(form) class RegistrationViewWithGeneric(FormView[RegistrationForm]): form_class = RegistrationForm template_name = 'web_app/registration.html' def form_valid(self, form: RegistrationForm) -> HttpResponse: form.save() return super().form_valid(form) - case: updateview_form_valid_has_form_save main: | from typing_extensions import reveal_type from django import forms from django.http import HttpResponse from django.views.generic.edit import UpdateView class MyForm(forms.ModelForm): pass class MyView(UpdateView): form_class = MyForm def form_valid(self, form: forms.BaseModelForm) -> HttpResponse: reveal_type(form.save) # N: Revealed type is "def (commit: builtins.bool =) -> Any" return HttpResponse() - case: successmessagemixin_compatible_with_formmixin main: | from django.views.generic.edit import FormMixin from django.contrib.messages.views import SuccessMessageMixin class FormFirstView(FormMixin, SuccessMessageMixin): pass class SuccessMessageFirstView(FormMixin, SuccessMessageMixin): pass - case: generic_modelchoicefield_label_from_instance main: | from django import forms from myapp.models import Article, Category class ArticleChoiceField(forms.ModelChoiceField[Article]): def label_from_instance(self, obj: Article) -> str: return obj.name class BrokenArticleChoiceField(forms.ModelChoiceField[Article]): def label_from_instance(self, obj: Article) -> str: obj.title # E: "Article" has no attribute "title" [attr-defined] return 'a' class ArticleMultipleChoiceField(forms.ModelMultipleChoiceField[Article]): def label_from_instance(self, obj: Article) -> str: return obj.name class ChooseArticleForm(forms.Form): articles = ArticleMultipleChoiceField( queryset=Article.objects.none(), ) best_article = ArticleChoiceField( queryset=Article.objects.none(), ) best_category = ArticleChoiceField( queryset=Category.objects.none(), # E: Argument "queryset" to "ArticleChoiceField" has incompatible type "QuerySet[Category, Category]"; expected "Manager[Article] | QuerySet[Article, Article] | None" [arg-type] ) installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class Category(models.Model): title = models.CharField(max_length=128) class Article(models.Model): name = models.CharField(max_length=128) django-stubs-5.2.9/tests/typecheck/test_formsets.yml000066400000000000000000000017171513401051600226760ustar00rootroot00000000000000- case: inlineformset_factory main: | from typing import Any from typing_extensions import reveal_type from django import forms from myapp.models import Article, Category ArticleFS: type[forms.BaseInlineFormSet[Article, Category, Any]] = forms.inlineformset_factory(Category, Article) ArticleFS(instance=Article()) # E: Argument "instance" to "BaseInlineFormSet" has incompatible type "Article"; expected "Category | None" [arg-type] fs = ArticleFS(instance=Category()) reveal_type(fs.instance) # N: Revealed type is "myapp.models.Category" reveal_type(fs.get_queryset()) # N: Revealed type is "django.db.models.query.QuerySet[myapp.models.Article, myapp.models.Article]" installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class Article(models.Model): pass class Category(models.Model): pass django-stubs-5.2.9/tests/typecheck/test_helpers.yml000066400000000000000000000056031513401051600224740ustar00rootroot00000000000000- case: transaction_atomic_contextmanager main: | from django.db import transaction with transaction.atomic(): pass with transaction.atomic(using="mydb"): pass with transaction.atomic(using="mydb", savepoint=False): pass with transaction.atomic(using="mydb", savepoint=False, durable=True): pass - case: transaction_atomic_decorator main: | from typing_extensions import reveal_type from django.db import transaction @transaction.atomic() def decorated_func(param1: str, param2: int) -> bool: pass # Ensure that the function's type is preserved reveal_type(decorated_func) # N: Revealed type is "def (param1: builtins.str, param2: builtins.int) -> builtins.bool" @transaction.atomic(using="mydb") def decorated_func_using(param1: str, param2: int) -> bool: pass # Ensure that the function's type is preserved reveal_type(decorated_func_using) # N: Revealed type is "def (param1: builtins.str, param2: builtins.int) -> builtins.bool" class ClassWithAtomicMethod: # Bare decorator @transaction.atomic def atomic_method1(self, abc: int) -> str: pass @transaction.atomic(savepoint=True) def atomic_method2(self) -> None: pass @transaction.atomic(using="db", savepoint=True) def atomic_method3(self, myparam: str) -> int: pass ClassWithAtomicMethod().atomic_method1("abc") # E: Argument 1 to "atomic_method1" of "ClassWithAtomicMethod" has incompatible type "str"; expected "int" [arg-type] # Ensure that the method's type is preserved reveal_type(ClassWithAtomicMethod().atomic_method1) # N: Revealed type is "def (abc: builtins.int) -> builtins.str" # Ensure that the method's type is preserved reveal_type(ClassWithAtomicMethod().atomic_method3) # N: Revealed type is "def (myparam: builtins.str) -> builtins.int" - case: mark_safe_decorator_and_function main: | from typing_extensions import reveal_type from django.utils.safestring import mark_safe s = 'hello' reveal_type(mark_safe(s)) # N: Revealed type is "django.utils.safestring.SafeString" reveal_type(mark_safe(s) + mark_safe(s)) # N: Revealed type is "django.utils.safestring.SafeString" reveal_type(s + mark_safe(s)) # N: Revealed type is "builtins.str" s += mark_safe(s) reveal_type(s) # N: Revealed type is "builtins.str" ms = mark_safe(s) ms += mark_safe(s) reveal_type(ms) # N: Revealed type is "django.utils.safestring.SafeString" @mark_safe def func(s: str) -> str: pass reveal_type(func) # N: Revealed type is "def (s: builtins.str) -> builtins.str" django-stubs-5.2.9/tests/typecheck/test_import_all.yml000066400000000000000000000756411513401051600232050ustar00rootroot00000000000000- case: import_all_modules main: | import django import django.apps import django.apps.config import django.apps.registry import django.conf import django.conf.global_settings import django.conf.locale import django.conf.urls import django.conf.urls.i18n import django.conf.urls.static import django.contrib import django.contrib.admin import django.contrib.admin.actions import django.contrib.admin.apps import django.contrib.admin.checks import django.contrib.admin.decorators import django.contrib.admin.exceptions import django.contrib.admin.filters import django.contrib.admin.forms import django.contrib.admin.helpers import django.contrib.admin.migrations import django.contrib.admin.models import django.contrib.admin.options import django.contrib.admin.sites import django.contrib.admin.templatetags import django.contrib.admin.templatetags.admin_list import django.contrib.admin.templatetags.admin_modify import django.contrib.admin.templatetags.admin_urls import django.contrib.admin.templatetags.base import django.contrib.admin.templatetags.log import django.contrib.admin.tests import django.contrib.admin.utils import django.contrib.admin.views import django.contrib.admin.views.autocomplete import django.contrib.admin.views.decorators import django.contrib.admin.views.main import django.contrib.admin.widgets import django.contrib.admindocs import django.contrib.admindocs.apps import django.contrib.admindocs.middleware import django.contrib.admindocs.urls import django.contrib.admindocs.utils import django.contrib.admindocs.views import django.contrib.auth import django.contrib.auth.admin import django.contrib.auth.apps import django.contrib.auth.backends import django.contrib.auth.base_user import django.contrib.auth.checks import django.contrib.auth.context_processors import django.contrib.auth.decorators import django.contrib.auth.forms import django.contrib.auth.handlers import django.contrib.auth.handlers.modwsgi import django.contrib.auth.hashers import django.contrib.auth.management import django.contrib.auth.management.commands import django.contrib.auth.management.commands.changepassword import django.contrib.auth.management.commands.createsuperuser import django.contrib.auth.middleware import django.contrib.auth.migrations import django.contrib.auth.mixins import django.contrib.auth.models import django.contrib.auth.password_validation import django.contrib.auth.signals import django.contrib.auth.tokens import django.contrib.auth.urls import django.contrib.auth.validators import django.contrib.auth.views import django.contrib.contenttypes import django.contrib.contenttypes.admin import django.contrib.contenttypes.apps import django.contrib.contenttypes.checks import django.contrib.contenttypes.fields import django.contrib.contenttypes.forms import django.contrib.contenttypes.management import django.contrib.contenttypes.management.commands import django.contrib.contenttypes.management.commands.remove_stale_contenttypes import django.contrib.contenttypes.migrations import django.contrib.contenttypes.models import django.contrib.contenttypes.views import django.contrib.contenttypes.prefetch import django.contrib.flatpages import django.contrib.flatpages.admin import django.contrib.flatpages.apps import django.contrib.flatpages.forms import django.contrib.flatpages.middleware import django.contrib.flatpages.migrations import django.contrib.flatpages.models import django.contrib.flatpages.sitemaps import django.contrib.flatpages.templatetags import django.contrib.flatpages.templatetags.flatpages import django.contrib.flatpages.urls import django.contrib.flatpages.views import django.contrib.gis import django.contrib.gis.admin import django.contrib.gis.admin.options import django.contrib.gis.apps import django.contrib.gis.db import django.contrib.gis.db.backends import django.contrib.gis.db.backends.base import django.contrib.gis.db.backends.base.adapter import django.contrib.gis.db.backends.base.features import django.contrib.gis.db.backends.base.models import django.contrib.gis.db.backends.base.operations import django.contrib.gis.db.backends.mysql import django.contrib.gis.db.backends.mysql.base import django.contrib.gis.db.backends.mysql.features import django.contrib.gis.db.backends.mysql.introspection import django.contrib.gis.db.backends.mysql.operations import django.contrib.gis.db.backends.mysql.schema import django.contrib.gis.db.backends.oracle import django.contrib.gis.db.backends.oracle.adapter import django.contrib.gis.db.backends.oracle.base import django.contrib.gis.db.backends.oracle.features import django.contrib.gis.db.backends.oracle.introspection import django.contrib.gis.db.backends.oracle.models import django.contrib.gis.db.backends.oracle.operations import django.contrib.gis.db.backends.oracle.schema import django.contrib.gis.db.backends.postgis import django.contrib.gis.db.backends.postgis.adapter import django.contrib.gis.db.backends.postgis.base import django.contrib.gis.db.backends.postgis.const import django.contrib.gis.db.backends.postgis.features import django.contrib.gis.db.backends.postgis.introspection import django.contrib.gis.db.backends.postgis.models import django.contrib.gis.db.backends.postgis.operations import django.contrib.gis.db.backends.postgis.pgraster import django.contrib.gis.db.backends.postgis.schema import django.contrib.gis.db.backends.spatialite import django.contrib.gis.db.backends.spatialite.adapter import django.contrib.gis.db.backends.spatialite.base import django.contrib.gis.db.backends.spatialite.client import django.contrib.gis.db.backends.spatialite.features import django.contrib.gis.db.backends.spatialite.introspection import django.contrib.gis.db.backends.spatialite.models import django.contrib.gis.db.backends.spatialite.operations import django.contrib.gis.db.backends.spatialite.schema import django.contrib.gis.db.backends.utils import django.contrib.gis.db.models import django.contrib.gis.db.models.aggregates import django.contrib.gis.db.models.fields import django.contrib.gis.db.models.functions import django.contrib.gis.db.models.lookups import django.contrib.gis.db.models.proxy import django.contrib.gis.db.models.sql import django.contrib.gis.db.models.sql.conversion import django.contrib.gis.feeds import django.contrib.gis.forms import django.contrib.gis.forms.fields import django.contrib.gis.forms.widgets import django.contrib.gis.gdal import django.contrib.gis.gdal.base import django.contrib.gis.gdal.datasource import django.contrib.gis.gdal.driver import django.contrib.gis.gdal.envelope import django.contrib.gis.gdal.error import django.contrib.gis.gdal.feature import django.contrib.gis.gdal.field import django.contrib.gis.gdal.geometries import django.contrib.gis.gdal.geomtype import django.contrib.gis.gdal.layer import django.contrib.gis.gdal.libgdal import django.contrib.gis.gdal.prototypes import django.contrib.gis.gdal.prototypes.ds import django.contrib.gis.gdal.prototypes.errcheck import django.contrib.gis.gdal.prototypes.generation import django.contrib.gis.gdal.prototypes.geom import django.contrib.gis.gdal.prototypes.raster import django.contrib.gis.gdal.prototypes.srs import django.contrib.gis.gdal.raster import django.contrib.gis.gdal.raster.band import django.contrib.gis.gdal.raster.base import django.contrib.gis.gdal.raster.const import django.contrib.gis.gdal.raster.source import django.contrib.gis.gdal.srs import django.contrib.gis.geoip2 import django.contrib.gis.geometry import django.contrib.gis.geos import django.contrib.gis.geos.base import django.contrib.gis.geos.collections import django.contrib.gis.geos.coordseq import django.contrib.gis.geos.error import django.contrib.gis.geos.factory import django.contrib.gis.geos.geometry import django.contrib.gis.geos.io import django.contrib.gis.geos.libgeos import django.contrib.gis.geos.linestring import django.contrib.gis.geos.mutable_list import django.contrib.gis.geos.point import django.contrib.gis.geos.polygon import django.contrib.gis.geos.prepared import django.contrib.gis.geos.prototypes import django.contrib.gis.geos.prototypes.coordseq import django.contrib.gis.geos.prototypes.errcheck import django.contrib.gis.geos.prototypes.geom import django.contrib.gis.geos.prototypes.io import django.contrib.gis.geos.prototypes.misc import django.contrib.gis.geos.prototypes.predicates import django.contrib.gis.geos.prototypes.prepared import django.contrib.gis.geos.prototypes.threadsafe import django.contrib.gis.geos.prototypes.topology import django.contrib.gis.measure import django.contrib.gis.ptr import django.contrib.gis.serializers import django.contrib.gis.serializers.geojson import django.contrib.gis.shortcuts import django.contrib.gis.sitemaps import django.contrib.gis.sitemaps.kml import django.contrib.gis.sitemaps.views import django.contrib.gis.utils import django.contrib.gis.utils.layermapping import django.contrib.gis.utils.ogrinfo import django.contrib.gis.utils.ogrinspect import django.contrib.gis.utils.srs import django.contrib.gis.views import django.contrib.humanize import django.contrib.humanize.apps import django.contrib.humanize.templatetags import django.contrib.humanize.templatetags.humanize import django.contrib.messages import django.contrib.messages.api import django.contrib.messages.apps import django.contrib.messages.constants import django.contrib.messages.context_processors import django.contrib.messages.middleware import django.contrib.messages.storage import django.contrib.messages.storage.base import django.contrib.messages.storage.cookie import django.contrib.messages.storage.fallback import django.contrib.messages.storage.session import django.contrib.messages.utils import django.contrib.messages.views import django.contrib.messages.test import django.contrib.postgres import django.contrib.postgres.aggregates import django.contrib.postgres.aggregates.general import django.contrib.postgres.aggregates.mixins import django.contrib.postgres.aggregates.statistics import django.contrib.postgres.apps import django.contrib.postgres.constraints import django.contrib.postgres.expressions import django.contrib.postgres.fields import django.contrib.postgres.fields.array import django.contrib.postgres.fields.citext import django.contrib.postgres.fields.hstore import django.contrib.postgres.fields.jsonb import django.contrib.postgres.fields.ranges import django.contrib.postgres.fields.utils import django.contrib.postgres.forms import django.contrib.postgres.forms.array import django.contrib.postgres.forms.hstore import django.contrib.postgres.forms.ranges import django.contrib.postgres.functions import django.contrib.postgres.indexes import django.contrib.postgres.lookups import django.contrib.postgres.operations import django.contrib.postgres.search import django.contrib.postgres.serializers import django.contrib.postgres.signals import django.contrib.postgres.utils import django.contrib.postgres.validators import django.contrib.redirects import django.contrib.redirects.admin import django.contrib.redirects.apps import django.contrib.redirects.middleware import django.contrib.redirects.migrations import django.contrib.redirects.models import django.contrib.sessions import django.contrib.sessions.apps import django.contrib.sessions.backends import django.contrib.sessions.backends.base import django.contrib.sessions.backends.cache import django.contrib.sessions.backends.cached_db import django.contrib.sessions.backends.db import django.contrib.sessions.backends.file import django.contrib.sessions.backends.signed_cookies import django.contrib.sessions.base_session import django.contrib.sessions.exceptions import django.contrib.sessions.management import django.contrib.sessions.management.commands import django.contrib.sessions.management.commands.clearsessions import django.contrib.sessions.middleware import django.contrib.sessions.migrations import django.contrib.sessions.models import django.contrib.sessions.serializers import django.contrib.sitemaps import django.contrib.sitemaps.apps import django.contrib.sitemaps.views import django.contrib.sites import django.contrib.sites.admin import django.contrib.sites.apps import django.contrib.sites.checks import django.contrib.sites.management import django.contrib.sites.managers import django.contrib.sites.middleware import django.contrib.sites.migrations import django.contrib.sites.models import django.contrib.sites.requests import django.contrib.sites.shortcuts import django.contrib.staticfiles import django.contrib.staticfiles.apps import django.contrib.staticfiles.checks import django.contrib.staticfiles.finders import django.contrib.staticfiles.handlers import django.contrib.staticfiles.management import django.contrib.staticfiles.management.commands import django.contrib.staticfiles.management.commands.collectstatic import django.contrib.staticfiles.management.commands.findstatic import django.contrib.staticfiles.management.commands.runserver import django.contrib.staticfiles.storage import django.contrib.staticfiles.testing import django.contrib.staticfiles.urls import django.contrib.staticfiles.utils import django.contrib.staticfiles.views import django.contrib.syndication import django.contrib.syndication.apps import django.contrib.syndication.views import django.core import django.core.asgi import django.core.cache import django.core.cache.backends import django.core.cache.backends.base import django.core.cache.backends.db import django.core.cache.backends.dummy import django.core.cache.backends.filebased import django.core.cache.backends.locmem import django.core.cache.backends.memcached import django.core.cache.backends.redis import django.core.cache.utils import django.core.checks import django.core.checks.async_checks import django.core.checks.caches import django.core.checks.compatibility import django.core.checks.compatibility.django_4_0 import django.core.checks.database import django.core.checks.files import django.core.checks.messages import django.core.checks.model_checks import django.core.checks.registry import django.core.checks.security import django.core.checks.security.base import django.core.checks.security.csrf import django.core.checks.security.sessions import django.core.checks.templates import django.core.checks.translation import django.core.checks.urls import django.core.exceptions import django.core.files import django.core.files.base import django.core.files.images import django.core.files.locks import django.core.files.move import django.core.files.storage import django.core.files.storage.base import django.core.files.storage.filesystem import django.core.files.storage.handler import django.core.files.storage.memory import django.core.files.storage.mixins import django.core.files.temp import django.core.files.uploadedfile import django.core.files.uploadhandler import django.core.files.utils import django.core.handlers import django.core.handlers.asgi import django.core.handlers.base import django.core.handlers.exception import django.core.handlers.wsgi import django.core.mail import django.core.mail.backends import django.core.mail.backends.base import django.core.mail.backends.console import django.core.mail.backends.dummy import django.core.mail.backends.filebased import django.core.mail.backends.locmem import django.core.mail.backends.smtp import django.core.mail.message import django.core.mail.utils import django.core.management import django.core.management.base import django.core.management.color import django.core.management.commands import django.core.management.commands.check import django.core.management.commands.compilemessages import django.core.management.commands.createcachetable import django.core.management.commands.dbshell import django.core.management.commands.diffsettings import django.core.management.commands.dumpdata import django.core.management.commands.flush import django.core.management.commands.inspectdb import django.core.management.commands.loaddata import django.core.management.commands.makemessages import django.core.management.commands.makemigrations import django.core.management.commands.migrate import django.core.management.commands.runserver import django.core.management.commands.sendtestemail import django.core.management.commands.shell import django.core.management.commands.showmigrations import django.core.management.commands.sqlflush import django.core.management.commands.sqlmigrate import django.core.management.commands.sqlsequencereset import django.core.management.commands.squashmigrations import django.core.management.commands.startapp import django.core.management.commands.startproject import django.core.management.commands.test import django.core.management.commands.testserver import django.core.management.sql import django.core.management.templates import django.core.management.utils import django.core.paginator import django.core.serializers import django.core.serializers.base import django.core.serializers.json import django.core.serializers.jsonl import django.core.serializers.python import django.core.serializers.pyyaml import django.core.serializers.xml_serializer import django.core.servers import django.core.servers.basehttp import django.core.signals import django.core.signing import django.core.validators import django.core.wsgi import django.db import django.db.backends import django.db.backends.base import django.db.backends.base.base import django.db.backends.base.client import django.db.backends.base.creation import django.db.backends.base.features import django.db.backends.base.introspection import django.db.backends.base.operations import django.db.backends.base.schema import django.db.backends.base.validation import django.db.backends.ddl_references import django.db.backends.dummy import django.db.backends.dummy.base import django.db.backends.dummy.features import django.db.backends.mysql import django.db.backends.mysql.base import django.db.backends.mysql.client import django.db.backends.mysql.compiler import django.db.backends.mysql.creation import django.db.backends.mysql.features import django.db.backends.mysql.introspection import django.db.backends.mysql.operations import django.db.backends.mysql.schema import django.db.backends.mysql.validation import django.db.backends.oracle import django.db.backends.oracle.base import django.db.backends.oracle.client import django.db.backends.oracle.creation import django.db.backends.oracle.features import django.db.backends.oracle.functions import django.db.backends.oracle.introspection import django.db.backends.oracle.operations import django.db.backends.oracle.schema import django.db.backends.oracle.utils import django.db.backends.oracle.validation import django.db.backends.postgresql import django.db.backends.postgresql.base import django.db.backends.postgresql.client import django.db.backends.postgresql.creation import django.db.backends.postgresql.features import django.db.backends.postgresql.introspection import django.db.backends.postgresql.operations import django.db.backends.postgresql.schema import django.db.backends.signals import django.db.backends.sqlite3 import django.db.backends.sqlite3.base import django.db.backends.sqlite3.client import django.db.backends.sqlite3.creation import django.db.backends.sqlite3.features import django.db.backends.sqlite3.introspection import django.db.backends.sqlite3.operations import django.db.backends.sqlite3.schema import django.db.backends.utils import django.db.migrations import django.db.migrations.autodetector import django.db.migrations.exceptions import django.db.migrations.executor import django.db.migrations.graph import django.db.migrations.loader import django.db.migrations.migration import django.db.migrations.operations import django.db.migrations.operations.base import django.db.migrations.operations.fields import django.db.migrations.operations.models import django.db.migrations.operations.special import django.db.migrations.operations.utils import django.db.migrations.optimizer import django.db.migrations.questioner import django.db.migrations.recorder import django.db.migrations.serializer import django.db.migrations.state import django.db.migrations.utils import django.db.migrations.writer import django.db.models import django.db.models.aggregates import django.db.models.base import django.db.models.constants import django.db.models.constraints import django.db.models.deletion import django.db.models.enums import django.db.models.expressions import django.db.models.fields import django.db.models.fields.files import django.db.models.fields.generated import django.db.models.fields.json import django.db.models.fields.mixins import django.db.models.fields.proxy import django.db.models.fields.related import django.db.models.fields.related_descriptors import django.db.models.fields.related_lookups import django.db.models.fields.reverse_related import django.db.models.functions import django.db.models.functions.comparison import django.db.models.functions.datetime import django.db.models.functions.math import django.db.models.functions.mixins import django.db.models.functions.text import django.db.models.functions.window import django.db.models.indexes import django.db.models.lookups import django.db.models.manager import django.db.models.options import django.db.models.query import django.db.models.query_utils import django.db.models.signals import django.db.models.sql import django.db.models.sql.compiler import django.db.models.sql.constants import django.db.models.sql.datastructures import django.db.models.sql.query import django.db.models.sql.subqueries import django.db.models.sql.where import django.db.models.utils import django.db.transaction import django.db.utils import django.dispatch import django.dispatch.dispatcher import django.forms import django.forms.boundfield import django.forms.fields import django.forms.forms import django.forms.formsets import django.forms.models import django.forms.renderers import django.forms.utils import django.forms.widgets import django.http import django.http.cookie import django.http.multipartparser import django.http.request import django.http.response import django.middleware import django.middleware.cache import django.middleware.clickjacking import django.middleware.common import django.middleware.csrf import django.middleware.gzip import django.middleware.http import django.middleware.locale import django.middleware.security import django.shortcuts import django.template import django.template.backends import django.template.backends.base import django.template.backends.django import django.template.backends.dummy import django.template.backends.jinja2 import django.template.backends.utils import django.template.base import django.template.context import django.template.context_processors import django.template.defaultfilters import django.template.defaulttags import django.template.engine import django.template.exceptions import django.template.library import django.template.loader import django.template.loader_tags import django.template.loaders import django.template.loaders.app_directories import django.template.loaders.base import django.template.loaders.cached import django.template.loaders.filesystem import django.template.loaders.locmem import django.template.response import django.template.smartif import django.template.utils import django.templatetags import django.templatetags.cache import django.templatetags.i18n import django.templatetags.l10n import django.templatetags.static import django.templatetags.tz import django.test import django.test.client import django.test.html import django.test.runner import django.test.selenium import django.test.signals import django.test.testcases import django.test.utils import django.urls import django.urls.base import django.urls.conf import django.urls.converters import django.urls.exceptions import django.urls.resolvers import django.urls.utils import django.utils import django.utils._os import django.utils.archive import django.utils.asyncio import django.utils.autoreload import django.utils.cache import django.utils.choices import django.utils.connection import django.utils.crypto import django.utils.datastructures import django.utils.dateformat import django.utils.dateparse import django.utils.dates import django.utils.deconstruct import django.utils.decorators import django.utils.deprecation import django.utils.duration import django.utils.encoding import django.utils.feedgenerator import django.utils.formats import django.utils.functional import django.utils.hashable import django.utils.html import django.utils.http import django.utils.inspect import django.utils.ipv6 import django.utils.itercompat import django.utils.log import django.utils.lorem_ipsum import django.utils.module_loading import django.utils.numberformat import django.utils.regex_helper import django.utils.safestring import django.utils.termcolors import django.utils.text import django.utils.timesince import django.utils.timezone import django.utils.translation import django.utils.translation.reloader import django.utils.translation.template import django.utils.translation.trans_null import django.utils.translation.trans_real import django.utils.tree import django.utils.version import django.utils.xmlutils import django.views import django.views.csrf import django.views.debug import django.views.decorators import django.views.decorators.cache import django.views.decorators.clickjacking import django.views.decorators.common import django.views.decorators.csrf import django.views.decorators.debug import django.views.decorators.gzip import django.views.decorators.http import django.views.decorators.vary import django.views.defaults import django.views.generic import django.views.generic.base import django.views.generic.dates import django.views.generic.detail import django.views.generic.edit import django.views.generic.list import django.views.i18n import django.views.static mypy_config: | [mypy-redis.*] ignore_errors = true [mypy-yaml.*] disallow_untyped_defs = false disallow_incomplete_defs = false django-stubs-5.2.9/tests/typecheck/test_mail.yml000066400000000000000000000015261513401051600217540ustar00rootroot00000000000000- case: check_email_message_attach main: | from typing_extensions import reveal_type from email.mime.text import MIMEText from email.mime.image import MIMEImage from django.core.mail.message import EmailMessage message = EmailMessage() reveal_type(message) # N: Revealed type is "django.core.mail.message.EmailMessage" message.attach("myfilename", "mycontent", "text/plain") mime_text = MIMEText("mytext") reveal_type(mime_text) # N: Revealed type is "email.mime.text.MIMEText" message.attach(mime_text) mime_image = MIMEImage("mydata", "image/png") reveal_type(mime_image) # N: Revealed type is "email.mime.image.MIMEImage" message.attach(mime_image) reveal_type(message.attachments) # N: Revealed type is "builtins.list[Any]" django-stubs-5.2.9/tests/typecheck/test_request.yml000066400000000000000000000124161513401051600225220ustar00rootroot00000000000000- case: request_object_has_user_of_type_auth_user_model main: | from typing_extensions import reveal_type from django.http.request import HttpRequest reveal_type(HttpRequest().user) # N: Revealed type is "myapp.models.MyUser | django.contrib.auth.models.AnonymousUser" # check that other fields work ok reveal_type(HttpRequest().method) # N: Revealed type is "builtins.str | None" custom_settings: | INSTALLED_APPS = ('django.contrib.contenttypes', 'django.contrib.auth', 'myapp') AUTH_USER_MODEL='myapp.MyUser' files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class MyUser(models.Model): pass - case: request_object_user_can_be_discriminated main: | from typing_extensions import reveal_type from django.http.request import HttpRequest request = HttpRequest() reveal_type(request.user) # N: Revealed type is "django.contrib.auth.models.User | django.contrib.auth.models.AnonymousUser" if not request.user.is_anonymous: reveal_type(request.user) # N: Revealed type is "django.contrib.auth.models.User" if request.user.is_authenticated: reveal_type(request.user) # N: Revealed type is "django.contrib.auth.models.User" reveal_type(request.user.groups.all().get()) # N: Revealed type is "django.contrib.auth.models.Group" custom_settings: | INSTALLED_APPS = ('django.contrib.contenttypes', 'django.contrib.auth') - case: request_object_user_without_auth_and_contenttypes_apps main: | from typing_extensions import reveal_type from django.http.request import HttpRequest request = HttpRequest() reveal_type(request.user) # N: Revealed type is "django.contrib.auth.base_user.AbstractBaseUser | django.contrib.auth.models.AnonymousUser" if request.user.is_authenticated: reveal_type(request.user) # N: Revealed type is "django.contrib.auth.base_user.AbstractBaseUser" - case: request_object_user_without_auth_but_with_contenttypes_apps main: | from typing_extensions import reveal_type from django.http.request import HttpRequest request = HttpRequest() reveal_type(request.user) # N: Revealed type is "django.contrib.auth.base_user.AbstractBaseUser | django.contrib.auth.models.AnonymousUser" if request.user.is_authenticated: reveal_type(request.user) # N: Revealed type is "django.contrib.auth.base_user.AbstractBaseUser" custom_settings: | INSTALLED_APPS = ('django.contrib.contenttypes',) - case: subclass_request_not_changed_user_type main: | from typing_extensions import reveal_type from django.http.request import HttpRequest class MyRequest(HttpRequest): foo: int # Just do something request = MyRequest() reveal_type(request.user) # N: Revealed type is "django.contrib.auth.models.User | django.contrib.auth.models.AnonymousUser" custom_settings: | INSTALLED_APPS = ('django.contrib.contenttypes', 'django.contrib.auth') - case: subclass_request_changed_user_type main: | from typing_extensions import reveal_type from django.http.request import HttpRequest from django.contrib.auth.models import User class MyRequest(HttpRequest): user: User # Override the type of user request = MyRequest() reveal_type(request.user) # N: Revealed type is "django.contrib.auth.models.User" custom_settings: | INSTALLED_APPS = ('django.contrib.contenttypes', 'django.contrib.auth') - case: request_get_post main: | from typing_extensions import reveal_type from django.http.request import HttpRequest request = HttpRequest() reveal_type(request) # N: Revealed type is "django.http.request._MutableHttpRequest" reveal_type(request.GET) # N: Revealed type is "django.http.request.QueryDict" request.GET['foo'] = 'bar' def mk_request() -> HttpRequest: return HttpRequest() req = mk_request() reveal_type(req) # N: Revealed type is "django.http.request.HttpRequest" reveal_type(req.GET) # N: Revealed type is "django.http.request._ImmutableQueryDict" req.GET.setdefault('foo', 'bar') # E: This QueryDict is immutable. [misc] x = 1 # E: Statement is unreachable [unreachable] - case: request_get_post_unreachable main: | from typing_extensions import reveal_type from django.http.request import HttpRequest request = HttpRequest() reveal_type(request) # N: Revealed type is "django.http.request._MutableHttpRequest" reveal_type(request.GET) # N: Revealed type is "django.http.request.QueryDict" request.GET['foo'] = 'bar' def mk_request() -> HttpRequest: return HttpRequest() req = mk_request() reveal_type(req) # N: Revealed type is "django.http.request.HttpRequest" reveal_type(req.GET) # N: Revealed type is "django.http.request._ImmutableQueryDict" req.GET['foo'] = 'bar' # E: This QueryDict is immutable. [misc] x = 1 # E: Statement is unreachable [unreachable] django-stubs-5.2.9/tests/typecheck/test_settings.yml000066400000000000000000000102351513401051600226670ustar00rootroot00000000000000- case: settings_loaded_from_different_files disable_cache: true main: | from typing_extensions import reveal_type from django.conf import settings # standard settings reveal_type(settings.AUTH_USER_MODEL) # N: Revealed type is "builtins.str" reveal_type(settings.ROOT_DIR) # N: Revealed type is "builtins.str" reveal_type(settings.APPS_DIR) # N: Revealed type is "pathlib.Path" reveal_type(settings.NUMBERS) # N: Revealed type is "builtins.list[builtins.str]" reveal_type(settings.DICT) # N: Revealed type is "builtins.dict[Any, Any]" custom_settings: | from base import * SECRET_KEY = 112233 NUMBERS = ['one', 'two'] DICT = {} # type: ignore[var-annotated] files: - path: base.py content: | from pathlib import Path ROOT_DIR = '/etc' APPS_DIR = Path(ROOT_DIR) - case: global_settings_are_always_loaded main: | from typing_extensions import reveal_type from django.conf import settings reveal_type(settings.AUTH_USER_MODEL) # N: Revealed type is "builtins.str" reveal_type(settings.AUTHENTICATION_BACKENDS) # N: Revealed type is "typing.Sequence[builtins.str]" installed_apps: [] - case: fail_if_there_is_no_setting main: | from django.conf import settings settings.NOT_EXISTING # E: 'Settings' object has no attribute 'NOT_EXISTING' [misc] - case: override_default_setting_with_different_type_in_the_different_module custom_settings: | from settings.basic_settings import * main: | from typing_extensions import reveal_type from django.conf import settings reveal_type(settings.MEDIA_ROOT) # N: Revealed type is "pathlib.Path" reveal_type(settings.MEDIA_ROOT / 'part') # N: Revealed type is "pathlib.Path" files: - path: settings/__init__.py - path: settings/basic_settings.py content: | from pathlib import Path MEDIA_ROOT = Path() - case: settings_hasattr main: | from typing_extensions import reveal_type from django.conf import settings if hasattr(settings, 'AUTH_USER_MODEL') and settings.AUTH_USER_MODEL: reveal_type(settings.AUTH_USER_MODEL) if hasattr(settings, 'NON_EXISTENT_SETTING') and settings.NON_EXISTENT_SETTING: reveal_type(settings.NON_EXISTENT_SETTING) out: | main:4: note: Revealed type is "builtins.str" main:5: error: 'Settings' object has no attribute 'NON_EXISTENT_SETTING' [misc] main:6: error: 'Settings' object has no attribute 'NON_EXISTENT_SETTING' [misc] main:6: note: Revealed type is "Any" - case: settings_loaded_from_runtime_magic disable_cache: true main: | from typing_extensions import reveal_type from django.conf import settings # Global: reveal_type(settings.SECRET_KEY) # N: Revealed type is "builtins.str" # Custom: reveal_type(settings.A) # N: Revealed type is "Any" reveal_type(settings.B) # E: 'Settings' object has no attribute 'B' [misc] # N: Revealed type is "Any" custom_settings: | # Some code that mypy cannot analyze, but values exist in runtime: exec('A = 1') mypy_config: | [mypy.plugins.django-stubs] django_settings_module = mysettings strict_settings = false - case: settings_loaded_from_runtime_magic_strict_default disable_cache: true main: | from typing_extensions import reveal_type from django.conf import settings # Global: reveal_type(settings.SECRET_KEY) # N: Revealed type is "builtins.str" # Custom: reveal_type(settings.A) # E: 'Settings' object has no attribute 'A' [misc] # N: Revealed type is "Any" reveal_type(settings.B) # E: 'Settings' object has no attribute 'B' [misc] # N: Revealed type is "Any" custom_settings: | # Some code that mypy cannot analyze, but values exist in runtime: exec('A = 1') mypy_config: | [mypy.plugins.django-stubs] django_settings_module = mysettings django-stubs-5.2.9/tests/typecheck/test_shortcuts.yml000066400000000000000000000061011513401051600230620ustar00rootroot00000000000000- case: get_object_or_404_returns_proper_types main: | from typing_extensions import reveal_type from django.shortcuts import get_object_or_404, get_list_or_404 from myapp.models import MyModel reveal_type(get_object_or_404(MyModel)) # N: Revealed type is "myapp.models.MyModel" reveal_type(get_object_or_404(MyModel.objects)) # N: Revealed type is "myapp.models.MyModel" reveal_type(get_object_or_404(MyModel.objects.get_queryset())) # N: Revealed type is "myapp.models.MyModel" reveal_type(get_list_or_404(MyModel)) # N: Revealed type is "builtins.list[myapp.models.MyModel]" reveal_type(get_list_or_404(MyModel.objects)) # N: Revealed type is "builtins.list[myapp.models.MyModel]" reveal_type(get_list_or_404(MyModel.objects.get_queryset())) # N: Revealed type is "builtins.list[myapp.models.MyModel]" installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class MyModel(models.Model): pass - case: get_user_model_returns_proper_class main: | from typing_extensions import reveal_type from django.contrib.auth import get_user_model UserModel = get_user_model() reveal_type(UserModel.objects) # N: Revealed type is "django.db.models.manager.Manager[myapp.models.MyUser]" custom_settings: | INSTALLED_APPS = ('django.contrib.contenttypes', 'django.contrib.auth', 'myapp') AUTH_USER_MODEL = 'myapp.MyUser' files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class MyUser(models.Model): pass - case: check_render_function_arguments_annotations main: | from typing import Any from typing_extensions import TypedDict, reveal_type from django.shortcuts import render from django.http.request import HttpRequest TestContext = TypedDict("TestContext", {"user": Any}) test_context: TestContext = {"user": "test"} reveal_type(test_context) # N: Revealed type is "TypedDict('main.TestContext', {'user': Any})" reveal_type(render(HttpRequest(), '', test_context)) # N: Revealed type is "django.http.response.HttpResponse" - case: check_redirect_return_annotation main: | from typing_extensions import reveal_type from django.shortcuts import redirect reveal_type(redirect(to = '', permanent = True)) # N: Revealed type is "django.http.response.HttpResponsePermanentRedirect" reveal_type(redirect(to = '', permanent = False)) # N: Revealed type is "django.http.response.HttpResponseRedirect" reveal_type(redirect(to = '')) # N: Revealed type is "django.http.response.HttpResponseRedirect" var = True reveal_type(redirect(to = '', permanent = var)) # N: Revealed type is "django.http.response.HttpResponseRedirect | django.http.response.HttpResponsePermanentRedirect" django-stubs-5.2.9/tests/typecheck/urls/000077500000000000000000000000001513401051600202315ustar00rootroot00000000000000django-stubs-5.2.9/tests/typecheck/urls/test_converters.yml000066400000000000000000000021121513401051600242010ustar00rootroot00000000000000- case: test_register_converter_builtin main: | from django.urls import register_converter from django.urls.converters import IntConverter register_converter(IntConverter, "bigint") - case: test_register_converter_custom main: | from django.urls import register_converter class BigIntConverter: regex = r"[0-9]+" def to_python(self, value: str) -> int: return int(value) def to_url(self, value: int) -> str: return str(value) register_converter(BigIntConverter, "bigint") - case: test_register_converter_incorrect_types main: | from django.urls import register_converter class BigIntConverter: regex = r"[0-9]+" def to_python(self, value: int) -> str: return str(value) def to_url(self, value: str) -> int: return int(value) register_converter(BigIntConverter, "bigint") # E: Argument 1 to "register_converter" has incompatible type "type[BigIntConverter]"; expected "type[_Converter]" [arg-type] django-stubs-5.2.9/tests/typecheck/utils/000077500000000000000000000000001513401051600204045ustar00rootroot00000000000000django-stubs-5.2.9/tests/typecheck/utils/test_datastructures.yml000066400000000000000000000056131513401051600252500ustar00rootroot00000000000000- case: multivaluedict main: | from django.utils.datastructures import MultiValueDict from typing_extensions import reveal_type # check constructors var1 = MultiValueDict() # E: Need type annotation for "var1" [var-annotated] d2: dict[str, list[str | int]] = {'foo': ['Foo'], 'bar': [2, 3]} var2 = MultiValueDict(d2) d3: tuple[tuple[str, list[str | int]], ...] = (('foo', ['Foo']), ('bar', [2, 3])) var3 = MultiValueDict(d3) reveal_type(var1) # N: Revealed type is "django.utils.datastructures.MultiValueDict[Any, Any]" reveal_type(var2) # N: Revealed type is "django.utils.datastructures.MultiValueDict[builtins.str, builtins.str | builtins.int]" reveal_type(var3) # N: Revealed type is "django.utils.datastructures.MultiValueDict[builtins.str, builtins.str | builtins.int]" # __getitem__, get, getlist (with proofs) d = MultiValueDict({'foo': ['Foo']}) d.setlist('bar', []) # actually 'Foo' reveal_type(d['foo']) # N: Revealed type is "builtins.str | builtins.list[builtins.object]" # actually [] reveal_type(d['bar']) # N: Revealed type is "builtins.str | builtins.list[builtins.object]" # actually None reveal_type(d.get('bar')) # N: Revealed type is "builtins.str | None" # actually 1 reveal_type(d.get('bar', 1)) # N: Revealed type is "builtins.str | builtins.int" # actually [] reveal_type(d.getlist('bar')) # N: Revealed type is "builtins.list[builtins.str]" # actually [] reveal_type(d.getlist('bar', [1])) # N: Revealed type is "builtins.list[builtins.str] | builtins.list[builtins.int]" # actually True (note that default can be not a list) reveal_type(d.getlist('baz', True)) # N: Revealed type is "builtins.list[builtins.str] | builtins.bool" # setters reveal_type(d.setlistdefault('baz')) # N: Revealed type is "builtins.list[builtins.str]" d.setlistdefault('baz', [1]) # E: List item 0 has incompatible type "int"; expected "str" [list-item] reveal_type(d.setlistdefault('baz', [])) # N: Revealed type is "builtins.list[builtins.str]" d.appendlist('baz', 'Baz') d.appendlist('baz', 1) # E: Argument 2 to "appendlist" of "MultiValueDict" has incompatible type "int"; expected "str" [arg-type] # iterators # actually [('foo', 'Foo'), ('bar', [])] reveal_type(list(d.items())) # N: Revealed type is "builtins.list[tuple[builtins.str, builtins.str | builtins.list[builtins.object]]]" reveal_type(list(d.keys())) # N: Revealed type is "builtins.list[builtins.str]" # actually ['Foo', []] reveal_type(list(d.values())) # N: Revealed type is "builtins.list[builtins.str | builtins.list[builtins.object]]" # actually {'foo': 'Foo', 'bar': []} reveal_type(d.dict()) # N: Revealed type is "builtins.dict[builtins.str, builtins.str | builtins.list[builtins.object]]" django-stubs-5.2.9/tests/typecheck/utils/test_decorators.yml000066400000000000000000000031061513401051600243330ustar00rootroot00000000000000- case: classonlymethod main: | from typing_extensions import reveal_type from django.utils.decorators import classonlymethod class Bananaman: @classonlymethod def count_bananas(cls) -> int: return 12 reveal_type(Bananaman.count_bananas) # N: Revealed type is "def () -> builtins.int" - case: method_decorator_class main: | from typing_extensions import reveal_type from django.views.generic.base import View from django.utils.decorators import method_decorator from django.contrib.auth.decorators import login_required @method_decorator(login_required, name='dispatch') class TestView(View): ... reveal_type(TestView()) # N: Revealed type is "main.TestView" - case: method_decorator_function main: | from typing import Any from typing_extensions import reveal_type from django.views.generic.base import View from django.utils.decorators import method_decorator from django.contrib.auth.decorators import login_required from django.http.response import HttpResponseBase from django.http.request import HttpRequest class TestView(View): @method_decorator(login_required) def dispatch(self, request: HttpRequest, *args: Any, **kwargs: Any) -> HttpResponseBase: return super().dispatch(request, *args, **kwargs) reveal_type(dispatch) # N: Revealed type is "def (self: main.TestView, request: django.http.request.HttpRequest, *args: Any, **kwargs: Any) -> django.http.response.HttpResponseBase" django-stubs-5.2.9/tests/typecheck/utils/test_deprecation.yml000066400000000000000000000006611513401051600244660ustar00rootroot00000000000000- case: basic_middleware_mixin_test main: | from django.utils.deprecation import MiddlewareMixin from django.http import HttpRequest, HttpResponseBase from collections.abc import Awaitable class MyMiddleware(MiddlewareMixin): def __call__( self, request: HttpRequest ) -> HttpResponseBase | Awaitable[HttpResponseBase]: return self.get_response(request) django-stubs-5.2.9/tests/typecheck/utils/test_encoding.yml000066400000000000000000000014121513401051600237520ustar00rootroot00000000000000- case: force_bytes_or_str main: | from typing_extensions import reveal_type from django.utils.encoding import force_bytes, force_str class S(str): pass reveal_type(force_bytes(123)) # N: Revealed type is "builtins.bytes" reveal_type(force_bytes(123, strings_only=True)) # N: Revealed type is "builtins.int" reveal_type(force_str(123)) # N: Revealed type is "builtins.str" reveal_type(force_str(123, strings_only=True)) # N: Revealed type is "builtins.int" reveal_type(force_str('foo')) # N: Revealed type is "builtins.str" reveal_type(force_str('foo', strings_only=True)) # N: Revealed type is "builtins.str" reveal_type(force_str(S('foo'), strings_only=True)) # N: Revealed type is "main.S" django-stubs-5.2.9/tests/typecheck/utils/test_functional.yml000066400000000000000000000065331513401051600243370ustar00rootroot00000000000000- case: cached_property_class_vs_instance_attributes main: | from django.utils.functional import cached_property from typing import ClassVar from typing_extensions import reveal_type class Foo: @cached_property def attr(self) -> list[str]: ... @cached_property # E: Too many arguments for property [misc] def attr2(self, arg2: str) -> list[str]: ... reveal_type(attr) # N: Revealed type is "def (self: main.Foo) -> builtins.list[builtins.str]" reveal_type(Foo.attr) # N: Revealed type is "def (self: main.Foo) -> builtins.list[builtins.str]" f = Foo() reveal_type(f.attr) # N: Revealed type is "builtins.list[builtins.str]" f.attr.func # E: "list[str]" has no attribute "func" [attr-defined] # May be overridden by @property class Bar(Foo): @property def attr(self) -> list[str]: ... # May be overridden by ClassVar class Quux(Foo): attr: ClassVar[list[str]] = [] # ClassVar may not be overridden by cached_property class Baz(Quux): @cached_property def attr(self) -> list[str]: ... # E: Cannot override writeable attribute with read-only property [override] - case: str_promise_proxy main: | from typing_extensions import reveal_type from django.utils.functional import Promise, lazystr, _StrPromise s = lazystr("asd") reveal_type(s) # N: Revealed type is "django.utils.functional._StrPromise" reveal_type(s.format("asd")) # N: Revealed type is "builtins.str" reveal_type(s.capitalize()) # N: Revealed type is "builtins.str" reveal_type(s.swapcase) # N: Revealed type is "def () -> builtins.str" reveal_type(s.__getnewargs__) # N: Revealed type is "def () -> tuple[builtins.str]" s.nonsense # E: "_StrPromise" has no attribute "nonsense" [attr-defined] f: _StrPromise | str reveal_type(f.format("asd")) # N: Revealed type is "builtins.str" reveal_type(f + "asd") # N: Revealed type is "builtins.str" reveal_type("asd" + f) # N: Revealed type is "Any | builtins.str" reveal_type(s + "bar") # N: Revealed type is "builtins.str" reveal_type("foo" + s) # N: Revealed type is "Any" reveal_type(s % "asd") # N: Revealed type is "builtins.str" def foo(content: str) -> None: ... def bar(content: Promise) -> None: ... foo(s) # E: Argument 1 to "foo" has incompatible type "_StrPromise"; expected "str" [arg-type] bar(s) - case: classproperty_usage main: | from typing import Any from django.utils.functional import classproperty from typing_extensions import reveal_type class Foo: @classproperty def attr(cls: Any) -> str: ... reveal_type(attr) # N: Revealed type is "django.utils.functional.classproperty[builtins.str]" reveal_type(attr.getter) # N: Revealed type is "def (method: def (Any) -> builtins.str) -> django.utils.functional.classproperty[builtins.str]" reveal_type(Foo.attr) # N: Revealed type is "builtins.str" class Bar(Foo): def method(self) -> None: reveal_type(self.attr) # N: Revealed type is "builtins.str" django-stubs-5.2.9/tests/typecheck/utils/test_timezone.yml000066400000000000000000000027461513401051600240310ustar00rootroot00000000000000- case: is_naive_correct main: | from typing_extensions import reveal_type from django.utils.timezone import is_naive from datetime import date, time, datetime reveal_type(is_naive(date(2020, 1, 1))) reveal_type(is_naive(datetime(2020, 1, 1))) reveal_type(is_naive(time())) out: | main:4: error: No overload variant of "is_naive" matches argument type "date" [call-overload] main:4: note: Possible overload variants: main:4: note: def is_naive(value: time) -> Literal[True] main:4: note: def is_naive(value: datetime) -> bool main:4: note: Revealed type is "Any" main:5: note: Revealed type is "builtins.bool" main:6: note: Revealed type is "Literal[True]" - case: is_aware_correct main: | from typing_extensions import reveal_type from django.utils.timezone import is_aware from datetime import date, time, datetime reveal_type(is_aware(date(2020, 1, 1))) reveal_type(is_aware(datetime(2020, 1, 1))) reveal_type(is_aware(time())) out: | main:4: error: No overload variant of "is_aware" matches argument type "date" [call-overload] main:4: note: Possible overload variants: main:4: note: def is_aware(value: time) -> Literal[False] main:4: note: def is_aware(value: datetime) -> bool main:4: note: Revealed type is "Any" main:5: note: Revealed type is "builtins.bool" main:6: note: Revealed type is "Literal[False]" django-stubs-5.2.9/tests/typecheck/views/000077500000000000000000000000001513401051600204015ustar00rootroot00000000000000django-stubs-5.2.9/tests/typecheck/views/generic/000077500000000000000000000000001513401051600220155ustar00rootroot00000000000000django-stubs-5.2.9/tests/typecheck/views/generic/test_detail.yml000066400000000000000000000043431513401051600250450ustar00rootroot00000000000000- case: generic_detail_view main: | from django.views.generic import DetailView from django.db.models import QuerySet from myapp.models import MyModel class MyDetailView(DetailView[MyModel]): model = MyModel queryset = MyModel.objects.all() def get_queryset(self) -> QuerySet[MyModel]: self.get_object(super().get_queryset()) return super().get_queryset() custom_settings: | INSTALLED_APPS = ('myapp',) files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class MyModel(models.Model): ... - case: generic_detail_view_wrong main: | from django.views.generic import DetailView from django.db.models import QuerySet from myapp.models import MyModel, Other class MyDetailView(DetailView[Other]): model = MyModel queryset = MyModel.objects.all() def get_queryset(self) -> QuerySet[MyModel]: self.get_object(super().get_queryset()) return super().get_queryset() installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class MyModel(models.Model): ... class Other(models.Model): ... out: | main:7: error: Incompatible types in assignment (expression has type "type[MyModel]", base class "SingleObjectMixin" defined the type as "type[Other]") [assignment] main:8: error: Incompatible types in assignment (expression has type "QuerySet[MyModel, MyModel]", base class "SingleObjectMixin" defined the type as "QuerySet[Other, Other] | None") [assignment] main:10: error: Return type "QuerySet[MyModel, MyModel]" of "get_queryset" incompatible with return type "QuerySet[Other, Other]" in supertype "django.views.generic.detail.SingleObjectMixin" [override] main:12: error: Incompatible return value type (got "QuerySet[Other, Other]", expected "QuerySet[MyModel, MyModel]") [return-value] django-stubs-5.2.9/tests/typecheck/views/generic/test_edit.yml000066400000000000000000000073241513401051600245320ustar00rootroot00000000000000- case: login_form_form_valid_typechecks main: | from django.contrib.auth.views import LoginView from django.contrib.auth import login as auth_login from django.http import HttpResponseRedirect from django.contrib.auth.forms import AuthenticationForm class MyLoginView(LoginView): def form_valid(self, form: AuthenticationForm) -> HttpResponseRedirect: """Ensure that form can have type AuthenticationForm.""" form.get_user() return HttpResponseRedirect(self.get_success_url()) - case: dispatch_http_response main: | from typing import Any from django.http import HttpRequest, HttpResponse from django.views.generic.base import View class MyView(View): def dispatch(self, request: HttpRequest, *args: Any, **kwargs: Any) -> HttpResponse: response: HttpResponse return response - case: dispatch_streaming_http_response main: | from typing import Any from django.http import HttpRequest, StreamingHttpResponse from django.views.generic.base import View class MyView(View): def dispatch(self, request: HttpRequest, *args: Any, **kwargs: Any) -> StreamingHttpResponse: response: StreamingHttpResponse return response - case: generic_form_views main: | from typing_extensions import reveal_type from django.views.generic.edit import CreateView, UpdateView from django import forms from myapp.models import Article class ArticleModelForm(forms.ModelForm[Article]): class Meta: model = Article class MyCreateView(CreateView[Article, ArticleModelForm]): def some(self) -> None: reveal_type(self.get_form_class()) # N: Revealed type is "type[main.ArticleModelForm]" class MyUpdateView(UpdateView[Article, ArticleModelForm]): def some(self) -> None: reveal_type(self.get_form_class()) # N: Revealed type is "type[main.ArticleModelForm]" installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class Article(models.Model): pass - case: generic_form_views_different_form_classes main: | from typing_extensions import reveal_type from django.views.generic.edit import CreateView from django import forms from myapp.models import Article class ArticleModelForm(forms.ModelForm[Article]): class Meta: model = Article class SubArticleModelForm(ArticleModelForm): pass class AnotherArticleModelForm(forms.ModelForm[Article]): class Meta: model = Article class MyCreateView(CreateView[Article, ArticleModelForm]): def some(self) -> None: reveal_type(self.get_form()) # N: Revealed type is "main.ArticleModelForm" reveal_type(self.get_form(SubArticleModelForm)) # N: Revealed type is "main.ArticleModelForm" reveal_type(self.get_form(AnotherArticleModelForm)) # N: Revealed type is "main.ArticleModelForm" # E: Argument 1 to "get_form" of "FormMixin" has incompatible type "type[AnotherArticleModelForm]"; expected "type[ArticleModelForm] | None" [arg-type] installed_apps: - myapp files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class Article(models.Model): pass django-stubs-5.2.9/tests/typecheck/views/generic/test_list.yml000066400000000000000000000037061513401051600245600ustar00rootroot00000000000000- case: generic_list_view main: | from django.views.generic import ListView from django.db.models import QuerySet from myapp.models import MyModel class MyListView(ListView[MyModel]): model = MyModel queryset = MyModel.objects.all() def get_queryset(self) -> QuerySet[MyModel]: ... custom_settings: | INSTALLED_APPS = ('myapp',) files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class MyModel(models.Model): ... - case: generic_list_view_wrong main: | from django.views.generic import ListView from django.db.models import QuerySet from myapp.models import MyModel, Other class MyListView(ListView[Other]): model = MyModel queryset = MyModel.objects.all() def get_queryset(self) -> QuerySet[MyModel]: ... custom_settings: | INSTALLED_APPS = ('myapp',) files: - path: myapp/__init__.py - path: myapp/models.py content: | from django.db import models class MyModel(models.Model): ... class Other(models.Model): ... out: | main:7: error: Incompatible types in assignment (expression has type "type[MyModel]", base class "MultipleObjectMixin" defined the type as "type[Other] | None") [assignment] main:8: error: Incompatible types in assignment (expression has type "QuerySet[MyModel, MyModel]", base class "MultipleObjectMixin" defined the type as "QuerySet[Other, Other] | None") [assignment] main:10: error: Return type "QuerySet[MyModel, MyModel]" of "get_queryset" incompatible with return type "QuerySet[Other, Other]" in supertype "django.views.generic.list.MultipleObjectMixin" [override] django-stubs-5.2.9/tests/typecheck/views/generic/test_template.yml000066400000000000000000000010401513401051600254050ustar00rootroot00000000000000- case: generic_template_view_mutable_extra_context main: | from django.views.generic import TemplateView class MyTemplateView(TemplateView): template_name = "template.html" extra_context = {} - case: generic_template_view_immutable_extra_context main: | from types import MappingProxyType from django.views.generic import TemplateView class MyTemplateView(TemplateView): template_name = "template.html" extra_context = MappingProxyType({}) django-stubs-5.2.9/tests/typecheck/views/test_function_based_views.yml000066400000000000000000000175041513401051600263720ustar00rootroot00000000000000- case: http_response main: | from django.http.request import HttpRequest from django.http.response import HttpResponse from django.utils.translation import gettext_lazy as _ def empty_response(request: HttpRequest) -> HttpResponse: return HttpResponse() def str_response(request: HttpRequest) -> HttpResponse: return HttpResponse('It works!') def bytes_response(request: HttpRequest) -> HttpResponse: return HttpResponse(b'It works!') def object_response(request: HttpRequest) -> HttpResponse: return HttpResponse(_('It works!')) - case: http_response_content main: | from typing_extensions import reveal_type from django.http.request import HttpRequest from django.http.response import HttpResponse from django.utils.translation import gettext_lazy as _ def empty_response(request: HttpRequest) -> HttpResponse: response = HttpResponse() reveal_type(response.content) # N: Revealed type is "builtins.bytes" return response def str_response(request: HttpRequest) -> HttpResponse: response = HttpResponse() response.content = 'It works!' reveal_type(response.content) # N: Revealed type is "builtins.bytes" return response def bytes_response(request: HttpRequest) -> HttpResponse: response = HttpResponse() response.content = b'It works!' reveal_type(response.content) # N: Revealed type is "builtins.bytes" return response def object_response(request: HttpRequest) -> HttpResponse: response = HttpResponse() response.content = _('It works!') reveal_type(response.content) # N: Revealed type is "builtins.bytes" return response - case: streaming_http_response main: | from django.http.request import HttpRequest from django.http.response import StreamingHttpResponse from django.utils.translation import gettext_lazy as _ def empty_response(request: HttpRequest) -> StreamingHttpResponse: return StreamingHttpResponse() def str_response(request: HttpRequest) -> StreamingHttpResponse: return StreamingHttpResponse(['It works!']) def bytes_response(request: HttpRequest) -> StreamingHttpResponse: return StreamingHttpResponse([b'It works!']) def object_response(request: HttpRequest) -> StreamingHttpResponse: return StreamingHttpResponse([_('It works!')]) def mixed_response(request: HttpRequest) -> StreamingHttpResponse: return StreamingHttpResponse([_('Yes'), '/', _('No')]) - case: streaming_http_response_streaming_content main: | from typing_extensions import reveal_type from django.http.request import HttpRequest from django.http.response import StreamingHttpResponse from django.utils.translation import gettext_lazy as _ def empty_response(request: HttpRequest) -> StreamingHttpResponse: response = StreamingHttpResponse() reveal_type(response.streaming_content) # N: Revealed type is "typing.Iterator[builtins.bytes] | typing.AsyncIterator[builtins.bytes]" return response def str_response(request: HttpRequest) -> StreamingHttpResponse: response = StreamingHttpResponse() response.streaming_content = ['It works!'] reveal_type(response.streaming_content) # N: Revealed type is "typing.Iterator[builtins.bytes] | typing.AsyncIterator[builtins.bytes]" return response def bytes_response(request: HttpRequest) -> StreamingHttpResponse: response = StreamingHttpResponse() response.streaming_content = [b'It works!'] reveal_type(response.streaming_content) # N: Revealed type is "typing.Iterator[builtins.bytes] | typing.AsyncIterator[builtins.bytes]" return response def object_response(request: HttpRequest) -> StreamingHttpResponse: response = StreamingHttpResponse() response.streaming_content = [_('It works!')] reveal_type(response.streaming_content) # N: Revealed type is "typing.Iterator[builtins.bytes] | typing.AsyncIterator[builtins.bytes]" return response def mixed_response(request: HttpRequest) -> StreamingHttpResponse: response = StreamingHttpResponse() response.streaming_content = [_('Yes'), '/', _('No')] reveal_type(response.streaming_content) # N: Revealed type is "typing.Iterator[builtins.bytes] | typing.AsyncIterator[builtins.bytes]" return response - case: streaming_http_response_async main: | import typing from django.http.request import HttpRequest from django.http.response import StreamingHttpResponse from django.utils.translation import gettext_lazy as _ def str_response(request: HttpRequest) -> StreamingHttpResponse: async def str_iterator() -> typing.AsyncIterator[str]: yield 'It works!' return StreamingHttpResponse(str_iterator()) def bytes_response(request: HttpRequest) -> StreamingHttpResponse: async def bytes_iterator() -> typing.AsyncIterator[bytes]: yield b'It works!' return StreamingHttpResponse(bytes_iterator()) def object_response(request: HttpRequest) -> StreamingHttpResponse: async def object_iterator() -> typing.AsyncIterator[object]: yield _('It works!') return StreamingHttpResponse(object_iterator()) def mixed_response(request: HttpRequest) -> StreamingHttpResponse: async def mixed_iterator() -> typing.AsyncIterator[object]: yield _('Yes') yield '/' yield _('No') return StreamingHttpResponse(mixed_iterator()) - case: streaming_http_response_async_streaming_content main: | import typing from typing_extensions import reveal_type from django.http.request import HttpRequest from django.http.response import StreamingHttpResponse from django.utils.translation import gettext_lazy as _ def str_response(request: HttpRequest) -> StreamingHttpResponse: response = StreamingHttpResponse() async def str_iterator() -> typing.AsyncIterator[str]: yield 'It works!' response.streaming_content = str_iterator() reveal_type(response.streaming_content) # N: Revealed type is "typing.Iterator[builtins.bytes] | typing.AsyncIterator[builtins.bytes]" return response def bytes_response(request: HttpRequest) -> StreamingHttpResponse: response = StreamingHttpResponse() async def bytes_iterator() -> typing.AsyncIterator[bytes]: yield b'It works!' response.streaming_content = bytes_iterator() reveal_type(response.streaming_content) # N: Revealed type is "typing.AsyncIterator[builtins.bytes]" return response def object_response(request: HttpRequest) -> StreamingHttpResponse: response = StreamingHttpResponse() async def object_iterator() -> typing.AsyncIterator[object]: yield _('It works!') response.streaming_content = object_iterator() reveal_type(response.streaming_content) # N: Revealed type is "typing.Iterator[builtins.bytes] | typing.AsyncIterator[builtins.bytes]" return response def mixed_response(request: HttpRequest) -> StreamingHttpResponse: response = StreamingHttpResponse() async def mixed_iterator() -> typing.AsyncIterator[object]: yield _('Yes') yield '/' yield _('No') response.streaming_content = mixed_iterator() reveal_type(response.streaming_content) # N: Revealed type is "typing.Iterator[builtins.bytes] | typing.AsyncIterator[builtins.bytes]" return response django-stubs-5.2.9/uv.lock000066400000000000000000010004451513401051600154330ustar00rootroot00000000000000version = 1 revision = 3 requires-python = ">=3.10" resolution-markers = [ "python_full_version >= '3.12'", "python_full_version < '3.12'", ] [manifest] members = [ "django-stubs", "django-stubs-ext", ] [[package]] name = "asgiref" version = "3.11.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "typing-extensions", marker = "python_full_version < '3.11'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/76/b9/4db2509eabd14b4a8c71d1b24c8d5734c52b8560a7b1e1a8b56c8d25568b/asgiref-3.11.0.tar.gz", hash = "sha256:13acff32519542a1736223fb79a715acdebe24286d98e8b164a73085f40da2c4", size = 37969, upload-time = "2025-11-19T15:32:20.106Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/91/be/317c2c55b8bbec407257d45f5c8d1b6867abc76d12043f2d3d58c538a4ea/asgiref-3.11.0-py3-none-any.whl", hash = "sha256:1db9021efadb0d9512ce8ffaf72fcef601c7b73a8807a1bb2ef143dc6b14846d", size = 24096, upload-time = "2025-11-19T15:32:19.004Z" }, ] [[package]] name = "async-timeout" version = "5.0.1" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/a5/ae/136395dfbfe00dfc94da3f3e136d0b13f394cba8f4841120e34226265780/async_timeout-5.0.1.tar.gz", hash = "sha256:d9321a7a3d5a6a5e187e824d2fa0793ce379a202935782d555d6e9d2735677d3", size = 9274, upload-time = "2024-11-06T16:41:39.6Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/fe/ba/e2081de779ca30d473f21f5b30e0e737c438205440784c7dfc81efc2b029/async_timeout-5.0.1-py3-none-any.whl", hash = "sha256:39e3809566ff85354557ec2398b55e096c8364bacac9405a7a1fa429e77fe76c", size = 6233, upload-time = "2024-11-06T16:41:37.9Z" }, ] [[package]] name = "attrs" version = "25.4.0" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/6b/5c/685e6633917e101e5dcb62b9dd76946cbb57c26e133bae9e0cd36033c0a9/attrs-25.4.0.tar.gz", hash = "sha256:16d5969b87f0859ef33a48b35d55ac1be6e42ae49d5e853b597db70c35c57e11", size = 934251, upload-time = "2025-10-06T13:54:44.725Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/3a/2a/7cc015f5b9f5db42b7d48157e23356022889fc354a2813c15934b7cb5c0e/attrs-25.4.0-py3-none-any.whl", hash = "sha256:adcf7e2a1fb3b36ac48d97835bb6d8ade15b8dcce26aba8bf1d14847b57a3373", size = 67615, upload-time = "2025-10-06T13:54:43.17Z" }, ] [[package]] name = "cffi" version = "2.0.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "pycparser", marker = "implementation_name != 'PyPy'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/eb/56/b1ba7935a17738ae8453301356628e8147c79dbb825bcbc73dc7401f9846/cffi-2.0.0.tar.gz", hash = "sha256:44d1b5909021139fe36001ae048dbdde8214afa20200eda0f64c068cac5d5529", size = 523588, upload-time = "2025-09-08T23:24:04.541Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/93/d7/516d984057745a6cd96575eea814fe1edd6646ee6efd552fb7b0921dec83/cffi-2.0.0-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:0cf2d91ecc3fcc0625c2c530fe004f82c110405f101548512cce44322fa8ac44", size = 184283, upload-time = "2025-09-08T23:22:08.01Z" }, { url = "https://files.pythonhosted.org/packages/9e/84/ad6a0b408daa859246f57c03efd28e5dd1b33c21737c2db84cae8c237aa5/cffi-2.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f73b96c41e3b2adedc34a7356e64c8eb96e03a3782b535e043a986276ce12a49", size = 180504, upload-time = "2025-09-08T23:22:10.637Z" }, { url = "https://files.pythonhosted.org/packages/50/bd/b1a6362b80628111e6653c961f987faa55262b4002fcec42308cad1db680/cffi-2.0.0-cp310-cp310-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:53f77cbe57044e88bbd5ed26ac1d0514d2acf0591dd6bb02a3ae37f76811b80c", size = 208811, upload-time = "2025-09-08T23:22:12.267Z" }, { url = "https://files.pythonhosted.org/packages/4f/27/6933a8b2562d7bd1fb595074cf99cc81fc3789f6a6c05cdabb46284a3188/cffi-2.0.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:3e837e369566884707ddaf85fc1744b47575005c0a229de3327f8f9a20f4efeb", size = 216402, upload-time = "2025-09-08T23:22:13.455Z" }, { url = "https://files.pythonhosted.org/packages/05/eb/b86f2a2645b62adcfff53b0dd97e8dfafb5c8aa864bd0d9a2c2049a0d551/cffi-2.0.0-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:5eda85d6d1879e692d546a078b44251cdd08dd1cfb98dfb77b670c97cee49ea0", size = 203217, upload-time = "2025-09-08T23:22:14.596Z" }, { url = "https://files.pythonhosted.org/packages/9f/e0/6cbe77a53acf5acc7c08cc186c9928864bd7c005f9efd0d126884858a5fe/cffi-2.0.0-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:9332088d75dc3241c702d852d4671613136d90fa6881da7d770a483fd05248b4", size = 203079, upload-time = "2025-09-08T23:22:15.769Z" }, { url = "https://files.pythonhosted.org/packages/98/29/9b366e70e243eb3d14a5cb488dfd3a0b6b2f1fb001a203f653b93ccfac88/cffi-2.0.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:fc7de24befaeae77ba923797c7c87834c73648a05a4bde34b3b7e5588973a453", size = 216475, upload-time = "2025-09-08T23:22:17.427Z" }, { url = "https://files.pythonhosted.org/packages/21/7a/13b24e70d2f90a322f2900c5d8e1f14fa7e2a6b3332b7309ba7b2ba51a5a/cffi-2.0.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:cf364028c016c03078a23b503f02058f1814320a56ad535686f90565636a9495", size = 218829, upload-time = "2025-09-08T23:22:19.069Z" }, { url = "https://files.pythonhosted.org/packages/60/99/c9dc110974c59cc981b1f5b66e1d8af8af764e00f0293266824d9c4254bc/cffi-2.0.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e11e82b744887154b182fd3e7e8512418446501191994dbf9c9fc1f32cc8efd5", size = 211211, upload-time = "2025-09-08T23:22:20.588Z" }, { url = "https://files.pythonhosted.org/packages/49/72/ff2d12dbf21aca1b32a40ed792ee6b40f6dc3a9cf1644bd7ef6e95e0ac5e/cffi-2.0.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:8ea985900c5c95ce9db1745f7933eeef5d314f0565b27625d9a10ec9881e1bfb", size = 218036, upload-time = "2025-09-08T23:22:22.143Z" }, { url = "https://files.pythonhosted.org/packages/e2/cc/027d7fb82e58c48ea717149b03bcadcbdc293553edb283af792bd4bcbb3f/cffi-2.0.0-cp310-cp310-win32.whl", hash = "sha256:1f72fb8906754ac8a2cc3f9f5aaa298070652a0ffae577e0ea9bd480dc3c931a", size = 172184, upload-time = "2025-09-08T23:22:23.328Z" }, { url = "https://files.pythonhosted.org/packages/33/fa/072dd15ae27fbb4e06b437eb6e944e75b068deb09e2a2826039e49ee2045/cffi-2.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:b18a3ed7d5b3bd8d9ef7a8cb226502c6bf8308df1525e1cc676c3680e7176739", size = 182790, upload-time = "2025-09-08T23:22:24.752Z" }, { url = "https://files.pythonhosted.org/packages/12/4a/3dfd5f7850cbf0d06dc84ba9aa00db766b52ca38d8b86e3a38314d52498c/cffi-2.0.0-cp311-cp311-macosx_10_13_x86_64.whl", hash = "sha256:b4c854ef3adc177950a8dfc81a86f5115d2abd545751a304c5bcf2c2c7283cfe", size = 184344, upload-time = "2025-09-08T23:22:26.456Z" }, { url = "https://files.pythonhosted.org/packages/4f/8b/f0e4c441227ba756aafbe78f117485b25bb26b1c059d01f137fa6d14896b/cffi-2.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:2de9a304e27f7596cd03d16f1b7c72219bd944e99cc52b84d0145aefb07cbd3c", size = 180560, upload-time = "2025-09-08T23:22:28.197Z" }, { url = "https://files.pythonhosted.org/packages/b1/b7/1200d354378ef52ec227395d95c2576330fd22a869f7a70e88e1447eb234/cffi-2.0.0-cp311-cp311-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:baf5215e0ab74c16e2dd324e8ec067ef59e41125d3eade2b863d294fd5035c92", size = 209613, upload-time = "2025-09-08T23:22:29.475Z" }, { url = "https://files.pythonhosted.org/packages/b8/56/6033f5e86e8cc9bb629f0077ba71679508bdf54a9a5e112a3c0b91870332/cffi-2.0.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:730cacb21e1bdff3ce90babf007d0a0917cc3e6492f336c2f0134101e0944f93", size = 216476, upload-time = "2025-09-08T23:22:31.063Z" }, { url = "https://files.pythonhosted.org/packages/dc/7f/55fecd70f7ece178db2f26128ec41430d8720f2d12ca97bf8f0a628207d5/cffi-2.0.0-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:6824f87845e3396029f3820c206e459ccc91760e8fa24422f8b0c3d1731cbec5", size = 203374, upload-time = "2025-09-08T23:22:32.507Z" }, { url = "https://files.pythonhosted.org/packages/84/ef/a7b77c8bdc0f77adc3b46888f1ad54be8f3b7821697a7b89126e829e676a/cffi-2.0.0-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:9de40a7b0323d889cf8d23d1ef214f565ab154443c42737dfe52ff82cf857664", size = 202597, upload-time = "2025-09-08T23:22:34.132Z" }, { url = "https://files.pythonhosted.org/packages/d7/91/500d892b2bf36529a75b77958edfcd5ad8e2ce4064ce2ecfeab2125d72d1/cffi-2.0.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:8941aaadaf67246224cee8c3803777eed332a19d909b47e29c9842ef1e79ac26", size = 215574, upload-time = "2025-09-08T23:22:35.443Z" }, { url = "https://files.pythonhosted.org/packages/44/64/58f6255b62b101093d5df22dcb752596066c7e89dd725e0afaed242a61be/cffi-2.0.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:a05d0c237b3349096d3981b727493e22147f934b20f6f125a3eba8f994bec4a9", size = 218971, upload-time = "2025-09-08T23:22:36.805Z" }, { url = "https://files.pythonhosted.org/packages/ab/49/fa72cebe2fd8a55fbe14956f9970fe8eb1ac59e5df042f603ef7c8ba0adc/cffi-2.0.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:94698a9c5f91f9d138526b48fe26a199609544591f859c870d477351dc7b2414", size = 211972, upload-time = "2025-09-08T23:22:38.436Z" }, { url = "https://files.pythonhosted.org/packages/0b/28/dd0967a76aab36731b6ebfe64dec4e981aff7e0608f60c2d46b46982607d/cffi-2.0.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:5fed36fccc0612a53f1d4d9a816b50a36702c28a2aa880cb8a122b3466638743", size = 217078, upload-time = "2025-09-08T23:22:39.776Z" }, { url = "https://files.pythonhosted.org/packages/2b/c0/015b25184413d7ab0a410775fdb4a50fca20f5589b5dab1dbbfa3baad8ce/cffi-2.0.0-cp311-cp311-win32.whl", hash = "sha256:c649e3a33450ec82378822b3dad03cc228b8f5963c0c12fc3b1e0ab940f768a5", size = 172076, upload-time = "2025-09-08T23:22:40.95Z" }, { url = "https://files.pythonhosted.org/packages/ae/8f/dc5531155e7070361eb1b7e4c1a9d896d0cb21c49f807a6c03fd63fc877e/cffi-2.0.0-cp311-cp311-win_amd64.whl", hash = "sha256:66f011380d0e49ed280c789fbd08ff0d40968ee7b665575489afa95c98196ab5", size = 182820, upload-time = "2025-09-08T23:22:42.463Z" }, { url = "https://files.pythonhosted.org/packages/95/5c/1b493356429f9aecfd56bc171285a4c4ac8697f76e9bbbbb105e537853a1/cffi-2.0.0-cp311-cp311-win_arm64.whl", hash = "sha256:c6638687455baf640e37344fe26d37c404db8b80d037c3d29f58fe8d1c3b194d", size = 177635, upload-time = "2025-09-08T23:22:43.623Z" }, { url = "https://files.pythonhosted.org/packages/ea/47/4f61023ea636104d4f16ab488e268b93008c3d0bb76893b1b31db1f96802/cffi-2.0.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:6d02d6655b0e54f54c4ef0b94eb6be0607b70853c45ce98bd278dc7de718be5d", size = 185271, upload-time = "2025-09-08T23:22:44.795Z" }, { url = "https://files.pythonhosted.org/packages/df/a2/781b623f57358e360d62cdd7a8c681f074a71d445418a776eef0aadb4ab4/cffi-2.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8eca2a813c1cb7ad4fb74d368c2ffbbb4789d377ee5bb8df98373c2cc0dee76c", size = 181048, upload-time = "2025-09-08T23:22:45.938Z" }, { url = "https://files.pythonhosted.org/packages/ff/df/a4f0fbd47331ceeba3d37c2e51e9dfc9722498becbeec2bd8bc856c9538a/cffi-2.0.0-cp312-cp312-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:21d1152871b019407d8ac3985f6775c079416c282e431a4da6afe7aefd2bccbe", size = 212529, upload-time = "2025-09-08T23:22:47.349Z" }, { url = "https://files.pythonhosted.org/packages/d5/72/12b5f8d3865bf0f87cf1404d8c374e7487dcf097a1c91c436e72e6badd83/cffi-2.0.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:b21e08af67b8a103c71a250401c78d5e0893beff75e28c53c98f4de42f774062", size = 220097, upload-time = "2025-09-08T23:22:48.677Z" }, { url = "https://files.pythonhosted.org/packages/c2/95/7a135d52a50dfa7c882ab0ac17e8dc11cec9d55d2c18dda414c051c5e69e/cffi-2.0.0-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:1e3a615586f05fc4065a8b22b8152f0c1b00cdbc60596d187c2a74f9e3036e4e", size = 207983, upload-time = "2025-09-08T23:22:50.06Z" }, { url = "https://files.pythonhosted.org/packages/3a/c8/15cb9ada8895957ea171c62dc78ff3e99159ee7adb13c0123c001a2546c1/cffi-2.0.0-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:81afed14892743bbe14dacb9e36d9e0e504cd204e0b165062c488942b9718037", size = 206519, upload-time = "2025-09-08T23:22:51.364Z" }, { url = "https://files.pythonhosted.org/packages/78/2d/7fa73dfa841b5ac06c7b8855cfc18622132e365f5b81d02230333ff26e9e/cffi-2.0.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:3e17ed538242334bf70832644a32a7aae3d83b57567f9fd60a26257e992b79ba", size = 219572, upload-time = "2025-09-08T23:22:52.902Z" }, { url = "https://files.pythonhosted.org/packages/07/e0/267e57e387b4ca276b90f0434ff88b2c2241ad72b16d31836adddfd6031b/cffi-2.0.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:3925dd22fa2b7699ed2617149842d2e6adde22b262fcbfada50e3d195e4b3a94", size = 222963, upload-time = "2025-09-08T23:22:54.518Z" }, { url = "https://files.pythonhosted.org/packages/b6/75/1f2747525e06f53efbd878f4d03bac5b859cbc11c633d0fb81432d98a795/cffi-2.0.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:2c8f814d84194c9ea681642fd164267891702542f028a15fc97d4674b6206187", size = 221361, upload-time = "2025-09-08T23:22:55.867Z" }, { url = "https://files.pythonhosted.org/packages/7b/2b/2b6435f76bfeb6bbf055596976da087377ede68df465419d192acf00c437/cffi-2.0.0-cp312-cp312-win32.whl", hash = "sha256:da902562c3e9c550df360bfa53c035b2f241fed6d9aef119048073680ace4a18", size = 172932, upload-time = "2025-09-08T23:22:57.188Z" }, { url = "https://files.pythonhosted.org/packages/f8/ed/13bd4418627013bec4ed6e54283b1959cf6db888048c7cf4b4c3b5b36002/cffi-2.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:da68248800ad6320861f129cd9c1bf96ca849a2771a59e0344e88681905916f5", size = 183557, upload-time = "2025-09-08T23:22:58.351Z" }, { url = "https://files.pythonhosted.org/packages/95/31/9f7f93ad2f8eff1dbc1c3656d7ca5bfd8fb52c9d786b4dcf19b2d02217fa/cffi-2.0.0-cp312-cp312-win_arm64.whl", hash = "sha256:4671d9dd5ec934cb9a73e7ee9676f9362aba54f7f34910956b84d727b0d73fb6", size = 177762, upload-time = "2025-09-08T23:22:59.668Z" }, { url = "https://files.pythonhosted.org/packages/4b/8d/a0a47a0c9e413a658623d014e91e74a50cdd2c423f7ccfd44086ef767f90/cffi-2.0.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:00bdf7acc5f795150faa6957054fbbca2439db2f775ce831222b66f192f03beb", size = 185230, upload-time = "2025-09-08T23:23:00.879Z" }, { url = "https://files.pythonhosted.org/packages/4a/d2/a6c0296814556c68ee32009d9c2ad4f85f2707cdecfd7727951ec228005d/cffi-2.0.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:45d5e886156860dc35862657e1494b9bae8dfa63bf56796f2fb56e1679fc0bca", size = 181043, upload-time = "2025-09-08T23:23:02.231Z" }, { url = "https://files.pythonhosted.org/packages/b0/1e/d22cc63332bd59b06481ceaac49d6c507598642e2230f201649058a7e704/cffi-2.0.0-cp313-cp313-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:07b271772c100085dd28b74fa0cd81c8fb1a3ba18b21e03d7c27f3436a10606b", size = 212446, upload-time = "2025-09-08T23:23:03.472Z" }, { url = "https://files.pythonhosted.org/packages/a9/f5/a2c23eb03b61a0b8747f211eb716446c826ad66818ddc7810cc2cc19b3f2/cffi-2.0.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:d48a880098c96020b02d5a1f7d9251308510ce8858940e6fa99ece33f610838b", size = 220101, upload-time = "2025-09-08T23:23:04.792Z" }, { url = "https://files.pythonhosted.org/packages/f2/7f/e6647792fc5850d634695bc0e6ab4111ae88e89981d35ac269956605feba/cffi-2.0.0-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:f93fd8e5c8c0a4aa1f424d6173f14a892044054871c771f8566e4008eaa359d2", size = 207948, upload-time = "2025-09-08T23:23:06.127Z" }, { url = "https://files.pythonhosted.org/packages/cb/1e/a5a1bd6f1fb30f22573f76533de12a00bf274abcdc55c8edab639078abb6/cffi-2.0.0-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:dd4f05f54a52fb558f1ba9f528228066954fee3ebe629fc1660d874d040ae5a3", size = 206422, upload-time = "2025-09-08T23:23:07.753Z" }, { url = "https://files.pythonhosted.org/packages/98/df/0a1755e750013a2081e863e7cd37e0cdd02664372c754e5560099eb7aa44/cffi-2.0.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:c8d3b5532fc71b7a77c09192b4a5a200ea992702734a2e9279a37f2478236f26", size = 219499, upload-time = "2025-09-08T23:23:09.648Z" }, { url = "https://files.pythonhosted.org/packages/50/e1/a969e687fcf9ea58e6e2a928ad5e2dd88cc12f6f0ab477e9971f2309b57c/cffi-2.0.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:d9b29c1f0ae438d5ee9acb31cadee00a58c46cc9c0b2f9038c6b0b3470877a8c", size = 222928, upload-time = "2025-09-08T23:23:10.928Z" }, { url = "https://files.pythonhosted.org/packages/36/54/0362578dd2c9e557a28ac77698ed67323ed5b9775ca9d3fe73fe191bb5d8/cffi-2.0.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6d50360be4546678fc1b79ffe7a66265e28667840010348dd69a314145807a1b", size = 221302, upload-time = "2025-09-08T23:23:12.42Z" }, { url = "https://files.pythonhosted.org/packages/eb/6d/bf9bda840d5f1dfdbf0feca87fbdb64a918a69bca42cfa0ba7b137c48cb8/cffi-2.0.0-cp313-cp313-win32.whl", hash = "sha256:74a03b9698e198d47562765773b4a8309919089150a0bb17d829ad7b44b60d27", size = 172909, upload-time = "2025-09-08T23:23:14.32Z" }, { url = "https://files.pythonhosted.org/packages/37/18/6519e1ee6f5a1e579e04b9ddb6f1676c17368a7aba48299c3759bbc3c8b3/cffi-2.0.0-cp313-cp313-win_amd64.whl", hash = "sha256:19f705ada2530c1167abacb171925dd886168931e0a7b78f5bffcae5c6b5be75", size = 183402, upload-time = "2025-09-08T23:23:15.535Z" }, { url = "https://files.pythonhosted.org/packages/cb/0e/02ceeec9a7d6ee63bb596121c2c8e9b3a9e150936f4fbef6ca1943e6137c/cffi-2.0.0-cp313-cp313-win_arm64.whl", hash = "sha256:256f80b80ca3853f90c21b23ee78cd008713787b1b1e93eae9f3d6a7134abd91", size = 177780, upload-time = "2025-09-08T23:23:16.761Z" }, { url = "https://files.pythonhosted.org/packages/92/c4/3ce07396253a83250ee98564f8d7e9789fab8e58858f35d07a9a2c78de9f/cffi-2.0.0-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:fc33c5141b55ed366cfaad382df24fe7dcbc686de5be719b207bb248e3053dc5", size = 185320, upload-time = "2025-09-08T23:23:18.087Z" }, { url = "https://files.pythonhosted.org/packages/59/dd/27e9fa567a23931c838c6b02d0764611c62290062a6d4e8ff7863daf9730/cffi-2.0.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:c654de545946e0db659b3400168c9ad31b5d29593291482c43e3564effbcee13", size = 181487, upload-time = "2025-09-08T23:23:19.622Z" }, { url = "https://files.pythonhosted.org/packages/d6/43/0e822876f87ea8a4ef95442c3d766a06a51fc5298823f884ef87aaad168c/cffi-2.0.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:24b6f81f1983e6df8db3adc38562c83f7d4a0c36162885ec7f7b77c7dcbec97b", size = 220049, upload-time = "2025-09-08T23:23:20.853Z" }, { url = "https://files.pythonhosted.org/packages/b4/89/76799151d9c2d2d1ead63c2429da9ea9d7aac304603de0c6e8764e6e8e70/cffi-2.0.0-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:12873ca6cb9b0f0d3a0da705d6086fe911591737a59f28b7936bdfed27c0d47c", size = 207793, upload-time = "2025-09-08T23:23:22.08Z" }, { url = "https://files.pythonhosted.org/packages/bb/dd/3465b14bb9e24ee24cb88c9e3730f6de63111fffe513492bf8c808a3547e/cffi-2.0.0-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:d9b97165e8aed9272a6bb17c01e3cc5871a594a446ebedc996e2397a1c1ea8ef", size = 206300, upload-time = "2025-09-08T23:23:23.314Z" }, { url = "https://files.pythonhosted.org/packages/47/d9/d83e293854571c877a92da46fdec39158f8d7e68da75bf73581225d28e90/cffi-2.0.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:afb8db5439b81cf9c9d0c80404b60c3cc9c3add93e114dcae767f1477cb53775", size = 219244, upload-time = "2025-09-08T23:23:24.541Z" }, { url = "https://files.pythonhosted.org/packages/2b/0f/1f177e3683aead2bb00f7679a16451d302c436b5cbf2505f0ea8146ef59e/cffi-2.0.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:737fe7d37e1a1bffe70bd5754ea763a62a066dc5913ca57e957824b72a85e205", size = 222828, upload-time = "2025-09-08T23:23:26.143Z" }, { url = "https://files.pythonhosted.org/packages/c6/0f/cafacebd4b040e3119dcb32fed8bdef8dfe94da653155f9d0b9dc660166e/cffi-2.0.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:38100abb9d1b1435bc4cc340bb4489635dc2f0da7456590877030c9b3d40b0c1", size = 220926, upload-time = "2025-09-08T23:23:27.873Z" }, { url = "https://files.pythonhosted.org/packages/3e/aa/df335faa45b395396fcbc03de2dfcab242cd61a9900e914fe682a59170b1/cffi-2.0.0-cp314-cp314-win32.whl", hash = "sha256:087067fa8953339c723661eda6b54bc98c5625757ea62e95eb4898ad5e776e9f", size = 175328, upload-time = "2025-09-08T23:23:44.61Z" }, { url = "https://files.pythonhosted.org/packages/bb/92/882c2d30831744296ce713f0feb4c1cd30f346ef747b530b5318715cc367/cffi-2.0.0-cp314-cp314-win_amd64.whl", hash = "sha256:203a48d1fb583fc7d78a4c6655692963b860a417c0528492a6bc21f1aaefab25", size = 185650, upload-time = "2025-09-08T23:23:45.848Z" }, { url = "https://files.pythonhosted.org/packages/9f/2c/98ece204b9d35a7366b5b2c6539c350313ca13932143e79dc133ba757104/cffi-2.0.0-cp314-cp314-win_arm64.whl", hash = "sha256:dbd5c7a25a7cb98f5ca55d258b103a2054f859a46ae11aaf23134f9cc0d356ad", size = 180687, upload-time = "2025-09-08T23:23:47.105Z" }, { url = "https://files.pythonhosted.org/packages/3e/61/c768e4d548bfa607abcda77423448df8c471f25dbe64fb2ef6d555eae006/cffi-2.0.0-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:9a67fc9e8eb39039280526379fb3a70023d77caec1852002b4da7e8b270c4dd9", size = 188773, upload-time = "2025-09-08T23:23:29.347Z" }, { url = "https://files.pythonhosted.org/packages/2c/ea/5f76bce7cf6fcd0ab1a1058b5af899bfbef198bea4d5686da88471ea0336/cffi-2.0.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:7a66c7204d8869299919db4d5069a82f1561581af12b11b3c9f48c584eb8743d", size = 185013, upload-time = "2025-09-08T23:23:30.63Z" }, { url = "https://files.pythonhosted.org/packages/be/b4/c56878d0d1755cf9caa54ba71e5d049479c52f9e4afc230f06822162ab2f/cffi-2.0.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:7cc09976e8b56f8cebd752f7113ad07752461f48a58cbba644139015ac24954c", size = 221593, upload-time = "2025-09-08T23:23:31.91Z" }, { url = "https://files.pythonhosted.org/packages/e0/0d/eb704606dfe8033e7128df5e90fee946bbcb64a04fcdaa97321309004000/cffi-2.0.0-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:92b68146a71df78564e4ef48af17551a5ddd142e5190cdf2c5624d0c3ff5b2e8", size = 209354, upload-time = "2025-09-08T23:23:33.214Z" }, { url = "https://files.pythonhosted.org/packages/d8/19/3c435d727b368ca475fb8742ab97c9cb13a0de600ce86f62eab7fa3eea60/cffi-2.0.0-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:b1e74d11748e7e98e2f426ab176d4ed720a64412b6a15054378afdb71e0f37dc", size = 208480, upload-time = "2025-09-08T23:23:34.495Z" }, { url = "https://files.pythonhosted.org/packages/d0/44/681604464ed9541673e486521497406fadcc15b5217c3e326b061696899a/cffi-2.0.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:28a3a209b96630bca57cce802da70c266eb08c6e97e5afd61a75611ee6c64592", size = 221584, upload-time = "2025-09-08T23:23:36.096Z" }, { url = "https://files.pythonhosted.org/packages/25/8e/342a504ff018a2825d395d44d63a767dd8ebc927ebda557fecdaca3ac33a/cffi-2.0.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:7553fb2090d71822f02c629afe6042c299edf91ba1bf94951165613553984512", size = 224443, upload-time = "2025-09-08T23:23:37.328Z" }, { url = "https://files.pythonhosted.org/packages/e1/5e/b666bacbbc60fbf415ba9988324a132c9a7a0448a9a8f125074671c0f2c3/cffi-2.0.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:6c6c373cfc5c83a975506110d17457138c8c63016b563cc9ed6e056a82f13ce4", size = 223437, upload-time = "2025-09-08T23:23:38.945Z" }, { url = "https://files.pythonhosted.org/packages/a0/1d/ec1a60bd1a10daa292d3cd6bb0b359a81607154fb8165f3ec95fe003b85c/cffi-2.0.0-cp314-cp314t-win32.whl", hash = "sha256:1fc9ea04857caf665289b7a75923f2c6ed559b8298a1b8c49e59f7dd95c8481e", size = 180487, upload-time = "2025-09-08T23:23:40.423Z" }, { url = "https://files.pythonhosted.org/packages/bf/41/4c1168c74fac325c0c8156f04b6749c8b6a8f405bbf91413ba088359f60d/cffi-2.0.0-cp314-cp314t-win_amd64.whl", hash = "sha256:d68b6cef7827e8641e8ef16f4494edda8b36104d79773a334beaa1e3521430f6", size = 191726, upload-time = "2025-09-08T23:23:41.742Z" }, { url = "https://files.pythonhosted.org/packages/ae/3a/dbeec9d1ee0844c679f6bb5d6ad4e9f198b1224f4e7a32825f47f6192b0c/cffi-2.0.0-cp314-cp314t-win_arm64.whl", hash = "sha256:0a1527a803f0a659de1af2e1fd700213caba79377e27e4693648c2923da066f9", size = 184195, upload-time = "2025-09-08T23:23:43.004Z" }, ] [[package]] name = "colorama" version = "0.4.6" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", size = 27697, upload-time = "2022-10-25T02:36:22.414Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335, upload-time = "2022-10-25T02:36:20.889Z" }, ] [[package]] name = "cryptography" version = "46.0.3" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "cffi", marker = "platform_python_implementation != 'PyPy'" }, { name = "typing-extensions", marker = "python_full_version < '3.11'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/9f/33/c00162f49c0e2fe8064a62cb92b93e50c74a72bc370ab92f86112b33ff62/cryptography-46.0.3.tar.gz", hash = "sha256:a8b17438104fed022ce745b362294d9ce35b4c2e45c1d958ad4a4b019285f4a1", size = 749258, upload-time = "2025-10-15T23:18:31.74Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/1d/42/9c391dd801d6cf0d561b5890549d4b27bafcc53b39c31a817e69d87c625b/cryptography-46.0.3-cp311-abi3-macosx_10_9_universal2.whl", hash = "sha256:109d4ddfadf17e8e7779c39f9b18111a09efb969a301a31e987416a0191ed93a", size = 7225004, upload-time = "2025-10-15T23:16:52.239Z" }, { url = "https://files.pythonhosted.org/packages/1c/67/38769ca6b65f07461eb200e85fc1639b438bdc667be02cf7f2cd6a64601c/cryptography-46.0.3-cp311-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:09859af8466b69bc3c27bdf4f5d84a665e0f7ab5088412e9e2ec49758eca5cbc", size = 4296667, upload-time = "2025-10-15T23:16:54.369Z" }, { url = "https://files.pythonhosted.org/packages/5c/49/498c86566a1d80e978b42f0d702795f69887005548c041636df6ae1ca64c/cryptography-46.0.3-cp311-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:01ca9ff2885f3acc98c29f1860552e37f6d7c7d013d7334ff2a9de43a449315d", size = 4450807, upload-time = "2025-10-15T23:16:56.414Z" }, { url = "https://files.pythonhosted.org/packages/4b/0a/863a3604112174c8624a2ac3c038662d9e59970c7f926acdcfaed8d61142/cryptography-46.0.3-cp311-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:6eae65d4c3d33da080cff9c4ab1f711b15c1d9760809dad6ea763f3812d254cb", size = 4299615, upload-time = "2025-10-15T23:16:58.442Z" }, { url = "https://files.pythonhosted.org/packages/64/02/b73a533f6b64a69f3cd3872acb6ebc12aef924d8d103133bb3ea750dc703/cryptography-46.0.3-cp311-abi3-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:e5bf0ed4490068a2e72ac03d786693adeb909981cc596425d09032d372bcc849", size = 4016800, upload-time = "2025-10-15T23:17:00.378Z" }, { url = "https://files.pythonhosted.org/packages/25/d5/16e41afbfa450cde85a3b7ec599bebefaef16b5c6ba4ec49a3532336ed72/cryptography-46.0.3-cp311-abi3-manylinux_2_28_ppc64le.whl", hash = "sha256:5ecfccd2329e37e9b7112a888e76d9feca2347f12f37918facbb893d7bb88ee8", size = 4984707, upload-time = "2025-10-15T23:17:01.98Z" }, { url = "https://files.pythonhosted.org/packages/c9/56/e7e69b427c3878352c2fb9b450bd0e19ed552753491d39d7d0a2f5226d41/cryptography-46.0.3-cp311-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:a2c0cd47381a3229c403062f764160d57d4d175e022c1df84e168c6251a22eec", size = 4482541, upload-time = "2025-10-15T23:17:04.078Z" }, { url = "https://files.pythonhosted.org/packages/78/f6/50736d40d97e8483172f1bb6e698895b92a223dba513b0ca6f06b2365339/cryptography-46.0.3-cp311-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:549e234ff32571b1f4076ac269fcce7a808d3bf98b76c8dd560e42dbc66d7d91", size = 4299464, upload-time = "2025-10-15T23:17:05.483Z" }, { url = "https://files.pythonhosted.org/packages/00/de/d8e26b1a855f19d9994a19c702fa2e93b0456beccbcfe437eda00e0701f2/cryptography-46.0.3-cp311-abi3-manylinux_2_34_ppc64le.whl", hash = "sha256:c0a7bb1a68a5d3471880e264621346c48665b3bf1c3759d682fc0864c540bd9e", size = 4950838, upload-time = "2025-10-15T23:17:07.425Z" }, { url = "https://files.pythonhosted.org/packages/8f/29/798fc4ec461a1c9e9f735f2fc58741b0daae30688f41b2497dcbc9ed1355/cryptography-46.0.3-cp311-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:10b01676fc208c3e6feeb25a8b83d81767e8059e1fe86e1dc62d10a3018fa926", size = 4481596, upload-time = "2025-10-15T23:17:09.343Z" }, { url = "https://files.pythonhosted.org/packages/15/8d/03cd48b20a573adfff7652b76271078e3045b9f49387920e7f1f631d125e/cryptography-46.0.3-cp311-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:0abf1ffd6e57c67e92af68330d05760b7b7efb243aab8377e583284dbab72c71", size = 4426782, upload-time = "2025-10-15T23:17:11.22Z" }, { url = "https://files.pythonhosted.org/packages/fa/b1/ebacbfe53317d55cf33165bda24c86523497a6881f339f9aae5c2e13e57b/cryptography-46.0.3-cp311-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:a04bee9ab6a4da801eb9b51f1b708a1b5b5c9eb48c03f74198464c66f0d344ac", size = 4698381, upload-time = "2025-10-15T23:17:12.829Z" }, { url = "https://files.pythonhosted.org/packages/96/92/8a6a9525893325fc057a01f654d7efc2c64b9de90413adcf605a85744ff4/cryptography-46.0.3-cp311-abi3-win32.whl", hash = "sha256:f260d0d41e9b4da1ed1e0f1ce571f97fe370b152ab18778e9e8f67d6af432018", size = 3055988, upload-time = "2025-10-15T23:17:14.65Z" }, { url = "https://files.pythonhosted.org/packages/7e/bf/80fbf45253ea585a1e492a6a17efcb93467701fa79e71550a430c5e60df0/cryptography-46.0.3-cp311-abi3-win_amd64.whl", hash = "sha256:a9a3008438615669153eb86b26b61e09993921ebdd75385ddd748702c5adfddb", size = 3514451, upload-time = "2025-10-15T23:17:16.142Z" }, { url = "https://files.pythonhosted.org/packages/2e/af/9b302da4c87b0beb9db4e756386a7c6c5b8003cd0e742277888d352ae91d/cryptography-46.0.3-cp311-abi3-win_arm64.whl", hash = "sha256:5d7f93296ee28f68447397bf5198428c9aeeab45705a55d53a6343455dcb2c3c", size = 2928007, upload-time = "2025-10-15T23:17:18.04Z" }, { url = "https://files.pythonhosted.org/packages/f5/e2/a510aa736755bffa9d2f75029c229111a1d02f8ecd5de03078f4c18d91a3/cryptography-46.0.3-cp314-cp314t-macosx_10_9_universal2.whl", hash = "sha256:00a5e7e87938e5ff9ff5447ab086a5706a957137e6e433841e9d24f38a065217", size = 7158012, upload-time = "2025-10-15T23:17:19.982Z" }, { url = "https://files.pythonhosted.org/packages/73/dc/9aa866fbdbb95b02e7f9d086f1fccfeebf8953509b87e3f28fff927ff8a0/cryptography-46.0.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:c8daeb2d2174beb4575b77482320303f3d39b8e81153da4f0fb08eb5fe86a6c5", size = 4288728, upload-time = "2025-10-15T23:17:21.527Z" }, { url = "https://files.pythonhosted.org/packages/c5/fd/bc1daf8230eaa075184cbbf5f8cd00ba9db4fd32d63fb83da4671b72ed8a/cryptography-46.0.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:39b6755623145ad5eff1dab323f4eae2a32a77a7abef2c5089a04a3d04366715", size = 4435078, upload-time = "2025-10-15T23:17:23.042Z" }, { url = "https://files.pythonhosted.org/packages/82/98/d3bd5407ce4c60017f8ff9e63ffee4200ab3e23fe05b765cab805a7db008/cryptography-46.0.3-cp314-cp314t-manylinux_2_28_aarch64.whl", hash = "sha256:db391fa7c66df6762ee3f00c95a89e6d428f4d60e7abc8328f4fe155b5ac6e54", size = 4293460, upload-time = "2025-10-15T23:17:24.885Z" }, { url = "https://files.pythonhosted.org/packages/26/e9/e23e7900983c2b8af7a08098db406cf989d7f09caea7897e347598d4cd5b/cryptography-46.0.3-cp314-cp314t-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:78a97cf6a8839a48c49271cdcbd5cf37ca2c1d6b7fdd86cc864f302b5e9bf459", size = 3995237, upload-time = "2025-10-15T23:17:26.449Z" }, { url = "https://files.pythonhosted.org/packages/91/15/af68c509d4a138cfe299d0d7ddb14afba15233223ebd933b4bbdbc7155d3/cryptography-46.0.3-cp314-cp314t-manylinux_2_28_ppc64le.whl", hash = "sha256:dfb781ff7eaa91a6f7fd41776ec37c5853c795d3b358d4896fdbb5df168af422", size = 4967344, upload-time = "2025-10-15T23:17:28.06Z" }, { url = "https://files.pythonhosted.org/packages/ca/e3/8643d077c53868b681af077edf6b3cb58288b5423610f21c62aadcbe99f4/cryptography-46.0.3-cp314-cp314t-manylinux_2_28_x86_64.whl", hash = "sha256:6f61efb26e76c45c4a227835ddeae96d83624fb0d29eb5df5b96e14ed1a0afb7", size = 4466564, upload-time = "2025-10-15T23:17:29.665Z" }, { url = "https://files.pythonhosted.org/packages/0e/43/c1e8726fa59c236ff477ff2b5dc071e54b21e5a1e51aa2cee1676f1c986f/cryptography-46.0.3-cp314-cp314t-manylinux_2_34_aarch64.whl", hash = "sha256:23b1a8f26e43f47ceb6d6a43115f33a5a37d57df4ea0ca295b780ae8546e8044", size = 4292415, upload-time = "2025-10-15T23:17:31.686Z" }, { url = "https://files.pythonhosted.org/packages/42/f9/2f8fefdb1aee8a8e3256a0568cffc4e6d517b256a2fe97a029b3f1b9fe7e/cryptography-46.0.3-cp314-cp314t-manylinux_2_34_ppc64le.whl", hash = "sha256:b419ae593c86b87014b9be7396b385491ad7f320bde96826d0dd174459e54665", size = 4931457, upload-time = "2025-10-15T23:17:33.478Z" }, { url = "https://files.pythonhosted.org/packages/79/30/9b54127a9a778ccd6d27c3da7563e9f2d341826075ceab89ae3b41bf5be2/cryptography-46.0.3-cp314-cp314t-manylinux_2_34_x86_64.whl", hash = "sha256:50fc3343ac490c6b08c0cf0d704e881d0d660be923fd3076db3e932007e726e3", size = 4466074, upload-time = "2025-10-15T23:17:35.158Z" }, { url = "https://files.pythonhosted.org/packages/ac/68/b4f4a10928e26c941b1b6a179143af9f4d27d88fe84a6a3c53592d2e76bf/cryptography-46.0.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:22d7e97932f511d6b0b04f2bfd818d73dcd5928db509460aaf48384778eb6d20", size = 4420569, upload-time = "2025-10-15T23:17:37.188Z" }, { url = "https://files.pythonhosted.org/packages/a3/49/3746dab4c0d1979888f125226357d3262a6dd40e114ac29e3d2abdf1ec55/cryptography-46.0.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:d55f3dffadd674514ad19451161118fd010988540cee43d8bc20675e775925de", size = 4681941, upload-time = "2025-10-15T23:17:39.236Z" }, { url = "https://files.pythonhosted.org/packages/fd/30/27654c1dbaf7e4a3531fa1fc77986d04aefa4d6d78259a62c9dc13d7ad36/cryptography-46.0.3-cp314-cp314t-win32.whl", hash = "sha256:8a6e050cb6164d3f830453754094c086ff2d0b2f3a897a1d9820f6139a1f0914", size = 3022339, upload-time = "2025-10-15T23:17:40.888Z" }, { url = "https://files.pythonhosted.org/packages/f6/30/640f34ccd4d2a1bc88367b54b926b781b5a018d65f404d409aba76a84b1c/cryptography-46.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:760f83faa07f8b64e9c33fc963d790a2edb24efb479e3520c14a45741cd9b2db", size = 3494315, upload-time = "2025-10-15T23:17:42.769Z" }, { url = "https://files.pythonhosted.org/packages/ba/8b/88cc7e3bd0a8e7b861f26981f7b820e1f46aa9d26cc482d0feba0ecb4919/cryptography-46.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:516ea134e703e9fe26bcd1277a4b59ad30586ea90c365a87781d7887a646fe21", size = 2919331, upload-time = "2025-10-15T23:17:44.468Z" }, { url = "https://files.pythonhosted.org/packages/fd/23/45fe7f376a7df8daf6da3556603b36f53475a99ce4faacb6ba2cf3d82021/cryptography-46.0.3-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:cb3d760a6117f621261d662bccc8ef5bc32ca673e037c83fbe565324f5c46936", size = 7218248, upload-time = "2025-10-15T23:17:46.294Z" }, { url = "https://files.pythonhosted.org/packages/27/32/b68d27471372737054cbd34c84981f9edbc24fe67ca225d389799614e27f/cryptography-46.0.3-cp38-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:4b7387121ac7d15e550f5cb4a43aef2559ed759c35df7336c402bb8275ac9683", size = 4294089, upload-time = "2025-10-15T23:17:48.269Z" }, { url = "https://files.pythonhosted.org/packages/26/42/fa8389d4478368743e24e61eea78846a0006caffaf72ea24a15159215a14/cryptography-46.0.3-cp38-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:15ab9b093e8f09daab0f2159bb7e47532596075139dd74365da52ecc9cb46c5d", size = 4440029, upload-time = "2025-10-15T23:17:49.837Z" }, { url = "https://files.pythonhosted.org/packages/5f/eb/f483db0ec5ac040824f269e93dd2bd8a21ecd1027e77ad7bdf6914f2fd80/cryptography-46.0.3-cp38-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:46acf53b40ea38f9c6c229599a4a13f0d46a6c3fa9ef19fc1a124d62e338dfa0", size = 4297222, upload-time = "2025-10-15T23:17:51.357Z" }, { url = "https://files.pythonhosted.org/packages/fd/cf/da9502c4e1912cb1da3807ea3618a6829bee8207456fbbeebc361ec38ba3/cryptography-46.0.3-cp38-abi3-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:10ca84c4668d066a9878890047f03546f3ae0a6b8b39b697457b7757aaf18dbc", size = 4012280, upload-time = "2025-10-15T23:17:52.964Z" }, { url = "https://files.pythonhosted.org/packages/6b/8f/9adb86b93330e0df8b3dcf03eae67c33ba89958fc2e03862ef1ac2b42465/cryptography-46.0.3-cp38-abi3-manylinux_2_28_ppc64le.whl", hash = "sha256:36e627112085bb3b81b19fed209c05ce2a52ee8b15d161b7c643a7d5a88491f3", size = 4978958, upload-time = "2025-10-15T23:17:54.965Z" }, { url = "https://files.pythonhosted.org/packages/d1/a0/5fa77988289c34bdb9f913f5606ecc9ada1adb5ae870bd0d1054a7021cc4/cryptography-46.0.3-cp38-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:1000713389b75c449a6e979ffc7dcc8ac90b437048766cef052d4d30b8220971", size = 4473714, upload-time = "2025-10-15T23:17:56.754Z" }, { url = "https://files.pythonhosted.org/packages/14/e5/fc82d72a58d41c393697aa18c9abe5ae1214ff6f2a5c18ac470f92777895/cryptography-46.0.3-cp38-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:b02cf04496f6576afffef5ddd04a0cb7d49cf6be16a9059d793a30b035f6b6ac", size = 4296970, upload-time = "2025-10-15T23:17:58.588Z" }, { url = "https://files.pythonhosted.org/packages/78/06/5663ed35438d0b09056973994f1aec467492b33bd31da36e468b01ec1097/cryptography-46.0.3-cp38-abi3-manylinux_2_34_ppc64le.whl", hash = "sha256:71e842ec9bc7abf543b47cf86b9a743baa95f4677d22baa4c7d5c69e49e9bc04", size = 4940236, upload-time = "2025-10-15T23:18:00.897Z" }, { url = "https://files.pythonhosted.org/packages/fc/59/873633f3f2dcd8a053b8dd1d38f783043b5fce589c0f6988bf55ef57e43e/cryptography-46.0.3-cp38-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:402b58fc32614f00980b66d6e56a5b4118e6cb362ae8f3fda141ba4689bd4506", size = 4472642, upload-time = "2025-10-15T23:18:02.749Z" }, { url = "https://files.pythonhosted.org/packages/3d/39/8e71f3930e40f6877737d6f69248cf74d4e34b886a3967d32f919cc50d3b/cryptography-46.0.3-cp38-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:ef639cb3372f69ec44915fafcd6698b6cc78fbe0c2ea41be867f6ed612811963", size = 4423126, upload-time = "2025-10-15T23:18:04.85Z" }, { url = "https://files.pythonhosted.org/packages/cd/c7/f65027c2810e14c3e7268353b1681932b87e5a48e65505d8cc17c99e36ae/cryptography-46.0.3-cp38-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:3b51b8ca4f1c6453d8829e1eb7299499ca7f313900dd4d89a24b8b87c0a780d4", size = 4686573, upload-time = "2025-10-15T23:18:06.908Z" }, { url = "https://files.pythonhosted.org/packages/0a/6e/1c8331ddf91ca4730ab3086a0f1be19c65510a33b5a441cb334e7a2d2560/cryptography-46.0.3-cp38-abi3-win32.whl", hash = "sha256:6276eb85ef938dc035d59b87c8a7dc559a232f954962520137529d77b18ff1df", size = 3036695, upload-time = "2025-10-15T23:18:08.672Z" }, { url = "https://files.pythonhosted.org/packages/90/45/b0d691df20633eff80955a0fc7695ff9051ffce8b69741444bd9ed7bd0db/cryptography-46.0.3-cp38-abi3-win_amd64.whl", hash = "sha256:416260257577718c05135c55958b674000baef9a1c7d9e8f306ec60d71db850f", size = 3501720, upload-time = "2025-10-15T23:18:10.632Z" }, { url = "https://files.pythonhosted.org/packages/e8/cb/2da4cc83f5edb9c3257d09e1e7ab7b23f049c7962cae8d842bbef0a9cec9/cryptography-46.0.3-cp38-abi3-win_arm64.whl", hash = "sha256:d89c3468de4cdc4f08a57e214384d0471911a3830fcdaf7a8cc587e42a866372", size = 2918740, upload-time = "2025-10-15T23:18:12.277Z" }, { url = "https://files.pythonhosted.org/packages/d9/cd/1a8633802d766a0fa46f382a77e096d7e209e0817892929655fe0586ae32/cryptography-46.0.3-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:a23582810fedb8c0bc47524558fb6c56aac3fc252cb306072fd2815da2a47c32", size = 3689163, upload-time = "2025-10-15T23:18:13.821Z" }, { url = "https://files.pythonhosted.org/packages/4c/59/6b26512964ace6480c3e54681a9859c974172fb141c38df11eadd8416947/cryptography-46.0.3-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:e7aec276d68421f9574040c26e2a7c3771060bc0cff408bae1dcb19d3ab1e63c", size = 3429474, upload-time = "2025-10-15T23:18:15.477Z" }, { url = "https://files.pythonhosted.org/packages/06/8a/e60e46adab4362a682cf142c7dcb5bf79b782ab2199b0dcb81f55970807f/cryptography-46.0.3-pp311-pypy311_pp73-macosx_10_9_x86_64.whl", hash = "sha256:7ce938a99998ed3c8aa7e7272dca1a610401ede816d36d0693907d863b10d9ea", size = 3698132, upload-time = "2025-10-15T23:18:17.056Z" }, { url = "https://files.pythonhosted.org/packages/da/38/f59940ec4ee91e93d3311f7532671a5cef5570eb04a144bf203b58552d11/cryptography-46.0.3-pp311-pypy311_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:191bb60a7be5e6f54e30ba16fdfae78ad3a342a0599eb4193ba88e3f3d6e185b", size = 4243992, upload-time = "2025-10-15T23:18:18.695Z" }, { url = "https://files.pythonhosted.org/packages/b0/0c/35b3d92ddebfdfda76bb485738306545817253d0a3ded0bfe80ef8e67aa5/cryptography-46.0.3-pp311-pypy311_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:c70cc23f12726be8f8bc72e41d5065d77e4515efae3690326764ea1b07845cfb", size = 4409944, upload-time = "2025-10-15T23:18:20.597Z" }, { url = "https://files.pythonhosted.org/packages/99/55/181022996c4063fc0e7666a47049a1ca705abb9c8a13830f074edb347495/cryptography-46.0.3-pp311-pypy311_pp73-manylinux_2_34_aarch64.whl", hash = "sha256:9394673a9f4de09e28b5356e7fff97d778f8abad85c9d5ac4a4b7e25a0de7717", size = 4242957, upload-time = "2025-10-15T23:18:22.18Z" }, { url = "https://files.pythonhosted.org/packages/ba/af/72cd6ef29f9c5f731251acadaeb821559fe25f10852f44a63374c9ca08c1/cryptography-46.0.3-pp311-pypy311_pp73-manylinux_2_34_x86_64.whl", hash = "sha256:94cd0549accc38d1494e1f8de71eca837d0509d0d44bf11d158524b0e12cebf9", size = 4409447, upload-time = "2025-10-15T23:18:24.209Z" }, { url = "https://files.pythonhosted.org/packages/0d/c3/e90f4a4feae6410f914f8ebac129b9ae7a8c92eb60a638012dde42030a9d/cryptography-46.0.3-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:6b5063083824e5509fdba180721d55909ffacccc8adbec85268b48439423d78c", size = 3438528, upload-time = "2025-10-15T23:18:26.227Z" }, ] [[package]] name = "decorator" version = "5.2.1" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/43/fa/6d96a0978d19e17b68d634497769987b16c8f4cd0a7a05048bec693caa6b/decorator-5.2.1.tar.gz", hash = "sha256:65f266143752f734b0a7cc83c46f4618af75b8c5911b00ccb61d0ac9b6da0360", size = 56711, upload-time = "2025-02-24T04:41:34.073Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/4e/8c/f3147f5c4b73e7550fe5f9352eaa956ae838d5c51eb58e7a25b9f3e2643b/decorator-5.2.1-py3-none-any.whl", hash = "sha256:d316bb415a2d9e2d2b3abcc4084c6502fc09240e292cd76a76afc106a1c8e04a", size = 9190, upload-time = "2025-02-24T04:41:32.565Z" }, ] [[package]] name = "django" version = "5.2.10" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "asgiref" }, { name = "sqlparse" }, { name = "tzdata", marker = "sys_platform == 'win32'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/e6/e5/2671df24bf0ded831768ef79532e5a7922485411a5696f6d979568591a37/django-5.2.10.tar.gz", hash = "sha256:74df100784c288c50a2b5cad59631d71214f40f72051d5af3fdf220c20bdbbbe", size = 10880754, upload-time = "2026-01-06T18:55:26.817Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/fa/de/f1a7cd896daec85832136ab509d9b2a6daed4939dbe26313af3e95fc5f5e/django-5.2.10-py3-none-any.whl", hash = "sha256:cf85067a64250c95d5f9067b056c5eaa80591929f7e16fbcd997746e40d6c45c", size = 8290820, upload-time = "2026-01-06T18:55:20.009Z" }, ] [[package]] name = "django-stubs" version = "5.2.9" source = { editable = "." } dependencies = [ { name = "django" }, { name = "django-stubs-ext" }, { name = "tomli", marker = "python_full_version < '3.11'" }, { name = "types-pyyaml" }, { name = "typing-extensions" }, ] [package.optional-dependencies] compatible-mypy = [ { name = "mypy" }, ] oracle = [ { name = "oracledb" }, ] redis = [ { name = "redis" }, { name = "types-redis" }, ] [package.dev-dependencies] dev = [ { name = "django" }, { name = "django-stubs", extra = ["compatible-mypy", "oracle", "redis"] }, { name = "jinja2" }, { name = "mysqlclient" }, { name = "psycopg2-binary" }, { name = "pyrefly" }, { name = "pyright" }, { name = "pytest" }, { name = "pytest-mypy-plugins" }, { name = "pytest-shard" }, { name = "pytest-xdist" }, { name = "pyyaml" }, ] pyrefly = [ { name = "pyrefly" }, ] pyright = [ { name = "pyright" }, ] tests = [ { name = "django" }, { name = "django-stubs", extra = ["compatible-mypy", "oracle", "redis"] }, { name = "jinja2" }, { name = "mysqlclient" }, { name = "psycopg2-binary" }, { name = "pytest" }, { name = "pytest-mypy-plugins" }, { name = "pytest-shard" }, { name = "pytest-xdist" }, { name = "pyyaml" }, ] [package.metadata] requires-dist = [ { name = "django" }, { name = "django-stubs-ext", editable = "ext" }, { name = "mypy", marker = "extra == 'compatible-mypy'", specifier = ">=1.13,<1.20" }, { name = "oracledb", marker = "extra == 'oracle'" }, { name = "redis", marker = "extra == 'redis'" }, { name = "tomli", marker = "python_full_version < '3.11'" }, { name = "types-pyyaml" }, { name = "types-redis", marker = "extra == 'redis'" }, { name = "typing-extensions", specifier = ">=4.11.0" }, ] provides-extras = ["compatible-mypy", "oracle", "redis"] [package.metadata.requires-dev] dev = [ { name = "django", specifier = "==5.2.10" }, { name = "django-stubs", extras = ["compatible-mypy", "oracle", "redis"], editable = "." }, { name = "jinja2", specifier = "==3.1.6" }, { name = "mysqlclient", specifier = "==2.2.7" }, { name = "psycopg2-binary", specifier = "==2.9.11" }, { name = "pyrefly", specifier = "==0.48.0" }, { name = "pyright", specifier = "==1.1.408" }, { name = "pytest", specifier = "==9.0.2" }, { name = "pytest-mypy-plugins", specifier = "==3.2.0" }, { name = "pytest-shard", specifier = "==0.1.2" }, { name = "pytest-xdist", specifier = "==3.8.0" }, { name = "pyyaml", specifier = "==6.0.3" }, ] pyrefly = [{ name = "pyrefly", specifier = "==0.48.0" }] pyright = [{ name = "pyright", specifier = "==1.1.408" }] tests = [ { name = "django", specifier = "==5.2.10" }, { name = "django-stubs", extras = ["compatible-mypy", "oracle", "redis"], editable = "." }, { name = "jinja2", specifier = "==3.1.6" }, { name = "mysqlclient", specifier = "==2.2.7" }, { name = "psycopg2-binary", specifier = "==2.9.11" }, { name = "pytest", specifier = "==9.0.2" }, { name = "pytest-mypy-plugins", specifier = "==3.2.0" }, { name = "pytest-shard", specifier = "==0.1.2" }, { name = "pytest-xdist", specifier = "==3.8.0" }, { name = "pyyaml", specifier = "==6.0.3" }, ] [[package]] name = "django-stubs-ext" version = "5.2.9" source = { editable = "ext" } dependencies = [ { name = "django" }, { name = "typing-extensions" }, ] [package.metadata] requires-dist = [ { name = "django" }, { name = "typing-extensions" }, ] [[package]] name = "exceptiongroup" version = "1.3.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "typing-extensions", marker = "python_full_version < '3.12'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/50/79/66800aadf48771f6b62f7eb014e352e5d06856655206165d775e675a02c9/exceptiongroup-1.3.1.tar.gz", hash = "sha256:8b412432c6055b0b7d14c310000ae93352ed6754f70fa8f7c34141f91c4e3219", size = 30371, upload-time = "2025-11-21T23:01:54.787Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/8a/0e/97c33bf5009bdbac74fd2beace167cab3f978feb69cc36f1ef79360d6c4e/exceptiongroup-1.3.1-py3-none-any.whl", hash = "sha256:a7a39a3bd276781e98394987d3a5701d0c4edffb633bb7a5144577f82c773598", size = 16740, upload-time = "2025-11-21T23:01:53.443Z" }, ] [[package]] name = "execnet" version = "2.1.2" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/bf/89/780e11f9588d9e7128a3f87788354c7946a9cbb1401ad38a48c4db9a4f07/execnet-2.1.2.tar.gz", hash = "sha256:63d83bfdd9a23e35b9c6a3261412324f964c2ec8dcd8d3c6916ee9373e0befcd", size = 166622, upload-time = "2025-11-12T09:56:37.75Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/ab/84/02fc1827e8cdded4aa65baef11296a9bbe595c474f0d6d758af082d849fd/execnet-2.1.2-py3-none-any.whl", hash = "sha256:67fba928dd5a544b783f6056f449e5e3931a5c378b128bc18501f7ea79e296ec", size = 40708, upload-time = "2025-11-12T09:56:36.333Z" }, ] [[package]] name = "iniconfig" version = "2.3.0" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/72/34/14ca021ce8e5dfedc35312d08ba8bf51fdd999c576889fc2c24cb97f4f10/iniconfig-2.3.0.tar.gz", hash = "sha256:c76315c77db068650d49c5b56314774a7804df16fee4402c1f19d6d15d8c4730", size = 20503, upload-time = "2025-10-18T21:55:43.219Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-py3-none-any.whl", hash = "sha256:f631c04d2c48c52b84d0d0549c99ff3859c98df65b3101406327ecc7d53fbf12", size = 7484, upload-time = "2025-10-18T21:55:41.639Z" }, ] [[package]] name = "jinja2" version = "3.1.6" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "markupsafe" }, ] sdist = { url = "https://files.pythonhosted.org/packages/df/bf/f7da0350254c0ed7c72f3e33cef02e048281fec7ecec5f032d4aac52226b/jinja2-3.1.6.tar.gz", hash = "sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d", size = 245115, upload-time = "2025-03-05T20:05:02.478Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl", hash = "sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67", size = 134899, upload-time = "2025-03-05T20:05:00.369Z" }, ] [[package]] name = "jsonschema" version = "4.25.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "attrs" }, { name = "jsonschema-specifications" }, { name = "referencing" }, { name = "rpds-py" }, ] sdist = { url = "https://files.pythonhosted.org/packages/74/69/f7185de793a29082a9f3c7728268ffb31cb5095131a9c139a74078e27336/jsonschema-4.25.1.tar.gz", hash = "sha256:e4a9655ce0da0c0b67a085847e00a3a51449e1157f4f75e9fb5aa545e122eb85", size = 357342, upload-time = "2025-08-18T17:03:50.038Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/bf/9c/8c95d856233c1f82500c2450b8c68576b4cf1c871db3afac5c34ff84e6fd/jsonschema-4.25.1-py3-none-any.whl", hash = "sha256:3fba0169e345c7175110351d456342c364814cfcf3b964ba4587f22915230a63", size = 90040, upload-time = "2025-08-18T17:03:48.373Z" }, ] [[package]] name = "jsonschema-specifications" version = "2025.9.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "referencing" }, ] sdist = { url = "https://files.pythonhosted.org/packages/19/74/a633ee74eb36c44aa6d1095e7cc5569bebf04342ee146178e2d36600708b/jsonschema_specifications-2025.9.1.tar.gz", hash = "sha256:b540987f239e745613c7a9176f3edb72b832a4ac465cf02712288397832b5e8d", size = 32855, upload-time = "2025-09-08T01:34:59.186Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/41/45/1a4ed80516f02155c51f51e8cedb3c1902296743db0bbc66608a0db2814f/jsonschema_specifications-2025.9.1-py3-none-any.whl", hash = "sha256:98802fee3a11ee76ecaca44429fda8a41bff98b00a0f2838151b113f210cc6fe", size = 18437, upload-time = "2025-09-08T01:34:57.871Z" }, ] [[package]] name = "librt" version = "0.7.7" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/b7/29/47f29026ca17f35cf299290292d5f8331f5077364974b7675a353179afa2/librt-0.7.7.tar.gz", hash = "sha256:81d957b069fed1890953c3b9c3895c7689960f233eea9a1d9607f71ce7f00b2c", size = 145910, upload-time = "2026-01-01T23:52:22.87Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/c6/84/2cfb1f3b9b60bab52e16a220c931223fc8e963d0d7bb9132bef012aafc3f/librt-0.7.7-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e4836c5645f40fbdc275e5670819bde5ab5f2e882290d304e3c6ddab1576a6d0", size = 54709, upload-time = "2026-01-01T23:50:48.326Z" }, { url = "https://files.pythonhosted.org/packages/19/a1/3127b277e9d3784a8040a54e8396d9ae5c64d6684dc6db4b4089b0eedcfb/librt-0.7.7-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6ae8aec43117a645a31e5f60e9e3a0797492e747823b9bda6972d521b436b4e8", size = 56658, upload-time = "2026-01-01T23:50:49.74Z" }, { url = "https://files.pythonhosted.org/packages/3a/e9/b91b093a5c42eb218120445f3fef82e0b977fa2225f4d6fc133d25cdf86a/librt-0.7.7-cp310-cp310-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:aea05f701ccd2a76b34f0daf47ca5068176ff553510b614770c90d76ac88df06", size = 161026, upload-time = "2026-01-01T23:50:50.853Z" }, { url = "https://files.pythonhosted.org/packages/c7/cb/1ded77d5976a79d7057af4a010d577ce4f473ff280984e68f4974a3281e5/librt-0.7.7-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7b16ccaeff0ed4355dfb76fe1ea7a5d6d03b5ad27f295f77ee0557bc20a72495", size = 169529, upload-time = "2026-01-01T23:50:52.24Z" }, { url = "https://files.pythonhosted.org/packages/da/6e/6ca5bdaa701e15f05000ac1a4c5d1475c422d3484bd3d1ca9e8c2f5be167/librt-0.7.7-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c48c7e150c095d5e3cea7452347ba26094be905d6099d24f9319a8b475fcd3e0", size = 183271, upload-time = "2026-01-01T23:50:55.287Z" }, { url = "https://files.pythonhosted.org/packages/e7/2d/55c0e38073997b4bbb5ddff25b6d1bbba8c2f76f50afe5bb9c844b702f34/librt-0.7.7-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:4dcee2f921a8632636d1c37f1bbdb8841d15666d119aa61e5399c5268e7ce02e", size = 179039, upload-time = "2026-01-01T23:50:56.807Z" }, { url = "https://files.pythonhosted.org/packages/33/4e/3662a41ae8bb81b226f3968426293517b271d34d4e9fd4b59fc511f1ae40/librt-0.7.7-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:14ef0f4ac3728ffd85bfc58e2f2f48fb4ef4fa871876f13a73a7381d10a9f77c", size = 173505, upload-time = "2026-01-01T23:50:58.291Z" }, { url = "https://files.pythonhosted.org/packages/f8/5d/cf768deb8bdcbac5f8c21fcb32dd483d038d88c529fd351bbe50590b945d/librt-0.7.7-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:e4ab69fa37f8090f2d971a5d2bc606c7401170dbdae083c393d6cbf439cb45b8", size = 193570, upload-time = "2026-01-01T23:50:59.546Z" }, { url = "https://files.pythonhosted.org/packages/a1/ea/ee70effd13f1d651976d83a2812391f6203971740705e3c0900db75d4bce/librt-0.7.7-cp310-cp310-win32.whl", hash = "sha256:4bf3cc46d553693382d2abf5f5bd493d71bb0f50a7c0beab18aa13a5545c8900", size = 42600, upload-time = "2026-01-01T23:51:00.694Z" }, { url = "https://files.pythonhosted.org/packages/f0/eb/dc098730f281cba76c279b71783f5de2edcba3b880c1ab84a093ef826062/librt-0.7.7-cp310-cp310-win_amd64.whl", hash = "sha256:f0c8fe5aeadd8a0e5b0598f8a6ee3533135ca50fd3f20f130f9d72baf5c6ac58", size = 48977, upload-time = "2026-01-01T23:51:01.726Z" }, { url = "https://files.pythonhosted.org/packages/f0/56/30b5c342518005546df78841cb0820ae85a17e7d07d521c10ef367306d0d/librt-0.7.7-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a487b71fbf8a9edb72a8c7a456dda0184642d99cd007bc819c0b7ab93676a8ee", size = 54709, upload-time = "2026-01-01T23:51:02.774Z" }, { url = "https://files.pythonhosted.org/packages/72/78/9f120e3920b22504d4f3835e28b55acc2cc47c9586d2e1b6ba04c3c1bf01/librt-0.7.7-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f4d4efb218264ecf0f8516196c9e2d1a0679d9fb3bb15df1155a35220062eba8", size = 56663, upload-time = "2026-01-01T23:51:03.838Z" }, { url = "https://files.pythonhosted.org/packages/1c/ea/7d7a1ee7dfc1151836028eba25629afcf45b56bbc721293e41aa2e9b8934/librt-0.7.7-cp311-cp311-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:b8bb331aad734b059c4b450cd0a225652f16889e286b2345af5e2c3c625c3d85", size = 161705, upload-time = "2026-01-01T23:51:04.917Z" }, { url = "https://files.pythonhosted.org/packages/45/a5/952bc840ac8917fbcefd6bc5f51ad02b89721729814f3e2bfcc1337a76d6/librt-0.7.7-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:467dbd7443bda08338fc8ad701ed38cef48194017554f4c798b0a237904b3f99", size = 171029, upload-time = "2026-01-01T23:51:06.09Z" }, { url = "https://files.pythonhosted.org/packages/fa/bf/c017ff7da82dc9192cf40d5e802a48a25d00e7639b6465cfdcee5893a22c/librt-0.7.7-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:50d1d1ee813d2d1a3baf2873634ba506b263032418d16287c92ec1cc9c1a00cb", size = 184704, upload-time = "2026-01-01T23:51:07.549Z" }, { url = "https://files.pythonhosted.org/packages/77/ec/72f3dd39d2cdfd6402ab10836dc9cbf854d145226062a185b419c4f1624a/librt-0.7.7-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:c7e5070cf3ec92d98f57574da0224f8c73faf1ddd6d8afa0b8c9f6e86997bc74", size = 180719, upload-time = "2026-01-01T23:51:09.062Z" }, { url = "https://files.pythonhosted.org/packages/78/86/06e7a1a81b246f3313bf515dd9613a1c81583e6fd7843a9f4d625c4e926d/librt-0.7.7-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:bdb9f3d865b2dafe7f9ad7f30ef563c80d0ddd2fdc8cc9b8e4f242f475e34d75", size = 174537, upload-time = "2026-01-01T23:51:10.611Z" }, { url = "https://files.pythonhosted.org/packages/83/08/f9fb2edc9c7a76e95b2924ce81d545673f5b034e8c5dd92159d1c7dae0c6/librt-0.7.7-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:8185c8497d45164e256376f9da5aed2bb26ff636c798c9dabe313b90e9f25b28", size = 195238, upload-time = "2026-01-01T23:51:11.762Z" }, { url = "https://files.pythonhosted.org/packages/ba/56/ea2d2489d3ea1f47b301120e03a099e22de7b32c93df9a211e6ff4f9bf38/librt-0.7.7-cp311-cp311-win32.whl", hash = "sha256:44d63ce643f34a903f09ff7ca355aae019a3730c7afd6a3c037d569beeb5d151", size = 42939, upload-time = "2026-01-01T23:51:13.192Z" }, { url = "https://files.pythonhosted.org/packages/58/7b/c288f417e42ba2a037f1c0753219e277b33090ed4f72f292fb6fe175db4c/librt-0.7.7-cp311-cp311-win_amd64.whl", hash = "sha256:7d13cc340b3b82134f8038a2bfe7137093693dcad8ba5773da18f95ad6b77a8a", size = 49240, upload-time = "2026-01-01T23:51:14.264Z" }, { url = "https://files.pythonhosted.org/packages/7c/24/738eb33a6c1516fdb2dfd2a35db6e5300f7616679b573585be0409bc6890/librt-0.7.7-cp311-cp311-win_arm64.whl", hash = "sha256:983de36b5a83fe9222f4f7dcd071f9b1ac6f3f17c0af0238dadfb8229588f890", size = 42613, upload-time = "2026-01-01T23:51:15.268Z" }, { url = "https://files.pythonhosted.org/packages/56/72/1cd9d752070011641e8aee046c851912d5f196ecd726fffa7aed2070f3e0/librt-0.7.7-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:2a85a1fc4ed11ea0eb0a632459ce004a2d14afc085a50ae3463cd3dfe1ce43fc", size = 55687, upload-time = "2026-01-01T23:51:16.291Z" }, { url = "https://files.pythonhosted.org/packages/50/aa/d5a1d4221c4fe7e76ae1459d24d6037783cb83c7645164c07d7daf1576ec/librt-0.7.7-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:c87654e29a35938baead1c4559858f346f4a2a7588574a14d784f300ffba0efd", size = 57136, upload-time = "2026-01-01T23:51:17.363Z" }, { url = "https://files.pythonhosted.org/packages/23/6f/0c86b5cb5e7ef63208c8cc22534df10ecc5278efc0d47fb8815577f3ca2f/librt-0.7.7-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:c9faaebb1c6212c20afd8043cd6ed9de0a47d77f91a6b5b48f4e46ed470703fe", size = 165320, upload-time = "2026-01-01T23:51:18.455Z" }, { url = "https://files.pythonhosted.org/packages/16/37/df4652690c29f645ffe405b58285a4109e9fe855c5bb56e817e3e75840b3/librt-0.7.7-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1908c3e5a5ef86b23391448b47759298f87f997c3bd153a770828f58c2bb4630", size = 174216, upload-time = "2026-01-01T23:51:19.599Z" }, { url = "https://files.pythonhosted.org/packages/9a/d6/d3afe071910a43133ec9c0f3e4ce99ee6df0d4e44e4bddf4b9e1c6ed41cc/librt-0.7.7-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:dbc4900e95a98fc0729523be9d93a8fedebb026f32ed9ffc08acd82e3e181503", size = 189005, upload-time = "2026-01-01T23:51:21.052Z" }, { url = "https://files.pythonhosted.org/packages/d5/18/74060a870fe2d9fd9f47824eba6717ce7ce03124a0d1e85498e0e7efc1b2/librt-0.7.7-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a7ea4e1fbd253e5c68ea0fe63d08577f9d288a73f17d82f652ebc61fa48d878d", size = 183961, upload-time = "2026-01-01T23:51:22.493Z" }, { url = "https://files.pythonhosted.org/packages/7c/5e/918a86c66304af66a3c1d46d54df1b2d0b8894babc42a14fb6f25511497f/librt-0.7.7-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:ef7699b7a5a244b1119f85c5bbc13f152cd38240cbb2baa19b769433bae98e50", size = 177610, upload-time = "2026-01-01T23:51:23.874Z" }, { url = "https://files.pythonhosted.org/packages/b2/d7/b5e58dc2d570f162e99201b8c0151acf40a03a39c32ab824dd4febf12736/librt-0.7.7-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:955c62571de0b181d9e9e0a0303c8bc90d47670a5eff54cf71bf5da61d1899cf", size = 199272, upload-time = "2026-01-01T23:51:25.341Z" }, { url = "https://files.pythonhosted.org/packages/18/87/8202c9bd0968bdddc188ec3811985f47f58ed161b3749299f2c0dd0f63fb/librt-0.7.7-cp312-cp312-win32.whl", hash = "sha256:1bcd79be209313b270b0e1a51c67ae1af28adad0e0c7e84c3ad4b5cb57aaa75b", size = 43189, upload-time = "2026-01-01T23:51:26.799Z" }, { url = "https://files.pythonhosted.org/packages/61/8d/80244b267b585e7aa79ffdac19f66c4861effc3a24598e77909ecdd0850e/librt-0.7.7-cp312-cp312-win_amd64.whl", hash = "sha256:4353ee891a1834567e0302d4bd5e60f531912179578c36f3d0430f8c5e16b456", size = 49462, upload-time = "2026-01-01T23:51:27.813Z" }, { url = "https://files.pythonhosted.org/packages/2d/1f/75db802d6a4992d95e8a889682601af9b49d5a13bbfa246d414eede1b56c/librt-0.7.7-cp312-cp312-win_arm64.whl", hash = "sha256:a76f1d679beccccdf8c1958e732a1dfcd6e749f8821ee59d7bec009ac308c029", size = 42828, upload-time = "2026-01-01T23:51:28.804Z" }, { url = "https://files.pythonhosted.org/packages/8d/5e/d979ccb0a81407ec47c14ea68fb217ff4315521730033e1dd9faa4f3e2c1/librt-0.7.7-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:8f4a0b0a3c86ba9193a8e23bb18f100d647bf192390ae195d84dfa0a10fb6244", size = 55746, upload-time = "2026-01-01T23:51:29.828Z" }, { url = "https://files.pythonhosted.org/packages/f5/2c/3b65861fb32f802c3783d6ac66fc5589564d07452a47a8cf9980d531cad3/librt-0.7.7-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:5335890fea9f9e6c4fdf8683061b9ccdcbe47c6dc03ab8e9b68c10acf78be78d", size = 57174, upload-time = "2026-01-01T23:51:31.226Z" }, { url = "https://files.pythonhosted.org/packages/50/df/030b50614b29e443607220097ebaf438531ea218c7a9a3e21ea862a919cd/librt-0.7.7-cp313-cp313-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:9b4346b1225be26def3ccc6c965751c74868f0578cbcba293c8ae9168483d811", size = 165834, upload-time = "2026-01-01T23:51:32.278Z" }, { url = "https://files.pythonhosted.org/packages/5d/e1/bd8d1eacacb24be26a47f157719553bbd1b3fe812c30dddf121c0436fd0b/librt-0.7.7-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a10b8eebdaca6e9fdbaf88b5aefc0e324b763a5f40b1266532590d5afb268a4c", size = 174819, upload-time = "2026-01-01T23:51:33.461Z" }, { url = "https://files.pythonhosted.org/packages/46/7d/91d6c3372acf54a019c1ad8da4c9ecf4fc27d039708880bf95f48dbe426a/librt-0.7.7-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:067be973d90d9e319e6eb4ee2a9b9307f0ecd648b8a9002fa237289a4a07a9e7", size = 189607, upload-time = "2026-01-01T23:51:34.604Z" }, { url = "https://files.pythonhosted.org/packages/fa/ac/44604d6d3886f791fbd1c6ae12d5a782a8f4aca927484731979f5e92c200/librt-0.7.7-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:23d2299ed007812cccc1ecef018db7d922733382561230de1f3954db28433977", size = 184586, upload-time = "2026-01-01T23:51:35.845Z" }, { url = "https://files.pythonhosted.org/packages/5c/26/d8a6e4c17117b7f9b83301319d9a9de862ae56b133efb4bad8b3aa0808c9/librt-0.7.7-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:6b6f8ea465524aa4c7420c7cc4ca7d46fe00981de8debc67b1cc2e9957bb5b9d", size = 178251, upload-time = "2026-01-01T23:51:37.018Z" }, { url = "https://files.pythonhosted.org/packages/99/ab/98d857e254376f8e2f668e807daccc1f445e4b4fc2f6f9c1cc08866b0227/librt-0.7.7-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:f8df32a99cc46eb0ee90afd9ada113ae2cafe7e8d673686cf03ec53e49635439", size = 199853, upload-time = "2026-01-01T23:51:38.195Z" }, { url = "https://files.pythonhosted.org/packages/7c/55/4523210d6ae5134a5da959900be43ad8bab2e4206687b6620befddb5b5fd/librt-0.7.7-cp313-cp313-win32.whl", hash = "sha256:86f86b3b785487c7760247bcdac0b11aa8bf13245a13ed05206286135877564b", size = 43247, upload-time = "2026-01-01T23:51:39.629Z" }, { url = "https://files.pythonhosted.org/packages/25/40/3ec0fed5e8e9297b1cf1a3836fb589d3de55f9930e3aba988d379e8ef67c/librt-0.7.7-cp313-cp313-win_amd64.whl", hash = "sha256:4862cb2c702b1f905c0503b72d9d4daf65a7fdf5a9e84560e563471e57a56949", size = 49419, upload-time = "2026-01-01T23:51:40.674Z" }, { url = "https://files.pythonhosted.org/packages/1c/7a/aab5f0fb122822e2acbc776addf8b9abfb4944a9056c00c393e46e543177/librt-0.7.7-cp313-cp313-win_arm64.whl", hash = "sha256:0996c83b1cb43c00e8c87835a284f9057bc647abd42b5871e5f941d30010c832", size = 42828, upload-time = "2026-01-01T23:51:41.731Z" }, { url = "https://files.pythonhosted.org/packages/69/9c/228a5c1224bd23809a635490a162e9cbdc68d99f0eeb4a696f07886b8206/librt-0.7.7-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:23daa1ab0512bafdd677eb1bfc9611d8ffbe2e328895671e64cb34166bc1b8c8", size = 55188, upload-time = "2026-01-01T23:51:43.14Z" }, { url = "https://files.pythonhosted.org/packages/ba/c2/0e7c6067e2b32a156308205e5728f4ed6478c501947e9142f525afbc6bd2/librt-0.7.7-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:558a9e5a6f3cc1e20b3168fb1dc802d0d8fa40731f6e9932dcc52bbcfbd37111", size = 56895, upload-time = "2026-01-01T23:51:44.534Z" }, { url = "https://files.pythonhosted.org/packages/0e/77/de50ff70c80855eb79d1d74035ef06f664dd073fb7fb9d9fb4429651b8eb/librt-0.7.7-cp314-cp314-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:2567cb48dc03e5b246927ab35cbb343376e24501260a9b5e30b8e255dca0d1d2", size = 163724, upload-time = "2026-01-01T23:51:45.571Z" }, { url = "https://files.pythonhosted.org/packages/6e/19/f8e4bf537899bdef9e0bb9f0e4b18912c2d0f858ad02091b6019864c9a6d/librt-0.7.7-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6066c638cdf85ff92fc6f932d2d73c93a0e03492cdfa8778e6d58c489a3d7259", size = 172470, upload-time = "2026-01-01T23:51:46.823Z" }, { url = "https://files.pythonhosted.org/packages/42/4c/dcc575b69d99076768e8dd6141d9aecd4234cba7f0e09217937f52edb6ed/librt-0.7.7-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a609849aca463074c17de9cda173c276eb8fee9e441053529e7b9e249dc8b8ee", size = 186806, upload-time = "2026-01-01T23:51:48.009Z" }, { url = "https://files.pythonhosted.org/packages/fe/f8/4094a2b7816c88de81239a83ede6e87f1138477d7ee956c30f136009eb29/librt-0.7.7-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:add4e0a000858fe9bb39ed55f31085506a5c38363e6eb4a1e5943a10c2bfc3d1", size = 181809, upload-time = "2026-01-01T23:51:49.35Z" }, { url = "https://files.pythonhosted.org/packages/1b/ac/821b7c0ab1b5a6cd9aee7ace8309c91545a2607185101827f79122219a7e/librt-0.7.7-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:a3bfe73a32bd0bdb9a87d586b05a23c0a1729205d79df66dee65bb2e40d671ba", size = 175597, upload-time = "2026-01-01T23:51:50.636Z" }, { url = "https://files.pythonhosted.org/packages/71/f9/27f6bfbcc764805864c04211c6ed636fe1d58f57a7b68d1f4ae5ed74e0e0/librt-0.7.7-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:0ecce0544d3db91a40f8b57ae26928c02130a997b540f908cefd4d279d6c5848", size = 196506, upload-time = "2026-01-01T23:51:52.535Z" }, { url = "https://files.pythonhosted.org/packages/46/ba/c9b9c6fc931dd7ea856c573174ccaf48714905b1a7499904db2552e3bbaf/librt-0.7.7-cp314-cp314-win32.whl", hash = "sha256:8f7a74cf3a80f0c3b0ec75b0c650b2f0a894a2cec57ef75f6f72c1e82cdac61d", size = 39747, upload-time = "2026-01-01T23:51:53.683Z" }, { url = "https://files.pythonhosted.org/packages/c5/69/cd1269337c4cde3ee70176ee611ab0058aa42fc8ce5c9dce55f48facfcd8/librt-0.7.7-cp314-cp314-win_amd64.whl", hash = "sha256:3d1fe2e8df3268dd6734dba33ededae72ad5c3a859b9577bc00b715759c5aaab", size = 45971, upload-time = "2026-01-01T23:51:54.697Z" }, { url = "https://files.pythonhosted.org/packages/79/fd/e0844794423f5583108c5991313c15e2b400995f44f6ec6871f8aaf8243c/librt-0.7.7-cp314-cp314-win_arm64.whl", hash = "sha256:2987cf827011907d3dfd109f1be0d61e173d68b1270107bb0e89f2fca7f2ed6b", size = 39075, upload-time = "2026-01-01T23:51:55.726Z" }, { url = "https://files.pythonhosted.org/packages/42/02/211fd8f7c381e7b2a11d0fdfcd410f409e89967be2e705983f7c6342209a/librt-0.7.7-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:8e92c8de62b40bfce91d5e12c6e8b15434da268979b1af1a6589463549d491e6", size = 57368, upload-time = "2026-01-01T23:51:56.706Z" }, { url = "https://files.pythonhosted.org/packages/4c/b6/aca257affae73ece26041ae76032153266d110453173f67d7603058e708c/librt-0.7.7-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:f683dcd49e2494a7535e30f779aa1ad6e3732a019d80abe1309ea91ccd3230e3", size = 59238, upload-time = "2026-01-01T23:51:58.066Z" }, { url = "https://files.pythonhosted.org/packages/96/47/7383a507d8e0c11c78ca34c9d36eab9000db5989d446a2f05dc40e76c64f/librt-0.7.7-cp314-cp314t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:9b15e5d17812d4d629ff576699954f74e2cc24a02a4fc401882dd94f81daba45", size = 183870, upload-time = "2026-01-01T23:51:59.204Z" }, { url = "https://files.pythonhosted.org/packages/a4/b8/50f3d8eec8efdaf79443963624175c92cec0ba84827a66b7fcfa78598e51/librt-0.7.7-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c084841b879c4d9b9fa34e5d5263994f21aea7fd9c6add29194dbb41a6210536", size = 194608, upload-time = "2026-01-01T23:52:00.419Z" }, { url = "https://files.pythonhosted.org/packages/23/d9/1b6520793aadb59d891e3b98ee057a75de7f737e4a8b4b37fdbecb10d60f/librt-0.7.7-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:10c8fb9966f84737115513fecbaf257f9553d067a7dd45a69c2c7e5339e6a8dc", size = 206776, upload-time = "2026-01-01T23:52:01.705Z" }, { url = "https://files.pythonhosted.org/packages/ff/db/331edc3bba929d2756fa335bfcf736f36eff4efcb4f2600b545a35c2ae58/librt-0.7.7-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:9b5fb1ecb2c35362eab2dbd354fd1efa5a8440d3e73a68be11921042a0edc0ff", size = 203206, upload-time = "2026-01-01T23:52:03.315Z" }, { url = "https://files.pythonhosted.org/packages/b2/e1/6af79ec77204e85f6f2294fc171a30a91bb0e35d78493532ed680f5d98be/librt-0.7.7-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:d1454899909d63cc9199a89fcc4f81bdd9004aef577d4ffc022e600c412d57f3", size = 196697, upload-time = "2026-01-01T23:52:04.857Z" }, { url = "https://files.pythonhosted.org/packages/f3/46/de55ecce4b2796d6d243295c221082ca3a944dc2fb3a52dcc8660ce7727d/librt-0.7.7-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:7ef28f2e7a016b29792fe0a2dd04dec75725b32a1264e390c366103f834a9c3a", size = 217193, upload-time = "2026-01-01T23:52:06.159Z" }, { url = "https://files.pythonhosted.org/packages/41/61/33063e271949787a2f8dd33c5260357e3d512a114fc82ca7890b65a76e2d/librt-0.7.7-cp314-cp314t-win32.whl", hash = "sha256:5e419e0db70991b6ba037b70c1d5bbe92b20ddf82f31ad01d77a347ed9781398", size = 40277, upload-time = "2026-01-01T23:52:07.625Z" }, { url = "https://files.pythonhosted.org/packages/06/21/1abd972349f83a696ea73159ac964e63e2d14086fdd9bc7ca878c25fced4/librt-0.7.7-cp314-cp314t-win_amd64.whl", hash = "sha256:d6b7d93657332c817b8d674ef6bf1ab7796b4f7ce05e420fd45bd258a72ac804", size = 46765, upload-time = "2026-01-01T23:52:08.647Z" }, { url = "https://files.pythonhosted.org/packages/51/0e/b756c7708143a63fca65a51ca07990fa647db2cc8fcd65177b9e96680255/librt-0.7.7-cp314-cp314t-win_arm64.whl", hash = "sha256:142c2cd91794b79fd0ce113bd658993b7ede0fe93057668c2f98a45ca00b7e91", size = 39724, upload-time = "2026-01-01T23:52:09.745Z" }, ] [[package]] name = "markupsafe" version = "3.0.3" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/7e/99/7690b6d4034fffd95959cbe0c02de8deb3098cc577c67bb6a24fe5d7caa7/markupsafe-3.0.3.tar.gz", hash = "sha256:722695808f4b6457b320fdc131280796bdceb04ab50fe1795cd540799ebe1698", size = 80313, upload-time = "2025-09-27T18:37:40.426Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/e8/4b/3541d44f3937ba468b75da9eebcae497dcf67adb65caa16760b0a6807ebb/markupsafe-3.0.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2f981d352f04553a7171b8e44369f2af4055f888dfb147d55e42d29e29e74559", size = 11631, upload-time = "2025-09-27T18:36:05.558Z" }, { url = "https://files.pythonhosted.org/packages/98/1b/fbd8eed11021cabd9226c37342fa6ca4e8a98d8188a8d9b66740494960e4/markupsafe-3.0.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e1c1493fb6e50ab01d20a22826e57520f1284df32f2d8601fdd90b6304601419", size = 12057, upload-time = "2025-09-27T18:36:07.165Z" }, { url = "https://files.pythonhosted.org/packages/40/01/e560d658dc0bb8ab762670ece35281dec7b6c1b33f5fbc09ebb57a185519/markupsafe-3.0.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1ba88449deb3de88bd40044603fafffb7bc2b055d626a330323a9ed736661695", size = 22050, upload-time = "2025-09-27T18:36:08.005Z" }, { url = "https://files.pythonhosted.org/packages/af/cd/ce6e848bbf2c32314c9b237839119c5a564a59725b53157c856e90937b7a/markupsafe-3.0.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f42d0984e947b8adf7dd6dde396e720934d12c506ce84eea8476409563607591", size = 20681, upload-time = "2025-09-27T18:36:08.881Z" }, { url = "https://files.pythonhosted.org/packages/c9/2a/b5c12c809f1c3045c4d580b035a743d12fcde53cf685dbc44660826308da/markupsafe-3.0.3-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:c0c0b3ade1c0b13b936d7970b1d37a57acde9199dc2aecc4c336773e1d86049c", size = 20705, upload-time = "2025-09-27T18:36:10.131Z" }, { url = "https://files.pythonhosted.org/packages/cf/e3/9427a68c82728d0a88c50f890d0fc072a1484de2f3ac1ad0bfc1a7214fd5/markupsafe-3.0.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:0303439a41979d9e74d18ff5e2dd8c43ed6c6001fd40e5bf2e43f7bd9bbc523f", size = 21524, upload-time = "2025-09-27T18:36:11.324Z" }, { url = "https://files.pythonhosted.org/packages/bc/36/23578f29e9e582a4d0278e009b38081dbe363c5e7165113fad546918a232/markupsafe-3.0.3-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:d2ee202e79d8ed691ceebae8e0486bd9a2cd4794cec4824e1c99b6f5009502f6", size = 20282, upload-time = "2025-09-27T18:36:12.573Z" }, { url = "https://files.pythonhosted.org/packages/56/21/dca11354e756ebd03e036bd8ad58d6d7168c80ce1fe5e75218e4945cbab7/markupsafe-3.0.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:177b5253b2834fe3678cb4a5f0059808258584c559193998be2601324fdeafb1", size = 20745, upload-time = "2025-09-27T18:36:13.504Z" }, { url = "https://files.pythonhosted.org/packages/87/99/faba9369a7ad6e4d10b6a5fbf71fa2a188fe4a593b15f0963b73859a1bbd/markupsafe-3.0.3-cp310-cp310-win32.whl", hash = "sha256:2a15a08b17dd94c53a1da0438822d70ebcd13f8c3a95abe3a9ef9f11a94830aa", size = 14571, upload-time = "2025-09-27T18:36:14.779Z" }, { url = "https://files.pythonhosted.org/packages/d6/25/55dc3ab959917602c96985cb1253efaa4ff42f71194bddeb61eb7278b8be/markupsafe-3.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:c4ffb7ebf07cfe8931028e3e4c85f0357459a3f9f9490886198848f4fa002ec8", size = 15056, upload-time = "2025-09-27T18:36:16.125Z" }, { url = "https://files.pythonhosted.org/packages/d0/9e/0a02226640c255d1da0b8d12e24ac2aa6734da68bff14c05dd53b94a0fc3/markupsafe-3.0.3-cp310-cp310-win_arm64.whl", hash = "sha256:e2103a929dfa2fcaf9bb4e7c091983a49c9ac3b19c9061b6d5427dd7d14d81a1", size = 13932, upload-time = "2025-09-27T18:36:17.311Z" }, { url = "https://files.pythonhosted.org/packages/08/db/fefacb2136439fc8dd20e797950e749aa1f4997ed584c62cfb8ef7c2be0e/markupsafe-3.0.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1cc7ea17a6824959616c525620e387f6dd30fec8cb44f649e31712db02123dad", size = 11631, upload-time = "2025-09-27T18:36:18.185Z" }, { url = "https://files.pythonhosted.org/packages/e1/2e/5898933336b61975ce9dc04decbc0a7f2fee78c30353c5efba7f2d6ff27a/markupsafe-3.0.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4bd4cd07944443f5a265608cc6aab442e4f74dff8088b0dfc8238647b8f6ae9a", size = 12058, upload-time = "2025-09-27T18:36:19.444Z" }, { url = "https://files.pythonhosted.org/packages/1d/09/adf2df3699d87d1d8184038df46a9c80d78c0148492323f4693df54e17bb/markupsafe-3.0.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6b5420a1d9450023228968e7e6a9ce57f65d148ab56d2313fcd589eee96a7a50", size = 24287, upload-time = "2025-09-27T18:36:20.768Z" }, { url = "https://files.pythonhosted.org/packages/30/ac/0273f6fcb5f42e314c6d8cd99effae6a5354604d461b8d392b5ec9530a54/markupsafe-3.0.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0bf2a864d67e76e5c9a34dc26ec616a66b9888e25e7b9460e1c76d3293bd9dbf", size = 22940, upload-time = "2025-09-27T18:36:22.249Z" }, { url = "https://files.pythonhosted.org/packages/19/ae/31c1be199ef767124c042c6c3e904da327a2f7f0cd63a0337e1eca2967a8/markupsafe-3.0.3-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:bc51efed119bc9cfdf792cdeaa4d67e8f6fcccab66ed4bfdd6bde3e59bfcbb2f", size = 21887, upload-time = "2025-09-27T18:36:23.535Z" }, { url = "https://files.pythonhosted.org/packages/b2/76/7edcab99d5349a4532a459e1fe64f0b0467a3365056ae550d3bcf3f79e1e/markupsafe-3.0.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:068f375c472b3e7acbe2d5318dea141359e6900156b5b2ba06a30b169086b91a", size = 23692, upload-time = "2025-09-27T18:36:24.823Z" }, { url = "https://files.pythonhosted.org/packages/a4/28/6e74cdd26d7514849143d69f0bf2399f929c37dc2b31e6829fd2045b2765/markupsafe-3.0.3-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:7be7b61bb172e1ed687f1754f8e7484f1c8019780f6f6b0786e76bb01c2ae115", size = 21471, upload-time = "2025-09-27T18:36:25.95Z" }, { url = "https://files.pythonhosted.org/packages/62/7e/a145f36a5c2945673e590850a6f8014318d5577ed7e5920a4b3448e0865d/markupsafe-3.0.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:f9e130248f4462aaa8e2552d547f36ddadbeaa573879158d721bbd33dfe4743a", size = 22923, upload-time = "2025-09-27T18:36:27.109Z" }, { url = "https://files.pythonhosted.org/packages/0f/62/d9c46a7f5c9adbeeeda52f5b8d802e1094e9717705a645efc71b0913a0a8/markupsafe-3.0.3-cp311-cp311-win32.whl", hash = "sha256:0db14f5dafddbb6d9208827849fad01f1a2609380add406671a26386cdf15a19", size = 14572, upload-time = "2025-09-27T18:36:28.045Z" }, { url = "https://files.pythonhosted.org/packages/83/8a/4414c03d3f891739326e1783338e48fb49781cc915b2e0ee052aa490d586/markupsafe-3.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:de8a88e63464af587c950061a5e6a67d3632e36df62b986892331d4620a35c01", size = 15077, upload-time = "2025-09-27T18:36:29.025Z" }, { url = "https://files.pythonhosted.org/packages/35/73/893072b42e6862f319b5207adc9ae06070f095b358655f077f69a35601f0/markupsafe-3.0.3-cp311-cp311-win_arm64.whl", hash = "sha256:3b562dd9e9ea93f13d53989d23a7e775fdfd1066c33494ff43f5418bc8c58a5c", size = 13876, upload-time = "2025-09-27T18:36:29.954Z" }, { url = "https://files.pythonhosted.org/packages/5a/72/147da192e38635ada20e0a2e1a51cf8823d2119ce8883f7053879c2199b5/markupsafe-3.0.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:d53197da72cc091b024dd97249dfc7794d6a56530370992a5e1a08983ad9230e", size = 11615, upload-time = "2025-09-27T18:36:30.854Z" }, { url = "https://files.pythonhosted.org/packages/9a/81/7e4e08678a1f98521201c3079f77db69fb552acd56067661f8c2f534a718/markupsafe-3.0.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1872df69a4de6aead3491198eaf13810b565bdbeec3ae2dc8780f14458ec73ce", size = 12020, upload-time = "2025-09-27T18:36:31.971Z" }, { url = "https://files.pythonhosted.org/packages/1e/2c/799f4742efc39633a1b54a92eec4082e4f815314869865d876824c257c1e/markupsafe-3.0.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3a7e8ae81ae39e62a41ec302f972ba6ae23a5c5396c8e60113e9066ef893da0d", size = 24332, upload-time = "2025-09-27T18:36:32.813Z" }, { url = "https://files.pythonhosted.org/packages/3c/2e/8d0c2ab90a8c1d9a24f0399058ab8519a3279d1bd4289511d74e909f060e/markupsafe-3.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d6dd0be5b5b189d31db7cda48b91d7e0a9795f31430b7f271219ab30f1d3ac9d", size = 22947, upload-time = "2025-09-27T18:36:33.86Z" }, { url = "https://files.pythonhosted.org/packages/2c/54/887f3092a85238093a0b2154bd629c89444f395618842e8b0c41783898ea/markupsafe-3.0.3-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:94c6f0bb423f739146aec64595853541634bde58b2135f27f61c1ffd1cd4d16a", size = 21962, upload-time = "2025-09-27T18:36:35.099Z" }, { url = "https://files.pythonhosted.org/packages/c9/2f/336b8c7b6f4a4d95e91119dc8521402461b74a485558d8f238a68312f11c/markupsafe-3.0.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:be8813b57049a7dc738189df53d69395eba14fb99345e0a5994914a3864c8a4b", size = 23760, upload-time = "2025-09-27T18:36:36.001Z" }, { url = "https://files.pythonhosted.org/packages/32/43/67935f2b7e4982ffb50a4d169b724d74b62a3964bc1a9a527f5ac4f1ee2b/markupsafe-3.0.3-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:83891d0e9fb81a825d9a6d61e3f07550ca70a076484292a70fde82c4b807286f", size = 21529, upload-time = "2025-09-27T18:36:36.906Z" }, { url = "https://files.pythonhosted.org/packages/89/e0/4486f11e51bbba8b0c041098859e869e304d1c261e59244baa3d295d47b7/markupsafe-3.0.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:77f0643abe7495da77fb436f50f8dab76dbc6e5fd25d39589a0f1fe6548bfa2b", size = 23015, upload-time = "2025-09-27T18:36:37.868Z" }, { url = "https://files.pythonhosted.org/packages/2f/e1/78ee7a023dac597a5825441ebd17170785a9dab23de95d2c7508ade94e0e/markupsafe-3.0.3-cp312-cp312-win32.whl", hash = "sha256:d88b440e37a16e651bda4c7c2b930eb586fd15ca7406cb39e211fcff3bf3017d", size = 14540, upload-time = "2025-09-27T18:36:38.761Z" }, { url = "https://files.pythonhosted.org/packages/aa/5b/bec5aa9bbbb2c946ca2733ef9c4ca91c91b6a24580193e891b5f7dbe8e1e/markupsafe-3.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:26a5784ded40c9e318cfc2bdb30fe164bdb8665ded9cd64d500a34fb42067b1c", size = 15105, upload-time = "2025-09-27T18:36:39.701Z" }, { url = "https://files.pythonhosted.org/packages/e5/f1/216fc1bbfd74011693a4fd837e7026152e89c4bcf3e77b6692fba9923123/markupsafe-3.0.3-cp312-cp312-win_arm64.whl", hash = "sha256:35add3b638a5d900e807944a078b51922212fb3dedb01633a8defc4b01a3c85f", size = 13906, upload-time = "2025-09-27T18:36:40.689Z" }, { url = "https://files.pythonhosted.org/packages/38/2f/907b9c7bbba283e68f20259574b13d005c121a0fa4c175f9bed27c4597ff/markupsafe-3.0.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e1cf1972137e83c5d4c136c43ced9ac51d0e124706ee1c8aa8532c1287fa8795", size = 11622, upload-time = "2025-09-27T18:36:41.777Z" }, { url = "https://files.pythonhosted.org/packages/9c/d9/5f7756922cdd676869eca1c4e3c0cd0df60ed30199ffd775e319089cb3ed/markupsafe-3.0.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:116bb52f642a37c115f517494ea5feb03889e04df47eeff5b130b1808ce7c219", size = 12029, upload-time = "2025-09-27T18:36:43.257Z" }, { url = "https://files.pythonhosted.org/packages/00/07/575a68c754943058c78f30db02ee03a64b3c638586fba6a6dd56830b30a3/markupsafe-3.0.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:133a43e73a802c5562be9bbcd03d090aa5a1fe899db609c29e8c8d815c5f6de6", size = 24374, upload-time = "2025-09-27T18:36:44.508Z" }, { url = "https://files.pythonhosted.org/packages/a9/21/9b05698b46f218fc0e118e1f8168395c65c8a2c750ae2bab54fc4bd4e0e8/markupsafe-3.0.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ccfcd093f13f0f0b7fdd0f198b90053bf7b2f02a3927a30e63f3ccc9df56b676", size = 22980, upload-time = "2025-09-27T18:36:45.385Z" }, { url = "https://files.pythonhosted.org/packages/7f/71/544260864f893f18b6827315b988c146b559391e6e7e8f7252839b1b846a/markupsafe-3.0.3-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:509fa21c6deb7a7a273d629cf5ec029bc209d1a51178615ddf718f5918992ab9", size = 21990, upload-time = "2025-09-27T18:36:46.916Z" }, { url = "https://files.pythonhosted.org/packages/c2/28/b50fc2f74d1ad761af2f5dcce7492648b983d00a65b8c0e0cb457c82ebbe/markupsafe-3.0.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a4afe79fb3de0b7097d81da19090f4df4f8d3a2b3adaa8764138aac2e44f3af1", size = 23784, upload-time = "2025-09-27T18:36:47.884Z" }, { url = "https://files.pythonhosted.org/packages/ed/76/104b2aa106a208da8b17a2fb72e033a5a9d7073c68f7e508b94916ed47a9/markupsafe-3.0.3-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:795e7751525cae078558e679d646ae45574b47ed6e7771863fcc079a6171a0fc", size = 21588, upload-time = "2025-09-27T18:36:48.82Z" }, { url = "https://files.pythonhosted.org/packages/b5/99/16a5eb2d140087ebd97180d95249b00a03aa87e29cc224056274f2e45fd6/markupsafe-3.0.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:8485f406a96febb5140bfeca44a73e3ce5116b2501ac54fe953e488fb1d03b12", size = 23041, upload-time = "2025-09-27T18:36:49.797Z" }, { url = "https://files.pythonhosted.org/packages/19/bc/e7140ed90c5d61d77cea142eed9f9c303f4c4806f60a1044c13e3f1471d0/markupsafe-3.0.3-cp313-cp313-win32.whl", hash = "sha256:bdd37121970bfd8be76c5fb069c7751683bdf373db1ed6c010162b2a130248ed", size = 14543, upload-time = "2025-09-27T18:36:51.584Z" }, { url = "https://files.pythonhosted.org/packages/05/73/c4abe620b841b6b791f2edc248f556900667a5a1cf023a6646967ae98335/markupsafe-3.0.3-cp313-cp313-win_amd64.whl", hash = "sha256:9a1abfdc021a164803f4d485104931fb8f8c1efd55bc6b748d2f5774e78b62c5", size = 15113, upload-time = "2025-09-27T18:36:52.537Z" }, { url = "https://files.pythonhosted.org/packages/f0/3a/fa34a0f7cfef23cf9500d68cb7c32dd64ffd58a12b09225fb03dd37d5b80/markupsafe-3.0.3-cp313-cp313-win_arm64.whl", hash = "sha256:7e68f88e5b8799aa49c85cd116c932a1ac15caaa3f5db09087854d218359e485", size = 13911, upload-time = "2025-09-27T18:36:53.513Z" }, { url = "https://files.pythonhosted.org/packages/e4/d7/e05cd7efe43a88a17a37b3ae96e79a19e846f3f456fe79c57ca61356ef01/markupsafe-3.0.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:218551f6df4868a8d527e3062d0fb968682fe92054e89978594c28e642c43a73", size = 11658, upload-time = "2025-09-27T18:36:54.819Z" }, { url = "https://files.pythonhosted.org/packages/99/9e/e412117548182ce2148bdeacdda3bb494260c0b0184360fe0d56389b523b/markupsafe-3.0.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:3524b778fe5cfb3452a09d31e7b5adefeea8c5be1d43c4f810ba09f2ceb29d37", size = 12066, upload-time = "2025-09-27T18:36:55.714Z" }, { url = "https://files.pythonhosted.org/packages/bc/e6/fa0ffcda717ef64a5108eaa7b4f5ed28d56122c9a6d70ab8b72f9f715c80/markupsafe-3.0.3-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4e885a3d1efa2eadc93c894a21770e4bc67899e3543680313b09f139e149ab19", size = 25639, upload-time = "2025-09-27T18:36:56.908Z" }, { url = "https://files.pythonhosted.org/packages/96/ec/2102e881fe9d25fc16cb4b25d5f5cde50970967ffa5dddafdb771237062d/markupsafe-3.0.3-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8709b08f4a89aa7586de0aadc8da56180242ee0ada3999749b183aa23df95025", size = 23569, upload-time = "2025-09-27T18:36:57.913Z" }, { url = "https://files.pythonhosted.org/packages/4b/30/6f2fce1f1f205fc9323255b216ca8a235b15860c34b6798f810f05828e32/markupsafe-3.0.3-cp313-cp313t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:b8512a91625c9b3da6f127803b166b629725e68af71f8184ae7e7d54686a56d6", size = 23284, upload-time = "2025-09-27T18:36:58.833Z" }, { url = "https://files.pythonhosted.org/packages/58/47/4a0ccea4ab9f5dcb6f79c0236d954acb382202721e704223a8aafa38b5c8/markupsafe-3.0.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:9b79b7a16f7fedff2495d684f2b59b0457c3b493778c9eed31111be64d58279f", size = 24801, upload-time = "2025-09-27T18:36:59.739Z" }, { url = "https://files.pythonhosted.org/packages/6a/70/3780e9b72180b6fecb83a4814d84c3bf4b4ae4bf0b19c27196104149734c/markupsafe-3.0.3-cp313-cp313t-musllinux_1_2_riscv64.whl", hash = "sha256:12c63dfb4a98206f045aa9563db46507995f7ef6d83b2f68eda65c307c6829eb", size = 22769, upload-time = "2025-09-27T18:37:00.719Z" }, { url = "https://files.pythonhosted.org/packages/98/c5/c03c7f4125180fc215220c035beac6b9cb684bc7a067c84fc69414d315f5/markupsafe-3.0.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:8f71bc33915be5186016f675cd83a1e08523649b0e33efdb898db577ef5bb009", size = 23642, upload-time = "2025-09-27T18:37:01.673Z" }, { url = "https://files.pythonhosted.org/packages/80/d6/2d1b89f6ca4bff1036499b1e29a1d02d282259f3681540e16563f27ebc23/markupsafe-3.0.3-cp313-cp313t-win32.whl", hash = "sha256:69c0b73548bc525c8cb9a251cddf1931d1db4d2258e9599c28c07ef3580ef354", size = 14612, upload-time = "2025-09-27T18:37:02.639Z" }, { url = "https://files.pythonhosted.org/packages/2b/98/e48a4bfba0a0ffcf9925fe2d69240bfaa19c6f7507b8cd09c70684a53c1e/markupsafe-3.0.3-cp313-cp313t-win_amd64.whl", hash = "sha256:1b4b79e8ebf6b55351f0d91fe80f893b4743f104bff22e90697db1590e47a218", size = 15200, upload-time = "2025-09-27T18:37:03.582Z" }, { url = "https://files.pythonhosted.org/packages/0e/72/e3cc540f351f316e9ed0f092757459afbc595824ca724cbc5a5d4263713f/markupsafe-3.0.3-cp313-cp313t-win_arm64.whl", hash = "sha256:ad2cf8aa28b8c020ab2fc8287b0f823d0a7d8630784c31e9ee5edea20f406287", size = 13973, upload-time = "2025-09-27T18:37:04.929Z" }, { url = "https://files.pythonhosted.org/packages/33/8a/8e42d4838cd89b7dde187011e97fe6c3af66d8c044997d2183fbd6d31352/markupsafe-3.0.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:eaa9599de571d72e2daf60164784109f19978b327a3910d3e9de8c97b5b70cfe", size = 11619, upload-time = "2025-09-27T18:37:06.342Z" }, { url = "https://files.pythonhosted.org/packages/b5/64/7660f8a4a8e53c924d0fa05dc3a55c9cee10bbd82b11c5afb27d44b096ce/markupsafe-3.0.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:c47a551199eb8eb2121d4f0f15ae0f923d31350ab9280078d1e5f12b249e0026", size = 12029, upload-time = "2025-09-27T18:37:07.213Z" }, { url = "https://files.pythonhosted.org/packages/da/ef/e648bfd021127bef5fa12e1720ffed0c6cbb8310c8d9bea7266337ff06de/markupsafe-3.0.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f34c41761022dd093b4b6896d4810782ffbabe30f2d443ff5f083e0cbbb8c737", size = 24408, upload-time = "2025-09-27T18:37:09.572Z" }, { url = "https://files.pythonhosted.org/packages/41/3c/a36c2450754618e62008bf7435ccb0f88053e07592e6028a34776213d877/markupsafe-3.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:457a69a9577064c05a97c41f4e65148652db078a3a509039e64d3467b9e7ef97", size = 23005, upload-time = "2025-09-27T18:37:10.58Z" }, { url = "https://files.pythonhosted.org/packages/bc/20/b7fdf89a8456b099837cd1dc21974632a02a999ec9bf7ca3e490aacd98e7/markupsafe-3.0.3-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:e8afc3f2ccfa24215f8cb28dcf43f0113ac3c37c2f0f0806d8c70e4228c5cf4d", size = 22048, upload-time = "2025-09-27T18:37:11.547Z" }, { url = "https://files.pythonhosted.org/packages/9a/a7/591f592afdc734f47db08a75793a55d7fbcc6902a723ae4cfbab61010cc5/markupsafe-3.0.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:ec15a59cf5af7be74194f7ab02d0f59a62bdcf1a537677ce67a2537c9b87fcda", size = 23821, upload-time = "2025-09-27T18:37:12.48Z" }, { url = "https://files.pythonhosted.org/packages/7d/33/45b24e4f44195b26521bc6f1a82197118f74df348556594bd2262bda1038/markupsafe-3.0.3-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:0eb9ff8191e8498cca014656ae6b8d61f39da5f95b488805da4bb029cccbfbaf", size = 21606, upload-time = "2025-09-27T18:37:13.485Z" }, { url = "https://files.pythonhosted.org/packages/ff/0e/53dfaca23a69fbfbbf17a4b64072090e70717344c52eaaaa9c5ddff1e5f0/markupsafe-3.0.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:2713baf880df847f2bece4230d4d094280f4e67b1e813eec43b4c0e144a34ffe", size = 23043, upload-time = "2025-09-27T18:37:14.408Z" }, { url = "https://files.pythonhosted.org/packages/46/11/f333a06fc16236d5238bfe74daccbca41459dcd8d1fa952e8fbd5dccfb70/markupsafe-3.0.3-cp314-cp314-win32.whl", hash = "sha256:729586769a26dbceff69f7a7dbbf59ab6572b99d94576a5592625d5b411576b9", size = 14747, upload-time = "2025-09-27T18:37:15.36Z" }, { url = "https://files.pythonhosted.org/packages/28/52/182836104b33b444e400b14f797212f720cbc9ed6ba34c800639d154e821/markupsafe-3.0.3-cp314-cp314-win_amd64.whl", hash = "sha256:bdc919ead48f234740ad807933cdf545180bfbe9342c2bb451556db2ed958581", size = 15341, upload-time = "2025-09-27T18:37:16.496Z" }, { url = "https://files.pythonhosted.org/packages/6f/18/acf23e91bd94fd7b3031558b1f013adfa21a8e407a3fdb32745538730382/markupsafe-3.0.3-cp314-cp314-win_arm64.whl", hash = "sha256:5a7d5dc5140555cf21a6fefbdbf8723f06fcd2f63ef108f2854de715e4422cb4", size = 14073, upload-time = "2025-09-27T18:37:17.476Z" }, { url = "https://files.pythonhosted.org/packages/3c/f0/57689aa4076e1b43b15fdfa646b04653969d50cf30c32a102762be2485da/markupsafe-3.0.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:1353ef0c1b138e1907ae78e2f6c63ff67501122006b0f9abad68fda5f4ffc6ab", size = 11661, upload-time = "2025-09-27T18:37:18.453Z" }, { url = "https://files.pythonhosted.org/packages/89/c3/2e67a7ca217c6912985ec766c6393b636fb0c2344443ff9d91404dc4c79f/markupsafe-3.0.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:1085e7fbddd3be5f89cc898938f42c0b3c711fdcb37d75221de2666af647c175", size = 12069, upload-time = "2025-09-27T18:37:19.332Z" }, { url = "https://files.pythonhosted.org/packages/f0/00/be561dce4e6ca66b15276e184ce4b8aec61fe83662cce2f7d72bd3249d28/markupsafe-3.0.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1b52b4fb9df4eb9ae465f8d0c228a00624de2334f216f178a995ccdcf82c4634", size = 25670, upload-time = "2025-09-27T18:37:20.245Z" }, { url = "https://files.pythonhosted.org/packages/50/09/c419f6f5a92e5fadde27efd190eca90f05e1261b10dbd8cbcb39cd8ea1dc/markupsafe-3.0.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fed51ac40f757d41b7c48425901843666a6677e3e8eb0abcff09e4ba6e664f50", size = 23598, upload-time = "2025-09-27T18:37:21.177Z" }, { url = "https://files.pythonhosted.org/packages/22/44/a0681611106e0b2921b3033fc19bc53323e0b50bc70cffdd19f7d679bb66/markupsafe-3.0.3-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:f190daf01f13c72eac4efd5c430a8de82489d9cff23c364c3ea822545032993e", size = 23261, upload-time = "2025-09-27T18:37:22.167Z" }, { url = "https://files.pythonhosted.org/packages/5f/57/1b0b3f100259dc9fffe780cfb60d4be71375510e435efec3d116b6436d43/markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:e56b7d45a839a697b5eb268c82a71bd8c7f6c94d6fd50c3d577fa39a9f1409f5", size = 24835, upload-time = "2025-09-27T18:37:23.296Z" }, { url = "https://files.pythonhosted.org/packages/26/6a/4bf6d0c97c4920f1597cc14dd720705eca0bf7c787aebc6bb4d1bead5388/markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:f3e98bb3798ead92273dc0e5fd0f31ade220f59a266ffd8a4f6065e0a3ce0523", size = 22733, upload-time = "2025-09-27T18:37:24.237Z" }, { url = "https://files.pythonhosted.org/packages/14/c7/ca723101509b518797fedc2fdf79ba57f886b4aca8a7d31857ba3ee8281f/markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:5678211cb9333a6468fb8d8be0305520aa073f50d17f089b5b4b477ea6e67fdc", size = 23672, upload-time = "2025-09-27T18:37:25.271Z" }, { url = "https://files.pythonhosted.org/packages/fb/df/5bd7a48c256faecd1d36edc13133e51397e41b73bb77e1a69deab746ebac/markupsafe-3.0.3-cp314-cp314t-win32.whl", hash = "sha256:915c04ba3851909ce68ccc2b8e2cd691618c4dc4c4232fb7982bca3f41fd8c3d", size = 14819, upload-time = "2025-09-27T18:37:26.285Z" }, { url = "https://files.pythonhosted.org/packages/1a/8a/0402ba61a2f16038b48b39bccca271134be00c5c9f0f623208399333c448/markupsafe-3.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:4faffd047e07c38848ce017e8725090413cd80cbc23d86e55c587bf979e579c9", size = 15426, upload-time = "2025-09-27T18:37:27.316Z" }, { url = "https://files.pythonhosted.org/packages/70/bc/6f1c2f612465f5fa89b95bead1f44dcb607670fd42891d8fdcd5d039f4f4/markupsafe-3.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:32001d6a8fc98c8cb5c947787c5d08b0a50663d139f1305bac5885d98d9b40fa", size = 14146, upload-time = "2025-09-27T18:37:28.327Z" }, ] [[package]] name = "mypy" version = "1.19.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "librt", marker = "platform_python_implementation != 'PyPy'" }, { name = "mypy-extensions" }, { name = "pathspec" }, { name = "tomli", marker = "python_full_version < '3.11'" }, { name = "typing-extensions" }, ] sdist = { url = "https://files.pythonhosted.org/packages/f5/db/4efed9504bc01309ab9c2da7e352cc223569f05478012b5d9ece38fd44d2/mypy-1.19.1.tar.gz", hash = "sha256:19d88bb05303fe63f71dd2c6270daca27cb9401c4ca8255fe50d1d920e0eb9ba", size = 3582404, upload-time = "2025-12-15T05:03:48.42Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/2f/63/e499890d8e39b1ff2df4c0c6ce5d371b6844ee22b8250687a99fd2f657a8/mypy-1.19.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5f05aa3d375b385734388e844bc01733bd33c644ab48e9684faa54e5389775ec", size = 13101333, upload-time = "2025-12-15T05:03:03.28Z" }, { url = "https://files.pythonhosted.org/packages/72/4b/095626fc136fba96effc4fd4a82b41d688ab92124f8c4f7564bffe5cf1b0/mypy-1.19.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:022ea7279374af1a5d78dfcab853fe6a536eebfda4b59deab53cd21f6cd9f00b", size = 12164102, upload-time = "2025-12-15T05:02:33.611Z" }, { url = "https://files.pythonhosted.org/packages/0c/5b/952928dd081bf88a83a5ccd49aaecfcd18fd0d2710c7ff07b8fb6f7032b9/mypy-1.19.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ee4c11e460685c3e0c64a4c5de82ae143622410950d6be863303a1c4ba0e36d6", size = 12765799, upload-time = "2025-12-15T05:03:28.44Z" }, { url = "https://files.pythonhosted.org/packages/2a/0d/93c2e4a287f74ef11a66fb6d49c7a9f05e47b0a4399040e6719b57f500d2/mypy-1.19.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:de759aafbae8763283b2ee5869c7255391fbc4de3ff171f8f030b5ec48381b74", size = 13522149, upload-time = "2025-12-15T05:02:36.011Z" }, { url = "https://files.pythonhosted.org/packages/7b/0e/33a294b56aaad2b338d203e3a1d8b453637ac36cb278b45005e0901cf148/mypy-1.19.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:ab43590f9cd5108f41aacf9fca31841142c786827a74ab7cc8a2eacb634e09a1", size = 13810105, upload-time = "2025-12-15T05:02:40.327Z" }, { url = "https://files.pythonhosted.org/packages/0e/fd/3e82603a0cb66b67c5e7abababce6bf1a929ddf67bf445e652684af5c5a0/mypy-1.19.1-cp310-cp310-win_amd64.whl", hash = "sha256:2899753e2f61e571b3971747e302d5f420c3fd09650e1951e99f823bc3089dac", size = 10057200, upload-time = "2025-12-15T05:02:51.012Z" }, { url = "https://files.pythonhosted.org/packages/ef/47/6b3ebabd5474d9cdc170d1342fbf9dddc1b0ec13ec90bf9004ee6f391c31/mypy-1.19.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:d8dfc6ab58ca7dda47d9237349157500468e404b17213d44fc1cb77bce532288", size = 13028539, upload-time = "2025-12-15T05:03:44.129Z" }, { url = "https://files.pythonhosted.org/packages/5c/a6/ac7c7a88a3c9c54334f53a941b765e6ec6c4ebd65d3fe8cdcfbe0d0fd7db/mypy-1.19.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e3f276d8493c3c97930e354b2595a44a21348b320d859fb4a2b9f66da9ed27ab", size = 12083163, upload-time = "2025-12-15T05:03:37.679Z" }, { url = "https://files.pythonhosted.org/packages/67/af/3afa9cf880aa4a2c803798ac24f1d11ef72a0c8079689fac5cfd815e2830/mypy-1.19.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2abb24cf3f17864770d18d673c85235ba52456b36a06b6afc1e07c1fdcd3d0e6", size = 12687629, upload-time = "2025-12-15T05:02:31.526Z" }, { url = "https://files.pythonhosted.org/packages/2d/46/20f8a7114a56484ab268b0ab372461cb3a8f7deed31ea96b83a4e4cfcfca/mypy-1.19.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a009ffa5a621762d0c926a078c2d639104becab69e79538a494bcccb62cc0331", size = 13436933, upload-time = "2025-12-15T05:03:15.606Z" }, { url = "https://files.pythonhosted.org/packages/5b/f8/33b291ea85050a21f15da910002460f1f445f8007adb29230f0adea279cb/mypy-1.19.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:f7cee03c9a2e2ee26ec07479f38ea9c884e301d42c6d43a19d20fb014e3ba925", size = 13661754, upload-time = "2025-12-15T05:02:26.731Z" }, { url = "https://files.pythonhosted.org/packages/fd/a3/47cbd4e85bec4335a9cd80cf67dbc02be21b5d4c9c23ad6b95d6c5196bac/mypy-1.19.1-cp311-cp311-win_amd64.whl", hash = "sha256:4b84a7a18f41e167f7995200a1d07a4a6810e89d29859df936f1c3923d263042", size = 10055772, upload-time = "2025-12-15T05:03:26.179Z" }, { url = "https://files.pythonhosted.org/packages/06/8a/19bfae96f6615aa8a0604915512e0289b1fad33d5909bf7244f02935d33a/mypy-1.19.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:a8174a03289288c1f6c46d55cef02379b478bfbc8e358e02047487cad44c6ca1", size = 13206053, upload-time = "2025-12-15T05:03:46.622Z" }, { url = "https://files.pythonhosted.org/packages/a5/34/3e63879ab041602154ba2a9f99817bb0c85c4df19a23a1443c8986e4d565/mypy-1.19.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ffcebe56eb09ff0c0885e750036a095e23793ba6c2e894e7e63f6d89ad51f22e", size = 12219134, upload-time = "2025-12-15T05:03:24.367Z" }, { url = "https://files.pythonhosted.org/packages/89/cc/2db6f0e95366b630364e09845672dbee0cbf0bbe753a204b29a944967cd9/mypy-1.19.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b64d987153888790bcdb03a6473d321820597ab8dd9243b27a92153c4fa50fd2", size = 12731616, upload-time = "2025-12-15T05:02:44.725Z" }, { url = "https://files.pythonhosted.org/packages/00/be/dd56c1fd4807bc1eba1cf18b2a850d0de7bacb55e158755eb79f77c41f8e/mypy-1.19.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c35d298c2c4bba75feb2195655dfea8124d855dfd7343bf8b8c055421eaf0cf8", size = 13620847, upload-time = "2025-12-15T05:03:39.633Z" }, { url = "https://files.pythonhosted.org/packages/6d/42/332951aae42b79329f743bf1da088cd75d8d4d9acc18fbcbd84f26c1af4e/mypy-1.19.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:34c81968774648ab5ac09c29a375fdede03ba253f8f8287847bd480782f73a6a", size = 13834976, upload-time = "2025-12-15T05:03:08.786Z" }, { url = "https://files.pythonhosted.org/packages/6f/63/e7493e5f90e1e085c562bb06e2eb32cae27c5057b9653348d38b47daaecc/mypy-1.19.1-cp312-cp312-win_amd64.whl", hash = "sha256:b10e7c2cd7870ba4ad9b2d8a6102eb5ffc1f16ca35e3de6bfa390c1113029d13", size = 10118104, upload-time = "2025-12-15T05:03:10.834Z" }, { url = "https://files.pythonhosted.org/packages/de/9f/a6abae693f7a0c697dbb435aac52e958dc8da44e92e08ba88d2e42326176/mypy-1.19.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e3157c7594ff2ef1634ee058aafc56a82db665c9438fd41b390f3bde1ab12250", size = 13201927, upload-time = "2025-12-15T05:02:29.138Z" }, { url = "https://files.pythonhosted.org/packages/9a/a4/45c35ccf6e1c65afc23a069f50e2c66f46bd3798cbe0d680c12d12935caa/mypy-1.19.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:bdb12f69bcc02700c2b47e070238f42cb87f18c0bc1fc4cdb4fb2bc5fd7a3b8b", size = 12206730, upload-time = "2025-12-15T05:03:01.325Z" }, { url = "https://files.pythonhosted.org/packages/05/bb/cdcf89678e26b187650512620eec8368fded4cfd99cfcb431e4cdfd19dec/mypy-1.19.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f859fb09d9583a985be9a493d5cfc5515b56b08f7447759a0c5deaf68d80506e", size = 12724581, upload-time = "2025-12-15T05:03:20.087Z" }, { url = "https://files.pythonhosted.org/packages/d1/32/dd260d52babf67bad8e6770f8e1102021877ce0edea106e72df5626bb0ec/mypy-1.19.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c9a6538e0415310aad77cb94004ca6482330fece18036b5f360b62c45814c4ef", size = 13616252, upload-time = "2025-12-15T05:02:49.036Z" }, { url = "https://files.pythonhosted.org/packages/71/d0/5e60a9d2e3bd48432ae2b454b7ef2b62a960ab51292b1eda2a95edd78198/mypy-1.19.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:da4869fc5e7f62a88f3fe0b5c919d1d9f7ea3cef92d3689de2823fd27e40aa75", size = 13840848, upload-time = "2025-12-15T05:02:55.95Z" }, { url = "https://files.pythonhosted.org/packages/98/76/d32051fa65ecf6cc8c6610956473abdc9b4c43301107476ac03559507843/mypy-1.19.1-cp313-cp313-win_amd64.whl", hash = "sha256:016f2246209095e8eda7538944daa1d60e1e8134d98983b9fc1e92c1fc0cb8dd", size = 10135510, upload-time = "2025-12-15T05:02:58.438Z" }, { url = "https://files.pythonhosted.org/packages/de/eb/b83e75f4c820c4247a58580ef86fcd35165028f191e7e1ba57128c52782d/mypy-1.19.1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:06e6170bd5836770e8104c8fdd58e5e725cfeb309f0a6c681a811f557e97eac1", size = 13199744, upload-time = "2025-12-15T05:03:30.823Z" }, { url = "https://files.pythonhosted.org/packages/94/28/52785ab7bfa165f87fcbb61547a93f98bb20e7f82f90f165a1f69bce7b3d/mypy-1.19.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:804bd67b8054a85447c8954215a906d6eff9cabeabe493fb6334b24f4bfff718", size = 12215815, upload-time = "2025-12-15T05:02:42.323Z" }, { url = "https://files.pythonhosted.org/packages/0a/c6/bdd60774a0dbfb05122e3e925f2e9e846c009e479dcec4821dad881f5b52/mypy-1.19.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:21761006a7f497cb0d4de3d8ef4ca70532256688b0523eee02baf9eec895e27b", size = 12740047, upload-time = "2025-12-15T05:03:33.168Z" }, { url = "https://files.pythonhosted.org/packages/32/2a/66ba933fe6c76bd40d1fe916a83f04fed253152f451a877520b3c4a5e41e/mypy-1.19.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:28902ee51f12e0f19e1e16fbe2f8f06b6637f482c459dd393efddd0ec7f82045", size = 13601998, upload-time = "2025-12-15T05:03:13.056Z" }, { url = "https://files.pythonhosted.org/packages/e3/da/5055c63e377c5c2418760411fd6a63ee2b96cf95397259038756c042574f/mypy-1.19.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:481daf36a4c443332e2ae9c137dfee878fcea781a2e3f895d54bd3002a900957", size = 13807476, upload-time = "2025-12-15T05:03:17.977Z" }, { url = "https://files.pythonhosted.org/packages/cd/09/4ebd873390a063176f06b0dbf1f7783dd87bd120eae7727fa4ae4179b685/mypy-1.19.1-cp314-cp314-win_amd64.whl", hash = "sha256:8bb5c6f6d043655e055be9b542aa5f3bdd30e4f3589163e85f93f3640060509f", size = 10281872, upload-time = "2025-12-15T05:03:05.549Z" }, { url = "https://files.pythonhosted.org/packages/8d/f4/4ce9a05ce5ded1de3ec1c1d96cf9f9504a04e54ce0ed55cfa38619a32b8d/mypy-1.19.1-py3-none-any.whl", hash = "sha256:f1235f5ea01b7db5468d53ece6aaddf1ad0b88d9e7462b86ef96fe04995d7247", size = 2471239, upload-time = "2025-12-15T05:03:07.248Z" }, ] [[package]] name = "mypy-extensions" version = "1.1.0" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/a2/6e/371856a3fb9d31ca8dac321cda606860fa4548858c0cc45d9d1d4ca2628b/mypy_extensions-1.1.0.tar.gz", hash = "sha256:52e68efc3284861e772bbcd66823fde5ae21fd2fdb51c62a211403730b916558", size = 6343, upload-time = "2025-04-22T14:54:24.164Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/79/7b/2c79738432f5c924bef5071f933bcc9efd0473bac3b4aa584a6f7c1c8df8/mypy_extensions-1.1.0-py3-none-any.whl", hash = "sha256:1be4cccdb0f2482337c4743e60421de3a356cd97508abadd57d47403e94f5505", size = 4963, upload-time = "2025-04-22T14:54:22.983Z" }, ] [[package]] name = "mysqlclient" version = "2.2.7" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/61/68/810093cb579daae426794bbd9d88aa830fae296e85172d18cb0f0e5dd4bc/mysqlclient-2.2.7.tar.gz", hash = "sha256:24ae22b59416d5fcce7e99c9d37548350b4565baac82f95e149cac6ce4163845", size = 91383, upload-time = "2025-01-10T12:06:00.763Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/0c/24/cdaaef42aac7d53c0a01bb638da64961c293b1b6d204efd47400a68029d4/mysqlclient-2.2.7-cp310-cp310-win_amd64.whl", hash = "sha256:2e3c11f7625029d7276ca506f8960a7fd3c5a0a0122c9e7404e6a8fe961b3d22", size = 207748, upload-time = "2025-01-10T11:56:24.357Z" }, { url = "https://files.pythonhosted.org/packages/ef/e3/3e2de3f93cd60dd63bd229ec3e3b679f682982614bf513d046c2722aa4ce/mysqlclient-2.2.7-cp311-cp311-win_amd64.whl", hash = "sha256:a22d99d26baf4af68ebef430e3131bb5a9b722b79a9fcfac6d9bbf8a88800687", size = 207745, upload-time = "2025-01-10T11:56:28.67Z" }, { url = "https://files.pythonhosted.org/packages/bb/b5/2a8a4bcba3440550f358b839638fe8ec9146fa3c9194890b4998a530c926/mysqlclient-2.2.7-cp312-cp312-win_amd64.whl", hash = "sha256:4b4c0200890837fc64014cc938ef2273252ab544c1b12a6c1d674c23943f3f2e", size = 208032, upload-time = "2025-01-10T11:56:29.879Z" }, { url = "https://files.pythonhosted.org/packages/29/01/e80141f1cd0459e4c9a5dd309dee135bbae41d6c6c121252fdd853001a8a/mysqlclient-2.2.7-cp313-cp313-win_amd64.whl", hash = "sha256:201a6faa301011dd07bca6b651fe5aaa546d7c9a5426835a06c3172e1056a3c5", size = 208000, upload-time = "2025-01-10T11:56:32.293Z" }, { url = "https://files.pythonhosted.org/packages/16/cc/5b1570be9f8597ee41e2a0bd7b62ba861ec2c81898d9449f3d6bfbe15d29/mysqlclient-2.2.7-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:92af368ed9c9144737af569c86d3b6c74a012a6f6b792eb868384787b52bb585", size = 207800, upload-time = "2025-01-10T11:56:36.023Z" }, ] [[package]] name = "nodeenv" version = "1.10.0" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/24/bf/d1bda4f6168e0b2e9e5958945e01910052158313224ada5ce1fb2e1113b8/nodeenv-1.10.0.tar.gz", hash = "sha256:996c191ad80897d076bdfba80a41994c2b47c68e224c542b48feba42ba00f8bb", size = 55611, upload-time = "2025-12-20T14:08:54.006Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl", hash = "sha256:5bb13e3eed2923615535339b3c620e76779af4cb4c6a90deccc9e36b274d3827", size = 23438, upload-time = "2025-12-20T14:08:52.782Z" }, ] [[package]] name = "oracledb" version = "3.4.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "cryptography" }, { name = "typing-extensions" }, ] sdist = { url = "https://files.pythonhosted.org/packages/5e/9d/4e86cd410294ebbb1f90a609aaae61c5fa064a5c10e501de3f4c67664e6c/oracledb-3.4.1.tar.gz", hash = "sha256:f5920df5ac9446579e8409607bba31dc2d23a2286a5b0ea17cb0d78d419392a6", size = 852693, upload-time = "2025-11-12T03:21:36.157Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/4b/70/05645e72a67b45396a248a7949d89c91dc7a1ab5f7cedad110d9804e29d5/oracledb-3.4.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:dfe18061f064d0455fad10d9301f6f92df9e32d18d75fb32802caf1ced4b304c", size = 4243226, upload-time = "2025-11-12T03:21:41.734Z" }, { url = "https://files.pythonhosted.org/packages/7e/cc/f3a78ae31f87e41378c7bc60928fa5432d4eba80806cb0086edc11803a22/oracledb-3.4.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:84055d6fd093a4d7b8ed653f433531e4c4cc161f7261d78efd7f6a65a1f19444", size = 2426914, upload-time = "2025-11-12T03:21:43.641Z" }, { url = "https://files.pythonhosted.org/packages/a6/a6/3d3dabbec2651851f13fdb7c318a3c50780090235d340d851f7cb8deeeec/oracledb-3.4.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c9e20b6cd3245e84c30188874c524bb3c67c79b7a04fcb864e6ac39f55eae826", size = 2605903, upload-time = "2025-11-12T03:21:45.378Z" }, { url = "https://files.pythonhosted.org/packages/ae/59/aa174fc8f5629b890424702edf582a8a635acaa0db1315b16160d703a887/oracledb-3.4.1-cp310-cp310-win32.whl", hash = "sha256:abedb0bf464bcf14d83e245eae000e03cad8ac68c945eb09cc46002d800fbf00", size = 1490352, upload-time = "2025-11-12T03:21:46.732Z" }, { url = "https://files.pythonhosted.org/packages/8a/1c/9dded6efc747d8980667584c8464295d80d205f8a131e31cacfb274b6ed5/oracledb-3.4.1-cp310-cp310-win_amd64.whl", hash = "sha256:4ee604bb0f3acb5680782818f973445b8cd168e72a73b5ca2cd9807140afadee", size = 1837541, upload-time = "2025-11-12T03:21:48.571Z" }, { url = "https://files.pythonhosted.org/packages/ed/9e/5901349b8797fabc7c6f78230376bfbd5541a847f1eb34be23bfb971add7/oracledb-3.4.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:20b268be64994d0f636df9ff7613dcce420133f373d0d7fc84a31dd2f07322c0", size = 4226376, upload-time = "2025-11-12T03:21:49.959Z" }, { url = "https://files.pythonhosted.org/packages/fc/c0/951d2ab8c04df9da309a82e211d19223a64dbbcfdd79f5f1aba6d8736408/oracledb-3.4.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d493946318d99a0f0e3f01d7c64c08ddae66f0aac735fa23c1eb94949d9db0f5", size = 2422323, upload-time = "2025-11-12T03:21:51.583Z" }, { url = "https://files.pythonhosted.org/packages/a8/7c/82843dd7e55dec6331c0c7737e32523eb2f6156c6469055e2cb752e848f4/oracledb-3.4.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4d64fda2fa5d3e82c58b2c5126ab5511bccb84f8b47eedfe9f17e9c100fe7683", size = 2601267, upload-time = "2025-11-12T03:21:52.978Z" }, { url = "https://files.pythonhosted.org/packages/27/3f/67b50042f955574fca574a2234ba4af421e9268601bceb49efd9c43c6bc8/oracledb-3.4.1-cp311-cp311-win32.whl", hash = "sha256:cd80aa4c4dec7347c6d2909fbaf7e35a5253341ff2cb6f3782ab7ca712bf0405", size = 1488075, upload-time = "2025-11-12T03:21:54.704Z" }, { url = "https://files.pythonhosted.org/packages/8d/14/bab071234d61e84c65712902dd0edec825d82b3198ffddc977c9ea9a91f3/oracledb-3.4.1-cp311-cp311-win_amd64.whl", hash = "sha256:5e01e8696009cec4ebcb9fe678b23b8223595dc186c065899660cac4c1fc189b", size = 1843449, upload-time = "2025-11-12T03:21:56.342Z" }, { url = "https://files.pythonhosted.org/packages/f7/d9/98367ba2c358de366de70b505531f9717cdfa7e29eff0c9ad113eecfce96/oracledb-3.4.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:1c3f92c023ef1983e0e7f9a1b4a31df8568974c28c06ab0a574b1126e45083a8", size = 4222133, upload-time = "2025-11-12T03:21:58.212Z" }, { url = "https://files.pythonhosted.org/packages/36/52/48ad2f7dae6288a2ddf0ac536d46ce4883d2d10ec7e16afbbd48f1ec0ff3/oracledb-3.4.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:251211d64b90cc42d00ec2d2893873bc02ff4bc22125e9fc5a7f148a6208fd88", size = 2230374, upload-time = "2025-11-12T03:21:59.656Z" }, { url = "https://files.pythonhosted.org/packages/8d/08/60d4301b4f72f099ed2252f8d0eb143e6fe9e5c8f4c2705c3163cea36808/oracledb-3.4.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ea529a5e6036fae3e2bc195fa76b6f48cd9c431e68c74ef78ee6a5e39c855c39", size = 2421755, upload-time = "2025-11-12T03:22:01.543Z" }, { url = "https://files.pythonhosted.org/packages/48/35/412a90019a030f5dff0c031319733c6b8dd477832bafa88b733b4b3ec57b/oracledb-3.4.1-cp312-cp312-win32.whl", hash = "sha256:94e8e6d63b45fedd4e243147cb25dea1a0f6599d83852f3979fe725a8533e85a", size = 1449688, upload-time = "2025-11-12T03:22:03.422Z" }, { url = "https://files.pythonhosted.org/packages/7b/01/ae9eca3055dc625923564ca653ca99ddd8eda95e44953ce55c18aba55066/oracledb-3.4.1-cp312-cp312-win_amd64.whl", hash = "sha256:84f15c483f9ec80dcded925df6ff473c69a293cd694d09b69abb911500659df4", size = 1794622, upload-time = "2025-11-12T03:22:04.941Z" }, { url = "https://files.pythonhosted.org/packages/f0/4d/e32db901340dc6fc824d0d3b5e4660fe0199fba8adb0e81ac08b639c8ab9/oracledb-3.4.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ad817807b293e371c951af8ee67a56a5af88a5680a54fe79dfc7b9393ca128aa", size = 4206469, upload-time = "2025-11-12T03:22:06.881Z" }, { url = "https://files.pythonhosted.org/packages/cf/68/1a038f29523eea19e42f4dd765bf523752408816b5ff21e8b998d8b25457/oracledb-3.4.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:34b9bc25eae217defa3f4b8289b4915cd1101aaeeec33c7bace74f927996d452", size = 2233055, upload-time = "2025-11-12T03:22:08.259Z" }, { url = "https://files.pythonhosted.org/packages/b9/66/a51243553ac6b0e1bc2cfd4db8a2f3299b1b60c9231d7c9133ee1442d15b/oracledb-3.4.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:be6575759ba56ab3758f82bfbb74f75288ce69190e19c087793050cb012c0aa1", size = 2443312, upload-time = "2025-11-12T03:22:09.615Z" }, { url = "https://files.pythonhosted.org/packages/f7/57/a6056d4432c07a959fd1032dd45bfaff69b91ac7e1204dbccf7bf7b4a91d/oracledb-3.4.1-cp313-cp313-win32.whl", hash = "sha256:635587e5f28be83ec0bf72e4bfb2f3a4544c0f8e303f2327f376d57116894541", size = 1453553, upload-time = "2025-11-12T03:22:11.045Z" }, { url = "https://files.pythonhosted.org/packages/6a/57/dca415d8dd18a2a030a9402d49039493cdce6acfd37c8a038a4ede2328e6/oracledb-3.4.1-cp313-cp313-win_amd64.whl", hash = "sha256:354177708352e124c0f97ceccbe34be05e7f3ce7040a7dd3c2ebd857145ffe74", size = 1794005, upload-time = "2025-11-12T03:22:12.694Z" }, { url = "https://files.pythonhosted.org/packages/59/07/dff7b9e6242b627d56f3fa6ad6639802003e1e5fbcc883d0ce27d82455ad/oracledb-3.4.1-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:3ec1f9dd7310da7cbf219c2a05bb52df08da950c95ad2ace8a289854947bdc6b", size = 4247946, upload-time = "2025-11-12T03:22:14.473Z" }, { url = "https://files.pythonhosted.org/packages/1f/95/739868c6f312683cc3afe9534644b4ce2d054fe137d8f7a1e7786df9f5aa/oracledb-3.4.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:337a67d6c91015dfe7a2a1915f65c74adad26fcd428daaead296d91c92f09ad1", size = 2271628, upload-time = "2025-11-12T03:22:15.956Z" }, { url = "https://files.pythonhosted.org/packages/fb/7c/307da513f5fb68e6454beb5bc1c715ec09a70d2af70a28b9fa6001c1b09b/oracledb-3.4.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9d5ffe4dd26e8012de433ec69f93be5737d81b04324072ec36dad37eb778fd9d", size = 2455603, upload-time = "2025-11-12T03:22:18.112Z" }, { url = "https://files.pythonhosted.org/packages/c5/1a/af5bd7239cebfc33541432cfcba75893a3f2f44fa66648e6d8ce1fe96b0c/oracledb-3.4.1-cp314-cp314-win32.whl", hash = "sha256:693ef5f8c420545511096b3bc9a3861617222717321bc78c776afbbb6c16c5b9", size = 1474932, upload-time = "2025-11-12T03:22:19.574Z" }, { url = "https://files.pythonhosted.org/packages/f1/ee/79d2ed18fd234bcbd407c1b36372dc898cf68de825ec650df7b1627acb51/oracledb-3.4.1-cp314-cp314-win_amd64.whl", hash = "sha256:6adb483d7120cdd056173b71c901f71dbe2265c5bd402f768b0b1ab27af519b1", size = 1837566, upload-time = "2025-11-12T03:22:20.959Z" }, ] [[package]] name = "packaging" version = "25.0" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/a1/d4/1fc4078c65507b51b96ca8f8c3ba19e6a61c8253c72794544580a7b6c24d/packaging-25.0.tar.gz", hash = "sha256:d443872c98d677bf60f6a1f2f8c1cb748e8fe762d2bf9d3148b5599295b0fc4f", size = 165727, upload-time = "2025-04-19T11:48:59.673Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/20/12/38679034af332785aac8774540895e234f4d07f7545804097de4b666afd8/packaging-25.0-py3-none-any.whl", hash = "sha256:29572ef2b1f17581046b3a2227d5c611fb25ec70ca1ba8554b24b0e69331a484", size = 66469, upload-time = "2025-04-19T11:48:57.875Z" }, ] [[package]] name = "pathspec" version = "0.12.1" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/ca/bc/f35b8446f4531a7cb215605d100cd88b7ac6f44ab3fc94870c120ab3adbf/pathspec-0.12.1.tar.gz", hash = "sha256:a482d51503a1ab33b1c67a6c3813a26953dbdc71c31dacaef9a838c4e29f5712", size = 51043, upload-time = "2023-12-10T22:30:45Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/cc/20/ff623b09d963f88bfde16306a54e12ee5ea43e9b597108672ff3a408aad6/pathspec-0.12.1-py3-none-any.whl", hash = "sha256:a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08", size = 31191, upload-time = "2023-12-10T22:30:43.14Z" }, ] [[package]] name = "pluggy" version = "1.6.0" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/f9/e2/3e91f31a7d2b083fe6ef3fa267035b518369d9511ffab804f839851d2779/pluggy-1.6.0.tar.gz", hash = "sha256:7dcc130b76258d33b90f61b658791dede3486c3e6bfb003ee5c9bfb396dd22f3", size = 69412, upload-time = "2025-05-15T12:30:07.975Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl", hash = "sha256:e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd4746", size = 20538, upload-time = "2025-05-15T12:30:06.134Z" }, ] [[package]] name = "psycopg2-binary" version = "2.9.11" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/ac/6c/8767aaa597ba424643dc87348c6f1754dd9f48e80fdc1b9f7ca5c3a7c213/psycopg2-binary-2.9.11.tar.gz", hash = "sha256:b6aed9e096bf63f9e75edf2581aa9a7e7186d97ab5c177aa6c87797cd591236c", size = 379620, upload-time = "2025-10-10T11:14:48.041Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/6a/f2/8e377d29c2ecf99f6062d35ea606b036e8800720eccfec5fe3dd672c2b24/psycopg2_binary-2.9.11-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d6fe6b47d0b42ce1c9f1fa3e35bb365011ca22e39db37074458f27921dca40f2", size = 3756506, upload-time = "2025-10-10T11:10:30.144Z" }, { url = "https://files.pythonhosted.org/packages/24/cc/dc143ea88e4ec9d386106cac05023b69668bd0be20794c613446eaefafe5/psycopg2_binary-2.9.11-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a6c0e4262e089516603a09474ee13eabf09cb65c332277e39af68f6233911087", size = 3863943, upload-time = "2025-10-10T11:10:34.586Z" }, { url = "https://files.pythonhosted.org/packages/8c/df/16848771155e7c419c60afeb24950b8aaa3ab09c0a091ec3ccca26a574d0/psycopg2_binary-2.9.11-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:c47676e5b485393f069b4d7a811267d3168ce46f988fa602658b8bb901e9e64d", size = 4410873, upload-time = "2025-10-10T11:10:38.951Z" }, { url = "https://files.pythonhosted.org/packages/43/79/5ef5f32621abd5a541b89b04231fe959a9b327c874a1d41156041c75494b/psycopg2_binary-2.9.11-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:a28d8c01a7b27a1e3265b11250ba7557e5f72b5ee9e5f3a2fa8d2949c29bf5d2", size = 4468016, upload-time = "2025-10-10T11:10:43.319Z" }, { url = "https://files.pythonhosted.org/packages/f0/9b/d7542d0f7ad78f57385971f426704776d7b310f5219ed58da5d605b1892e/psycopg2_binary-2.9.11-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:5f3f2732cf504a1aa9e9609d02f79bea1067d99edf844ab92c247bbca143303b", size = 4164996, upload-time = "2025-10-10T11:10:46.705Z" }, { url = "https://files.pythonhosted.org/packages/14/ed/e409388b537fa7414330687936917c522f6a77a13474e4238219fcfd9a84/psycopg2_binary-2.9.11-cp310-cp310-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:865f9945ed1b3950d968ec4690ce68c55019d79e4497366d36e090327ce7db14", size = 3981881, upload-time = "2025-10-30T02:54:57.182Z" }, { url = "https://files.pythonhosted.org/packages/bf/30/50e330e63bb05efc6fa7c1447df3e08954894025ca3dcb396ecc6739bc26/psycopg2_binary-2.9.11-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:91537a8df2bde69b1c1db01d6d944c831ca793952e4f57892600e96cee95f2cd", size = 3650857, upload-time = "2025-10-10T11:10:50.112Z" }, { url = "https://files.pythonhosted.org/packages/f0/e0/4026e4c12bb49dd028756c5b0bc4c572319f2d8f1c9008e0dad8cc9addd7/psycopg2_binary-2.9.11-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:4dca1f356a67ecb68c81a7bc7809f1569ad9e152ce7fd02c2f2036862ca9f66b", size = 3296063, upload-time = "2025-10-10T11:10:54.089Z" }, { url = "https://files.pythonhosted.org/packages/2c/34/eb172be293c886fef5299fe5c3fcf180a05478be89856067881007934a7c/psycopg2_binary-2.9.11-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:0da4de5c1ac69d94ed4364b6cbe7190c1a70d325f112ba783d83f8440285f152", size = 3043464, upload-time = "2025-10-30T02:55:02.483Z" }, { url = "https://files.pythonhosted.org/packages/18/1c/532c5d2cb11986372f14b798a95f2eaafe5779334f6a80589a68b5fcf769/psycopg2_binary-2.9.11-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:37d8412565a7267f7d79e29ab66876e55cb5e8e7b3bbf94f8206f6795f8f7e7e", size = 3345378, upload-time = "2025-10-10T11:11:01.039Z" }, { url = "https://files.pythonhosted.org/packages/70/e7/de420e1cf16f838e1fa17b1120e83afff374c7c0130d088dba6286fcf8ea/psycopg2_binary-2.9.11-cp310-cp310-win_amd64.whl", hash = "sha256:c665f01ec8ab273a61c62beeb8cce3014c214429ced8a308ca1fc410ecac3a39", size = 2713904, upload-time = "2025-10-10T11:11:04.81Z" }, { url = "https://files.pythonhosted.org/packages/c7/ae/8d8266f6dd183ab4d48b95b9674034e1b482a3f8619b33a0d86438694577/psycopg2_binary-2.9.11-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0e8480afd62362d0a6a27dd09e4ca2def6fa50ed3a4e7c09165266106b2ffa10", size = 3756452, upload-time = "2025-10-10T11:11:11.583Z" }, { url = "https://files.pythonhosted.org/packages/4b/34/aa03d327739c1be70e09d01182619aca8ebab5970cd0cfa50dd8b9cec2ac/psycopg2_binary-2.9.11-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:763c93ef1df3da6d1a90f86ea7f3f806dc06b21c198fa87c3c25504abec9404a", size = 3863957, upload-time = "2025-10-10T11:11:16.932Z" }, { url = "https://files.pythonhosted.org/packages/48/89/3fdb5902bdab8868bbedc1c6e6023a4e08112ceac5db97fc2012060e0c9a/psycopg2_binary-2.9.11-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:2e164359396576a3cc701ba8af4751ae68a07235d7a380c631184a611220d9a4", size = 4410955, upload-time = "2025-10-10T11:11:21.21Z" }, { url = "https://files.pythonhosted.org/packages/ce/24/e18339c407a13c72b336e0d9013fbbbde77b6fd13e853979019a1269519c/psycopg2_binary-2.9.11-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:d57c9c387660b8893093459738b6abddbb30a7eab058b77b0d0d1c7d521ddfd7", size = 4468007, upload-time = "2025-10-10T11:11:24.831Z" }, { url = "https://files.pythonhosted.org/packages/91/7e/b8441e831a0f16c159b5381698f9f7f7ed54b77d57bc9c5f99144cc78232/psycopg2_binary-2.9.11-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:2c226ef95eb2250974bf6fa7a842082b31f68385c4f3268370e3f3870e7859ee", size = 4165012, upload-time = "2025-10-10T11:11:29.51Z" }, { url = "https://files.pythonhosted.org/packages/0d/61/4aa89eeb6d751f05178a13da95516c036e27468c5d4d2509bb1e15341c81/psycopg2_binary-2.9.11-cp311-cp311-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:a311f1edc9967723d3511ea7d2708e2c3592e3405677bf53d5c7246753591fbb", size = 3981881, upload-time = "2025-10-30T02:55:07.332Z" }, { url = "https://files.pythonhosted.org/packages/76/a1/2f5841cae4c635a9459fe7aca8ed771336e9383b6429e05c01267b0774cf/psycopg2_binary-2.9.11-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:ebb415404821b6d1c47353ebe9c8645967a5235e6d88f914147e7fd411419e6f", size = 3650985, upload-time = "2025-10-10T11:11:34.975Z" }, { url = "https://files.pythonhosted.org/packages/84/74/4defcac9d002bca5709951b975173c8c2fa968e1a95dc713f61b3a8d3b6a/psycopg2_binary-2.9.11-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:f07c9c4a5093258a03b28fab9b4f151aa376989e7f35f855088234e656ee6a94", size = 3296039, upload-time = "2025-10-10T11:11:40.432Z" }, { url = "https://files.pythonhosted.org/packages/6d/c2/782a3c64403d8ce35b5c50e1b684412cf94f171dc18111be8c976abd2de1/psycopg2_binary-2.9.11-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:00ce1830d971f43b667abe4a56e42c1e2d594b32da4802e44a73bacacb25535f", size = 3043477, upload-time = "2025-10-30T02:55:11.182Z" }, { url = "https://files.pythonhosted.org/packages/c8/31/36a1d8e702aa35c38fc117c2b8be3f182613faa25d794b8aeaab948d4c03/psycopg2_binary-2.9.11-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:cffe9d7697ae7456649617e8bb8d7a45afb71cd13f7ab22af3e5c61f04840908", size = 3345842, upload-time = "2025-10-10T11:11:45.366Z" }, { url = "https://files.pythonhosted.org/packages/6e/b4/a5375cda5b54cb95ee9b836930fea30ae5a8f14aa97da7821722323d979b/psycopg2_binary-2.9.11-cp311-cp311-win_amd64.whl", hash = "sha256:304fd7b7f97eef30e91b8f7e720b3db75fee010b520e434ea35ed1ff22501d03", size = 2713894, upload-time = "2025-10-10T11:11:48.775Z" }, { url = "https://files.pythonhosted.org/packages/d8/91/f870a02f51be4a65987b45a7de4c2e1897dd0d01051e2b559a38fa634e3e/psycopg2_binary-2.9.11-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:be9b840ac0525a283a96b556616f5b4820e0526addb8dcf6525a0fa162730be4", size = 3756603, upload-time = "2025-10-10T11:11:52.213Z" }, { url = "https://files.pythonhosted.org/packages/27/fa/cae40e06849b6c9a95eb5c04d419942f00d9eaac8d81626107461e268821/psycopg2_binary-2.9.11-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f090b7ddd13ca842ebfe301cd587a76a4cf0913b1e429eb92c1be5dbeb1a19bc", size = 3864509, upload-time = "2025-10-10T11:11:56.452Z" }, { url = "https://files.pythonhosted.org/packages/2d/75/364847b879eb630b3ac8293798e380e441a957c53657995053c5ec39a316/psycopg2_binary-2.9.11-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ab8905b5dcb05bf3fb22e0cf90e10f469563486ffb6a96569e51f897c750a76a", size = 4411159, upload-time = "2025-10-10T11:12:00.49Z" }, { url = "https://files.pythonhosted.org/packages/6f/a0/567f7ea38b6e1c62aafd58375665a547c00c608a471620c0edc364733e13/psycopg2_binary-2.9.11-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:bf940cd7e7fec19181fdbc29d76911741153d51cab52e5c21165f3262125685e", size = 4468234, upload-time = "2025-10-10T11:12:04.892Z" }, { url = "https://files.pythonhosted.org/packages/30/da/4e42788fb811bbbfd7b7f045570c062f49e350e1d1f3df056c3fb5763353/psycopg2_binary-2.9.11-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:fa0f693d3c68ae925966f0b14b8edda71696608039f4ed61b1fe9ffa468d16db", size = 4166236, upload-time = "2025-10-10T11:12:11.674Z" }, { url = "https://files.pythonhosted.org/packages/3c/94/c1777c355bc560992af848d98216148be5f1be001af06e06fc49cbded578/psycopg2_binary-2.9.11-cp312-cp312-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:a1cf393f1cdaf6a9b57c0a719a1068ba1069f022a59b8b1fe44b006745b59757", size = 3983083, upload-time = "2025-10-30T02:55:15.73Z" }, { url = "https://files.pythonhosted.org/packages/bd/42/c9a21edf0e3daa7825ed04a4a8588686c6c14904344344a039556d78aa58/psycopg2_binary-2.9.11-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:ef7a6beb4beaa62f88592ccc65df20328029d721db309cb3250b0aae0fa146c3", size = 3652281, upload-time = "2025-10-10T11:12:17.713Z" }, { url = "https://files.pythonhosted.org/packages/12/22/dedfbcfa97917982301496b6b5e5e6c5531d1f35dd2b488b08d1ebc52482/psycopg2_binary-2.9.11-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:31b32c457a6025e74d233957cc9736742ac5a6cb196c6b68499f6bb51390bd6a", size = 3298010, upload-time = "2025-10-10T11:12:22.671Z" }, { url = "https://files.pythonhosted.org/packages/66/ea/d3390e6696276078bd01b2ece417deac954dfdd552d2edc3d03204416c0c/psycopg2_binary-2.9.11-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:edcb3aeb11cb4bf13a2af3c53a15b3d612edeb6409047ea0b5d6a21a9d744b34", size = 3044641, upload-time = "2025-10-30T02:55:19.929Z" }, { url = "https://files.pythonhosted.org/packages/12/9a/0402ded6cbd321da0c0ba7d34dc12b29b14f5764c2fc10750daa38e825fc/psycopg2_binary-2.9.11-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:62b6d93d7c0b61a1dd6197d208ab613eb7dcfdcca0a49c42ceb082257991de9d", size = 3347940, upload-time = "2025-10-10T11:12:26.529Z" }, { url = "https://files.pythonhosted.org/packages/b1/d2/99b55e85832ccde77b211738ff3925a5d73ad183c0b37bcbbe5a8ff04978/psycopg2_binary-2.9.11-cp312-cp312-win_amd64.whl", hash = "sha256:b33fabeb1fde21180479b2d4667e994de7bbf0eec22832ba5d9b5e4cf65b6c6d", size = 2714147, upload-time = "2025-10-10T11:12:29.535Z" }, { url = "https://files.pythonhosted.org/packages/ff/a8/a2709681b3ac11b0b1786def10006b8995125ba268c9a54bea6f5ae8bd3e/psycopg2_binary-2.9.11-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:b8fb3db325435d34235b044b199e56cdf9ff41223a4b9752e8576465170bb38c", size = 3756572, upload-time = "2025-10-10T11:12:32.873Z" }, { url = "https://files.pythonhosted.org/packages/62/e1/c2b38d256d0dafd32713e9f31982a5b028f4a3651f446be70785f484f472/psycopg2_binary-2.9.11-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:366df99e710a2acd90efed3764bb1e28df6c675d33a7fb40df9b7281694432ee", size = 3864529, upload-time = "2025-10-10T11:12:36.791Z" }, { url = "https://files.pythonhosted.org/packages/11/32/b2ffe8f3853c181e88f0a157c5fb4e383102238d73c52ac6d93a5c8bffe6/psycopg2_binary-2.9.11-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:8c55b385daa2f92cb64b12ec4536c66954ac53654c7f15a203578da4e78105c0", size = 4411242, upload-time = "2025-10-10T11:12:42.388Z" }, { url = "https://files.pythonhosted.org/packages/10/04/6ca7477e6160ae258dc96f67c371157776564679aefd247b66f4661501a2/psycopg2_binary-2.9.11-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:c0377174bf1dd416993d16edc15357f6eb17ac998244cca19bc67cdc0e2e5766", size = 4468258, upload-time = "2025-10-10T11:12:48.654Z" }, { url = "https://files.pythonhosted.org/packages/3c/7e/6a1a38f86412df101435809f225d57c1a021307dd0689f7a5e7fe83588b1/psycopg2_binary-2.9.11-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:5c6ff3335ce08c75afaed19e08699e8aacf95d4a260b495a4a8545244fe2ceb3", size = 4166295, upload-time = "2025-10-10T11:12:52.525Z" }, { url = "https://files.pythonhosted.org/packages/f2/7d/c07374c501b45f3579a9eb761cbf2604ddef3d96ad48679112c2c5aa9c25/psycopg2_binary-2.9.11-cp313-cp313-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:84011ba3109e06ac412f95399b704d3d6950e386b7994475b231cf61eec2fc1f", size = 3983133, upload-time = "2025-10-30T02:55:24.329Z" }, { url = "https://files.pythonhosted.org/packages/82/56/993b7104cb8345ad7d4516538ccf8f0d0ac640b1ebd8c754a7b024e76878/psycopg2_binary-2.9.11-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ba34475ceb08cccbdd98f6b46916917ae6eeb92b5ae111df10b544c3a4621dc4", size = 3652383, upload-time = "2025-10-10T11:12:56.387Z" }, { url = "https://files.pythonhosted.org/packages/2d/ac/eaeb6029362fd8d454a27374d84c6866c82c33bfc24587b4face5a8e43ef/psycopg2_binary-2.9.11-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:b31e90fdd0f968c2de3b26ab014314fe814225b6c324f770952f7d38abf17e3c", size = 3298168, upload-time = "2025-10-10T11:13:00.403Z" }, { url = "https://files.pythonhosted.org/packages/2b/39/50c3facc66bded9ada5cbc0de867499a703dc6bca6be03070b4e3b65da6c/psycopg2_binary-2.9.11-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:d526864e0f67f74937a8fce859bd56c979f5e2ec57ca7c627f5f1071ef7fee60", size = 3044712, upload-time = "2025-10-30T02:55:27.975Z" }, { url = "https://files.pythonhosted.org/packages/9c/8e/b7de019a1f562f72ada81081a12823d3c1590bedc48d7d2559410a2763fe/psycopg2_binary-2.9.11-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:04195548662fa544626c8ea0f06561eb6203f1984ba5b4562764fbeb4c3d14b1", size = 3347549, upload-time = "2025-10-10T11:13:03.971Z" }, { url = "https://files.pythonhosted.org/packages/80/2d/1bb683f64737bbb1f86c82b7359db1eb2be4e2c0c13b947f80efefa7d3e5/psycopg2_binary-2.9.11-cp313-cp313-win_amd64.whl", hash = "sha256:efff12b432179443f54e230fdf60de1f6cc726b6c832db8701227d089310e8aa", size = 2714215, upload-time = "2025-10-10T11:13:07.14Z" }, { url = "https://files.pythonhosted.org/packages/64/12/93ef0098590cf51d9732b4f139533732565704f45bdc1ffa741b7c95fb54/psycopg2_binary-2.9.11-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:92e3b669236327083a2e33ccfa0d320dd01b9803b3e14dd986a4fc54aa00f4e1", size = 3756567, upload-time = "2025-10-10T11:13:11.885Z" }, { url = "https://files.pythonhosted.org/packages/7c/a9/9d55c614a891288f15ca4b5209b09f0f01e3124056924e17b81b9fa054cc/psycopg2_binary-2.9.11-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:e0deeb03da539fa3577fcb0b3f2554a97f7e5477c246098dbb18091a4a01c16f", size = 3864755, upload-time = "2025-10-10T11:13:17.727Z" }, { url = "https://files.pythonhosted.org/packages/13/1e/98874ce72fd29cbde93209977b196a2edae03f8490d1bd8158e7f1daf3a0/psycopg2_binary-2.9.11-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:9b52a3f9bb540a3e4ec0f6ba6d31339727b2950c9772850d6545b7eae0b9d7c5", size = 4411646, upload-time = "2025-10-10T11:13:24.432Z" }, { url = "https://files.pythonhosted.org/packages/5a/bd/a335ce6645334fb8d758cc358810defca14a1d19ffbc8a10bd38a2328565/psycopg2_binary-2.9.11-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:db4fd476874ccfdbb630a54426964959e58da4c61c9feba73e6094d51303d7d8", size = 4468701, upload-time = "2025-10-10T11:13:29.266Z" }, { url = "https://files.pythonhosted.org/packages/44/d6/c8b4f53f34e295e45709b7568bf9b9407a612ea30387d35eb9fa84f269b4/psycopg2_binary-2.9.11-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:47f212c1d3be608a12937cc131bd85502954398aaa1320cb4c14421a0ffccf4c", size = 4166293, upload-time = "2025-10-10T11:13:33.336Z" }, { url = "https://files.pythonhosted.org/packages/4b/e0/f8cc36eadd1b716ab36bb290618a3292e009867e5c97ce4aba908cb99644/psycopg2_binary-2.9.11-cp314-cp314-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:e35b7abae2b0adab776add56111df1735ccc71406e56203515e228a8dc07089f", size = 3983184, upload-time = "2025-10-30T02:55:32.483Z" }, { url = "https://files.pythonhosted.org/packages/53/3e/2a8fe18a4e61cfb3417da67b6318e12691772c0696d79434184a511906dc/psycopg2_binary-2.9.11-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:fcf21be3ce5f5659daefd2b3b3b6e4727b028221ddc94e6c1523425579664747", size = 3652650, upload-time = "2025-10-10T11:13:38.181Z" }, { url = "https://files.pythonhosted.org/packages/76/36/03801461b31b29fe58d228c24388f999fe814dfc302856e0d17f97d7c54d/psycopg2_binary-2.9.11-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:9bd81e64e8de111237737b29d68039b9c813bdf520156af36d26819c9a979e5f", size = 3298663, upload-time = "2025-10-10T11:13:44.878Z" }, { url = "https://files.pythonhosted.org/packages/97/77/21b0ea2e1a73aa5fa9222b2a6b8ba325c43c3a8d54272839c991f2345656/psycopg2_binary-2.9.11-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:32770a4d666fbdafab017086655bcddab791d7cb260a16679cc5a7338b64343b", size = 3044737, upload-time = "2025-10-30T02:55:35.69Z" }, { url = "https://files.pythonhosted.org/packages/67/69/f36abe5f118c1dca6d3726ceae164b9356985805480731ac6712a63f24f0/psycopg2_binary-2.9.11-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:c3cb3a676873d7506825221045bd70e0427c905b9c8ee8d6acd70cfcbd6e576d", size = 3347643, upload-time = "2025-10-10T11:13:53.499Z" }, { url = "https://files.pythonhosted.org/packages/e1/36/9c0c326fe3a4227953dfb29f5d0c8ae3b8eb8c1cd2967aa569f50cb3c61f/psycopg2_binary-2.9.11-cp314-cp314-win_amd64.whl", hash = "sha256:4012c9c954dfaccd28f94e84ab9f94e12df76b4afb22331b1f0d3154893a6316", size = 2803913, upload-time = "2025-10-10T11:13:57.058Z" }, ] [[package]] name = "pycparser" version = "2.23" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/fe/cf/d2d3b9f5699fb1e4615c8e32ff220203e43b248e1dfcc6736ad9057731ca/pycparser-2.23.tar.gz", hash = "sha256:78816d4f24add8f10a06d6f05b4d424ad9e96cfebf68a4ddc99c65c0720d00c2", size = 173734, upload-time = "2025-09-09T13:23:47.91Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/a0/e3/59cd50310fc9b59512193629e1984c1f95e5c8ae6e5d8c69532ccc65a7fe/pycparser-2.23-py3-none-any.whl", hash = "sha256:e5c6e8d3fbad53479cab09ac03729e0a9faf2bee3db8208a550daf5af81a5934", size = 118140, upload-time = "2025-09-09T13:23:46.651Z" }, ] [[package]] name = "pygments" version = "2.19.2" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/b0/77/a5b8c569bf593b0140bde72ea885a803b82086995367bf2037de0159d924/pygments-2.19.2.tar.gz", hash = "sha256:636cb2477cec7f8952536970bc533bc43743542f70392ae026374600add5b887", size = 4968631, upload-time = "2025-06-21T13:39:12.283Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/c7/21/705964c7812476f378728bdf590ca4b771ec72385c533964653c68e86bdc/pygments-2.19.2-py3-none-any.whl", hash = "sha256:86540386c03d588bb81d44bc3928634ff26449851e99741617ecb9037ee5ec0b", size = 1225217, upload-time = "2025-06-21T13:39:07.939Z" }, ] [[package]] name = "pyrefly" version = "0.48.0" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/89/21/05951029b432115f6b272f58615954d8c51b8bdd98e43c5ca9b6abf51556/pyrefly-0.48.0.tar.gz", hash = "sha256:029440758d02f1954105523356bd583caa450cb537f70e746ebeeab5bf7e9ef9", size = 4782394, upload-time = "2026-01-12T18:37:04.576Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/6c/8b/c1b6e9b3beb5cabd89ead7eaa4f2ff34d9c6b3d65b2c1f8952fdbe25a78b/pyrefly-0.48.0-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:8c4cdf71439c9d21c337155d2a578a08ee322b898f716668a88f99392b2a1938", size = 11627167, upload-time = "2026-01-12T18:36:39.721Z" }, { url = "https://files.pythonhosted.org/packages/b2/9d/4213e1a1287856de4f0a581039d8b722ccffe230245296f8199f748eaacc/pyrefly-0.48.0-py3-none-macosx_11_0_arm64.whl", hash = "sha256:98c1bed117e7a2c20dc6e160640460f903e9d75d8c674c7fccf69984ae1b9ba5", size = 11224100, upload-time = "2026-01-12T18:36:42.495Z" }, { url = "https://files.pythonhosted.org/packages/0e/32/4ec264bcb5250e04b9954433dd455668507bcb7e54beaac66b7647ca16b2/pyrefly-0.48.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b38640edf5a7ff5250d0509d58c3002316b3700c0f60966f9635598f7079c8f0", size = 31679529, upload-time = "2026-01-12T18:36:45.641Z" }, { url = "https://files.pythonhosted.org/packages/0d/37/2ecfb4a3e79e41ed343ae15808790315a0f7a07c929da7cf792e9f90c488/pyrefly-0.48.0-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:10b82b48f0175d195ebb418ec23d6567b10c6f62f421ff5523a9e6e38955c396", size = 33883366, upload-time = "2026-01-12T18:36:49.097Z" }, { url = "https://files.pythonhosted.org/packages/67/ef/24e5059fc1610755e6fc7f7c8dd3c8e5ce97cc46e47a18958482ae2af101/pyrefly-0.48.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3dc4eec1d606e69fe3e2be0533e8f86a30a4e97bd089df52fe279e4d5947d08f", size = 34964707, upload-time = "2026-01-12T18:36:52.257Z" }, { url = "https://files.pythonhosted.org/packages/2b/50/e1c9894d4047847fbb8c6d360a6b88ce637e9ed5e7b1dde2c9f6c7409fe4/pyrefly-0.48.0-py3-none-win32.whl", hash = "sha256:e09806e14ea36873911e15f96c2351b4c6bd3e7ee29c609c4ba2ccdb4bf2d4f4", size = 10685409, upload-time = "2026-01-12T18:36:55.942Z" }, { url = "https://files.pythonhosted.org/packages/50/b9/d8f32cf0a067bfe7908ded6dcf5abe9f0513be93710691928fe6d863ccea/pyrefly-0.48.0-py3-none-win_amd64.whl", hash = "sha256:326b9d01dfbca7e81f19630c59e79065e69c39505dab7dc3899dbce9832aa747", size = 11395073, upload-time = "2026-01-12T18:36:58.683Z" }, { url = "https://files.pythonhosted.org/packages/bc/46/17d26c387d6c0d8c1062db74d81a64f534f08b5d0cd444e9f92c1a9e211e/pyrefly-0.48.0-py3-none-win_arm64.whl", hash = "sha256:754379335d90d42d66571ffd01d9afa6b7869ae16fdf8a62c67ad1ca3c2c594f", size = 10938427, upload-time = "2026-01-12T18:37:01.366Z" }, ] [[package]] name = "pyright" version = "1.1.408" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "nodeenv" }, { name = "typing-extensions" }, ] sdist = { url = "https://files.pythonhosted.org/packages/74/b2/5db700e52554b8f025faa9c3c624c59f1f6c8841ba81ab97641b54322f16/pyright-1.1.408.tar.gz", hash = "sha256:f28f2321f96852fa50b5829ea492f6adb0e6954568d1caa3f3af3a5f555eb684", size = 4400578, upload-time = "2026-01-08T08:07:38.795Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/0c/82/a2c93e32800940d9573fb28c346772a14778b84ba7524e691b324620ab89/pyright-1.1.408-py3-none-any.whl", hash = "sha256:090b32865f4fdb1e0e6cd82bf5618480d48eecd2eb2e70f960982a3d9a4c17c1", size = 6399144, upload-time = "2026-01-08T08:07:37.082Z" }, ] [[package]] name = "pytest" version = "9.0.2" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "colorama", marker = "sys_platform == 'win32'" }, { name = "exceptiongroup", marker = "python_full_version < '3.11'" }, { name = "iniconfig" }, { name = "packaging" }, { name = "pluggy" }, { name = "pygments" }, { name = "tomli", marker = "python_full_version < '3.11'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/d1/db/7ef3487e0fb0049ddb5ce41d3a49c235bf9ad299b6a25d5780a89f19230f/pytest-9.0.2.tar.gz", hash = "sha256:75186651a92bd89611d1d9fc20f0b4345fd827c41ccd5c299a868a05d70edf11", size = 1568901, upload-time = "2025-12-06T21:30:51.014Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/3b/ab/b3226f0bd7cdcf710fbede2b3548584366da3b19b5021e74f5bde2a8fa3f/pytest-9.0.2-py3-none-any.whl", hash = "sha256:711ffd45bf766d5264d487b917733b453d917afd2b0ad65223959f59089f875b", size = 374801, upload-time = "2025-12-06T21:30:49.154Z" }, ] [[package]] name = "pytest-mypy-plugins" version = "3.2.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "decorator" }, { name = "jinja2" }, { name = "jsonschema" }, { name = "mypy" }, { name = "packaging" }, { name = "pytest" }, { name = "pyyaml" }, { name = "regex" }, { name = "tomlkit" }, ] sdist = { url = "https://files.pythonhosted.org/packages/8e/a0/3ec3d82da6c109efb48c70ffc666badb226e987a1f6c1076f1fddb7ca1a3/pytest_mypy_plugins-3.2.0.tar.gz", hash = "sha256:68bd95400c8f128327acd9a16c737dbec18b20fced3184ad97f391b07d4662f4", size = 27292, upload-time = "2024-12-21T20:11:36.467Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/de/84/6c9af99c416e52286fbf6df91a2ae19ef4da5d6f2dab626f8ff1a61280b5/pytest_mypy_plugins-3.2.0-py3-none-any.whl", hash = "sha256:46e24e8d9eaeabcddd0a5dc5fb089c021903d5952e0c9d8af79383db99b9ffae", size = 20627, upload-time = "2024-12-21T20:11:33.723Z" }, ] [[package]] name = "pytest-shard" version = "0.1.2" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "pytest" }, ] sdist = { url = "https://files.pythonhosted.org/packages/c6/ca/3efa6f3b84dab83220db45997e785be726684c2c2c4267bffb7d80101c7f/pytest-shard-0.1.2.tar.gz", hash = "sha256:b86a967fbfd1c8e50295095ccda031b7e890862ee06531d5142844f4c1d1cd67", size = 3579, upload-time = "2020-12-11T19:52:55.083Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/65/7a/dbeb4c54e9fc3b59622f410091365f354a69cda1af10c3b83ac0ca6e6f4f/pytest_shard-0.1.2-py3-none-any.whl", hash = "sha256:407a1df385cebe1feb9b4d2e7eeee8b044f8a24f0919421233159a17c59be2b9", size = 4608, upload-time = "2020-12-11T19:52:54.226Z" }, ] [[package]] name = "pytest-xdist" version = "3.8.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "execnet" }, { name = "pytest" }, ] sdist = { url = "https://files.pythonhosted.org/packages/78/b4/439b179d1ff526791eb921115fca8e44e596a13efeda518b9d845a619450/pytest_xdist-3.8.0.tar.gz", hash = "sha256:7e578125ec9bc6050861aa93f2d59f1d8d085595d6551c2c90b6f4fad8d3a9f1", size = 88069, upload-time = "2025-07-01T13:30:59.346Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/ca/31/d4e37e9e550c2b92a9cbc2e4d0b7420a27224968580b5a447f420847c975/pytest_xdist-3.8.0-py3-none-any.whl", hash = "sha256:202ca578cfeb7370784a8c33d6d05bc6e13b4f25b5053c30a152269fd10f0b88", size = 46396, upload-time = "2025-07-01T13:30:56.632Z" }, ] [[package]] name = "pyyaml" version = "6.0.3" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/05/8e/961c0007c59b8dd7729d542c61a4d537767a59645b82a0b521206e1e25c2/pyyaml-6.0.3.tar.gz", hash = "sha256:d76623373421df22fb4cf8817020cbb7ef15c725b9d5e45f17e189bfc384190f", size = 130960, upload-time = "2025-09-25T21:33:16.546Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/f4/a0/39350dd17dd6d6c6507025c0e53aef67a9293a6d37d3511f23ea510d5800/pyyaml-6.0.3-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:214ed4befebe12df36bcc8bc2b64b396ca31be9304b8f59e25c11cf94a4c033b", size = 184227, upload-time = "2025-09-25T21:31:46.04Z" }, { url = "https://files.pythonhosted.org/packages/05/14/52d505b5c59ce73244f59c7a50ecf47093ce4765f116cdb98286a71eeca2/pyyaml-6.0.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:02ea2dfa234451bbb8772601d7b8e426c2bfa197136796224e50e35a78777956", size = 174019, upload-time = "2025-09-25T21:31:47.706Z" }, { url = "https://files.pythonhosted.org/packages/43/f7/0e6a5ae5599c838c696adb4e6330a59f463265bfa1e116cfd1fbb0abaaae/pyyaml-6.0.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b30236e45cf30d2b8e7b3e85881719e98507abed1011bf463a8fa23e9c3e98a8", size = 740646, upload-time = "2025-09-25T21:31:49.21Z" }, { url = "https://files.pythonhosted.org/packages/2f/3a/61b9db1d28f00f8fd0ae760459a5c4bf1b941baf714e207b6eb0657d2578/pyyaml-6.0.3-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:66291b10affd76d76f54fad28e22e51719ef9ba22b29e1d7d03d6777a9174198", size = 840793, upload-time = "2025-09-25T21:31:50.735Z" }, { url = "https://files.pythonhosted.org/packages/7a/1e/7acc4f0e74c4b3d9531e24739e0ab832a5edf40e64fbae1a9c01941cabd7/pyyaml-6.0.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9c7708761fccb9397fe64bbc0395abcae8c4bf7b0eac081e12b809bf47700d0b", size = 770293, upload-time = "2025-09-25T21:31:51.828Z" }, { url = "https://files.pythonhosted.org/packages/8b/ef/abd085f06853af0cd59fa5f913d61a8eab65d7639ff2a658d18a25d6a89d/pyyaml-6.0.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:418cf3f2111bc80e0933b2cd8cd04f286338bb88bdc7bc8e6dd775ebde60b5e0", size = 732872, upload-time = "2025-09-25T21:31:53.282Z" }, { url = "https://files.pythonhosted.org/packages/1f/15/2bc9c8faf6450a8b3c9fc5448ed869c599c0a74ba2669772b1f3a0040180/pyyaml-6.0.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:5e0b74767e5f8c593e8c9b5912019159ed0533c70051e9cce3e8b6aa699fcd69", size = 758828, upload-time = "2025-09-25T21:31:54.807Z" }, { url = "https://files.pythonhosted.org/packages/a3/00/531e92e88c00f4333ce359e50c19b8d1de9fe8d581b1534e35ccfbc5f393/pyyaml-6.0.3-cp310-cp310-win32.whl", hash = "sha256:28c8d926f98f432f88adc23edf2e6d4921ac26fb084b028c733d01868d19007e", size = 142415, upload-time = "2025-09-25T21:31:55.885Z" }, { url = "https://files.pythonhosted.org/packages/2a/fa/926c003379b19fca39dd4634818b00dec6c62d87faf628d1394e137354d4/pyyaml-6.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:bdb2c67c6c1390b63c6ff89f210c8fd09d9a1217a465701eac7316313c915e4c", size = 158561, upload-time = "2025-09-25T21:31:57.406Z" }, { url = "https://files.pythonhosted.org/packages/6d/16/a95b6757765b7b031c9374925bb718d55e0a9ba8a1b6a12d25962ea44347/pyyaml-6.0.3-cp311-cp311-macosx_10_13_x86_64.whl", hash = "sha256:44edc647873928551a01e7a563d7452ccdebee747728c1080d881d68af7b997e", size = 185826, upload-time = "2025-09-25T21:31:58.655Z" }, { url = "https://files.pythonhosted.org/packages/16/19/13de8e4377ed53079ee996e1ab0a9c33ec2faf808a4647b7b4c0d46dd239/pyyaml-6.0.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:652cb6edd41e718550aad172851962662ff2681490a8a711af6a4d288dd96824", size = 175577, upload-time = "2025-09-25T21:32:00.088Z" }, { url = "https://files.pythonhosted.org/packages/0c/62/d2eb46264d4b157dae1275b573017abec435397aa59cbcdab6fc978a8af4/pyyaml-6.0.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:10892704fc220243f5305762e276552a0395f7beb4dbf9b14ec8fd43b57f126c", size = 775556, upload-time = "2025-09-25T21:32:01.31Z" }, { url = "https://files.pythonhosted.org/packages/10/cb/16c3f2cf3266edd25aaa00d6c4350381c8b012ed6f5276675b9eba8d9ff4/pyyaml-6.0.3-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:850774a7879607d3a6f50d36d04f00ee69e7fc816450e5f7e58d7f17f1ae5c00", size = 882114, upload-time = "2025-09-25T21:32:03.376Z" }, { url = "https://files.pythonhosted.org/packages/71/60/917329f640924b18ff085ab889a11c763e0b573da888e8404ff486657602/pyyaml-6.0.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b8bb0864c5a28024fac8a632c443c87c5aa6f215c0b126c449ae1a150412f31d", size = 806638, upload-time = "2025-09-25T21:32:04.553Z" }, { url = "https://files.pythonhosted.org/packages/dd/6f/529b0f316a9fd167281a6c3826b5583e6192dba792dd55e3203d3f8e655a/pyyaml-6.0.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:1d37d57ad971609cf3c53ba6a7e365e40660e3be0e5175fa9f2365a379d6095a", size = 767463, upload-time = "2025-09-25T21:32:06.152Z" }, { url = "https://files.pythonhosted.org/packages/f2/6a/b627b4e0c1dd03718543519ffb2f1deea4a1e6d42fbab8021936a4d22589/pyyaml-6.0.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:37503bfbfc9d2c40b344d06b2199cf0e96e97957ab1c1b546fd4f87e53e5d3e4", size = 794986, upload-time = "2025-09-25T21:32:07.367Z" }, { url = "https://files.pythonhosted.org/packages/45/91/47a6e1c42d9ee337c4839208f30d9f09caa9f720ec7582917b264defc875/pyyaml-6.0.3-cp311-cp311-win32.whl", hash = "sha256:8098f252adfa6c80ab48096053f512f2321f0b998f98150cea9bd23d83e1467b", size = 142543, upload-time = "2025-09-25T21:32:08.95Z" }, { url = "https://files.pythonhosted.org/packages/da/e3/ea007450a105ae919a72393cb06f122f288ef60bba2dc64b26e2646fa315/pyyaml-6.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:9f3bfb4965eb874431221a3ff3fdcddc7e74e3b07799e0e84ca4a0f867d449bf", size = 158763, upload-time = "2025-09-25T21:32:09.96Z" }, { url = "https://files.pythonhosted.org/packages/d1/33/422b98d2195232ca1826284a76852ad5a86fe23e31b009c9886b2d0fb8b2/pyyaml-6.0.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:7f047e29dcae44602496db43be01ad42fc6f1cc0d8cd6c83d342306c32270196", size = 182063, upload-time = "2025-09-25T21:32:11.445Z" }, { url = "https://files.pythonhosted.org/packages/89/a0/6cf41a19a1f2f3feab0e9c0b74134aa2ce6849093d5517a0c550fe37a648/pyyaml-6.0.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:fc09d0aa354569bc501d4e787133afc08552722d3ab34836a80547331bb5d4a0", size = 173973, upload-time = "2025-09-25T21:32:12.492Z" }, { url = "https://files.pythonhosted.org/packages/ed/23/7a778b6bd0b9a8039df8b1b1d80e2e2ad78aa04171592c8a5c43a56a6af4/pyyaml-6.0.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9149cad251584d5fb4981be1ecde53a1ca46c891a79788c0df828d2f166bda28", size = 775116, upload-time = "2025-09-25T21:32:13.652Z" }, { url = "https://files.pythonhosted.org/packages/65/30/d7353c338e12baef4ecc1b09e877c1970bd3382789c159b4f89d6a70dc09/pyyaml-6.0.3-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:5fdec68f91a0c6739b380c83b951e2c72ac0197ace422360e6d5a959d8d97b2c", size = 844011, upload-time = "2025-09-25T21:32:15.21Z" }, { url = "https://files.pythonhosted.org/packages/8b/9d/b3589d3877982d4f2329302ef98a8026e7f4443c765c46cfecc8858c6b4b/pyyaml-6.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ba1cc08a7ccde2d2ec775841541641e4548226580ab850948cbfda66a1befcdc", size = 807870, upload-time = "2025-09-25T21:32:16.431Z" }, { url = "https://files.pythonhosted.org/packages/05/c0/b3be26a015601b822b97d9149ff8cb5ead58c66f981e04fedf4e762f4bd4/pyyaml-6.0.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:8dc52c23056b9ddd46818a57b78404882310fb473d63f17b07d5c40421e47f8e", size = 761089, upload-time = "2025-09-25T21:32:17.56Z" }, { url = "https://files.pythonhosted.org/packages/be/8e/98435a21d1d4b46590d5459a22d88128103f8da4c2d4cb8f14f2a96504e1/pyyaml-6.0.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:41715c910c881bc081f1e8872880d3c650acf13dfa8214bad49ed4cede7c34ea", size = 790181, upload-time = "2025-09-25T21:32:18.834Z" }, { url = "https://files.pythonhosted.org/packages/74/93/7baea19427dcfbe1e5a372d81473250b379f04b1bd3c4c5ff825e2327202/pyyaml-6.0.3-cp312-cp312-win32.whl", hash = "sha256:96b533f0e99f6579b3d4d4995707cf36df9100d67e0c8303a0c55b27b5f99bc5", size = 137658, upload-time = "2025-09-25T21:32:20.209Z" }, { url = "https://files.pythonhosted.org/packages/86/bf/899e81e4cce32febab4fb42bb97dcdf66bc135272882d1987881a4b519e9/pyyaml-6.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:5fcd34e47f6e0b794d17de1b4ff496c00986e1c83f7ab2fb8fcfe9616ff7477b", size = 154003, upload-time = "2025-09-25T21:32:21.167Z" }, { url = "https://files.pythonhosted.org/packages/1a/08/67bd04656199bbb51dbed1439b7f27601dfb576fb864099c7ef0c3e55531/pyyaml-6.0.3-cp312-cp312-win_arm64.whl", hash = "sha256:64386e5e707d03a7e172c0701abfb7e10f0fb753ee1d773128192742712a98fd", size = 140344, upload-time = "2025-09-25T21:32:22.617Z" }, { url = "https://files.pythonhosted.org/packages/d1/11/0fd08f8192109f7169db964b5707a2f1e8b745d4e239b784a5a1dd80d1db/pyyaml-6.0.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:8da9669d359f02c0b91ccc01cac4a67f16afec0dac22c2ad09f46bee0697eba8", size = 181669, upload-time = "2025-09-25T21:32:23.673Z" }, { url = "https://files.pythonhosted.org/packages/b1/16/95309993f1d3748cd644e02e38b75d50cbc0d9561d21f390a76242ce073f/pyyaml-6.0.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:2283a07e2c21a2aa78d9c4442724ec1eb15f5e42a723b99cb3d822d48f5f7ad1", size = 173252, upload-time = "2025-09-25T21:32:25.149Z" }, { url = "https://files.pythonhosted.org/packages/50/31/b20f376d3f810b9b2371e72ef5adb33879b25edb7a6d072cb7ca0c486398/pyyaml-6.0.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ee2922902c45ae8ccada2c5b501ab86c36525b883eff4255313a253a3160861c", size = 767081, upload-time = "2025-09-25T21:32:26.575Z" }, { url = "https://files.pythonhosted.org/packages/49/1e/a55ca81e949270d5d4432fbbd19dfea5321eda7c41a849d443dc92fd1ff7/pyyaml-6.0.3-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a33284e20b78bd4a18c8c2282d549d10bc8408a2a7ff57653c0cf0b9be0afce5", size = 841159, upload-time = "2025-09-25T21:32:27.727Z" }, { url = "https://files.pythonhosted.org/packages/74/27/e5b8f34d02d9995b80abcef563ea1f8b56d20134d8f4e5e81733b1feceb2/pyyaml-6.0.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0f29edc409a6392443abf94b9cf89ce99889a1dd5376d94316ae5145dfedd5d6", size = 801626, upload-time = "2025-09-25T21:32:28.878Z" }, { url = "https://files.pythonhosted.org/packages/f9/11/ba845c23988798f40e52ba45f34849aa8a1f2d4af4b798588010792ebad6/pyyaml-6.0.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f7057c9a337546edc7973c0d3ba84ddcdf0daa14533c2065749c9075001090e6", size = 753613, upload-time = "2025-09-25T21:32:30.178Z" }, { url = "https://files.pythonhosted.org/packages/3d/e0/7966e1a7bfc0a45bf0a7fb6b98ea03fc9b8d84fa7f2229e9659680b69ee3/pyyaml-6.0.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:eda16858a3cab07b80edaf74336ece1f986ba330fdb8ee0d6c0d68fe82bc96be", size = 794115, upload-time = "2025-09-25T21:32:31.353Z" }, { url = "https://files.pythonhosted.org/packages/de/94/980b50a6531b3019e45ddeada0626d45fa85cbe22300844a7983285bed3b/pyyaml-6.0.3-cp313-cp313-win32.whl", hash = "sha256:d0eae10f8159e8fdad514efdc92d74fd8d682c933a6dd088030f3834bc8e6b26", size = 137427, upload-time = "2025-09-25T21:32:32.58Z" }, { url = "https://files.pythonhosted.org/packages/97/c9/39d5b874e8b28845e4ec2202b5da735d0199dbe5b8fb85f91398814a9a46/pyyaml-6.0.3-cp313-cp313-win_amd64.whl", hash = "sha256:79005a0d97d5ddabfeeea4cf676af11e647e41d81c9a7722a193022accdb6b7c", size = 154090, upload-time = "2025-09-25T21:32:33.659Z" }, { url = "https://files.pythonhosted.org/packages/73/e8/2bdf3ca2090f68bb3d75b44da7bbc71843b19c9f2b9cb9b0f4ab7a5a4329/pyyaml-6.0.3-cp313-cp313-win_arm64.whl", hash = "sha256:5498cd1645aa724a7c71c8f378eb29ebe23da2fc0d7a08071d89469bf1d2defb", size = 140246, upload-time = "2025-09-25T21:32:34.663Z" }, { url = "https://files.pythonhosted.org/packages/9d/8c/f4bd7f6465179953d3ac9bc44ac1a8a3e6122cf8ada906b4f96c60172d43/pyyaml-6.0.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:8d1fab6bb153a416f9aeb4b8763bc0f22a5586065f86f7664fc23339fc1c1fac", size = 181814, upload-time = "2025-09-25T21:32:35.712Z" }, { url = "https://files.pythonhosted.org/packages/bd/9c/4d95bb87eb2063d20db7b60faa3840c1b18025517ae857371c4dd55a6b3a/pyyaml-6.0.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:34d5fcd24b8445fadc33f9cf348c1047101756fd760b4dacb5c3e99755703310", size = 173809, upload-time = "2025-09-25T21:32:36.789Z" }, { url = "https://files.pythonhosted.org/packages/92/b5/47e807c2623074914e29dabd16cbbdd4bf5e9b2db9f8090fa64411fc5382/pyyaml-6.0.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:501a031947e3a9025ed4405a168e6ef5ae3126c59f90ce0cd6f2bfc477be31b7", size = 766454, upload-time = "2025-09-25T21:32:37.966Z" }, { url = "https://files.pythonhosted.org/packages/02/9e/e5e9b168be58564121efb3de6859c452fccde0ab093d8438905899a3a483/pyyaml-6.0.3-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:b3bc83488de33889877a0f2543ade9f70c67d66d9ebb4ac959502e12de895788", size = 836355, upload-time = "2025-09-25T21:32:39.178Z" }, { url = "https://files.pythonhosted.org/packages/88/f9/16491d7ed2a919954993e48aa941b200f38040928474c9e85ea9e64222c3/pyyaml-6.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c458b6d084f9b935061bc36216e8a69a7e293a2f1e68bf956dcd9e6cbcd143f5", size = 794175, upload-time = "2025-09-25T21:32:40.865Z" }, { url = "https://files.pythonhosted.org/packages/dd/3f/5989debef34dc6397317802b527dbbafb2b4760878a53d4166579111411e/pyyaml-6.0.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7c6610def4f163542a622a73fb39f534f8c101d690126992300bf3207eab9764", size = 755228, upload-time = "2025-09-25T21:32:42.084Z" }, { url = "https://files.pythonhosted.org/packages/d7/ce/af88a49043cd2e265be63d083fc75b27b6ed062f5f9fd6cdc223ad62f03e/pyyaml-6.0.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:5190d403f121660ce8d1d2c1bb2ef1bd05b5f68533fc5c2ea899bd15f4399b35", size = 789194, upload-time = "2025-09-25T21:32:43.362Z" }, { url = "https://files.pythonhosted.org/packages/23/20/bb6982b26a40bb43951265ba29d4c246ef0ff59c9fdcdf0ed04e0687de4d/pyyaml-6.0.3-cp314-cp314-win_amd64.whl", hash = "sha256:4a2e8cebe2ff6ab7d1050ecd59c25d4c8bd7e6f400f5f82b96557ac0abafd0ac", size = 156429, upload-time = "2025-09-25T21:32:57.844Z" }, { url = "https://files.pythonhosted.org/packages/f4/f4/a4541072bb9422c8a883ab55255f918fa378ecf083f5b85e87fc2b4eda1b/pyyaml-6.0.3-cp314-cp314-win_arm64.whl", hash = "sha256:93dda82c9c22deb0a405ea4dc5f2d0cda384168e466364dec6255b293923b2f3", size = 143912, upload-time = "2025-09-25T21:32:59.247Z" }, { url = "https://files.pythonhosted.org/packages/7c/f9/07dd09ae774e4616edf6cda684ee78f97777bdd15847253637a6f052a62f/pyyaml-6.0.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:02893d100e99e03eda1c8fd5c441d8c60103fd175728e23e431db1b589cf5ab3", size = 189108, upload-time = "2025-09-25T21:32:44.377Z" }, { url = "https://files.pythonhosted.org/packages/4e/78/8d08c9fb7ce09ad8c38ad533c1191cf27f7ae1effe5bb9400a46d9437fcf/pyyaml-6.0.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:c1ff362665ae507275af2853520967820d9124984e0f7466736aea23d8611fba", size = 183641, upload-time = "2025-09-25T21:32:45.407Z" }, { url = "https://files.pythonhosted.org/packages/7b/5b/3babb19104a46945cf816d047db2788bcaf8c94527a805610b0289a01c6b/pyyaml-6.0.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6adc77889b628398debc7b65c073bcb99c4a0237b248cacaf3fe8a557563ef6c", size = 831901, upload-time = "2025-09-25T21:32:48.83Z" }, { url = "https://files.pythonhosted.org/packages/8b/cc/dff0684d8dc44da4d22a13f35f073d558c268780ce3c6ba1b87055bb0b87/pyyaml-6.0.3-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a80cb027f6b349846a3bf6d73b5e95e782175e52f22108cfa17876aaeff93702", size = 861132, upload-time = "2025-09-25T21:32:50.149Z" }, { url = "https://files.pythonhosted.org/packages/b1/5e/f77dc6b9036943e285ba76b49e118d9ea929885becb0a29ba8a7c75e29fe/pyyaml-6.0.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:00c4bdeba853cc34e7dd471f16b4114f4162dc03e6b7afcc2128711f0eca823c", size = 839261, upload-time = "2025-09-25T21:32:51.808Z" }, { url = "https://files.pythonhosted.org/packages/ce/88/a9db1376aa2a228197c58b37302f284b5617f56a5d959fd1763fb1675ce6/pyyaml-6.0.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:66e1674c3ef6f541c35191caae2d429b967b99e02040f5ba928632d9a7f0f065", size = 805272, upload-time = "2025-09-25T21:32:52.941Z" }, { url = "https://files.pythonhosted.org/packages/da/92/1446574745d74df0c92e6aa4a7b0b3130706a4142b2d1a5869f2eaa423c6/pyyaml-6.0.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:16249ee61e95f858e83976573de0f5b2893b3677ba71c9dd36b9cf8be9ac6d65", size = 829923, upload-time = "2025-09-25T21:32:54.537Z" }, { url = "https://files.pythonhosted.org/packages/f0/7a/1c7270340330e575b92f397352af856a8c06f230aa3e76f86b39d01b416a/pyyaml-6.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:4ad1906908f2f5ae4e5a8ddfce73c320c2a1429ec52eafd27138b7f1cbe341c9", size = 174062, upload-time = "2025-09-25T21:32:55.767Z" }, { url = "https://files.pythonhosted.org/packages/f1/12/de94a39c2ef588c7e6455cfbe7343d3b2dc9d6b6b2f40c4c6565744c873d/pyyaml-6.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:ebc55a14a21cb14062aa4162f906cd962b28e2e9ea38f9b4391244cd8de4ae0b", size = 149341, upload-time = "2025-09-25T21:32:56.828Z" }, ] [[package]] name = "redis" version = "7.1.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "async-timeout", marker = "python_full_version < '3.11.3'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/43/c8/983d5c6579a411d8a99bc5823cc5712768859b5ce2c8afe1a65b37832c81/redis-7.1.0.tar.gz", hash = "sha256:b1cc3cfa5a2cb9c2ab3ba700864fb0ad75617b41f01352ce5779dabf6d5f9c3c", size = 4796669, upload-time = "2025-11-19T15:54:39.961Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/89/f0/8956f8a86b20d7bb9d6ac0187cf4cd54d8065bc9a1a09eb8011d4d326596/redis-7.1.0-py3-none-any.whl", hash = "sha256:23c52b208f92b56103e17c5d06bdc1a6c2c0b3106583985a76a18f83b265de2b", size = 354159, upload-time = "2025-11-19T15:54:38.064Z" }, ] [[package]] name = "referencing" version = "0.37.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "attrs" }, { name = "rpds-py" }, { name = "typing-extensions", marker = "python_full_version < '3.13'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/22/f5/df4e9027acead3ecc63e50fe1e36aca1523e1719559c499951bb4b53188f/referencing-0.37.0.tar.gz", hash = "sha256:44aefc3142c5b842538163acb373e24cce6632bd54bdb01b21ad5863489f50d8", size = 78036, upload-time = "2025-10-13T15:30:48.871Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/2c/58/ca301544e1fa93ed4f80d724bf5b194f6e4b945841c5bfd555878eea9fcb/referencing-0.37.0-py3-none-any.whl", hash = "sha256:381329a9f99628c9069361716891d34ad94af76e461dcb0335825aecc7692231", size = 26766, upload-time = "2025-10-13T15:30:47.625Z" }, ] [[package]] name = "regex" version = "2025.11.3" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/cc/a9/546676f25e573a4cf00fe8e119b78a37b6a8fe2dc95cda877b30889c9c45/regex-2025.11.3.tar.gz", hash = "sha256:1fedc720f9bb2494ce31a58a1631f9c82df6a09b49c19517ea5cc280b4541e01", size = 414669, upload-time = "2025-11-03T21:34:22.089Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/8a/d6/d788d52da01280a30a3f6268aef2aa71043bff359c618fea4c5b536654d5/regex-2025.11.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:2b441a4ae2c8049106e8b39973bfbddfb25a179dda2bdb99b0eeb60c40a6a3af", size = 488087, upload-time = "2025-11-03T21:30:47.317Z" }, { url = "https://files.pythonhosted.org/packages/69/39/abec3bd688ec9bbea3562de0fd764ff802976185f5ff22807bf0a2697992/regex-2025.11.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2fa2eed3f76677777345d2f81ee89f5de2f5745910e805f7af7386a920fa7313", size = 290544, upload-time = "2025-11-03T21:30:49.912Z" }, { url = "https://files.pythonhosted.org/packages/39/b3/9a231475d5653e60002508f41205c61684bb2ffbf2401351ae2186897fc4/regex-2025.11.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d8b4a27eebd684319bdf473d39f1d79eed36bf2cd34bd4465cdb4618d82b3d56", size = 288408, upload-time = "2025-11-03T21:30:51.344Z" }, { url = "https://files.pythonhosted.org/packages/c3/c5/1929a0491bd5ac2d1539a866768b88965fa8c405f3e16a8cef84313098d6/regex-2025.11.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5cf77eac15bd264986c4a2c63353212c095b40f3affb2bc6b4ef80c4776c1a28", size = 781584, upload-time = "2025-11-03T21:30:52.596Z" }, { url = "https://files.pythonhosted.org/packages/ce/fd/16aa16cf5d497ef727ec966f74164fbe75d6516d3d58ac9aa989bc9cdaad/regex-2025.11.3-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:b7f9ee819f94c6abfa56ec7b1dbab586f41ebbdc0a57e6524bd5e7f487a878c7", size = 850733, upload-time = "2025-11-03T21:30:53.825Z" }, { url = "https://files.pythonhosted.org/packages/e6/49/3294b988855a221cb6565189edf5dc43239957427df2d81d4a6b15244f64/regex-2025.11.3-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:838441333bc90b829406d4a03cb4b8bf7656231b84358628b0406d803931ef32", size = 898691, upload-time = "2025-11-03T21:30:55.575Z" }, { url = "https://files.pythonhosted.org/packages/14/62/b56d29e70b03666193369bdbdedfdc23946dbe9f81dd78ce262c74d988ab/regex-2025.11.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:cfe6d3f0c9e3b7e8c0c694b24d25e677776f5ca26dce46fd6b0489f9c8339391", size = 791662, upload-time = "2025-11-03T21:30:57.262Z" }, { url = "https://files.pythonhosted.org/packages/15/fc/e4c31d061eced63fbf1ce9d853975f912c61a7d406ea14eda2dd355f48e7/regex-2025.11.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:2ab815eb8a96379a27c3b6157fcb127c8f59c36f043c1678110cea492868f1d5", size = 782587, upload-time = "2025-11-03T21:30:58.788Z" }, { url = "https://files.pythonhosted.org/packages/b2/bb/5e30c7394bcf63f0537121c23e796be67b55a8847c3956ae6068f4c70702/regex-2025.11.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:728a9d2d173a65b62bdc380b7932dd8e74ed4295279a8fe1021204ce210803e7", size = 774709, upload-time = "2025-11-03T21:31:00.081Z" }, { url = "https://files.pythonhosted.org/packages/c5/c4/fce773710af81b0cb37cb4ff0947e75d5d17dee304b93d940b87a67fc2f4/regex-2025.11.3-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:509dc827f89c15c66a0c216331260d777dd6c81e9a4e4f830e662b0bb296c313", size = 845773, upload-time = "2025-11-03T21:31:01.583Z" }, { url = "https://files.pythonhosted.org/packages/7b/5e/9466a7ec4b8ec282077095c6eb50a12a389d2e036581134d4919e8ca518c/regex-2025.11.3-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:849202cd789e5f3cf5dcc7822c34b502181b4824a65ff20ce82da5524e45e8e9", size = 836164, upload-time = "2025-11-03T21:31:03.244Z" }, { url = "https://files.pythonhosted.org/packages/95/18/82980a60e8ed1594eb3c89eb814fb276ef51b9af7caeab1340bfd8564af6/regex-2025.11.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:b6f78f98741dcc89607c16b1e9426ee46ce4bf31ac5e6b0d40e81c89f3481ea5", size = 779832, upload-time = "2025-11-03T21:31:04.876Z" }, { url = "https://files.pythonhosted.org/packages/03/cc/90ab0fdbe6dce064a42015433f9152710139fb04a8b81b4fb57a1cb63ffa/regex-2025.11.3-cp310-cp310-win32.whl", hash = "sha256:149eb0bba95231fb4f6d37c8f760ec9fa6fabf65bab555e128dde5f2475193ec", size = 265802, upload-time = "2025-11-03T21:31:06.581Z" }, { url = "https://files.pythonhosted.org/packages/34/9d/e9e8493a85f3b1ddc4a5014465f5c2b78c3ea1cbf238dcfde78956378041/regex-2025.11.3-cp310-cp310-win_amd64.whl", hash = "sha256:ee3a83ce492074c35a74cc76cf8235d49e77b757193a5365ff86e3f2f93db9fd", size = 277722, upload-time = "2025-11-03T21:31:08.144Z" }, { url = "https://files.pythonhosted.org/packages/15/c4/b54b24f553966564506dbf873a3e080aef47b356a3b39b5d5aba992b50db/regex-2025.11.3-cp310-cp310-win_arm64.whl", hash = "sha256:38af559ad934a7b35147716655d4a2f79fcef2d695ddfe06a06ba40ae631fa7e", size = 270289, upload-time = "2025-11-03T21:31:10.267Z" }, { url = "https://files.pythonhosted.org/packages/f7/90/4fb5056e5f03a7048abd2b11f598d464f0c167de4f2a51aa868c376b8c70/regex-2025.11.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:eadade04221641516fa25139273505a1c19f9bf97589a05bc4cfcd8b4a618031", size = 488081, upload-time = "2025-11-03T21:31:11.946Z" }, { url = "https://files.pythonhosted.org/packages/85/23/63e481293fac8b069d84fba0299b6666df720d875110efd0338406b5d360/regex-2025.11.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:feff9e54ec0dd3833d659257f5c3f5322a12eee58ffa360984b716f8b92983f4", size = 290554, upload-time = "2025-11-03T21:31:13.387Z" }, { url = "https://files.pythonhosted.org/packages/2b/9d/b101d0262ea293a0066b4522dfb722eb6a8785a8c3e084396a5f2c431a46/regex-2025.11.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3b30bc921d50365775c09a7ed446359e5c0179e9e2512beec4a60cbcef6ddd50", size = 288407, upload-time = "2025-11-03T21:31:14.809Z" }, { url = "https://files.pythonhosted.org/packages/0c/64/79241c8209d5b7e00577ec9dca35cd493cc6be35b7d147eda367d6179f6d/regex-2025.11.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f99be08cfead2020c7ca6e396c13543baea32343b7a9a5780c462e323bd8872f", size = 793418, upload-time = "2025-11-03T21:31:16.556Z" }, { url = "https://files.pythonhosted.org/packages/3d/e2/23cd5d3573901ce8f9757c92ca4db4d09600b865919b6d3e7f69f03b1afd/regex-2025.11.3-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:6dd329a1b61c0ee95ba95385fb0c07ea0d3fe1a21e1349fa2bec272636217118", size = 860448, upload-time = "2025-11-03T21:31:18.12Z" }, { url = "https://files.pythonhosted.org/packages/2a/4c/aecf31beeaa416d0ae4ecb852148d38db35391aac19c687b5d56aedf3a8b/regex-2025.11.3-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:4c5238d32f3c5269d9e87be0cf096437b7622b6920f5eac4fd202468aaeb34d2", size = 907139, upload-time = "2025-11-03T21:31:20.753Z" }, { url = "https://files.pythonhosted.org/packages/61/22/b8cb00df7d2b5e0875f60628594d44dba283e951b1ae17c12f99e332cc0a/regex-2025.11.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:10483eefbfb0adb18ee9474498c9a32fcf4e594fbca0543bb94c48bac6183e2e", size = 800439, upload-time = "2025-11-03T21:31:22.069Z" }, { url = "https://files.pythonhosted.org/packages/02/a8/c4b20330a5cdc7a8eb265f9ce593f389a6a88a0c5f280cf4d978f33966bc/regex-2025.11.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:78c2d02bb6e1da0720eedc0bad578049cad3f71050ef8cd065ecc87691bed2b0", size = 782965, upload-time = "2025-11-03T21:31:23.598Z" }, { url = "https://files.pythonhosted.org/packages/b4/4c/ae3e52988ae74af4b04d2af32fee4e8077f26e51b62ec2d12d246876bea2/regex-2025.11.3-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:e6b49cd2aad93a1790ce9cffb18964f6d3a4b0b3dbdbd5de094b65296fce6e58", size = 854398, upload-time = "2025-11-03T21:31:25.008Z" }, { url = "https://files.pythonhosted.org/packages/06/d1/a8b9cf45874eda14b2e275157ce3b304c87e10fb38d9fc26a6e14eb18227/regex-2025.11.3-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:885b26aa3ee56433b630502dc3d36ba78d186a00cc535d3806e6bfd9ed3c70ab", size = 845897, upload-time = "2025-11-03T21:31:26.427Z" }, { url = "https://files.pythonhosted.org/packages/ea/fe/1830eb0236be93d9b145e0bd8ab499f31602fe0999b1f19e99955aa8fe20/regex-2025.11.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ddd76a9f58e6a00f8772e72cff8ebcff78e022be95edf018766707c730593e1e", size = 788906, upload-time = "2025-11-03T21:31:28.078Z" }, { url = "https://files.pythonhosted.org/packages/66/47/dc2577c1f95f188c1e13e2e69d8825a5ac582ac709942f8a03af42ed6e93/regex-2025.11.3-cp311-cp311-win32.whl", hash = "sha256:3e816cc9aac1cd3cc9a4ec4d860f06d40f994b5c7b4d03b93345f44e08cc68bf", size = 265812, upload-time = "2025-11-03T21:31:29.72Z" }, { url = "https://files.pythonhosted.org/packages/50/1e/15f08b2f82a9bbb510621ec9042547b54d11e83cb620643ebb54e4eb7d71/regex-2025.11.3-cp311-cp311-win_amd64.whl", hash = "sha256:087511f5c8b7dfbe3a03f5d5ad0c2a33861b1fc387f21f6f60825a44865a385a", size = 277737, upload-time = "2025-11-03T21:31:31.422Z" }, { url = "https://files.pythonhosted.org/packages/f4/fc/6500eb39f5f76c5e47a398df82e6b535a5e345f839581012a418b16f9cc3/regex-2025.11.3-cp311-cp311-win_arm64.whl", hash = "sha256:1ff0d190c7f68ae7769cd0313fe45820ba07ffebfddfaa89cc1eb70827ba0ddc", size = 270290, upload-time = "2025-11-03T21:31:33.041Z" }, { url = "https://files.pythonhosted.org/packages/e8/74/18f04cb53e58e3fb107439699bd8375cf5a835eec81084e0bddbd122e4c2/regex-2025.11.3-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:bc8ab71e2e31b16e40868a40a69007bc305e1109bd4658eb6cad007e0bf67c41", size = 489312, upload-time = "2025-11-03T21:31:34.343Z" }, { url = "https://files.pythonhosted.org/packages/78/3f/37fcdd0d2b1e78909108a876580485ea37c91e1acf66d3bb8e736348f441/regex-2025.11.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:22b29dda7e1f7062a52359fca6e58e548e28c6686f205e780b02ad8ef710de36", size = 291256, upload-time = "2025-11-03T21:31:35.675Z" }, { url = "https://files.pythonhosted.org/packages/bf/26/0a575f58eb23b7ebd67a45fccbc02ac030b737b896b7e7a909ffe43ffd6a/regex-2025.11.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:3a91e4a29938bc1a082cc28fdea44be420bf2bebe2665343029723892eb073e1", size = 288921, upload-time = "2025-11-03T21:31:37.07Z" }, { url = "https://files.pythonhosted.org/packages/ea/98/6a8dff667d1af907150432cf5abc05a17ccd32c72a3615410d5365ac167a/regex-2025.11.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:08b884f4226602ad40c5d55f52bf91a9df30f513864e0054bad40c0e9cf1afb7", size = 798568, upload-time = "2025-11-03T21:31:38.784Z" }, { url = "https://files.pythonhosted.org/packages/64/15/92c1db4fa4e12733dd5a526c2dd2b6edcbfe13257e135fc0f6c57f34c173/regex-2025.11.3-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:3e0b11b2b2433d1c39c7c7a30e3f3d0aeeea44c2a8d0bae28f6b95f639927a69", size = 864165, upload-time = "2025-11-03T21:31:40.559Z" }, { url = "https://files.pythonhosted.org/packages/f9/e7/3ad7da8cdee1ce66c7cd37ab5ab05c463a86ffeb52b1a25fe7bd9293b36c/regex-2025.11.3-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:87eb52a81ef58c7ba4d45c3ca74e12aa4b4e77816f72ca25258a85b3ea96cb48", size = 912182, upload-time = "2025-11-03T21:31:42.002Z" }, { url = "https://files.pythonhosted.org/packages/84/bd/9ce9f629fcb714ffc2c3faf62b6766ecb7a585e1e885eb699bcf130a5209/regex-2025.11.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a12ab1f5c29b4e93db518f5e3872116b7e9b1646c9f9f426f777b50d44a09e8c", size = 803501, upload-time = "2025-11-03T21:31:43.815Z" }, { url = "https://files.pythonhosted.org/packages/7c/0f/8dc2e4349d8e877283e6edd6c12bdcebc20f03744e86f197ab6e4492bf08/regex-2025.11.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:7521684c8c7c4f6e88e35ec89680ee1aa8358d3f09d27dfbdf62c446f5d4c695", size = 787842, upload-time = "2025-11-03T21:31:45.353Z" }, { url = "https://files.pythonhosted.org/packages/f9/73/cff02702960bc185164d5619c0c62a2f598a6abff6695d391b096237d4ab/regex-2025.11.3-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:7fe6e5440584e94cc4b3f5f4d98a25e29ca12dccf8873679a635638349831b98", size = 858519, upload-time = "2025-11-03T21:31:46.814Z" }, { url = "https://files.pythonhosted.org/packages/61/83/0e8d1ae71e15bc1dc36231c90b46ee35f9d52fab2e226b0e039e7ea9c10a/regex-2025.11.3-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:8e026094aa12b43f4fd74576714e987803a315c76edb6b098b9809db5de58f74", size = 850611, upload-time = "2025-11-03T21:31:48.289Z" }, { url = "https://files.pythonhosted.org/packages/c8/f5/70a5cdd781dcfaa12556f2955bf170cd603cb1c96a1827479f8faea2df97/regex-2025.11.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:435bbad13e57eb5606a68443af62bed3556de2f46deb9f7d4237bc2f1c9fb3a0", size = 789759, upload-time = "2025-11-03T21:31:49.759Z" }, { url = "https://files.pythonhosted.org/packages/59/9b/7c29be7903c318488983e7d97abcf8ebd3830e4c956c4c540005fcfb0462/regex-2025.11.3-cp312-cp312-win32.whl", hash = "sha256:3839967cf4dc4b985e1570fd8d91078f0c519f30491c60f9ac42a8db039be204", size = 266194, upload-time = "2025-11-03T21:31:51.53Z" }, { url = "https://files.pythonhosted.org/packages/1a/67/3b92df89f179d7c367be654ab5626ae311cb28f7d5c237b6bb976cd5fbbb/regex-2025.11.3-cp312-cp312-win_amd64.whl", hash = "sha256:e721d1b46e25c481dc5ded6f4b3f66c897c58d2e8cfdf77bbced84339108b0b9", size = 277069, upload-time = "2025-11-03T21:31:53.151Z" }, { url = "https://files.pythonhosted.org/packages/d7/55/85ba4c066fe5094d35b249c3ce8df0ba623cfd35afb22d6764f23a52a1c5/regex-2025.11.3-cp312-cp312-win_arm64.whl", hash = "sha256:64350685ff08b1d3a6fff33f45a9ca183dc1d58bbfe4981604e70ec9801bbc26", size = 270330, upload-time = "2025-11-03T21:31:54.514Z" }, { url = "https://files.pythonhosted.org/packages/e1/a7/dda24ebd49da46a197436ad96378f17df30ceb40e52e859fc42cac45b850/regex-2025.11.3-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:c1e448051717a334891f2b9a620fe36776ebf3dd8ec46a0b877c8ae69575feb4", size = 489081, upload-time = "2025-11-03T21:31:55.9Z" }, { url = "https://files.pythonhosted.org/packages/19/22/af2dc751aacf88089836aa088a1a11c4f21a04707eb1b0478e8e8fb32847/regex-2025.11.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:9b5aca4d5dfd7fbfbfbdaf44850fcc7709a01146a797536a8f84952e940cca76", size = 291123, upload-time = "2025-11-03T21:31:57.758Z" }, { url = "https://files.pythonhosted.org/packages/a3/88/1a3ea5672f4b0a84802ee9891b86743438e7c04eb0b8f8c4e16a42375327/regex-2025.11.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:04d2765516395cf7dda331a244a3282c0f5ae96075f728629287dfa6f76ba70a", size = 288814, upload-time = "2025-11-03T21:32:01.12Z" }, { url = "https://files.pythonhosted.org/packages/fb/8c/f5987895bf42b8ddeea1b315c9fedcfe07cadee28b9c98cf50d00adcb14d/regex-2025.11.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5d9903ca42bfeec4cebedba8022a7c97ad2aab22e09573ce9976ba01b65e4361", size = 798592, upload-time = "2025-11-03T21:32:03.006Z" }, { url = "https://files.pythonhosted.org/packages/99/2a/6591ebeede78203fa77ee46a1c36649e02df9eaa77a033d1ccdf2fcd5d4e/regex-2025.11.3-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:639431bdc89d6429f6721625e8129413980ccd62e9d3f496be618a41d205f160", size = 864122, upload-time = "2025-11-03T21:32:04.553Z" }, { url = "https://files.pythonhosted.org/packages/94/d6/be32a87cf28cf8ed064ff281cfbd49aefd90242a83e4b08b5a86b38e8eb4/regex-2025.11.3-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:f117efad42068f9715677c8523ed2be1518116d1c49b1dd17987716695181efe", size = 912272, upload-time = "2025-11-03T21:32:06.148Z" }, { url = "https://files.pythonhosted.org/packages/62/11/9bcef2d1445665b180ac7f230406ad80671f0fc2a6ffb93493b5dd8cd64c/regex-2025.11.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4aecb6f461316adf9f1f0f6a4a1a3d79e045f9b71ec76055a791affa3b285850", size = 803497, upload-time = "2025-11-03T21:32:08.162Z" }, { url = "https://files.pythonhosted.org/packages/e5/a7/da0dc273d57f560399aa16d8a68ae7f9b57679476fc7ace46501d455fe84/regex-2025.11.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:3b3a5f320136873cc5561098dfab677eea139521cb9a9e8db98b7e64aef44cbc", size = 787892, upload-time = "2025-11-03T21:32:09.769Z" }, { url = "https://files.pythonhosted.org/packages/da/4b/732a0c5a9736a0b8d6d720d4945a2f1e6f38f87f48f3173559f53e8d5d82/regex-2025.11.3-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:75fa6f0056e7efb1f42a1c34e58be24072cb9e61a601340cc1196ae92326a4f9", size = 858462, upload-time = "2025-11-03T21:32:11.769Z" }, { url = "https://files.pythonhosted.org/packages/0c/f5/a2a03df27dc4c2d0c769220f5110ba8c4084b0bfa9ab0f9b4fcfa3d2b0fc/regex-2025.11.3-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:dbe6095001465294f13f1adcd3311e50dd84e5a71525f20a10bd16689c61ce0b", size = 850528, upload-time = "2025-11-03T21:32:13.906Z" }, { url = "https://files.pythonhosted.org/packages/d6/09/e1cd5bee3841c7f6eb37d95ca91cdee7100b8f88b81e41c2ef426910891a/regex-2025.11.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:454d9b4ae7881afbc25015b8627c16d88a597479b9dea82b8c6e7e2e07240dc7", size = 789866, upload-time = "2025-11-03T21:32:15.748Z" }, { url = "https://files.pythonhosted.org/packages/eb/51/702f5ea74e2a9c13d855a6a85b7f80c30f9e72a95493260193c07f3f8d74/regex-2025.11.3-cp313-cp313-win32.whl", hash = "sha256:28ba4d69171fc6e9896337d4fc63a43660002b7da53fc15ac992abcf3410917c", size = 266189, upload-time = "2025-11-03T21:32:17.493Z" }, { url = "https://files.pythonhosted.org/packages/8b/00/6e29bb314e271a743170e53649db0fdb8e8ff0b64b4f425f5602f4eb9014/regex-2025.11.3-cp313-cp313-win_amd64.whl", hash = "sha256:bac4200befe50c670c405dc33af26dad5a3b6b255dd6c000d92fe4629f9ed6a5", size = 277054, upload-time = "2025-11-03T21:32:19.042Z" }, { url = "https://files.pythonhosted.org/packages/25/f1/b156ff9f2ec9ac441710764dda95e4edaf5f36aca48246d1eea3f1fd96ec/regex-2025.11.3-cp313-cp313-win_arm64.whl", hash = "sha256:2292cd5a90dab247f9abe892ac584cb24f0f54680c73fcb4a7493c66c2bf2467", size = 270325, upload-time = "2025-11-03T21:32:21.338Z" }, { url = "https://files.pythonhosted.org/packages/20/28/fd0c63357caefe5680b8ea052131acbd7f456893b69cc2a90cc3e0dc90d4/regex-2025.11.3-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:1eb1ebf6822b756c723e09f5186473d93236c06c579d2cc0671a722d2ab14281", size = 491984, upload-time = "2025-11-03T21:32:23.466Z" }, { url = "https://files.pythonhosted.org/packages/df/ec/7014c15626ab46b902b3bcc4b28a7bae46d8f281fc7ea9c95e22fcaaa917/regex-2025.11.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:1e00ec2970aab10dc5db34af535f21fcf32b4a31d99e34963419636e2f85ae39", size = 292673, upload-time = "2025-11-03T21:32:25.034Z" }, { url = "https://files.pythonhosted.org/packages/23/ab/3b952ff7239f20d05f1f99e9e20188513905f218c81d52fb5e78d2bf7634/regex-2025.11.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:a4cb042b615245d5ff9b3794f56be4138b5adc35a4166014d31d1814744148c7", size = 291029, upload-time = "2025-11-03T21:32:26.528Z" }, { url = "https://files.pythonhosted.org/packages/21/7e/3dc2749fc684f455f162dcafb8a187b559e2614f3826877d3844a131f37b/regex-2025.11.3-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:44f264d4bf02f3176467d90b294d59bf1db9fe53c141ff772f27a8b456b2a9ed", size = 807437, upload-time = "2025-11-03T21:32:28.363Z" }, { url = "https://files.pythonhosted.org/packages/1b/0b/d529a85ab349c6a25d1ca783235b6e3eedf187247eab536797021f7126c6/regex-2025.11.3-cp313-cp313t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:7be0277469bf3bd7a34a9c57c1b6a724532a0d235cd0dc4e7f4316f982c28b19", size = 873368, upload-time = "2025-11-03T21:32:30.4Z" }, { url = "https://files.pythonhosted.org/packages/7d/18/2d868155f8c9e3e9d8f9e10c64e9a9f496bb8f7e037a88a8bed26b435af6/regex-2025.11.3-cp313-cp313t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:0d31e08426ff4b5b650f68839f5af51a92a5b51abd8554a60c2fbc7c71f25d0b", size = 914921, upload-time = "2025-11-03T21:32:32.123Z" }, { url = "https://files.pythonhosted.org/packages/2d/71/9d72ff0f354fa783fe2ba913c8734c3b433b86406117a8db4ea2bf1c7a2f/regex-2025.11.3-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e43586ce5bd28f9f285a6e729466841368c4a0353f6fd08d4ce4630843d3648a", size = 812708, upload-time = "2025-11-03T21:32:34.305Z" }, { url = "https://files.pythonhosted.org/packages/e7/19/ce4bf7f5575c97f82b6e804ffb5c4e940c62609ab2a0d9538d47a7fdf7d4/regex-2025.11.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:0f9397d561a4c16829d4e6ff75202c1c08b68a3bdbfe29dbfcdb31c9830907c6", size = 795472, upload-time = "2025-11-03T21:32:36.364Z" }, { url = "https://files.pythonhosted.org/packages/03/86/fd1063a176ffb7b2315f9a1b08d17b18118b28d9df163132615b835a26ee/regex-2025.11.3-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:dd16e78eb18ffdb25ee33a0682d17912e8cc8a770e885aeee95020046128f1ce", size = 868341, upload-time = "2025-11-03T21:32:38.042Z" }, { url = "https://files.pythonhosted.org/packages/12/43/103fb2e9811205e7386366501bc866a164a0430c79dd59eac886a2822950/regex-2025.11.3-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:ffcca5b9efe948ba0661e9df0fa50d2bc4b097c70b9810212d6b62f05d83b2dd", size = 854666, upload-time = "2025-11-03T21:32:40.079Z" }, { url = "https://files.pythonhosted.org/packages/7d/22/e392e53f3869b75804762c7c848bd2dd2abf2b70fb0e526f58724638bd35/regex-2025.11.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:c56b4d162ca2b43318ac671c65bd4d563e841a694ac70e1a976ac38fcf4ca1d2", size = 799473, upload-time = "2025-11-03T21:32:42.148Z" }, { url = "https://files.pythonhosted.org/packages/4f/f9/8bd6b656592f925b6845fcbb4d57603a3ac2fb2373344ffa1ed70aa6820a/regex-2025.11.3-cp313-cp313t-win32.whl", hash = "sha256:9ddc42e68114e161e51e272f667d640f97e84a2b9ef14b7477c53aac20c2d59a", size = 268792, upload-time = "2025-11-03T21:32:44.13Z" }, { url = "https://files.pythonhosted.org/packages/e5/87/0e7d603467775ff65cd2aeabf1b5b50cc1c3708556a8b849a2fa4dd1542b/regex-2025.11.3-cp313-cp313t-win_amd64.whl", hash = "sha256:7a7c7fdf755032ffdd72c77e3d8096bdcb0eb92e89e17571a196f03d88b11b3c", size = 280214, upload-time = "2025-11-03T21:32:45.853Z" }, { url = "https://files.pythonhosted.org/packages/8d/d0/2afc6f8e94e2b64bfb738a7c2b6387ac1699f09f032d363ed9447fd2bb57/regex-2025.11.3-cp313-cp313t-win_arm64.whl", hash = "sha256:df9eb838c44f570283712e7cff14c16329a9f0fb19ca492d21d4b7528ee6821e", size = 271469, upload-time = "2025-11-03T21:32:48.026Z" }, { url = "https://files.pythonhosted.org/packages/31/e9/f6e13de7e0983837f7b6d238ad9458800a874bf37c264f7923e63409944c/regex-2025.11.3-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:9697a52e57576c83139d7c6f213d64485d3df5bf84807c35fa409e6c970801c6", size = 489089, upload-time = "2025-11-03T21:32:50.027Z" }, { url = "https://files.pythonhosted.org/packages/a3/5c/261f4a262f1fa65141c1b74b255988bd2fa020cc599e53b080667d591cfc/regex-2025.11.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:e18bc3f73bd41243c9b38a6d9f2366cd0e0137a9aebe2d8ff76c5b67d4c0a3f4", size = 291059, upload-time = "2025-11-03T21:32:51.682Z" }, { url = "https://files.pythonhosted.org/packages/8e/57/f14eeb7f072b0e9a5a090d1712741fd8f214ec193dba773cf5410108bb7d/regex-2025.11.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:61a08bcb0ec14ff4e0ed2044aad948d0659604f824cbd50b55e30b0ec6f09c73", size = 288900, upload-time = "2025-11-03T21:32:53.569Z" }, { url = "https://files.pythonhosted.org/packages/3c/6b/1d650c45e99a9b327586739d926a1cd4e94666b1bd4af90428b36af66dc7/regex-2025.11.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c9c30003b9347c24bcc210958c5d167b9e4f9be786cb380a7d32f14f9b84674f", size = 799010, upload-time = "2025-11-03T21:32:55.222Z" }, { url = "https://files.pythonhosted.org/packages/99/ee/d66dcbc6b628ce4e3f7f0cbbb84603aa2fc0ffc878babc857726b8aab2e9/regex-2025.11.3-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:4e1e592789704459900728d88d41a46fe3969b82ab62945560a31732ffc19a6d", size = 864893, upload-time = "2025-11-03T21:32:57.239Z" }, { url = "https://files.pythonhosted.org/packages/bf/2d/f238229f1caba7ac87a6c4153d79947fb0261415827ae0f77c304260c7d3/regex-2025.11.3-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:6538241f45eb5a25aa575dbba1069ad786f68a4f2773a29a2bd3dd1f9de787be", size = 911522, upload-time = "2025-11-03T21:32:59.274Z" }, { url = "https://files.pythonhosted.org/packages/bd/3d/22a4eaba214a917c80e04f6025d26143690f0419511e0116508e24b11c9b/regex-2025.11.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bce22519c989bb72a7e6b36a199384c53db7722fe669ba891da75907fe3587db", size = 803272, upload-time = "2025-11-03T21:33:01.393Z" }, { url = "https://files.pythonhosted.org/packages/84/b1/03188f634a409353a84b5ef49754b97dbcc0c0f6fd6c8ede505a8960a0a4/regex-2025.11.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:66d559b21d3640203ab9075797a55165d79017520685fb407b9234d72ab63c62", size = 787958, upload-time = "2025-11-03T21:33:03.379Z" }, { url = "https://files.pythonhosted.org/packages/99/6a/27d072f7fbf6fadd59c64d210305e1ff865cc3b78b526fd147db768c553b/regex-2025.11.3-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:669dcfb2e38f9e8c69507bace46f4889e3abbfd9b0c29719202883c0a603598f", size = 859289, upload-time = "2025-11-03T21:33:05.374Z" }, { url = "https://files.pythonhosted.org/packages/9a/70/1b3878f648e0b6abe023172dacb02157e685564853cc363d9961bcccde4e/regex-2025.11.3-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:32f74f35ff0f25a5021373ac61442edcb150731fbaa28286bbc8bb1582c89d02", size = 850026, upload-time = "2025-11-03T21:33:07.131Z" }, { url = "https://files.pythonhosted.org/packages/dd/d5/68e25559b526b8baab8e66839304ede68ff6727237a47727d240006bd0ff/regex-2025.11.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:e6c7a21dffba883234baefe91bc3388e629779582038f75d2a5be918e250f0ed", size = 789499, upload-time = "2025-11-03T21:33:09.141Z" }, { url = "https://files.pythonhosted.org/packages/fc/df/43971264857140a350910d4e33df725e8c94dd9dee8d2e4729fa0d63d49e/regex-2025.11.3-cp314-cp314-win32.whl", hash = "sha256:795ea137b1d809eb6836b43748b12634291c0ed55ad50a7d72d21edf1cd565c4", size = 271604, upload-time = "2025-11-03T21:33:10.9Z" }, { url = "https://files.pythonhosted.org/packages/01/6f/9711b57dc6894a55faf80a4c1b5aa4f8649805cb9c7aef46f7d27e2b9206/regex-2025.11.3-cp314-cp314-win_amd64.whl", hash = "sha256:9f95fbaa0ee1610ec0fc6b26668e9917a582ba80c52cc6d9ada15e30aa9ab9ad", size = 280320, upload-time = "2025-11-03T21:33:12.572Z" }, { url = "https://files.pythonhosted.org/packages/f1/7e/f6eaa207d4377481f5e1775cdeb5a443b5a59b392d0065f3417d31d80f87/regex-2025.11.3-cp314-cp314-win_arm64.whl", hash = "sha256:dfec44d532be4c07088c3de2876130ff0fbeeacaa89a137decbbb5f665855a0f", size = 273372, upload-time = "2025-11-03T21:33:14.219Z" }, { url = "https://files.pythonhosted.org/packages/c3/06/49b198550ee0f5e4184271cee87ba4dfd9692c91ec55289e6282f0f86ccf/regex-2025.11.3-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:ba0d8a5d7f04f73ee7d01d974d47c5834f8a1b0224390e4fe7c12a3a92a78ecc", size = 491985, upload-time = "2025-11-03T21:33:16.555Z" }, { url = "https://files.pythonhosted.org/packages/ce/bf/abdafade008f0b1c9da10d934034cb670432d6cf6cbe38bbb53a1cfd6cf8/regex-2025.11.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:442d86cf1cfe4faabf97db7d901ef58347efd004934da045c745e7b5bd57ac49", size = 292669, upload-time = "2025-11-03T21:33:18.32Z" }, { url = "https://files.pythonhosted.org/packages/f9/ef/0c357bb8edbd2ad8e273fcb9e1761bc37b8acbc6e1be050bebd6475f19c1/regex-2025.11.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:fd0a5e563c756de210bb964789b5abe4f114dacae9104a47e1a649b910361536", size = 291030, upload-time = "2025-11-03T21:33:20.048Z" }, { url = "https://files.pythonhosted.org/packages/79/06/edbb67257596649b8fb088d6aeacbcb248ac195714b18a65e018bf4c0b50/regex-2025.11.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:bf3490bcbb985a1ae97b2ce9ad1c0f06a852d5b19dde9b07bdf25bf224248c95", size = 807674, upload-time = "2025-11-03T21:33:21.797Z" }, { url = "https://files.pythonhosted.org/packages/f4/d9/ad4deccfce0ea336296bd087f1a191543bb99ee1c53093dcd4c64d951d00/regex-2025.11.3-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:3809988f0a8b8c9dcc0f92478d6501fac7200b9ec56aecf0ec21f4a2ec4b6009", size = 873451, upload-time = "2025-11-03T21:33:23.741Z" }, { url = "https://files.pythonhosted.org/packages/13/75/a55a4724c56ef13e3e04acaab29df26582f6978c000ac9cd6810ad1f341f/regex-2025.11.3-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:f4ff94e58e84aedb9c9fce66d4ef9f27a190285b451420f297c9a09f2b9abee9", size = 914980, upload-time = "2025-11-03T21:33:25.999Z" }, { url = "https://files.pythonhosted.org/packages/67/1e/a1657ee15bd9116f70d4a530c736983eed997b361e20ecd8f5ca3759d5c5/regex-2025.11.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7eb542fd347ce61e1321b0a6b945d5701528dca0cd9759c2e3bb8bd57e47964d", size = 812852, upload-time = "2025-11-03T21:33:27.852Z" }, { url = "https://files.pythonhosted.org/packages/b8/6f/f7516dde5506a588a561d296b2d0044839de06035bb486b326065b4c101e/regex-2025.11.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:d6c2d5919075a1f2e413c00b056ea0c2f065b3f5fe83c3d07d325ab92dce51d6", size = 795566, upload-time = "2025-11-03T21:33:32.364Z" }, { url = "https://files.pythonhosted.org/packages/d9/dd/3d10b9e170cc16fb34cb2cef91513cf3df65f440b3366030631b2984a264/regex-2025.11.3-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:3f8bf11a4827cc7ce5a53d4ef6cddd5ad25595d3c1435ef08f76825851343154", size = 868463, upload-time = "2025-11-03T21:33:34.459Z" }, { url = "https://files.pythonhosted.org/packages/f5/8e/935e6beff1695aa9085ff83195daccd72acc82c81793df480f34569330de/regex-2025.11.3-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:22c12d837298651e5550ac1d964e4ff57c3f56965fc1812c90c9fb2028eaf267", size = 854694, upload-time = "2025-11-03T21:33:36.793Z" }, { url = "https://files.pythonhosted.org/packages/92/12/10650181a040978b2f5720a6a74d44f841371a3d984c2083fc1752e4acf6/regex-2025.11.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:62ba394a3dda9ad41c7c780f60f6e4a70988741415ae96f6d1bf6c239cf01379", size = 799691, upload-time = "2025-11-03T21:33:39.079Z" }, { url = "https://files.pythonhosted.org/packages/67/90/8f37138181c9a7690e7e4cb388debbd389342db3c7381d636d2875940752/regex-2025.11.3-cp314-cp314t-win32.whl", hash = "sha256:4bf146dca15cdd53224a1bf46d628bd7590e4a07fbb69e720d561aea43a32b38", size = 274583, upload-time = "2025-11-03T21:33:41.302Z" }, { url = "https://files.pythonhosted.org/packages/8f/cd/867f5ec442d56beb56f5f854f40abcfc75e11d10b11fdb1869dd39c63aaf/regex-2025.11.3-cp314-cp314t-win_amd64.whl", hash = "sha256:adad1a1bcf1c9e76346e091d22d23ac54ef28e1365117d99521631078dfec9de", size = 284286, upload-time = "2025-11-03T21:33:43.324Z" }, { url = "https://files.pythonhosted.org/packages/20/31/32c0c4610cbc070362bf1d2e4ea86d1ea29014d400a6d6c2486fcfd57766/regex-2025.11.3-cp314-cp314t-win_arm64.whl", hash = "sha256:c54f768482cef41e219720013cd05933b6f971d9562544d691c68699bf2b6801", size = 274741, upload-time = "2025-11-03T21:33:45.557Z" }, ] [[package]] name = "rpds-py" version = "0.30.0" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/20/af/3f2f423103f1113b36230496629986e0ef7e199d2aa8392452b484b38ced/rpds_py-0.30.0.tar.gz", hash = "sha256:dd8ff7cf90014af0c0f787eea34794ebf6415242ee1d6fa91eaba725cc441e84", size = 69469, upload-time = "2025-11-30T20:24:38.837Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/06/0c/0c411a0ec64ccb6d104dcabe0e713e05e153a9a2c3c2bd2b32ce412166fe/rpds_py-0.30.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:679ae98e00c0e8d68a7fda324e16b90fd5260945b45d3b824c892cec9eea3288", size = 370490, upload-time = "2025-11-30T20:21:33.256Z" }, { url = "https://files.pythonhosted.org/packages/19/6a/4ba3d0fb7297ebae71171822554abe48d7cab29c28b8f9f2c04b79988c05/rpds_py-0.30.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:4cc2206b76b4f576934f0ed374b10d7ca5f457858b157ca52064bdfc26b9fc00", size = 359751, upload-time = "2025-11-30T20:21:34.591Z" }, { url = "https://files.pythonhosted.org/packages/cd/7c/e4933565ef7f7a0818985d87c15d9d273f1a649afa6a52ea35ad011195ea/rpds_py-0.30.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:389a2d49eded1896c3d48b0136ead37c48e221b391c052fba3f4055c367f60a6", size = 389696, upload-time = "2025-11-30T20:21:36.122Z" }, { url = "https://files.pythonhosted.org/packages/5e/01/6271a2511ad0815f00f7ed4390cf2567bec1d4b1da39e2c27a41e6e3b4de/rpds_py-0.30.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:32c8528634e1bf7121f3de08fa85b138f4e0dc47657866630611b03967f041d7", size = 403136, upload-time = "2025-11-30T20:21:37.728Z" }, { url = "https://files.pythonhosted.org/packages/55/64/c857eb7cd7541e9b4eee9d49c196e833128a55b89a9850a9c9ac33ccf897/rpds_py-0.30.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f207f69853edd6f6700b86efb84999651baf3789e78a466431df1331608e5324", size = 524699, upload-time = "2025-11-30T20:21:38.92Z" }, { url = "https://files.pythonhosted.org/packages/9c/ed/94816543404078af9ab26159c44f9e98e20fe47e2126d5d32c9d9948d10a/rpds_py-0.30.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:67b02ec25ba7a9e8fa74c63b6ca44cf5707f2fbfadae3ee8e7494297d56aa9df", size = 412022, upload-time = "2025-11-30T20:21:40.407Z" }, { url = "https://files.pythonhosted.org/packages/61/b5/707f6cf0066a6412aacc11d17920ea2e19e5b2f04081c64526eb35b5c6e7/rpds_py-0.30.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0c0e95f6819a19965ff420f65578bacb0b00f251fefe2c8b23347c37174271f3", size = 390522, upload-time = "2025-11-30T20:21:42.17Z" }, { url = "https://files.pythonhosted.org/packages/13/4e/57a85fda37a229ff4226f8cbcf09f2a455d1ed20e802ce5b2b4a7f5ed053/rpds_py-0.30.0-cp310-cp310-manylinux_2_31_riscv64.whl", hash = "sha256:a452763cc5198f2f98898eb98f7569649fe5da666c2dc6b5ddb10fde5a574221", size = 404579, upload-time = "2025-11-30T20:21:43.769Z" }, { url = "https://files.pythonhosted.org/packages/f9/da/c9339293513ec680a721e0e16bf2bac3db6e5d7e922488de471308349bba/rpds_py-0.30.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e0b65193a413ccc930671c55153a03ee57cecb49e6227204b04fae512eb657a7", size = 421305, upload-time = "2025-11-30T20:21:44.994Z" }, { url = "https://files.pythonhosted.org/packages/f9/be/522cb84751114f4ad9d822ff5a1aa3c98006341895d5f084779b99596e5c/rpds_py-0.30.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:858738e9c32147f78b3ac24dc0edb6610000e56dc0f700fd5f651d0a0f0eb9ff", size = 572503, upload-time = "2025-11-30T20:21:46.91Z" }, { url = "https://files.pythonhosted.org/packages/a2/9b/de879f7e7ceddc973ea6e4629e9b380213a6938a249e94b0cdbcc325bb66/rpds_py-0.30.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:da279aa314f00acbb803da1e76fa18666778e8a8f83484fba94526da5de2cba7", size = 598322, upload-time = "2025-11-30T20:21:48.709Z" }, { url = "https://files.pythonhosted.org/packages/48/ac/f01fc22efec3f37d8a914fc1b2fb9bcafd56a299edbe96406f3053edea5a/rpds_py-0.30.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:7c64d38fb49b6cdeda16ab49e35fe0da2e1e9b34bc38bd78386530f218b37139", size = 560792, upload-time = "2025-11-30T20:21:50.024Z" }, { url = "https://files.pythonhosted.org/packages/e2/da/4e2b19d0f131f35b6146425f846563d0ce036763e38913d917187307a671/rpds_py-0.30.0-cp310-cp310-win32.whl", hash = "sha256:6de2a32a1665b93233cde140ff8b3467bdb9e2af2b91079f0333a0974d12d464", size = 221901, upload-time = "2025-11-30T20:21:51.32Z" }, { url = "https://files.pythonhosted.org/packages/96/cb/156d7a5cf4f78a7cc571465d8aec7a3c447c94f6749c5123f08438bcf7bc/rpds_py-0.30.0-cp310-cp310-win_amd64.whl", hash = "sha256:1726859cd0de969f88dc8673bdd954185b9104e05806be64bcd87badbe313169", size = 235823, upload-time = "2025-11-30T20:21:52.505Z" }, { url = "https://files.pythonhosted.org/packages/4d/6e/f964e88b3d2abee2a82c1ac8366da848fce1c6d834dc2132c3fda3970290/rpds_py-0.30.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:a2bffea6a4ca9f01b3f8e548302470306689684e61602aa3d141e34da06cf425", size = 370157, upload-time = "2025-11-30T20:21:53.789Z" }, { url = "https://files.pythonhosted.org/packages/94/ba/24e5ebb7c1c82e74c4e4f33b2112a5573ddc703915b13a073737b59b86e0/rpds_py-0.30.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:dc4f992dfe1e2bc3ebc7444f6c7051b4bc13cd8e33e43511e8ffd13bf407010d", size = 359676, upload-time = "2025-11-30T20:21:55.475Z" }, { url = "https://files.pythonhosted.org/packages/84/86/04dbba1b087227747d64d80c3b74df946b986c57af0a9f0c98726d4d7a3b/rpds_py-0.30.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:422c3cb9856d80b09d30d2eb255d0754b23e090034e1deb4083f8004bd0761e4", size = 389938, upload-time = "2025-11-30T20:21:57.079Z" }, { url = "https://files.pythonhosted.org/packages/42/bb/1463f0b1722b7f45431bdd468301991d1328b16cffe0b1c2918eba2c4eee/rpds_py-0.30.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:07ae8a593e1c3c6b82ca3292efbe73c30b61332fd612e05abee07c79359f292f", size = 402932, upload-time = "2025-11-30T20:21:58.47Z" }, { url = "https://files.pythonhosted.org/packages/99/ee/2520700a5c1f2d76631f948b0736cdf9b0acb25abd0ca8e889b5c62ac2e3/rpds_py-0.30.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:12f90dd7557b6bd57f40abe7747e81e0c0b119bef015ea7726e69fe550e394a4", size = 525830, upload-time = "2025-11-30T20:21:59.699Z" }, { url = "https://files.pythonhosted.org/packages/e0/ad/bd0331f740f5705cc555a5e17fdf334671262160270962e69a2bdef3bf76/rpds_py-0.30.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:99b47d6ad9a6da00bec6aabe5a6279ecd3c06a329d4aa4771034a21e335c3a97", size = 412033, upload-time = "2025-11-30T20:22:00.991Z" }, { url = "https://files.pythonhosted.org/packages/f8/1e/372195d326549bb51f0ba0f2ecb9874579906b97e08880e7a65c3bef1a99/rpds_py-0.30.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:33f559f3104504506a44bb666b93a33f5d33133765b0c216a5bf2f1e1503af89", size = 390828, upload-time = "2025-11-30T20:22:02.723Z" }, { url = "https://files.pythonhosted.org/packages/ab/2b/d88bb33294e3e0c76bc8f351a3721212713629ffca1700fa94979cb3eae8/rpds_py-0.30.0-cp311-cp311-manylinux_2_31_riscv64.whl", hash = "sha256:946fe926af6e44f3697abbc305ea168c2c31d3e3ef1058cf68f379bf0335a78d", size = 404683, upload-time = "2025-11-30T20:22:04.367Z" }, { url = "https://files.pythonhosted.org/packages/50/32/c759a8d42bcb5289c1fac697cd92f6fe01a018dd937e62ae77e0e7f15702/rpds_py-0.30.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:495aeca4b93d465efde585977365187149e75383ad2684f81519f504f5c13038", size = 421583, upload-time = "2025-11-30T20:22:05.814Z" }, { url = "https://files.pythonhosted.org/packages/2b/81/e729761dbd55ddf5d84ec4ff1f47857f4374b0f19bdabfcf929164da3e24/rpds_py-0.30.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d9a0ca5da0386dee0655b4ccdf46119df60e0f10da268d04fe7cc87886872ba7", size = 572496, upload-time = "2025-11-30T20:22:07.713Z" }, { url = "https://files.pythonhosted.org/packages/14/f6/69066a924c3557c9c30baa6ec3a0aa07526305684c6f86c696b08860726c/rpds_py-0.30.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:8d6d1cc13664ec13c1b84241204ff3b12f9bb82464b8ad6e7a5d3486975c2eed", size = 598669, upload-time = "2025-11-30T20:22:09.312Z" }, { url = "https://files.pythonhosted.org/packages/5f/48/905896b1eb8a05630d20333d1d8ffd162394127b74ce0b0784ae04498d32/rpds_py-0.30.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:3896fa1be39912cf0757753826bc8bdc8ca331a28a7c4ae46b7a21280b06bb85", size = 561011, upload-time = "2025-11-30T20:22:11.309Z" }, { url = "https://files.pythonhosted.org/packages/22/16/cd3027c7e279d22e5eb431dd3c0fbc677bed58797fe7581e148f3f68818b/rpds_py-0.30.0-cp311-cp311-win32.whl", hash = "sha256:55f66022632205940f1827effeff17c4fa7ae1953d2b74a8581baaefb7d16f8c", size = 221406, upload-time = "2025-11-30T20:22:13.101Z" }, { url = "https://files.pythonhosted.org/packages/fa/5b/e7b7aa136f28462b344e652ee010d4de26ee9fd16f1bfd5811f5153ccf89/rpds_py-0.30.0-cp311-cp311-win_amd64.whl", hash = "sha256:a51033ff701fca756439d641c0ad09a41d9242fa69121c7d8769604a0a629825", size = 236024, upload-time = "2025-11-30T20:22:14.853Z" }, { url = "https://files.pythonhosted.org/packages/14/a6/364bba985e4c13658edb156640608f2c9e1d3ea3c81b27aa9d889fff0e31/rpds_py-0.30.0-cp311-cp311-win_arm64.whl", hash = "sha256:47b0ef6231c58f506ef0b74d44e330405caa8428e770fec25329ed2cb971a229", size = 229069, upload-time = "2025-11-30T20:22:16.577Z" }, { url = "https://files.pythonhosted.org/packages/03/e7/98a2f4ac921d82f33e03f3835f5bf3a4a40aa1bfdc57975e74a97b2b4bdd/rpds_py-0.30.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:a161f20d9a43006833cd7068375a94d035714d73a172b681d8881820600abfad", size = 375086, upload-time = "2025-11-30T20:22:17.93Z" }, { url = "https://files.pythonhosted.org/packages/4d/a1/bca7fd3d452b272e13335db8d6b0b3ecde0f90ad6f16f3328c6fb150c889/rpds_py-0.30.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6abc8880d9d036ecaafe709079969f56e876fcf107f7a8e9920ba6d5a3878d05", size = 359053, upload-time = "2025-11-30T20:22:19.297Z" }, { url = "https://files.pythonhosted.org/packages/65/1c/ae157e83a6357eceff62ba7e52113e3ec4834a84cfe07fa4b0757a7d105f/rpds_py-0.30.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ca28829ae5f5d569bb62a79512c842a03a12576375d5ece7d2cadf8abe96ec28", size = 390763, upload-time = "2025-11-30T20:22:21.661Z" }, { url = "https://files.pythonhosted.org/packages/d4/36/eb2eb8515e2ad24c0bd43c3ee9cd74c33f7ca6430755ccdb240fd3144c44/rpds_py-0.30.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a1010ed9524c73b94d15919ca4d41d8780980e1765babf85f9a2f90d247153dd", size = 408951, upload-time = "2025-11-30T20:22:23.408Z" }, { url = "https://files.pythonhosted.org/packages/d6/65/ad8dc1784a331fabbd740ef6f71ce2198c7ed0890dab595adb9ea2d775a1/rpds_py-0.30.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f8d1736cfb49381ba528cd5baa46f82fdc65c06e843dab24dd70b63d09121b3f", size = 514622, upload-time = "2025-11-30T20:22:25.16Z" }, { url = "https://files.pythonhosted.org/packages/63/8e/0cfa7ae158e15e143fe03993b5bcd743a59f541f5952e1546b1ac1b5fd45/rpds_py-0.30.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d948b135c4693daff7bc2dcfc4ec57237a29bd37e60c2fabf5aff2bbacf3e2f1", size = 414492, upload-time = "2025-11-30T20:22:26.505Z" }, { url = "https://files.pythonhosted.org/packages/60/1b/6f8f29f3f995c7ffdde46a626ddccd7c63aefc0efae881dc13b6e5d5bb16/rpds_py-0.30.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:47f236970bccb2233267d89173d3ad2703cd36a0e2a6e92d0560d333871a3d23", size = 394080, upload-time = "2025-11-30T20:22:27.934Z" }, { url = "https://files.pythonhosted.org/packages/6d/d5/a266341051a7a3ca2f4b750a3aa4abc986378431fc2da508c5034d081b70/rpds_py-0.30.0-cp312-cp312-manylinux_2_31_riscv64.whl", hash = "sha256:2e6ecb5a5bcacf59c3f912155044479af1d0b6681280048b338b28e364aca1f6", size = 408680, upload-time = "2025-11-30T20:22:29.341Z" }, { url = "https://files.pythonhosted.org/packages/10/3b/71b725851df9ab7a7a4e33cf36d241933da66040d195a84781f49c50490c/rpds_py-0.30.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a8fa71a2e078c527c3e9dc9fc5a98c9db40bcc8a92b4e8858e36d329f8684b51", size = 423589, upload-time = "2025-11-30T20:22:31.469Z" }, { url = "https://files.pythonhosted.org/packages/00/2b/e59e58c544dc9bd8bd8384ecdb8ea91f6727f0e37a7131baeff8d6f51661/rpds_py-0.30.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:73c67f2db7bc334e518d097c6d1e6fed021bbc9b7d678d6cc433478365d1d5f5", size = 573289, upload-time = "2025-11-30T20:22:32.997Z" }, { url = "https://files.pythonhosted.org/packages/da/3e/a18e6f5b460893172a7d6a680e86d3b6bc87a54c1f0b03446a3c8c7b588f/rpds_py-0.30.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:5ba103fb455be00f3b1c2076c9d4264bfcb037c976167a6047ed82f23153f02e", size = 599737, upload-time = "2025-11-30T20:22:34.419Z" }, { url = "https://files.pythonhosted.org/packages/5c/e2/714694e4b87b85a18e2c243614974413c60aa107fd815b8cbc42b873d1d7/rpds_py-0.30.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:7cee9c752c0364588353e627da8a7e808a66873672bcb5f52890c33fd965b394", size = 563120, upload-time = "2025-11-30T20:22:35.903Z" }, { url = "https://files.pythonhosted.org/packages/6f/ab/d5d5e3bcedb0a77f4f613706b750e50a5a3ba1c15ccd3665ecc636c968fd/rpds_py-0.30.0-cp312-cp312-win32.whl", hash = "sha256:1ab5b83dbcf55acc8b08fc62b796ef672c457b17dbd7820a11d6c52c06839bdf", size = 223782, upload-time = "2025-11-30T20:22:37.271Z" }, { url = "https://files.pythonhosted.org/packages/39/3b/f786af9957306fdc38a74cef405b7b93180f481fb48453a114bb6465744a/rpds_py-0.30.0-cp312-cp312-win_amd64.whl", hash = "sha256:a090322ca841abd453d43456ac34db46e8b05fd9b3b4ac0c78bcde8b089f959b", size = 240463, upload-time = "2025-11-30T20:22:39.021Z" }, { url = "https://files.pythonhosted.org/packages/f3/d2/b91dc748126c1559042cfe41990deb92c4ee3e2b415f6b5234969ffaf0cc/rpds_py-0.30.0-cp312-cp312-win_arm64.whl", hash = "sha256:669b1805bd639dd2989b281be2cfd951c6121b65e729d9b843e9639ef1fd555e", size = 230868, upload-time = "2025-11-30T20:22:40.493Z" }, { url = "https://files.pythonhosted.org/packages/ed/dc/d61221eb88ff410de3c49143407f6f3147acf2538c86f2ab7ce65ae7d5f9/rpds_py-0.30.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:f83424d738204d9770830d35290ff3273fbb02b41f919870479fab14b9d303b2", size = 374887, upload-time = "2025-11-30T20:22:41.812Z" }, { url = "https://files.pythonhosted.org/packages/fd/32/55fb50ae104061dbc564ef15cc43c013dc4a9f4527a1f4d99baddf56fe5f/rpds_py-0.30.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:e7536cd91353c5273434b4e003cbda89034d67e7710eab8761fd918ec6c69cf8", size = 358904, upload-time = "2025-11-30T20:22:43.479Z" }, { url = "https://files.pythonhosted.org/packages/58/70/faed8186300e3b9bdd138d0273109784eea2396c68458ed580f885dfe7ad/rpds_py-0.30.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2771c6c15973347f50fece41fc447c054b7ac2ae0502388ce3b6738cd366e3d4", size = 389945, upload-time = "2025-11-30T20:22:44.819Z" }, { url = "https://files.pythonhosted.org/packages/bd/a8/073cac3ed2c6387df38f71296d002ab43496a96b92c823e76f46b8af0543/rpds_py-0.30.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:0a59119fc6e3f460315fe9d08149f8102aa322299deaa5cab5b40092345c2136", size = 407783, upload-time = "2025-11-30T20:22:46.103Z" }, { url = "https://files.pythonhosted.org/packages/77/57/5999eb8c58671f1c11eba084115e77a8899d6e694d2a18f69f0ba471ec8b/rpds_py-0.30.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:76fec018282b4ead0364022e3c54b60bf368b9d926877957a8624b58419169b7", size = 515021, upload-time = "2025-11-30T20:22:47.458Z" }, { url = "https://files.pythonhosted.org/packages/e0/af/5ab4833eadc36c0a8ed2bc5c0de0493c04f6c06de223170bd0798ff98ced/rpds_py-0.30.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:692bef75a5525db97318e8cd061542b5a79812d711ea03dbc1f6f8dbb0c5f0d2", size = 414589, upload-time = "2025-11-30T20:22:48.872Z" }, { url = "https://files.pythonhosted.org/packages/b7/de/f7192e12b21b9e9a68a6d0f249b4af3fdcdff8418be0767a627564afa1f1/rpds_py-0.30.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9027da1ce107104c50c81383cae773ef5c24d296dd11c99e2629dbd7967a20c6", size = 394025, upload-time = "2025-11-30T20:22:50.196Z" }, { url = "https://files.pythonhosted.org/packages/91/c4/fc70cd0249496493500e7cc2de87504f5aa6509de1e88623431fec76d4b6/rpds_py-0.30.0-cp313-cp313-manylinux_2_31_riscv64.whl", hash = "sha256:9cf69cdda1f5968a30a359aba2f7f9aa648a9ce4b580d6826437f2b291cfc86e", size = 408895, upload-time = "2025-11-30T20:22:51.87Z" }, { url = "https://files.pythonhosted.org/packages/58/95/d9275b05ab96556fefff73a385813eb66032e4c99f411d0795372d9abcea/rpds_py-0.30.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a4796a717bf12b9da9d3ad002519a86063dcac8988b030e405704ef7d74d2d9d", size = 422799, upload-time = "2025-11-30T20:22:53.341Z" }, { url = "https://files.pythonhosted.org/packages/06/c1/3088fc04b6624eb12a57eb814f0d4997a44b0d208d6cace713033ff1a6ba/rpds_py-0.30.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:5d4c2aa7c50ad4728a094ebd5eb46c452e9cb7edbfdb18f9e1221f597a73e1e7", size = 572731, upload-time = "2025-11-30T20:22:54.778Z" }, { url = "https://files.pythonhosted.org/packages/d8/42/c612a833183b39774e8ac8fecae81263a68b9583ee343db33ab571a7ce55/rpds_py-0.30.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:ba81a9203d07805435eb06f536d95a266c21e5b2dfbf6517748ca40c98d19e31", size = 599027, upload-time = "2025-11-30T20:22:56.212Z" }, { url = "https://files.pythonhosted.org/packages/5f/60/525a50f45b01d70005403ae0e25f43c0384369ad24ffe46e8d9068b50086/rpds_py-0.30.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:945dccface01af02675628334f7cf49c2af4c1c904748efc5cf7bbdf0b579f95", size = 563020, upload-time = "2025-11-30T20:22:58.2Z" }, { url = "https://files.pythonhosted.org/packages/0b/5d/47c4655e9bcd5ca907148535c10e7d489044243cc9941c16ed7cd53be91d/rpds_py-0.30.0-cp313-cp313-win32.whl", hash = "sha256:b40fb160a2db369a194cb27943582b38f79fc4887291417685f3ad693c5a1d5d", size = 223139, upload-time = "2025-11-30T20:23:00.209Z" }, { url = "https://files.pythonhosted.org/packages/f2/e1/485132437d20aa4d3e1d8b3fb5a5e65aa8139f1e097080c2a8443201742c/rpds_py-0.30.0-cp313-cp313-win_amd64.whl", hash = "sha256:806f36b1b605e2d6a72716f321f20036b9489d29c51c91f4dd29a3e3afb73b15", size = 240224, upload-time = "2025-11-30T20:23:02.008Z" }, { url = "https://files.pythonhosted.org/packages/24/95/ffd128ed1146a153d928617b0ef673960130be0009c77d8fbf0abe306713/rpds_py-0.30.0-cp313-cp313-win_arm64.whl", hash = "sha256:d96c2086587c7c30d44f31f42eae4eac89b60dabbac18c7669be3700f13c3ce1", size = 230645, upload-time = "2025-11-30T20:23:03.43Z" }, { url = "https://files.pythonhosted.org/packages/ff/1b/b10de890a0def2a319a2626334a7f0ae388215eb60914dbac8a3bae54435/rpds_py-0.30.0-cp313-cp313t-macosx_10_12_x86_64.whl", hash = "sha256:eb0b93f2e5c2189ee831ee43f156ed34e2a89a78a66b98cadad955972548be5a", size = 364443, upload-time = "2025-11-30T20:23:04.878Z" }, { url = "https://files.pythonhosted.org/packages/0d/bf/27e39f5971dc4f305a4fb9c672ca06f290f7c4e261c568f3dea16a410d47/rpds_py-0.30.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:922e10f31f303c7c920da8981051ff6d8c1a56207dbdf330d9047f6d30b70e5e", size = 353375, upload-time = "2025-11-30T20:23:06.342Z" }, { url = "https://files.pythonhosted.org/packages/40/58/442ada3bba6e8e6615fc00483135c14a7538d2ffac30e2d933ccf6852232/rpds_py-0.30.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cdc62c8286ba9bf7f47befdcea13ea0e26bf294bda99758fd90535cbaf408000", size = 383850, upload-time = "2025-11-30T20:23:07.825Z" }, { url = "https://files.pythonhosted.org/packages/14/14/f59b0127409a33c6ef6f5c1ebd5ad8e32d7861c9c7adfa9a624fc3889f6c/rpds_py-0.30.0-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:47f9a91efc418b54fb8190a6b4aa7813a23fb79c51f4bb84e418f5476c38b8db", size = 392812, upload-time = "2025-11-30T20:23:09.228Z" }, { url = "https://files.pythonhosted.org/packages/b3/66/e0be3e162ac299b3a22527e8913767d869e6cc75c46bd844aa43fb81ab62/rpds_py-0.30.0-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1f3587eb9b17f3789ad50824084fa6f81921bbf9a795826570bda82cb3ed91f2", size = 517841, upload-time = "2025-11-30T20:23:11.186Z" }, { url = "https://files.pythonhosted.org/packages/3d/55/fa3b9cf31d0c963ecf1ba777f7cf4b2a2c976795ac430d24a1f43d25a6ba/rpds_py-0.30.0-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:39c02563fc592411c2c61d26b6c5fe1e51eaa44a75aa2c8735ca88b0d9599daa", size = 408149, upload-time = "2025-11-30T20:23:12.864Z" }, { url = "https://files.pythonhosted.org/packages/60/ca/780cf3b1a32b18c0f05c441958d3758f02544f1d613abf9488cd78876378/rpds_py-0.30.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:51a1234d8febafdfd33a42d97da7a43f5dcb120c1060e352a3fbc0c6d36e2083", size = 383843, upload-time = "2025-11-30T20:23:14.638Z" }, { url = "https://files.pythonhosted.org/packages/82/86/d5f2e04f2aa6247c613da0c1dd87fcd08fa17107e858193566048a1e2f0a/rpds_py-0.30.0-cp313-cp313t-manylinux_2_31_riscv64.whl", hash = "sha256:eb2c4071ab598733724c08221091e8d80e89064cd472819285a9ab0f24bcedb9", size = 396507, upload-time = "2025-11-30T20:23:16.105Z" }, { url = "https://files.pythonhosted.org/packages/4b/9a/453255d2f769fe44e07ea9785c8347edaf867f7026872e76c1ad9f7bed92/rpds_py-0.30.0-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6bdfdb946967d816e6adf9a3d8201bfad269c67efe6cefd7093ef959683c8de0", size = 414949, upload-time = "2025-11-30T20:23:17.539Z" }, { url = "https://files.pythonhosted.org/packages/a3/31/622a86cdc0c45d6df0e9ccb6becdba5074735e7033c20e401a6d9d0e2ca0/rpds_py-0.30.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:c77afbd5f5250bf27bf516c7c4a016813eb2d3e116139aed0096940c5982da94", size = 565790, upload-time = "2025-11-30T20:23:19.029Z" }, { url = "https://files.pythonhosted.org/packages/1c/5d/15bbf0fb4a3f58a3b1c67855ec1efcc4ceaef4e86644665fff03e1b66d8d/rpds_py-0.30.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:61046904275472a76c8c90c9ccee9013d70a6d0f73eecefd38c1ae7c39045a08", size = 590217, upload-time = "2025-11-30T20:23:20.885Z" }, { url = "https://files.pythonhosted.org/packages/6d/61/21b8c41f68e60c8cc3b2e25644f0e3681926020f11d06ab0b78e3c6bbff1/rpds_py-0.30.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:4c5f36a861bc4b7da6516dbdf302c55313afa09b81931e8280361a4f6c9a2d27", size = 555806, upload-time = "2025-11-30T20:23:22.488Z" }, { url = "https://files.pythonhosted.org/packages/f9/39/7e067bb06c31de48de3eb200f9fc7c58982a4d3db44b07e73963e10d3be9/rpds_py-0.30.0-cp313-cp313t-win32.whl", hash = "sha256:3d4a69de7a3e50ffc214ae16d79d8fbb0922972da0356dcf4d0fdca2878559c6", size = 211341, upload-time = "2025-11-30T20:23:24.449Z" }, { url = "https://files.pythonhosted.org/packages/0a/4d/222ef0b46443cf4cf46764d9c630f3fe4abaa7245be9417e56e9f52b8f65/rpds_py-0.30.0-cp313-cp313t-win_amd64.whl", hash = "sha256:f14fc5df50a716f7ece6a80b6c78bb35ea2ca47c499e422aa4463455dd96d56d", size = 225768, upload-time = "2025-11-30T20:23:25.908Z" }, { url = "https://files.pythonhosted.org/packages/86/81/dad16382ebbd3d0e0328776d8fd7ca94220e4fa0798d1dc5e7da48cb3201/rpds_py-0.30.0-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:68f19c879420aa08f61203801423f6cd5ac5f0ac4ac82a2368a9fcd6a9a075e0", size = 362099, upload-time = "2025-11-30T20:23:27.316Z" }, { url = "https://files.pythonhosted.org/packages/2b/60/19f7884db5d5603edf3c6bce35408f45ad3e97e10007df0e17dd57af18f8/rpds_py-0.30.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:ec7c4490c672c1a0389d319b3a9cfcd098dcdc4783991553c332a15acf7249be", size = 353192, upload-time = "2025-11-30T20:23:29.151Z" }, { url = "https://files.pythonhosted.org/packages/bf/c4/76eb0e1e72d1a9c4703c69607cec123c29028bff28ce41588792417098ac/rpds_py-0.30.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f251c812357a3fed308d684a5079ddfb9d933860fc6de89f2b7ab00da481e65f", size = 384080, upload-time = "2025-11-30T20:23:30.785Z" }, { url = "https://files.pythonhosted.org/packages/72/87/87ea665e92f3298d1b26d78814721dc39ed8d2c74b86e83348d6b48a6f31/rpds_py-0.30.0-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ac98b175585ecf4c0348fd7b29c3864bda53b805c773cbf7bfdaffc8070c976f", size = 394841, upload-time = "2025-11-30T20:23:32.209Z" }, { url = "https://files.pythonhosted.org/packages/77/ad/7783a89ca0587c15dcbf139b4a8364a872a25f861bdb88ed99f9b0dec985/rpds_py-0.30.0-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3e62880792319dbeb7eb866547f2e35973289e7d5696c6e295476448f5b63c87", size = 516670, upload-time = "2025-11-30T20:23:33.742Z" }, { url = "https://files.pythonhosted.org/packages/5b/3c/2882bdac942bd2172f3da574eab16f309ae10a3925644e969536553cb4ee/rpds_py-0.30.0-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4e7fc54e0900ab35d041b0601431b0a0eb495f0851a0639b6ef90f7741b39a18", size = 408005, upload-time = "2025-11-30T20:23:35.253Z" }, { url = "https://files.pythonhosted.org/packages/ce/81/9a91c0111ce1758c92516a3e44776920b579d9a7c09b2b06b642d4de3f0f/rpds_py-0.30.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:47e77dc9822d3ad616c3d5759ea5631a75e5809d5a28707744ef79d7a1bcfcad", size = 382112, upload-time = "2025-11-30T20:23:36.842Z" }, { url = "https://files.pythonhosted.org/packages/cf/8e/1da49d4a107027e5fbc64daeab96a0706361a2918da10cb41769244b805d/rpds_py-0.30.0-cp314-cp314-manylinux_2_31_riscv64.whl", hash = "sha256:b4dc1a6ff022ff85ecafef7979a2c6eb423430e05f1165d6688234e62ba99a07", size = 399049, upload-time = "2025-11-30T20:23:38.343Z" }, { url = "https://files.pythonhosted.org/packages/df/5a/7ee239b1aa48a127570ec03becbb29c9d5a9eb092febbd1699d567cae859/rpds_py-0.30.0-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4559c972db3a360808309e06a74628b95eaccbf961c335c8fe0d590cf587456f", size = 415661, upload-time = "2025-11-30T20:23:40.263Z" }, { url = "https://files.pythonhosted.org/packages/70/ea/caa143cf6b772f823bc7929a45da1fa83569ee49b11d18d0ada7f5ee6fd6/rpds_py-0.30.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:0ed177ed9bded28f8deb6ab40c183cd1192aa0de40c12f38be4d59cd33cb5c65", size = 565606, upload-time = "2025-11-30T20:23:42.186Z" }, { url = "https://files.pythonhosted.org/packages/64/91/ac20ba2d69303f961ad8cf55bf7dbdb4763f627291ba3d0d7d67333cced9/rpds_py-0.30.0-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:ad1fa8db769b76ea911cb4e10f049d80bf518c104f15b3edb2371cc65375c46f", size = 591126, upload-time = "2025-11-30T20:23:44.086Z" }, { url = "https://files.pythonhosted.org/packages/21/20/7ff5f3c8b00c8a95f75985128c26ba44503fb35b8e0259d812766ea966c7/rpds_py-0.30.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:46e83c697b1f1c72b50e5ee5adb4353eef7406fb3f2043d64c33f20ad1c2fc53", size = 553371, upload-time = "2025-11-30T20:23:46.004Z" }, { url = "https://files.pythonhosted.org/packages/72/c7/81dadd7b27c8ee391c132a6b192111ca58d866577ce2d9b0ca157552cce0/rpds_py-0.30.0-cp314-cp314-win32.whl", hash = "sha256:ee454b2a007d57363c2dfd5b6ca4a5d7e2c518938f8ed3b706e37e5d470801ed", size = 215298, upload-time = "2025-11-30T20:23:47.696Z" }, { url = "https://files.pythonhosted.org/packages/3e/d2/1aaac33287e8cfb07aab2e6b8ac1deca62f6f65411344f1433c55e6f3eb8/rpds_py-0.30.0-cp314-cp314-win_amd64.whl", hash = "sha256:95f0802447ac2d10bcc69f6dc28fe95fdf17940367b21d34e34c737870758950", size = 228604, upload-time = "2025-11-30T20:23:49.501Z" }, { url = "https://files.pythonhosted.org/packages/e8/95/ab005315818cc519ad074cb7784dae60d939163108bd2b394e60dc7b5461/rpds_py-0.30.0-cp314-cp314-win_arm64.whl", hash = "sha256:613aa4771c99f03346e54c3f038e4cc574ac09a3ddfb0e8878487335e96dead6", size = 222391, upload-time = "2025-11-30T20:23:50.96Z" }, { url = "https://files.pythonhosted.org/packages/9e/68/154fe0194d83b973cdedcdcc88947a2752411165930182ae41d983dcefa6/rpds_py-0.30.0-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:7e6ecfcb62edfd632e56983964e6884851786443739dbfe3582947e87274f7cb", size = 364868, upload-time = "2025-11-30T20:23:52.494Z" }, { url = "https://files.pythonhosted.org/packages/83/69/8bbc8b07ec854d92a8b75668c24d2abcb1719ebf890f5604c61c9369a16f/rpds_py-0.30.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:a1d0bc22a7cdc173fedebb73ef81e07faef93692b8c1ad3733b67e31e1b6e1b8", size = 353747, upload-time = "2025-11-30T20:23:54.036Z" }, { url = "https://files.pythonhosted.org/packages/ab/00/ba2e50183dbd9abcce9497fa5149c62b4ff3e22d338a30d690f9af970561/rpds_py-0.30.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0d08f00679177226c4cb8c5265012eea897c8ca3b93f429e546600c971bcbae7", size = 383795, upload-time = "2025-11-30T20:23:55.556Z" }, { url = "https://files.pythonhosted.org/packages/05/6f/86f0272b84926bcb0e4c972262f54223e8ecc556b3224d281e6598fc9268/rpds_py-0.30.0-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5965af57d5848192c13534f90f9dd16464f3c37aaf166cc1da1cae1fd5a34898", size = 393330, upload-time = "2025-11-30T20:23:57.033Z" }, { url = "https://files.pythonhosted.org/packages/cb/e9/0e02bb2e6dc63d212641da45df2b0bf29699d01715913e0d0f017ee29438/rpds_py-0.30.0-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9a4e86e34e9ab6b667c27f3211ca48f73dba7cd3d90f8d5b11be56e5dbc3fb4e", size = 518194, upload-time = "2025-11-30T20:23:58.637Z" }, { url = "https://files.pythonhosted.org/packages/ee/ca/be7bca14cf21513bdf9c0606aba17d1f389ea2b6987035eb4f62bd923f25/rpds_py-0.30.0-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e5d3e6b26f2c785d65cc25ef1e5267ccbe1b069c5c21b8cc724efee290554419", size = 408340, upload-time = "2025-11-30T20:24:00.2Z" }, { url = "https://files.pythonhosted.org/packages/c2/c7/736e00ebf39ed81d75544c0da6ef7b0998f8201b369acf842f9a90dc8fce/rpds_py-0.30.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:626a7433c34566535b6e56a1b39a7b17ba961e97ce3b80ec62e6f1312c025551", size = 383765, upload-time = "2025-11-30T20:24:01.759Z" }, { url = "https://files.pythonhosted.org/packages/4a/3f/da50dfde9956aaf365c4adc9533b100008ed31aea635f2b8d7b627e25b49/rpds_py-0.30.0-cp314-cp314t-manylinux_2_31_riscv64.whl", hash = "sha256:acd7eb3f4471577b9b5a41baf02a978e8bdeb08b4b355273994f8b87032000a8", size = 396834, upload-time = "2025-11-30T20:24:03.687Z" }, { url = "https://files.pythonhosted.org/packages/4e/00/34bcc2565b6020eab2623349efbdec810676ad571995911f1abdae62a3a0/rpds_py-0.30.0-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:fe5fa731a1fa8a0a56b0977413f8cacac1768dad38d16b3a296712709476fbd5", size = 415470, upload-time = "2025-11-30T20:24:05.232Z" }, { url = "https://files.pythonhosted.org/packages/8c/28/882e72b5b3e6f718d5453bd4d0d9cf8df36fddeb4ddbbab17869d5868616/rpds_py-0.30.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:74a3243a411126362712ee1524dfc90c650a503502f135d54d1b352bd01f2404", size = 565630, upload-time = "2025-11-30T20:24:06.878Z" }, { url = "https://files.pythonhosted.org/packages/3b/97/04a65539c17692de5b85c6e293520fd01317fd878ea1995f0367d4532fb1/rpds_py-0.30.0-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:3e8eeb0544f2eb0d2581774be4c3410356eba189529a6b3e36bbbf9696175856", size = 591148, upload-time = "2025-11-30T20:24:08.445Z" }, { url = "https://files.pythonhosted.org/packages/85/70/92482ccffb96f5441aab93e26c4d66489eb599efdcf96fad90c14bbfb976/rpds_py-0.30.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:dbd936cde57abfee19ab3213cf9c26be06d60750e60a8e4dd85d1ab12c8b1f40", size = 556030, upload-time = "2025-11-30T20:24:10.956Z" }, { url = "https://files.pythonhosted.org/packages/20/53/7c7e784abfa500a2b6b583b147ee4bb5a2b3747a9166bab52fec4b5b5e7d/rpds_py-0.30.0-cp314-cp314t-win32.whl", hash = "sha256:dc824125c72246d924f7f796b4f63c1e9dc810c7d9e2355864b3c3a73d59ade0", size = 211570, upload-time = "2025-11-30T20:24:12.735Z" }, { url = "https://files.pythonhosted.org/packages/d0/02/fa464cdfbe6b26e0600b62c528b72d8608f5cc49f96b8d6e38c95d60c676/rpds_py-0.30.0-cp314-cp314t-win_amd64.whl", hash = "sha256:27f4b0e92de5bfbc6f86e43959e6edd1425c33b5e69aab0984a72047f2bcf1e3", size = 226532, upload-time = "2025-11-30T20:24:14.634Z" }, { url = "https://files.pythonhosted.org/packages/69/71/3f34339ee70521864411f8b6992e7ab13ac30d8e4e3309e07c7361767d91/rpds_py-0.30.0-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:c2262bdba0ad4fc6fb5545660673925c2d2a5d9e2e0fb603aad545427be0fc58", size = 372292, upload-time = "2025-11-30T20:24:16.537Z" }, { url = "https://files.pythonhosted.org/packages/57/09/f183df9b8f2d66720d2ef71075c59f7e1b336bec7ee4c48f0a2b06857653/rpds_py-0.30.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:ee6af14263f25eedc3bb918a3c04245106a42dfd4f5c2285ea6f997b1fc3f89a", size = 362128, upload-time = "2025-11-30T20:24:18.086Z" }, { url = "https://files.pythonhosted.org/packages/7a/68/5c2594e937253457342e078f0cc1ded3dd7b2ad59afdbf2d354869110a02/rpds_py-0.30.0-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3adbb8179ce342d235c31ab8ec511e66c73faa27a47e076ccc92421add53e2bb", size = 391542, upload-time = "2025-11-30T20:24:20.092Z" }, { url = "https://files.pythonhosted.org/packages/49/5c/31ef1afd70b4b4fbdb2800249f34c57c64beb687495b10aec0365f53dfc4/rpds_py-0.30.0-pp311-pypy311_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:250fa00e9543ac9b97ac258bd37367ff5256666122c2d0f2bc97577c60a1818c", size = 404004, upload-time = "2025-11-30T20:24:22.231Z" }, { url = "https://files.pythonhosted.org/packages/e3/63/0cfbea38d05756f3440ce6534d51a491d26176ac045e2707adc99bb6e60a/rpds_py-0.30.0-pp311-pypy311_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9854cf4f488b3d57b9aaeb105f06d78e5529d3145b1e4a41750167e8c213c6d3", size = 527063, upload-time = "2025-11-30T20:24:24.302Z" }, { url = "https://files.pythonhosted.org/packages/42/e6/01e1f72a2456678b0f618fc9a1a13f882061690893c192fcad9f2926553a/rpds_py-0.30.0-pp311-pypy311_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:993914b8e560023bc0a8bf742c5f303551992dcb85e247b1e5c7f4a7d145bda5", size = 413099, upload-time = "2025-11-30T20:24:25.916Z" }, { url = "https://files.pythonhosted.org/packages/b8/25/8df56677f209003dcbb180765520c544525e3ef21ea72279c98b9aa7c7fb/rpds_py-0.30.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:58edca431fb9b29950807e301826586e5bbf24163677732429770a697ffe6738", size = 392177, upload-time = "2025-11-30T20:24:27.834Z" }, { url = "https://files.pythonhosted.org/packages/4a/b4/0a771378c5f16f8115f796d1f437950158679bcd2a7c68cf251cfb00ed5b/rpds_py-0.30.0-pp311-pypy311_pp73-manylinux_2_31_riscv64.whl", hash = "sha256:dea5b552272a944763b34394d04577cf0f9bd013207bc32323b5a89a53cf9c2f", size = 406015, upload-time = "2025-11-30T20:24:29.457Z" }, { url = "https://files.pythonhosted.org/packages/36/d8/456dbba0af75049dc6f63ff295a2f92766b9d521fa00de67a2bd6427d57a/rpds_py-0.30.0-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ba3af48635eb83d03f6c9735dfb21785303e73d22ad03d489e88adae6eab8877", size = 423736, upload-time = "2025-11-30T20:24:31.22Z" }, { url = "https://files.pythonhosted.org/packages/13/64/b4d76f227d5c45a7e0b796c674fd81b0a6c4fbd48dc29271857d8219571c/rpds_py-0.30.0-pp311-pypy311_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:dff13836529b921e22f15cb099751209a60009731a68519630a24d61f0b1b30a", size = 573981, upload-time = "2025-11-30T20:24:32.934Z" }, { url = "https://files.pythonhosted.org/packages/20/91/092bacadeda3edf92bf743cc96a7be133e13a39cdbfd7b5082e7ab638406/rpds_py-0.30.0-pp311-pypy311_pp73-musllinux_1_2_i686.whl", hash = "sha256:1b151685b23929ab7beec71080a8889d4d6d9fa9a983d213f07121205d48e2c4", size = 599782, upload-time = "2025-11-30T20:24:35.169Z" }, { url = "https://files.pythonhosted.org/packages/d1/b7/b95708304cd49b7b6f82fdd039f1748b66ec2b21d6a45180910802f1abf1/rpds_py-0.30.0-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:ac37f9f516c51e5753f27dfdef11a88330f04de2d564be3991384b2f3535d02e", size = 562191, upload-time = "2025-11-30T20:24:36.853Z" }, ] [[package]] name = "sqlparse" version = "0.5.5" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/90/76/437d71068094df0726366574cf3432a4ed754217b436eb7429415cf2d480/sqlparse-0.5.5.tar.gz", hash = "sha256:e20d4a9b0b8585fdf63b10d30066c7c94c5d7a7ec47c889a2d83a3caa93ff28e", size = 120815, upload-time = "2025-12-19T07:17:45.073Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/49/4b/359f28a903c13438ef59ebeee215fb25da53066db67b305c125f1c6d2a25/sqlparse-0.5.5-py3-none-any.whl", hash = "sha256:12a08b3bf3eec877c519589833aed092e2444e68240a3577e8e26148acc7b1ba", size = 46138, upload-time = "2025-12-19T07:17:46.573Z" }, ] [[package]] name = "tomli" version = "2.3.0" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/52/ed/3f73f72945444548f33eba9a87fc7a6e969915e7b1acc8260b30e1f76a2f/tomli-2.3.0.tar.gz", hash = "sha256:64be704a875d2a59753d80ee8a533c3fe183e3f06807ff7dc2232938ccb01549", size = 17392, upload-time = "2025-10-08T22:01:47.119Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/b3/2e/299f62b401438d5fe1624119c723f5d877acc86a4c2492da405626665f12/tomli-2.3.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:88bd15eb972f3664f5ed4b57c1634a97153b4bac4479dcb6a495f41921eb7f45", size = 153236, upload-time = "2025-10-08T22:01:00.137Z" }, { url = "https://files.pythonhosted.org/packages/86/7f/d8fffe6a7aefdb61bced88fcb5e280cfd71e08939da5894161bd71bea022/tomli-2.3.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:883b1c0d6398a6a9d29b508c331fa56adbcdff647f6ace4dfca0f50e90dfd0ba", size = 148084, upload-time = "2025-10-08T22:01:01.63Z" }, { url = "https://files.pythonhosted.org/packages/47/5c/24935fb6a2ee63e86d80e4d3b58b222dafaf438c416752c8b58537c8b89a/tomli-2.3.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d1381caf13ab9f300e30dd8feadb3de072aeb86f1d34a8569453ff32a7dea4bf", size = 234832, upload-time = "2025-10-08T22:01:02.543Z" }, { url = "https://files.pythonhosted.org/packages/89/da/75dfd804fc11e6612846758a23f13271b76d577e299592b4371a4ca4cd09/tomli-2.3.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a0e285d2649b78c0d9027570d4da3425bdb49830a6156121360b3f8511ea3441", size = 242052, upload-time = "2025-10-08T22:01:03.836Z" }, { url = "https://files.pythonhosted.org/packages/70/8c/f48ac899f7b3ca7eb13af73bacbc93aec37f9c954df3c08ad96991c8c373/tomli-2.3.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:0a154a9ae14bfcf5d8917a59b51ffd5a3ac1fd149b71b47a3a104ca4edcfa845", size = 239555, upload-time = "2025-10-08T22:01:04.834Z" }, { url = "https://files.pythonhosted.org/packages/ba/28/72f8afd73f1d0e7829bfc093f4cb98ce0a40ffc0cc997009ee1ed94ba705/tomli-2.3.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:74bf8464ff93e413514fefd2be591c3b0b23231a77f901db1eb30d6f712fc42c", size = 245128, upload-time = "2025-10-08T22:01:05.84Z" }, { url = "https://files.pythonhosted.org/packages/b6/eb/a7679c8ac85208706d27436e8d421dfa39d4c914dcf5fa8083a9305f58d9/tomli-2.3.0-cp311-cp311-win32.whl", hash = "sha256:00b5f5d95bbfc7d12f91ad8c593a1659b6387b43f054104cda404be6bda62456", size = 96445, upload-time = "2025-10-08T22:01:06.896Z" }, { url = "https://files.pythonhosted.org/packages/0a/fe/3d3420c4cb1ad9cb462fb52967080575f15898da97e21cb6f1361d505383/tomli-2.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:4dc4ce8483a5d429ab602f111a93a6ab1ed425eae3122032db7e9acf449451be", size = 107165, upload-time = "2025-10-08T22:01:08.107Z" }, { url = "https://files.pythonhosted.org/packages/ff/b7/40f36368fcabc518bb11c8f06379a0fd631985046c038aca08c6d6a43c6e/tomli-2.3.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:d7d86942e56ded512a594786a5ba0a5e521d02529b3826e7761a05138341a2ac", size = 154891, upload-time = "2025-10-08T22:01:09.082Z" }, { url = "https://files.pythonhosted.org/packages/f9/3f/d9dd692199e3b3aab2e4e4dd948abd0f790d9ded8cd10cbaae276a898434/tomli-2.3.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:73ee0b47d4dad1c5e996e3cd33b8a76a50167ae5f96a2607cbe8cc773506ab22", size = 148796, upload-time = "2025-10-08T22:01:10.266Z" }, { url = "https://files.pythonhosted.org/packages/60/83/59bff4996c2cf9f9387a0f5a3394629c7efa5ef16142076a23a90f1955fa/tomli-2.3.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:792262b94d5d0a466afb5bc63c7daa9d75520110971ee269152083270998316f", size = 242121, upload-time = "2025-10-08T22:01:11.332Z" }, { url = "https://files.pythonhosted.org/packages/45/e5/7c5119ff39de8693d6baab6c0b6dcb556d192c165596e9fc231ea1052041/tomli-2.3.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4f195fe57ecceac95a66a75ac24d9d5fbc98ef0962e09b2eddec5d39375aae52", size = 250070, upload-time = "2025-10-08T22:01:12.498Z" }, { url = "https://files.pythonhosted.org/packages/45/12/ad5126d3a278f27e6701abde51d342aa78d06e27ce2bb596a01f7709a5a2/tomli-2.3.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:e31d432427dcbf4d86958c184b9bfd1e96b5b71f8eb17e6d02531f434fd335b8", size = 245859, upload-time = "2025-10-08T22:01:13.551Z" }, { url = "https://files.pythonhosted.org/packages/fb/a1/4d6865da6a71c603cfe6ad0e6556c73c76548557a8d658f9e3b142df245f/tomli-2.3.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:7b0882799624980785240ab732537fcfc372601015c00f7fc367c55308c186f6", size = 250296, upload-time = "2025-10-08T22:01:14.614Z" }, { url = "https://files.pythonhosted.org/packages/a0/b7/a7a7042715d55c9ba6e8b196d65d2cb662578b4d8cd17d882d45322b0d78/tomli-2.3.0-cp312-cp312-win32.whl", hash = "sha256:ff72b71b5d10d22ecb084d345fc26f42b5143c5533db5e2eaba7d2d335358876", size = 97124, upload-time = "2025-10-08T22:01:15.629Z" }, { url = "https://files.pythonhosted.org/packages/06/1e/f22f100db15a68b520664eb3328fb0ae4e90530887928558112c8d1f4515/tomli-2.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:1cb4ed918939151a03f33d4242ccd0aa5f11b3547d0cf30f7c74a408a5b99878", size = 107698, upload-time = "2025-10-08T22:01:16.51Z" }, { url = "https://files.pythonhosted.org/packages/89/48/06ee6eabe4fdd9ecd48bf488f4ac783844fd777f547b8d1b61c11939974e/tomli-2.3.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:5192f562738228945d7b13d4930baffda67b69425a7f0da96d360b0a3888136b", size = 154819, upload-time = "2025-10-08T22:01:17.964Z" }, { url = "https://files.pythonhosted.org/packages/f1/01/88793757d54d8937015c75dcdfb673c65471945f6be98e6a0410fba167ed/tomli-2.3.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:be71c93a63d738597996be9528f4abe628d1adf5e6eb11607bc8fe1a510b5dae", size = 148766, upload-time = "2025-10-08T22:01:18.959Z" }, { url = "https://files.pythonhosted.org/packages/42/17/5e2c956f0144b812e7e107f94f1cc54af734eb17b5191c0bbfb72de5e93e/tomli-2.3.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c4665508bcbac83a31ff8ab08f424b665200c0e1e645d2bd9ab3d3e557b6185b", size = 240771, upload-time = "2025-10-08T22:01:20.106Z" }, { url = "https://files.pythonhosted.org/packages/d5/f4/0fbd014909748706c01d16824eadb0307115f9562a15cbb012cd9b3512c5/tomli-2.3.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4021923f97266babc6ccab9f5068642a0095faa0a51a246a6a02fccbb3514eaf", size = 248586, upload-time = "2025-10-08T22:01:21.164Z" }, { url = "https://files.pythonhosted.org/packages/30/77/fed85e114bde5e81ecf9bc5da0cc69f2914b38f4708c80ae67d0c10180c5/tomli-2.3.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a4ea38c40145a357d513bffad0ed869f13c1773716cf71ccaa83b0fa0cc4e42f", size = 244792, upload-time = "2025-10-08T22:01:22.417Z" }, { url = "https://files.pythonhosted.org/packages/55/92/afed3d497f7c186dc71e6ee6d4fcb0acfa5f7d0a1a2878f8beae379ae0cc/tomli-2.3.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:ad805ea85eda330dbad64c7ea7a4556259665bdf9d2672f5dccc740eb9d3ca05", size = 248909, upload-time = "2025-10-08T22:01:23.859Z" }, { url = "https://files.pythonhosted.org/packages/f8/84/ef50c51b5a9472e7265ce1ffc7f24cd4023d289e109f669bdb1553f6a7c2/tomli-2.3.0-cp313-cp313-win32.whl", hash = "sha256:97d5eec30149fd3294270e889b4234023f2c69747e555a27bd708828353ab606", size = 96946, upload-time = "2025-10-08T22:01:24.893Z" }, { url = "https://files.pythonhosted.org/packages/b2/b7/718cd1da0884f281f95ccfa3a6cc572d30053cba64603f79d431d3c9b61b/tomli-2.3.0-cp313-cp313-win_amd64.whl", hash = "sha256:0c95ca56fbe89e065c6ead5b593ee64b84a26fca063b5d71a1122bf26e533999", size = 107705, upload-time = "2025-10-08T22:01:26.153Z" }, { url = "https://files.pythonhosted.org/packages/19/94/aeafa14a52e16163008060506fcb6aa1949d13548d13752171a755c65611/tomli-2.3.0-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:cebc6fe843e0733ee827a282aca4999b596241195f43b4cc371d64fc6639da9e", size = 154244, upload-time = "2025-10-08T22:01:27.06Z" }, { url = "https://files.pythonhosted.org/packages/db/e4/1e58409aa78eefa47ccd19779fc6f36787edbe7d4cd330eeeedb33a4515b/tomli-2.3.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:4c2ef0244c75aba9355561272009d934953817c49f47d768070c3c94355c2aa3", size = 148637, upload-time = "2025-10-08T22:01:28.059Z" }, { url = "https://files.pythonhosted.org/packages/26/b6/d1eccb62f665e44359226811064596dd6a366ea1f985839c566cd61525ae/tomli-2.3.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c22a8bf253bacc0cf11f35ad9808b6cb75ada2631c2d97c971122583b129afbc", size = 241925, upload-time = "2025-10-08T22:01:29.066Z" }, { url = "https://files.pythonhosted.org/packages/70/91/7cdab9a03e6d3d2bb11beae108da5bdc1c34bdeb06e21163482544ddcc90/tomli-2.3.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0eea8cc5c5e9f89c9b90c4896a8deefc74f518db5927d0e0e8d4a80953d774d0", size = 249045, upload-time = "2025-10-08T22:01:31.98Z" }, { url = "https://files.pythonhosted.org/packages/15/1b/8c26874ed1f6e4f1fcfeb868db8a794cbe9f227299402db58cfcc858766c/tomli-2.3.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:b74a0e59ec5d15127acdabd75ea17726ac4c5178ae51b85bfe39c4f8a278e879", size = 245835, upload-time = "2025-10-08T22:01:32.989Z" }, { url = "https://files.pythonhosted.org/packages/fd/42/8e3c6a9a4b1a1360c1a2a39f0b972cef2cc9ebd56025168c4137192a9321/tomli-2.3.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:b5870b50c9db823c595983571d1296a6ff3e1b88f734a4c8f6fc6188397de005", size = 253109, upload-time = "2025-10-08T22:01:34.052Z" }, { url = "https://files.pythonhosted.org/packages/22/0c/b4da635000a71b5f80130937eeac12e686eefb376b8dee113b4a582bba42/tomli-2.3.0-cp314-cp314-win32.whl", hash = "sha256:feb0dacc61170ed7ab602d3d972a58f14ee3ee60494292d384649a3dc38ef463", size = 97930, upload-time = "2025-10-08T22:01:35.082Z" }, { url = "https://files.pythonhosted.org/packages/b9/74/cb1abc870a418ae99cd5c9547d6bce30701a954e0e721821df483ef7223c/tomli-2.3.0-cp314-cp314-win_amd64.whl", hash = "sha256:b273fcbd7fc64dc3600c098e39136522650c49bca95df2d11cf3b626422392c8", size = 107964, upload-time = "2025-10-08T22:01:36.057Z" }, { url = "https://files.pythonhosted.org/packages/54/78/5c46fff6432a712af9f792944f4fcd7067d8823157949f4e40c56b8b3c83/tomli-2.3.0-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:940d56ee0410fa17ee1f12b817b37a4d4e4dc4d27340863cc67236c74f582e77", size = 163065, upload-time = "2025-10-08T22:01:37.27Z" }, { url = "https://files.pythonhosted.org/packages/39/67/f85d9bd23182f45eca8939cd2bc7050e1f90c41f4a2ecbbd5963a1d1c486/tomli-2.3.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:f85209946d1fe94416debbb88d00eb92ce9cd5266775424ff81bc959e001acaf", size = 159088, upload-time = "2025-10-08T22:01:38.235Z" }, { url = "https://files.pythonhosted.org/packages/26/5a/4b546a0405b9cc0659b399f12b6adb750757baf04250b148d3c5059fc4eb/tomli-2.3.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a56212bdcce682e56b0aaf79e869ba5d15a6163f88d5451cbde388d48b13f530", size = 268193, upload-time = "2025-10-08T22:01:39.712Z" }, { url = "https://files.pythonhosted.org/packages/42/4f/2c12a72ae22cf7b59a7fe75b3465b7aba40ea9145d026ba41cb382075b0e/tomli-2.3.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c5f3ffd1e098dfc032d4d3af5c0ac64f6d286d98bc148698356847b80fa4de1b", size = 275488, upload-time = "2025-10-08T22:01:40.773Z" }, { url = "https://files.pythonhosted.org/packages/92/04/a038d65dbe160c3aa5a624e93ad98111090f6804027d474ba9c37c8ae186/tomli-2.3.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:5e01decd096b1530d97d5d85cb4dff4af2d8347bd35686654a004f8dea20fc67", size = 272669, upload-time = "2025-10-08T22:01:41.824Z" }, { url = "https://files.pythonhosted.org/packages/be/2f/8b7c60a9d1612a7cbc39ffcca4f21a73bf368a80fc25bccf8253e2563267/tomli-2.3.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:8a35dd0e643bb2610f156cca8db95d213a90015c11fee76c946aa62b7ae7e02f", size = 279709, upload-time = "2025-10-08T22:01:43.177Z" }, { url = "https://files.pythonhosted.org/packages/7e/46/cc36c679f09f27ded940281c38607716c86cf8ba4a518d524e349c8b4874/tomli-2.3.0-cp314-cp314t-win32.whl", hash = "sha256:a1f7f282fe248311650081faafa5f4732bdbfef5d45fe3f2e702fbc6f2d496e0", size = 107563, upload-time = "2025-10-08T22:01:44.233Z" }, { url = "https://files.pythonhosted.org/packages/84/ff/426ca8683cf7b753614480484f6437f568fd2fda2edbdf57a2d3d8b27a0b/tomli-2.3.0-cp314-cp314t-win_amd64.whl", hash = "sha256:70a251f8d4ba2d9ac2542eecf008b3c8a9fc5c3f9f02c56a9d7952612be2fdba", size = 119756, upload-time = "2025-10-08T22:01:45.234Z" }, { url = "https://files.pythonhosted.org/packages/77/b8/0135fadc89e73be292b473cb820b4f5a08197779206b33191e801feeae40/tomli-2.3.0-py3-none-any.whl", hash = "sha256:e95b1af3c5b07d9e643909b5abbec77cd9f1217e6d0bca72b0234736b9fb1f1b", size = 14408, upload-time = "2025-10-08T22:01:46.04Z" }, ] [[package]] name = "tomlkit" version = "0.13.3" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/cc/18/0bbf3884e9eaa38819ebe46a7bd25dcd56b67434402b66a58c4b8e552575/tomlkit-0.13.3.tar.gz", hash = "sha256:430cf247ee57df2b94ee3fbe588e71d362a941ebb545dec29b53961d61add2a1", size = 185207, upload-time = "2025-06-05T07:13:44.947Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/bd/75/8539d011f6be8e29f339c42e633aae3cb73bffa95dd0f9adec09b9c58e85/tomlkit-0.13.3-py3-none-any.whl", hash = "sha256:c89c649d79ee40629a9fda55f8ace8c6a1b42deb912b2a8fd8d942ddadb606b0", size = 38901, upload-time = "2025-06-05T07:13:43.546Z" }, ] [[package]] name = "types-cffi" version = "1.17.0.20250915" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "types-setuptools" }, ] sdist = { url = "https://files.pythonhosted.org/packages/2a/98/ea454cea03e5f351323af6a482c65924f3c26c515efd9090dede58f2b4b6/types_cffi-1.17.0.20250915.tar.gz", hash = "sha256:4362e20368f78dabd5c56bca8004752cc890e07a71605d9e0d9e069dbaac8c06", size = 17229, upload-time = "2025-09-15T03:01:25.31Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/aa/ec/092f2b74b49ec4855cdb53050deb9699f7105b8fda6fe034c0781b8687f3/types_cffi-1.17.0.20250915-py3-none-any.whl", hash = "sha256:cef4af1116c83359c11bb4269283c50f0688e9fc1d7f0eeb390f3661546da52c", size = 20112, upload-time = "2025-09-15T03:01:24.187Z" }, ] [[package]] name = "types-pyopenssl" version = "24.1.0.20240722" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "cryptography" }, { name = "types-cffi" }, ] sdist = { url = "https://files.pythonhosted.org/packages/93/29/47a346550fd2020dac9a7a6d033ea03fccb92fa47c726056618cc889745e/types-pyOpenSSL-24.1.0.20240722.tar.gz", hash = "sha256:47913b4678a01d879f503a12044468221ed8576263c1540dcb0484ca21b08c39", size = 8458, upload-time = "2024-07-22T02:32:22.558Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/98/05/c868a850b6fbb79c26f5f299b768ee0adc1f9816d3461dcf4287916f655b/types_pyOpenSSL-24.1.0.20240722-py3-none-any.whl", hash = "sha256:6a7a5d2ec042537934cfb4c9d4deb0e16c4c6250b09358df1f083682fe6fda54", size = 7499, upload-time = "2024-07-22T02:32:21.232Z" }, ] [[package]] name = "types-pyyaml" version = "6.0.12.20250915" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/7e/69/3c51b36d04da19b92f9e815be12753125bd8bc247ba0470a982e6979e71c/types_pyyaml-6.0.12.20250915.tar.gz", hash = "sha256:0f8b54a528c303f0e6f7165687dd33fafa81c807fcac23f632b63aa624ced1d3", size = 17522, upload-time = "2025-09-15T03:01:00.728Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/bd/e0/1eed384f02555dde685fff1a1ac805c1c7dcb6dd019c916fe659b1c1f9ec/types_pyyaml-6.0.12.20250915-py3-none-any.whl", hash = "sha256:e7d4d9e064e89a3b3cae120b4990cd370874d2bf12fa5f46c97018dd5d3c9ab6", size = 20338, upload-time = "2025-09-15T03:00:59.218Z" }, ] [[package]] name = "types-redis" version = "4.6.0.20241004" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "cryptography" }, { name = "types-pyopenssl" }, ] sdist = { url = "https://files.pythonhosted.org/packages/3a/95/c054d3ac940e8bac4ca216470c80c26688a0e79e09f520a942bb27da3386/types-redis-4.6.0.20241004.tar.gz", hash = "sha256:5f17d2b3f9091ab75384153bfa276619ffa1cf6a38da60e10d5e6749cc5b902e", size = 49679, upload-time = "2024-10-04T02:43:59.224Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/55/82/7d25dce10aad92d2226b269bce2f85cfd843b4477cd50245d7d40ecf8f89/types_redis-4.6.0.20241004-py3-none-any.whl", hash = "sha256:ef5da68cb827e5f606c8f9c0b49eeee4c2669d6d97122f301d3a55dc6a63f6ed", size = 58737, upload-time = "2024-10-04T02:43:57.968Z" }, ] [[package]] name = "types-setuptools" version = "80.9.0.20251223" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/00/07/d1b605230730990de20477150191d6dccf6aecc037da94c9960a5d563bc8/types_setuptools-80.9.0.20251223.tar.gz", hash = "sha256:d3411059ae2f5f03985217d86ac6084efea2c9e9cacd5f0869ef950f308169b2", size = 42420, upload-time = "2025-12-23T03:18:26.752Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/78/5c/b8877da94012dbc6643e4eeca22bca9b99b295be05d161f8a403ae9387c0/types_setuptools-80.9.0.20251223-py3-none-any.whl", hash = "sha256:1b36db79d724c2287d83dc052cf887b47c0da6a2fff044378be0b019545f56e6", size = 64318, upload-time = "2025-12-23T03:18:25.868Z" }, ] [[package]] name = "typing-extensions" version = "4.15.0" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/72/94/1a15dd82efb362ac84269196e94cf00f187f7ed21c242792a923cdb1c61f/typing_extensions-4.15.0.tar.gz", hash = "sha256:0cea48d173cc12fa28ecabc3b837ea3cf6f38c6d1136f85cbaaf598984861466", size = 109391, upload-time = "2025-08-25T13:49:26.313Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/18/67/36e9267722cc04a6b9f15c7f3441c2363321a3ea07da7ae0c0707beb2a9c/typing_extensions-4.15.0-py3-none-any.whl", hash = "sha256:f0fa19c6845758ab08074a0cfa8b7aecb71c999ca73d62883bc25cc018c4e548", size = 44614, upload-time = "2025-08-25T13:49:24.86Z" }, ] [[package]] name = "tzdata" version = "2025.3" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/5e/a7/c202b344c5ca7daf398f3b8a477eeb205cf3b6f32e7ec3a6bac0629ca975/tzdata-2025.3.tar.gz", hash = "sha256:de39c2ca5dc7b0344f2eba86f49d614019d29f060fc4ebc8a417896a620b56a7", size = 196772, upload-time = "2025-12-13T17:45:35.667Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/c7/b0/003792df09decd6849a5e39c28b513c06e84436a54440380862b5aeff25d/tzdata-2025.3-py2.py3-none-any.whl", hash = "sha256:06a47e5700f3081aab02b2e513160914ff0694bce9947d6b76ebd6bf57cfc5d1", size = 348521, upload-time = "2025-12-13T17:45:33.889Z" }, ]