1 Commits

Author SHA1 Message Date
Dave Halter
fd057010f6 Model.objects should be a ClassVar
Model.objects is only available on classes and while we cannot force this, without ClassVar it's kind of only available on instances.

I have noticed this when I was writing a Jedi plugin that makes django-stubs work properly.
2020-06-11 23:21:10 +02:00
358 changed files with 1590 additions and 7167 deletions

View File

@@ -1,20 +0,0 @@
name: misspell
on:
workflow_dispatch:
schedule:
- cron: '0 0 * * *'
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: sobolevn/misspell-fixer-action@0.1.0
- uses: peter-evans/create-pull-request@v3
with:
token: ${{ secrets.GITHUB_TOKEN }}
commit-message: 'Fixes by misspell-fixer'
title: 'Typos fix by misspell-fixer'

View File

@@ -1,85 +0,0 @@
name: test
on: [push, pull_request, workflow_dispatch]
jobs:
lint:
runs-on: ubuntu-latest
strategy:
matrix:
python-version: ['3.9']
steps:
- uses: actions/checkout@v2
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v2
with:
python-version: ${{ matrix.python-version }}
- uses: actions/cache@v2
with:
path: ~/.cache/pip
key: ${{ runner.os }}-pip-${{ matrix.python-version }}-lint-${{ hashFiles('./dev-requirements.txt') }}
restore-keys: |
${{ runner.os }}-pip-${{ matrix.python-version }}-lint-
- name: Install dependencies
run: |
pip install -U pip setuptools wheel
pip install -r ./dev-requirements.txt
- name: Run pre-commit
run: pre-commit install && pre-commit run --all-files
test:
runs-on: ubuntu-latest
strategy:
matrix:
python-version: ['3.7']
steps:
- uses: actions/checkout@v2
- name: Setup system dependencies
run: sudo apt-get install binutils libproj-dev gdal-bin
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v2
with:
python-version: ${{ matrix.python-version }}
- uses: actions/cache@v2
with:
path: ~/.cache/pip
key: ${{ runner.os }}-pip-${{ matrix.python-version }}-test-${{ hashFiles('./dev-requirements.txt') }}
restore-keys: |
${{ runner.os }}-pip-${{ matrix.python-version }}-test-
- name: Install dependencies
run: |
pip install -U pip setuptools wheel
pip install -r ./dev-requirements.txt
- name: Run tests
run: pytest
typecheck:
runs-on: ubuntu-latest
strategy:
matrix:
python-version: ['3.6', '3.7', '3.8', '3.9']
django-version: ['2.2', '3.0']
steps:
- uses: actions/checkout@v2
- name: Setup system dependencies
run: sudo apt-get install binutils libproj-dev gdal-bin
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v2
with:
python-version: ${{ matrix.python-version }}
- uses: actions/cache@v2
with:
path: ~/.cache/pip
key: ${{ runner.os }}-pip-${{ matrix.python-version }}-${{ matrix.django-version }}-typecheck-${{ hashFiles('./dev-requirements.txt') }}
restore-keys: |
${{ runner.os }}-pip-${{ matrix.python-version }}-${{ matrix.django-version }}-typecheck-
- name: Install dependencies
run: |
pip install -U pip setuptools wheel
pip install -r ./dev-requirements.txt
- name: Run tests
run: python ./scripts/typecheck_tests.py --django_version="${{ matrix.django-version }}"

18
.gitignore vendored
View File

@@ -1,12 +1,14 @@
*.egg-info
.DS_Store
__pycache__/
out/
/test_sqlite.py
/django
.idea/
.mypy_cache/
.pytest_cache/
.venv/
__pycache__/
django-source/
out/
pip-wheel-metadata/
stubgen/
build/
dist/
pip-wheel-metadata/
.pytest_cache/
/.envrc
/.direnv
django-sources/

View File

@@ -1,46 +0,0 @@
# See https://pre-commit.com for more information
# See https://pre-commit.com/hooks.html for more hooks
default_language_version:
python: python3.9
repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v3.3.0
hooks:
- id: check-yaml
- id: trailing-whitespace
- id: check-executables-have-shebangs
- id: debug-statements
- id: check-merge-conflict
- repo: https://github.com/asottile/pyupgrade
rev: v2.7.3
hooks:
- id: pyupgrade
args: ["--py36-plus"]
- repo: https://github.com/pre-commit/mirrors-isort
rev: v5.6.4
hooks:
- id: isort
- repo: https://github.com/psf/black
rev: 20.8b1
hooks:
- id: black
- repo: https://gitlab.com/pycqa/flake8
rev: 3.8.4
hooks:
- id: flake8
- repo: local
hooks:
- id: mypy
name: mypy
entry: mypy
language: system
types: [ python ]
exclude: "scripts/|django_stubs_ext/"
args: [ "--config=mypy.ini", "--cache-dir=/dev/null", "--no-incremental" ]
- id: mypy
name: mypy (django_stubs_ext)
entry: mypy
language: system
types: [ python ]
files: "django_stubs_ext/|django_stubs_ext/tests/"
args: [ "--config=mypy.ini", "--cache-dir=/dev/null", "--no-incremental", "--strict" ]

61
.travis.yml Normal file
View File

@@ -0,0 +1,61 @@
language: python
cache: pip
dist: xenial
sudo: required
jobs:
include:
- name: Run plugin test suite with python 3.8
python: 3.8
script: 'pytest'
- name: Run plugin test suite with python 3.7
python: 3.7
script: 'pytest'
- name: Typecheck Django 3.0 test suite with python 3.8
python: 3.8
script: |
python ./scripts/typecheck_tests.py --django_version=3.0
- name: Typecheck Django 3.0 test suite with python 3.7
python: 3.7
script: |
python ./scripts/typecheck_tests.py --django_version=3.0
- name: Typecheck Django 3.0 test suite with python 3.6
python: 3.6
script: |
python ./scripts/typecheck_tests.py --django_version=3.0
- name: Typecheck Django 2.2 test suite with python 3.7
python: 3.7
script: |
python ./scripts/typecheck_tests.py --django_version=2.2
- name: Mypy for plugin code
python: 3.7
script: 'mypy ./mypy_django_plugin'
- name: Lint with black
python: 3.7
script: 'black --check django-stubs/'
- name: Lint plugin code with flake8
python: 3.7
script: 'flake8'
- name: Lint stubs with flake8-pyi and check for unused imports
python: 3.7
script: 'flake8 --config flake8-pyi.ini'
- name: Lint plugin code with isort
python: 3.7
script: 'isort --check --diff'
before_install: |
sudo add-apt-repository ppa:ubuntugis/ubuntugis-unstable -y
sudo apt-get update
sudo apt-get install -y binutils libproj-dev gdal-bin
pip install -U pip setuptools wheel
install: |
pip install -r ./dev-requirements.txt

View File

@@ -1,112 +1,111 @@
# 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
# How to contribute
## 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:
If you want to start working on this project,
you will need to get familiar with these projects:
- [Django docs](https://docs.djangoproject.com/en/dev/)
- [Typing in Python](https://inventwithpython.com/blog/2019/11/24/type-hints-for-busy-python-programmers/)
- [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
It is also recommended to take a look at these resources:
### Repository Setup
- [Awesome Python Typing](https://github.com/typeddjango/awesome-python-typing)
As a first step you will need to fork this repository and clone your fork locally.
In order to be able to continously 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
## Dev documentation
After your repository is setup you will then need to create and activate a git ignored virtual env, e.g.:
TODO
```bash
python3 -m venv .venv
source .venv/bin/activate
```
Then install the dev requirements:
## Dependencies
We use `pip` to manage the dependencies.
To install them you would need to activate your `virtualenv` and run `install` command:
```bash
pip install -r ./dev-requirements.txt
```
Finally, install the pre-commit hooks:
## Tests and linters
We use `mypy`, `pytest`, `flake8`, and `black` for quality control.
Here's [how we run our CI](https://github.com/typeddjango/django-stubs/blob/master/.travis.yml).
### Typechecking
To run typechecking use:
```bash
pre-commit install
mypy ./mypy_django_plugin
```
### Testing and Linting
### Testing
We use `mypy`, `pytest`, `flake8`, and `black` for quality control. All tools except pytest 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:
There are unit tests and type-related tests.
```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:
To run unit tests:
```bash
pytest
```
We also test the stubs against the Django's own test suite. This is done in CI but you can also do this locally.
To execute the script run:
Type-related tests ensure that different Django versions do work correctly.
To run type-related tests:
```bash
python ./scripts/typecheck_tests.py --django_version 3.0
python ./scripts/typecheck_tests.py --django_version=2.2
python ./scripts/typecheck_tests.py --django_version=3.0
```
Currently we only support two Django versions.
### Linting
To run auto-formatting:
```bash
isort -rc .
black django-stubs/
```
To run linting:
```bash
flake8
flake8 --config flake8-pyi.ini
```
### Generating Stubs using Stubgen
## Submitting your code
The stubs are based on auto-generated code created by Mypy's stubgen tool (see: [the stubgen docs](https://mypy.readthedocs.io/en/stable/stubgen.html)).
To make life easier we have a helper script that auto generates these stubs. To use it you can run:
We use [trunk based](https://trunkbaseddevelopment.com/)
development (we also sometimes call it `wemake-git-flow`).
```bash
python ./scripts/stubgen-django.py --django_version 3.1
```
What the point of this method?
You can also pass an optional commit hash as a second kwarg to checkout a specific commit, e.g.
1. We use protected `master` branch,
so the only way to push your code is via pull request
2. We use issue branches: to implement a new feature or to fix a bug
create a new branch named `issue-$TASKNUMBER`
3. Then create a pull request to `master` branch
4. We use `git tag`s to make releases, so we can track what has changed
since the latest release
```bash
python ./scripts/stubgen-django.py --django_version 3.1 --commit_sha <commit_sha>
```
So, this way we achieve an easy and scalable development process
which frees us from merging hell and long-living branches.
The output for this is a gitignored folder called "stubgen" in the repo's root.
In this method, the latest version of the app is always in the `master` branch.
## Submission Guidelines
The workflow for contributions is fairly simple:
## Other help
1. fork and setup the repository as in the previous step.
2. create a local branch.
3. make whatever changes you want to contribute.
4. ensure your contribution does not introduce linting issues or breaks the tests by linting and testing the code.
5. make a pull request with an adequate description.
## A Note About 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 typechecks.
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 monkeypatch function](https://github.com/typeddjango/django-stubs/tree/master/django_stubs_ext/django_stubs_ext/monkeypatch.py)
You can contribute by spreading a word about this library.
It would also be a huge contribution to write
a short article on how you are using this project.
You can also share your best practices with us.

122
README.md
View File

@@ -1,12 +1,11 @@
<img src="http://mypy-lang.org/static/mypy_light.svg" alt="mypy logo" width="300px"/>
# pep484 stubs for Django
# Typesafe Django Framework
[![Build status](https://github.com/typeddjango/django-stubs/workflows/test/badge.svg?branch=master&event=push)](https://github.com/typeddjango/django-stubs/actions?query=workflow%3Atest)
[![Build Status](https://travis-ci.com/typeddjango/django-stubs.svg?branch=master)](https://travis-ci.com/typeddjango/django-stubs)
[![Checked with mypy](http://www.mypy-lang.org/static/mypy_badge.svg)](http://mypy-lang.org/)
[![Gitter](https://badges.gitter.im/mypy-django/Lobby.svg)](https://gitter.im/mypy-django/Lobby)
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.
@@ -16,13 +15,18 @@ This package contains [type stubs](https://www.python.org/dev/peps/pep-0561/) an
pip install django-stubs
```
To make mypy aware of the plugin, you need to add
See [Configuration](#configuration) section to get started.
## Configuration
To make `mypy` happy, you will need to add:
```ini
[mypy]
plugins =
mypy_django_plugin.main
[mypy.plugins.django-stubs]
django_settings_module = "myproject.settings"
```
@@ -36,16 +40,15 @@ Two things happeining here:
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 | python version
| ------------ | ---- | ---- | ---- |
| 1.7.0 | 0.790 | 2.2.x \|\| 3.x | ^3.6
| 1.6.0 | 0.780 | 2.2.x \|\| 3.x | ^3.6
| 1.5.0 | 0.770 | 2.2.x \|\| 3.x | ^3.6
| 1.4.0 | 0.760 | 2.2.x \|\| 3.x | ^3.6
| 1.5.0 | 0.780 | 2.2.x \|\| 3.x | ^3.6
| 1.4.0 | 0.770 | 2.2.x \|\| 3.x | ^3.6
| 1.3.0 | 0.750 | 2.2.x \|\| 3.x | ^3.6
| 1.2.0 | 0.730 | 2.2.x | ^3.6
| 1.1.0 | 0.720 | 2.2.x | ^3.6
@@ -56,9 +59,9 @@ We rely on different `django` and `mypy` versions:
### Is this an official Django project?
No, it is not. We are independent from Django at the moment.
No, it is not. We are indendepent 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.
You show your support by linking the PR.
### Is it safe to use this in production?
@@ -69,100 +72,36 @@ But, it does not make any sense to use this project without `mypy`.
### mypy crashes when I run it with this plugin installed
Current implementation uses Django runtime to extract models information, so it will crash, if your installed apps or `models.py` is not correct. For this same reason, you cannot use `reveal_type` inside global scope of any Python file that will be executed for `django.setup()`.
Current implementation uses Django runtime to extract models information, so it will crash, if your installed apps or `models.py` is not correct. For this same reason, you cannot use `reveal_type` inside global scope of any Python file that will be executed for `django.setup()`.
In other words, if your `manage.py runserver` crashes, mypy will crash too.
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.
You can get a `TypeError: 'type' object is not subscriptable`
when you will try to use `QuerySet[MyModel]` or `Manager[MyModel]`.
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.
This happens because Django classes do not support [`__class_getitem__`](https://www.python.org/dev/peps/pep-0560/#class-getitem) magic method.
1. You can go with our [`django_stubs_ext`](https://github.com/typeddjango/django-stubs/tree/master/django_stubs_ext) helper, that patches all the types we use as Generic in django.
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.
Install it:
Currently we [are working](https://github.com/django/django/pull/12405) on providing `__class_getitem__` to the classes where we need them.
```bash
pip install django-stubs-ext # as a production dependency
```
### How can I use HttpRequest with custom user model?
And then place in your top-level settings:
You can subclass standard request like so:
```python
import django_stubs_ext
django_stubs_ext.monkeypatch()
```
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` 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):
class MyRequest(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.
### My QuerySet methods are returning Any rather than my Model
`QuerySet.as_manager()` is not currently supported.
If you are using `MyQuerySet.as_manager()`, then your `Manager`/`QuerySet` methods will all not be linked to your model.
Example:
```python
from django.db import models
class MyModelQuerySet(models.QuerySet):
pass
class MyModel(models.Model):
bar = models.IntegerField()
objects = MyModelQuerySet.as_manager()
def use_my_model():
foo = MyModel.objects.get(id=1) # This is `Any` but it should be `MyModel`
return foo.xyz # No error, but there should be
```
There is a workaround: use `Manager.from_queryset` instead.
Example:
```python
from django.db import models
class MyModelQuerySet(models.QuerySet):
pass
MyModelManager = models.Manager.from_queryset(MyModelQuerySet)
class MyModel(models.Model):
bar = models.IntegerField()
objects = MyModelManager()
def use_my_model():
foo = MyModel.objects.get(id=1)
return foo.xyz # Gives an error
```
And then use `MyRequest` instead of standard `HttpRequest` inside your project.
## Related projects
@@ -177,14 +116,5 @@ def use_my_model():
## To get help
We have Gitter here: <https://gitter.im/mypy-django/Lobby>
If you think you have more generic typing issue, please refer to <https://github.com/python/mypy> and their Gitter.
## 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
You can always also reach out in gitter to discuss your contributions!

View File

@@ -1,12 +1,8 @@
wheel
mypy==0.790
requests==2.24.0
coreapi==2.3.3
typing-extensions==3.7.4.3
gitpython==3.1.9
pre-commit==2.7.1
pytest==6.1.1
pytest-mypy-plugins==1.6.1
psycopg2-binary
-e ./django_stubs_ext
black
pytest-mypy-plugins==1.3.0
psycopg2
flake8==3.7.9
flake8-pyi==19.3.0
isort==4.3.21
gitpython==3.1.0
-e .

Submodule django-sources deleted from aa28213eb5

View File

@@ -1,17 +1,17 @@
from typing import Any, List, Union, Optional, Sequence
from typing import Any, List, Union, Iterable, Optional
from django.contrib.admin.options import BaseModelAdmin
from django.core.checks.messages import CheckMessage, Error
from django.core.checks.messages import Error
from django.apps.config import AppConfig
_CheckError = Union[str, Error]
def check_admin_app(app_configs: Optional[Sequence[AppConfig]] = ..., **kwargs: Any) -> List[_CheckError]: ...
def check_admin_app(app_configs: Optional[Iterable[AppConfig]], **kwargs: Any) -> List[_CheckError]: ...
def check_dependencies(**kwargs: Any) -> List[_CheckError]: ...
class BaseModelAdminChecks:
def check(self, admin_obj: BaseModelAdmin, **kwargs: Any) -> List[CheckMessage]: ...
def check(self, admin_obj: BaseModelAdmin, **kwargs: Any) -> List[_CheckError]: ...
class ModelAdminChecks(BaseModelAdminChecks): ...
class InlineModelAdminChecks(BaseModelAdminChecks): ...

View File

@@ -1,6 +1,5 @@
from typing import Any, Callable, Optional, Type
from django.contrib.admin.sites import AdminSite
from django.db.models.base import Model
def register(*models: Type[Model], site: Optional[AdminSite] = ...) -> Callable: ...
def register(*models: Type[Model], site: Optional[Any] = ...) -> Callable: ...

View File

@@ -1,4 +0,0 @@
from django.core.exceptions import SuspiciousOperation as SuspiciousOperation
class DisallowedModelAdminLookup(SuspiciousOperation): ...
class DisallowedModelAdminToField(SuspiciousOperation): ...

View File

@@ -1,23 +1,8 @@
from collections import OrderedDict
from typing import (
Any,
Callable,
Dict,
Generic,
Iterator,
List,
Optional,
Sequence,
Set,
Tuple,
Type,
Union,
Mapping,
TypeVar,
)
from typing import Any, Callable, Dict, Iterator, List, Optional, Sequence, Set, Tuple, Type, Union, Mapping, TypeVar
from django.forms.forms import BaseForm
from django.forms.models import BaseInlineFormSet
from django.forms.formsets import BaseFormSet
from typing_extensions import Literal, TypedDict
from django.contrib.admin.filters import ListFilter
@@ -26,7 +11,7 @@ from django.contrib.admin.sites import AdminSite
from django.contrib.admin.views.main import ChangeList
from django.contrib.auth.forms import AdminPasswordChangeForm
from django.contrib.contenttypes.models import ContentType
from django.core.checks.messages import CheckMessage
from django.core.checks.messages import Error
from django.core.paginator import Paginator
from django.db.models.base import Model
from django.db.models.fields.related import ForeignKey, ManyToManyField, RelatedField
@@ -72,11 +57,7 @@ _T = TypeVar("_T")
_ListOrTuple = Union[Tuple[_T, ...], List[_T]]
_FieldsetSpec = _ListOrTuple[Tuple[Optional[str], _FieldOpts]]
# Generic type specifically for models, for use in BaseModelAdmin and subclasses
# https://github.com/typeddjango/django-stubs/issues/482
_ModelT = TypeVar("_ModelT", bound=Model)
class BaseModelAdmin(Generic[_ModelT]):
class BaseModelAdmin:
autocomplete_fields: Sequence[str] = ...
raw_id_fields: Sequence[str] = ...
fields: Sequence[Union[str, Sequence[str]]] = ...
@@ -88,13 +69,13 @@ class BaseModelAdmin(Generic[_ModelT]):
radio_fields: Mapping[str, _Direction] = ...
prepopulated_fields: Mapping[str, Sequence[str]] = ...
formfield_overrides: Mapping[Type[Field], Mapping[str, Any]] = ...
readonly_fields: Sequence[Union[str, Callable[[_ModelT], Any]]] = ...
readonly_fields: Sequence[Union[str, Callable[[Model], Any]]] = ...
ordering: Sequence[str] = ...
sortable_by: Sequence[str] = ...
view_on_site: bool = ...
show_full_result_count: bool = ...
checks_class: Any = ...
def check(self, **kwargs: Any) -> List[CheckMessage]: ...
def check(self, **kwargs: Any) -> List[Union[str, Error]]: ...
def formfield_for_dbfield(
self, db_field: Field, request: Optional[HttpRequest], **kwargs: Any
) -> Optional[Field]: ...
@@ -111,28 +92,28 @@ class BaseModelAdmin(Generic[_ModelT]):
self, db_field: ManyToManyField, request: Optional[HttpRequest], **kwargs: Any
) -> ModelMultipleChoiceField: ...
def get_autocomplete_fields(self, request: HttpRequest) -> Tuple: ...
def get_view_on_site_url(self, obj: Optional[_ModelT] = ...) -> Optional[str]: ...
def get_view_on_site_url(self, obj: Optional[Model] = ...) -> Optional[str]: ...
def get_empty_value_display(self) -> SafeText: ...
def get_exclude(self, request: HttpRequest, obj: Optional[_ModelT] = ...) -> Any: ...
def get_fields(self, request: HttpRequest, obj: Optional[_ModelT] = ...) -> Sequence[Union[Callable, str]]: ...
def get_exclude(self, request: HttpRequest, obj: Optional[Model] = ...) -> Any: ...
def get_fields(self, request: HttpRequest, obj: Optional[Model] = ...) -> Sequence[Union[Callable, str]]: ...
def get_fieldsets(
self, request: HttpRequest, obj: Optional[_ModelT] = ...
self, request: HttpRequest, obj: Optional[Model] = ...
) -> List[Tuple[Optional[str], Dict[str, Any]]]: ...
def get_ordering(self, request: HttpRequest) -> Union[List[str], Tuple]: ...
def get_readonly_fields(self, request: HttpRequest, obj: Optional[_ModelT] = ...) -> Union[List[str], Tuple]: ...
def get_prepopulated_fields(self, request: HttpRequest, obj: Optional[_ModelT] = ...) -> Dict[str, Tuple[str]]: ...
def get_readonly_fields(self, request: HttpRequest, obj: Optional[Model] = ...) -> Union[List[str], Tuple]: ...
def get_prepopulated_fields(self, request: HttpRequest, obj: Optional[Model] = ...) -> Dict[str, Tuple[str]]: ...
def get_queryset(self, request: HttpRequest) -> QuerySet: ...
def get_sortable_by(self, request: HttpRequest) -> Union[List[Callable], List[str], Tuple]: ...
def lookup_allowed(self, lookup: str, value: str) -> 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: Optional[_ModelT] = ...) -> bool: ...
def has_delete_permission(self, request: HttpRequest, obj: Optional[_ModelT] = ...) -> bool: ...
def has_view_permission(self, request: HttpRequest, obj: Optional[_ModelT] = ...) -> bool: ...
def has_change_permission(self, request: HttpRequest, obj: Optional[Model] = ...) -> bool: ...
def has_delete_permission(self, request: HttpRequest, obj: Optional[Model] = ...) -> bool: ...
def has_view_permission(self, request: HttpRequest, obj: Optional[Model] = ...) -> bool: ...
def has_module_permission(self, request: HttpRequest) -> bool: ...
class ModelAdmin(BaseModelAdmin[_ModelT]):
list_display: Sequence[Union[str, Callable[[_ModelT], Any]]] = ...
class ModelAdmin(BaseModelAdmin):
list_display: Sequence[Union[str, Callable[[Model], Any]]] = ...
list_display_links: Optional[Sequence[Union[str, Callable]]] = ...
list_filter: Sequence[Union[str, Type[ListFilter], Tuple[str, Type[ListFilter]]]] = ...
list_select_related: Union[bool, Sequence[str]] = ...
@@ -154,30 +135,29 @@ class ModelAdmin(BaseModelAdmin[_ModelT]):
delete_selected_confirmation_template: str = ...
object_history_template: str = ...
popup_response_template: str = ...
actions: Optional[Sequence[Union[Callable[[ModelAdmin, HttpRequest, QuerySet], None], str]]] = ...
actions: Sequence[Callable[[ModelAdmin, HttpRequest, QuerySet], None]] = ...
action_form: Any = ...
actions_on_top: bool = ...
actions_on_bottom: bool = ...
actions_selection_counter: bool = ...
model: Type[_ModelT] = ...
model: Type[Model] = ...
opts: Options = ...
admin_site: AdminSite = ...
def __init__(self, model: Type[_ModelT], admin_site: Optional[AdminSite]) -> None: ...
def get_inlines(self, request: HttpRequest, obj: Optional[_ModelT] = ...) -> List[Type[InlineModelAdmin]]: ...
def get_inline_instances(self, request: HttpRequest, obj: Optional[_ModelT] = ...) -> List[InlineModelAdmin]: ...
def __init__(self, model: Type[Model], admin_site: Optional[AdminSite]) -> None: ...
def get_inline_instances(self, request: HttpRequest, obj: Optional[Model] = ...) -> 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: Any, obj: Optional[_ModelT] = ..., change: bool = ..., **kwargs: Any): ...
def get_form(self, request: Any, obj: Optional[Any] = ..., change: bool = ..., **kwargs: Any): ...
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: None = ...) -> Optional[_ModelT]: ...
def get_object(self, request: HttpRequest, object_id: str, from_field: None = ...) -> Optional[Model]: ...
def get_changelist_form(self, request: Any, **kwargs: Any): ...
def get_changelist_formset(self, request: Any, **kwargs: Any): ...
def get_formsets_with_inlines(self, request: HttpRequest, obj: Optional[_ModelT] = ...) -> Iterator[Any]: ...
def get_formsets_with_inlines(self, request: HttpRequest, obj: Optional[Model] = ...) -> Iterator[Any]: ...
def get_paginator(
self,
request: HttpRequest,
@@ -186,10 +166,10 @@ class ModelAdmin(BaseModelAdmin[_ModelT]):
orphans: int = ...,
allow_empty_first_page: bool = ...,
) -> Paginator: ...
def log_addition(self, request: HttpRequest, object: _ModelT, message: Any) -> LogEntry: ...
def log_change(self, request: HttpRequest, object: _ModelT, message: Any) -> LogEntry: ...
def log_deletion(self, request: HttpRequest, object: _ModelT, object_repr: str) -> LogEntry: ...
def action_checkbox(self, obj: _ModelT) -> SafeText: ...
def log_addition(self, request: HttpRequest, object: Model, message: Any) -> LogEntry: ...
def log_change(self, request: HttpRequest, object: Model, message: Any) -> LogEntry: ...
def log_deletion(self, request: HttpRequest, object: Model, object_repr: str) -> LogEntry: ...
def action_checkbox(self, obj: Model) -> SafeText: ...
def get_actions(self, request: HttpRequest) -> OrderedDict: ...
def get_action_choices(
self, request: HttpRequest, default_choices: List[Tuple[str, str]] = ...
@@ -218,8 +198,8 @@ class ModelAdmin(BaseModelAdmin[_ModelT]):
fail_silently: bool = ...,
) -> None: ...
def save_form(self, request: Any, form: Any, change: Any): ...
def save_model(self, request: Any, obj: _ModelT, form: Any, change: Any) -> None: ...
def delete_model(self, request: HttpRequest, obj: _ModelT) -> None: ...
def save_model(self, request: Any, obj: Any, form: Any, change: Any) -> None: ...
def delete_model(self, request: HttpRequest, obj: Model) -> None: ...
def delete_queryset(self, request: HttpRequest, queryset: QuerySet) -> None: ...
def save_formset(self, request: Any, form: Any, formset: Any, change: Any) -> None: ...
def save_related(self, request: Any, form: Any, formsets: Any, change: Any) -> None: ...
@@ -230,19 +210,19 @@ class ModelAdmin(BaseModelAdmin[_ModelT]):
add: bool = ...,
change: bool = ...,
form_url: str = ...,
obj: Optional[_ModelT] = ...,
obj: Optional[Any] = ...,
): ...
def response_add(
self, request: HttpRequest, obj: _ModelT, post_url_continue: Optional[str] = ...
self, request: HttpRequest, obj: Model, post_url_continue: Optional[str] = ...
) -> 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: ...
def response_change(self, request: HttpRequest, obj: Model) -> HttpResponse: ...
def response_post_save_add(self, request: HttpRequest, obj: Model) -> HttpResponseRedirect: ...
def response_post_save_change(self, request: HttpRequest, obj: Model) -> HttpResponseRedirect: ...
def response_action(self, request: HttpRequest, queryset: QuerySet) -> Optional[HttpResponseBase]: ...
def response_delete(self, request: HttpRequest, obj_display: str, obj_id: int) -> HttpResponse: ...
def render_delete_form(self, request: Any, context: Any): ...
def get_inline_formsets(
self, request: HttpRequest, formsets: List[Any], inline_instances: List[Any], obj: Optional[_ModelT] = ...
self, request: HttpRequest, formsets: List[Any], inline_instances: List[Any], obj: Optional[Model] = ...
) -> List[Any]: ...
def get_changeform_initial_data(self, request: HttpRequest) -> Dict[str, str]: ...
def changeform_view(
@@ -266,10 +246,10 @@ class ModelAdmin(BaseModelAdmin[_ModelT]):
def delete_view(self, request: HttpRequest, object_id: str, extra_context: None = ...) -> Any: ...
def history_view(self, request: HttpRequest, object_id: str, extra_context: None = ...) -> HttpResponse: ...
class InlineModelAdmin(BaseModelAdmin[_ModelT]):
model: Type[_ModelT] = ...
class InlineModelAdmin(BaseModelAdmin):
model: Type[Model] = ...
fk_name: str = ...
formset: Type[BaseInlineFormSet] = ...
formset: BaseFormSet = ...
extra: int = ...
min_num: Optional[int] = ...
max_num: Optional[int] = ...
@@ -283,13 +263,13 @@ class InlineModelAdmin(BaseModelAdmin[_ModelT]):
parent_model: Any = ...
opts: Any = ...
has_registered_model: Any = ...
def __init__(self, parent_model: Union[Type[_ModelT], _ModelT], admin_site: AdminSite) -> None: ...
def __init__(self, parent_model: Union[Type[Model], Model], admin_site: AdminSite) -> None: ...
@property
def media(self) -> Media: ...
def get_extra(self, request: HttpRequest, obj: Optional[_ModelT] = ..., **kwargs: Any) -> int: ...
def get_min_num(self, request: HttpRequest, obj: Optional[_ModelT] = ..., **kwargs: Any) -> Optional[int]: ...
def get_max_num(self, request: HttpRequest, obj: Optional[_ModelT] = ..., **kwargs: Any) -> Optional[int]: ...
def get_formset(self, request: Any, obj: Optional[_ModelT] = ..., **kwargs: Any): ...
def get_extra(self, request: HttpRequest, obj: Optional[Model] = ..., **kwargs: Any) -> int: ...
def get_min_num(self, request: HttpRequest, obj: Optional[Model] = ..., **kwargs: Any) -> Optional[int]: ...
def get_max_num(self, request: HttpRequest, obj: Optional[Model] = ..., **kwargs: Any) -> Optional[int]: ...
def get_formset(self, request: Any, obj: Optional[Any] = ..., **kwargs: Any): ...
class StackedInline(InlineModelAdmin[_ModelT]): ...
class TabularInline(InlineModelAdmin[_ModelT]): ...
class StackedInline(InlineModelAdmin): ...
class TabularInline(InlineModelAdmin): ...

View File

@@ -1,51 +1,36 @@
import sys
from typing import Any, Callable, Dict, Iterable, List, Optional, Tuple, Type, Union
from django.apps.config import AppConfig
from django.contrib.admin.options import ModelAdmin
from django.contrib.auth.forms import AuthenticationForm
from django.core.handlers.wsgi import WSGIRequest
from django.db.models.base import Model
from django.db.models.query import QuerySet
from django.http.response import HttpResponse
from django.template.response import TemplateResponse
from django.urls.resolvers import URLResolver
from django.utils.functional import LazyObject
from django.core.checks import CheckMessage
if sys.version_info >= (3, 9):
from weakref import WeakSet
from django.apps.config import AppConfig
all_sites: WeakSet[AdminSite]
else:
from typing import MutableSet
all_sites: MutableSet[AdminSite]
_ActionCallback = Callable[[ModelAdmin, WSGIRequest, QuerySet], Optional[TemplateResponse]]
all_sites: Any
class AlreadyRegistered(Exception): ...
class NotRegistered(Exception): ...
class AdminSite:
site_title: str = ...
site_header: str = ...
index_title: str = ...
site_title: Any = ...
site_header: Any = ...
index_title: Any = ...
site_url: str = ...
login_form: Optional[AuthenticationForm] = ...
index_template: Optional[str] = ...
app_index_template: Optional[str] = ...
login_template: Optional[str] = ...
logout_template: Optional[str] = ...
password_change_template: Optional[str] = ...
password_change_done_template: Optional[str] = ...
login_form: Any = ...
index_template: Any = ...
app_index_template: Any = ...
login_template: Any = ...
logout_template: Any = ...
password_change_template: Any = ...
password_change_done_template: Any = ...
name: str = ...
_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: Optional[Iterable[AppConfig]]) -> List[CheckMessage]: ...
def check(self, app_configs: Optional[Iterable[AppConfig]]) -> List[Any]: ...
def register(
self,
model_or_iterable: Union[Type[Model], Iterable[Type[Model]]],
@@ -54,28 +39,28 @@ class AdminSite:
) -> None: ...
def unregister(self, model_or_iterable: Union[Type[Model], Iterable[Type[Model]]]) -> None: ...
def is_registered(self, model: Type[Model]) -> bool: ...
def add_action(self, action: _ActionCallback, name: Optional[str] = ...) -> None: ...
def add_action(self, action: Callable, name: Optional[str] = ...) -> None: ...
def disable_action(self, name: str) -> None: ...
def get_action(self, name: str) -> Callable: ...
@property
def actions(self) -> Iterable[Tuple[str, _ActionCallback]]: ...
def actions(self): ...
@property
def empty_value_display(self) -> str: ...
def empty_value_display(self): ...
@empty_value_display.setter
def empty_value_display(self, empty_value_display: str) -> None: ...
def empty_value_display(self, empty_value_display: Any) -> None: ...
def has_permission(self, request: WSGIRequest) -> bool: ...
def admin_view(self, view: Callable, cacheable: bool = ...) -> Callable: ...
def get_urls(self) -> List[URLResolver]: ...
@property
def urls(self) -> Tuple[List[URLResolver], str, str]: ...
def each_context(self, request: WSGIRequest) -> Dict[str, Any]: ...
def each_context(self, request: Any): ...
def password_change(
self, request: WSGIRequest, extra_context: Optional[Dict[str, Any]] = ...
) -> TemplateResponse: ...
def password_change_done(
self, request: WSGIRequest, extra_context: Optional[Dict[str, Any]] = ...
) -> TemplateResponse: ...
def i18n_javascript(self, request: WSGIRequest, extra_context: Optional[Dict[str, Any]] = ...) -> HttpResponse: ...
def i18n_javascript(self, request: WSGIRequest, extra_context: Optional[Dict[Any, Any]] = ...) -> HttpResponse: ...
def logout(self, request: WSGIRequest, extra_context: Optional[Dict[str, Any]] = ...) -> TemplateResponse: ...
def login(self, request: WSGIRequest, extra_context: Optional[Dict[str, Any]] = ...) -> HttpResponse: ...
def _build_app_dict(self, request: WSGIRequest, label: Optional[str] = ...) -> Dict[str, Any]: ...
@@ -87,4 +72,4 @@ class AdminSite:
class DefaultAdminSite(LazyObject): ...
site: AdminSite
site: Any

View File

@@ -1,11 +1,7 @@
from typing import Callable, Optional, TypeVar, overload
from typing import Callable, TypeVar, overload
_C = TypeVar("_C", bound=Callable)
@overload
def staff_member_required(
view_func: _C = ..., redirect_field_name: Optional[str] = ..., login_url: str = ...
) -> _C: ...
def staff_member_required(view_func: _C = ..., redirect_field_name: str = ..., login_url: str = ...) -> _C: ...
@overload
def staff_member_required(
view_func: None = ..., redirect_field_name: Optional[str] = ..., login_url: str = ...
) -> Callable: ...
def staff_member_required(view_func: None = ..., redirect_field_name: str = ..., login_url: str = ...) -> Callable: ...

View File

@@ -1,6 +0,0 @@
from django.apps import AppConfig as AppConfig
from typing import Any
class AdminDocsConfig(AppConfig):
name: str = ...
verbose_name: Any = ...

View File

@@ -2,16 +2,17 @@ from typing import Any, List, Optional, Type, Union
from django.contrib.auth.backends import ModelBackend
from django.contrib.auth.base_user import AbstractBaseUser
from django.contrib.auth.models import AnonymousUser
from django.contrib.auth.models import AbstractUser, AnonymousUser
from django.core.handlers.wsgi import WSGIRequest
from django.db.models.base import Model
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
from .signals import (
user_logged_in as user_logged_in,
user_logged_out as user_logged_out,
user_login_failed as user_login_failed,
)
SESSION_KEY: str
BACKEND_SESSION_KEY: str
@@ -22,12 +23,12 @@ def load_backend(path: str) -> ModelBackend: ...
def get_backends() -> List[ModelBackend]: ...
def authenticate(request: Any = ..., **credentials: Any) -> Optional[AbstractBaseUser]: ...
def login(
request: HttpRequest, user: Optional[AbstractBaseUser], backend: Optional[Union[Type[ModelBackend], str]] = ...
request: HttpRequest, user: AbstractBaseUser, backend: Optional[Union[Type[ModelBackend], str]] = ...
) -> None: ...
def logout(request: HttpRequest) -> None: ...
def get_user_model() -> Type[Model]: ...
def get_user(request: Union[HttpRequest, Client]) -> Union[AbstractBaseUser, AnonymousUser]: ...
def get_user(request: HttpRequest) -> Union[AbstractBaseUser, AnonymousUser]: ...
def get_permission_codename(action: str, opts: Options) -> str: ...
def update_session_auth_hash(request: HttpRequest, user: AbstractBaseUser) -> None: ...
def update_session_auth_hash(request: WSGIRequest, user: AbstractUser) -> None: ...
default_app_config: str

View File

@@ -4,7 +4,6 @@ from django.contrib.auth.base_user import AbstractBaseUser
from django.contrib.auth.models import AnonymousUser, User, Permission
from django.db.models.base import Model
from django.http.request import HttpRequest
_AnyUser = Union[Model, AnonymousUser]
@@ -12,7 +11,7 @@ UserModel: Any
class BaseBackend:
def authenticate(
self, request: HttpRequest, username: Optional[str] = ..., password: Optional[str] = ..., **kwargs: Any
self, request: Any, username: Optional[str] = ..., password: Optional[str] = ..., **kwargs: Any
) -> Optional[AbstractBaseUser]: ...
def get_user(self, user_id: int) -> Optional[AbstractBaseUser]: ...
def get_user_permissions(self, user_obj: _AnyUser, obj: Optional[Model] = ...) -> Set[str]: ...
@@ -36,6 +35,6 @@ class AllowAllUsersModelBackend(ModelBackend): ...
class RemoteUserBackend(ModelBackend):
create_unknown_user: bool = ...
def clean_username(self, username: str) -> str: ...
def configure_user(self, request: HttpRequest, user: User) -> User: ...
def configure_user(self, user: User) -> User: ...
class AllowAllUsersRemoteUserBackend(RemoteUserBackend): ...

View File

@@ -1,9 +1,8 @@
import sys
from typing import Any, Optional, Tuple, List, overload, TypeVar, Union
from typing import Any, Optional, Tuple, List, overload, TypeVar
from django.db.models.base import Model
from django.db.models.expressions import Combinable
from django.db.models.fields import BooleanField
from django.db import models
if sys.version_info < (3, 8):
@@ -24,14 +23,13 @@ class AbstractBaseUser(models.Model):
password = models.CharField(max_length=128)
last_login = models.DateTimeField(blank=True, null=True)
is_active: Union[bool, BooleanField[Union[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: ...
def set_password(self, raw_password: Optional[str]) -> None: ...
def check_password(self, raw_password: str) -> bool: ...
def set_unusable_password(self) -> None: ...
def has_usable_password(self) -> bool: ...

View File

@@ -1,8 +1,8 @@
from typing import Any, List, Optional, Sequence
from typing import Any, List, Iterable, Optional
from django.core.checks.messages import CheckMessage
from django.apps.config import AppConfig
def check_user_model(app_configs: Optional[Sequence[AppConfig]] = ..., **kwargs: Any) -> List[CheckMessage]: ...
def check_models_permissions(app_configs: Optional[Sequence[AppConfig]] = ..., **kwargs: Any) -> List[Any]: ...
def check_user_model(app_configs: Optional[Iterable[AppConfig]] = ..., **kwargs: Any) -> List[CheckMessage]: ...
def check_models_permissions(app_configs: Optional[Iterable[AppConfig]] = ..., **kwargs: Any) -> List[Any]: ...

View File

@@ -1,7 +1,7 @@
from typing import Any, Dict, Iterator, Optional
from django.contrib.auth.base_user import AbstractBaseUser
from django.contrib.auth.models import User
from django.contrib.auth.models import AbstractUser, User
from django.contrib.auth.tokens import PasswordResetTokenGenerator
from django.core.exceptions import ValidationError
from django.core.handlers.wsgi import WSGIRequest
@@ -86,6 +86,6 @@ class AdminPasswordChangeForm(forms.Form):
password1: Any = ...
password2: Any = ...
user: User = ...
def __init__(self, user: AbstractBaseUser, *args: Any, **kwargs: Any) -> None: ...
def __init__(self, user: AbstractUser, *args: Any, **kwargs: Any) -> None: ...
def clean_password2(self) -> str: ...
def save(self, commit: bool = ...) -> AbstractBaseUser: ...
def save(self, commit: bool = ...) -> AbstractUser: ...

View File

@@ -1,4 +1,3 @@
from datetime import date
from typing import Any, Optional
from django.contrib.auth.base_user import AbstractBaseUser
@@ -6,12 +5,7 @@ from django.contrib.auth.base_user import AbstractBaseUser
class PasswordResetTokenGenerator:
key_salt: str = ...
secret: Any = ...
algorithm: str = ...
def make_token(self, user: AbstractBaseUser) -> str: ...
def check_token(self, user: Optional[AbstractBaseUser], token: Optional[str]) -> bool: ...
def _make_token_with_timestamp(self, user: AbstractBaseUser, timestamp: int) -> str: ...
def _make_hash_value(self, user: AbstractBaseUser, timestamp: int) -> str: ...
def _num_days(self, dt: date) -> float: ...
def _today(self) -> date: ...
default_token_generator: Any

View File

@@ -1,7 +1,6 @@
from typing import Any, Optional, Set
from django.contrib.auth.base_user import AbstractBaseUser
from django.contrib.auth.forms import AuthenticationForm
from django.core.handlers.wsgi import WSGIRequest
from django.http.request import HttpRequest
from django.http.response import HttpResponseRedirect
@@ -15,7 +14,7 @@ class SuccessURLAllowedHostsMixin:
success_url_allowed_hosts: Any = ...
def get_success_url_allowed_hosts(self) -> Set[str]: ...
class LoginView(SuccessURLAllowedHostsMixin, FormView[AuthenticationForm]):
class LoginView(SuccessURLAllowedHostsMixin, FormView):
authentication_form: Any = ...
redirect_field_name: Any = ...
redirect_authenticated_user: bool = ...

View File

@@ -1,6 +1,6 @@
from typing import Any, List, Optional, Sequence
from typing import Any, List, Iterable, Optional
from django.apps.config import AppConfig
def check_generic_foreign_keys(app_configs: Optional[Sequence[AppConfig]] = ..., **kwargs: Any) -> List[Any]: ...
def check_model_name_lengths(app_configs: Optional[Sequence[AppConfig]] = ..., **kwargs: Any) -> List[Any]: ...
def check_generic_foreign_keys(app_configs: Optional[Iterable[AppConfig]] = ..., **kwargs: Any) -> List[Any]: ...
def check_model_name_lengths(app_configs: Optional[Iterable[AppConfig]] = ..., **kwargs: Any) -> List[Any]: ...

View File

@@ -1,7 +1,7 @@
from typing import Any, Callable, Dict, List, Optional, Tuple, Type, Union
from django.contrib.contenttypes.models import ContentType
from django.core.checks.messages import CheckMessage
from django.core.checks.messages import Error
from django.db.models.base import Model
from django.db.models.expressions import Combinable
from django.db.models.fields.mixins import FieldCacheMixin
@@ -41,7 +41,7 @@ class GenericForeignKey(FieldCacheMixin):
def contribute_to_class(self, cls: Type[Model], name: str, **kwargs: Any) -> None: ...
def get_filter_kwargs_for_object(self, obj: Model) -> Dict[str, Optional[ContentType]]: ...
def get_forward_related_filter(self, obj: Model) -> Dict[str, int]: ...
def check(self, **kwargs: Any) -> List[CheckMessage]: ...
def check(self, **kwargs: Any) -> List[Error]: ...
def get_cache_name(self) -> str: ...
def get_content_type(
self, obj: Optional[Model] = ..., id: Optional[int] = ..., using: Optional[str] = ...
@@ -83,6 +83,7 @@ class GenericRelation(ForeignObject):
def resolve_related_fields(self) -> List[Tuple[PositiveIntegerField, Field]]: ...
def get_path_info(self, filtered_relation: Optional[FilteredRelation] = ...) -> List[PathInfo]: ...
def get_reverse_path_info(self, filtered_relation: None = ...) -> List[PathInfo]: ...
def value_to_string(self, obj: Model) -> str: ...
def get_content_type(self) -> ContentType: ...
def get_extra_restriction(
self, where_class: Type[WhereNode], alias: Optional[str], remote_alias: str

View File

@@ -1,9 +0,0 @@
from django.contrib import admin as admin
from typing import Any
class FlatPageAdmin(admin.ModelAdmin):
form: Any = ...
fieldsets: Any = ...
list_display: Any = ...
list_filter: Any = ...
search_fields: Any = ...

View File

@@ -1,6 +0,0 @@
from django.apps import AppConfig as AppConfig
from typing import Any
class FlatPagesConfig(AppConfig):
name: str = ...
verbose_name: Any = ...

View File

@@ -1 +0,0 @@
default_app_config: str

View File

@@ -1,12 +0,0 @@
from django.contrib.admin import (
AdminSite as AdminSite,
HORIZONTAL as HORIZONTAL,
ModelAdmin as ModelAdmin,
StackedInline as StackedInline,
TabularInline as TabularInline,
VERTICAL as VERTICAL,
autodiscover as autodiscover,
register as register,
site as site,
)
from django.contrib.gis.admin.options import GeoModelAdmin as GeoModelAdmin, OSMGeoAdmin as OSMGeoAdmin

View File

@@ -1,45 +0,0 @@
from django.contrib.admin import ModelAdmin as ModelAdmin
from typing import Any
spherical_mercator_srid: int
class GeoModelAdmin(ModelAdmin):
default_lon: int = ...
default_lat: int = ...
default_zoom: int = ...
display_wkt: bool = ...
display_srid: bool = ...
extra_js: Any = ...
num_zoom: int = ...
max_zoom: bool = ...
min_zoom: bool = ...
units: bool = ...
max_resolution: bool = ...
max_extent: bool = ...
modifiable: bool = ...
mouse_position: bool = ...
scale_text: bool = ...
layerswitcher: bool = ...
scrollable: bool = ...
map_width: int = ...
map_height: int = ...
map_srid: int = ...
map_template: str = ...
openlayers_url: str = ...
point_zoom: Any = ...
wms_url: str = ...
wms_layer: str = ...
wms_name: str = ...
wms_options: Any = ...
debug: bool = ...
widget: Any = ...
@property
def media(self): ...
def formfield_for_dbfield(self, db_field: Any, request: Any, **kwargs: Any): ...
def get_map_widget(self, db_field: Any): ...
class OSMGeoAdmin(GeoModelAdmin):
map_template: str = ...
num_zoom: int = ...
map_srid: Any = ...
point_zoom: Any = ...

View File

@@ -1,9 +0,0 @@
from django.forms.widgets import Textarea as Textarea
from typing import Any
geo_context: Any
logger: Any
class OpenLayersWidget(Textarea):
def get_context(self, name: Any, value: Any, attrs: Any): ...
def map_options(self): ...

View File

@@ -1,7 +0,0 @@
from django.apps import AppConfig as AppConfig
from typing import Any
class GISConfig(AppConfig):
name: str = ...
verbose_name: Any = ...
def ready(self) -> None: ...

View File

@@ -1,8 +0,0 @@
from typing import Any
class WKTAdapter:
wkt: Any = ...
srid: Any = ...
def __init__(self, geom: Any) -> None: ...
def __eq__(self, other: Any) -> Any: ...
def __hash__(self) -> Any: ...

View File

@@ -1,44 +0,0 @@
from typing import Any
class BaseSpatialFeatures:
gis_enabled: bool = ...
has_spatialrefsys_table: bool = ...
supports_add_srs_entry: bool = ...
supports_geometry_field_introspection: 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 = ...
@property
def supports_bbcontains_lookup(self): ...
@property
def supports_contained_lookup(self): ...
@property
def supports_crosses_lookup(self): ...
@property
def supports_distances_lookups(self): ...
@property
def supports_dwithin_lookup(self): ...
@property
def supports_relate_lookup(self): ...
@property
def supports_isvalid_lookup(self): ...
@property
def supports_collect_aggr(self): ...
@property
def supports_extent_aggr(self): ...
@property
def supports_make_line_aggr(self): ...
@property
def supports_union_aggr(self): ...
def __getattr__(self, name: Any): ...

View File

@@ -1,33 +0,0 @@
from typing import Any
class SpatialRefSysMixin:
@property
def srs(self): ...
@property
def ellipsoid(self): ...
@property
def name(self): ...
@property
def spheroid(self): ...
@property
def datum(self): ...
@property
def projected(self): ...
@property
def local(self): ...
@property
def geographic(self): ...
@property
def linear_name(self): ...
@property
def linear_units(self): ...
@property
def angular_name(self): ...
@property
def angular_units(self): ...
@property
def units(self): ...
@classmethod
def get_units(cls, wkt: Any): ...
@classmethod
def get_spheroid(cls, wkt: Any, string: bool = ...): ...

View File

@@ -1,33 +0,0 @@
from typing import Any
class BaseSpatialOperations:
postgis: bool = ...
spatialite: bool = ...
mysql: bool = ...
oracle: bool = ...
spatial_version: Any = ...
select: str = ...
def select_extent(self): ...
geography: bool = ...
geometry: bool = ...
disallowed_aggregates: Any = ...
geom_func_prefix: str = ...
function_names: Any = ...
unsupported_functions: Any = ...
from_text: bool = ...
def convert_extent(self, box: Any, srid: Any) -> None: ...
def convert_extent3d(self, box: Any, srid: Any) -> None: ...
def geo_quote_name(self, name: Any): ...
def geo_db_type(self, f: Any) -> None: ...
def get_distance(self, f: Any, value: Any, lookup_type: Any) -> None: ...
def get_geom_placeholder(self, f: Any, value: Any, compiler: Any): ...
def check_expression_support(self, expression: Any) -> None: ...
def spatial_aggregate_name(self, agg_name: Any) -> None: ...
def spatial_function_name(self, func_name: Any): ...
def geometry_columns(self) -> None: ...
def spatial_ref_sys(self) -> None: ...
distance_expr_for_lookup: Any = ...
def get_db_converters(self, expression: Any): ...
def get_geometry_converter(self, expression: Any) -> None: ...
def get_area_att_for_field(self, field: Any): ...
def get_distance_att_for_field(self, field: Any): ...

View File

@@ -1,8 +0,0 @@
from django.db.backends.mysql.base import DatabaseWrapper as MySQLDatabaseWrapper
from typing import Any
class DatabaseWrapper(MySQLDatabaseWrapper):
SchemaEditorClass: Any = ...
features_class: Any = ...
introspection_class: Any = ...
ops_class: Any = ...

View File

@@ -1,14 +0,0 @@
from django.contrib.gis.db.backends.base.features import BaseSpatialFeatures as BaseSpatialFeatures
from django.db.backends.mysql.features import DatabaseFeatures as MySQLDatabaseFeatures
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 = ...
def supports_empty_geometry_collection(self): ...
def supports_geometry_field_unique_index(self): ...

View File

@@ -1,7 +0,0 @@
from django.db.backends.mysql.introspection import DatabaseIntrospection as DatabaseIntrospection
from typing import Any
class MySQLIntrospection(DatabaseIntrospection):
data_types_reverse: Any = ...
def get_geometry_type(self, table_name: Any, description: Any): ...
def supports_spatial_index(self, cursor: Any, table_name: Any): ...

View File

@@ -1,17 +0,0 @@
from django.contrib.gis.db.backends.base.operations import BaseSpatialOperations as BaseSpatialOperations
from django.db.backends.mysql.operations import DatabaseOperations as DatabaseOperations
from typing import Any
class MySQLOperations(BaseSpatialOperations, DatabaseOperations):
mysql: bool = ...
name: str = ...
geom_func_prefix: str = ...
Adapter: Any = ...
def select(self): ...
def from_text(self): ...
def gis_operators(self): ...
disallowed_aggregates: Any = ...
def unsupported_functions(self): ...
def geo_db_type(self, f: Any): ...
def get_distance(self, f: Any, value: Any, lookup_type: Any): ...
def get_geometry_converter(self, expression: Any): ...

View File

@@ -1,16 +0,0 @@
from django.db.backends.mysql.schema import DatabaseSchemaEditor as DatabaseSchemaEditor
from typing import Any
logger: Any
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: Any): ...
def column_sql(self, model: Any, field: Any, include_default: bool = ...): ...
def create_model(self, model: Any) -> None: ...
def add_field(self, model: Any, field: Any) -> None: ...
def remove_field(self, model: Any, field: Any) -> None: ...
def create_spatial_indexes(self) -> None: ...

View File

@@ -1,8 +0,0 @@
from django.contrib.gis.db.backends.base.adapter import WKTAdapter
from typing import Any
class OracleSpatialAdapter(WKTAdapter):
input_size: Any = ...
wkt: Any = ...
srid: Any = ...
def __init__(self, geom: Any) -> None: ...

View File

@@ -1,8 +0,0 @@
from django.db.backends.oracle.base import DatabaseWrapper as OracleDatabaseWrapper
from typing import Any
class DatabaseWrapper(OracleDatabaseWrapper):
SchemaEditorClass: Any = ...
features_class: Any = ...
introspection_class: Any = ...
ops_class: Any = ...

View File

@@ -1,9 +0,0 @@
from django.contrib.gis.db.backends.base.features import BaseSpatialFeatures as 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 = ...

View File

@@ -1,6 +0,0 @@
from django.db.backends.oracle.introspection import DatabaseIntrospection as DatabaseIntrospection
from typing import Any
class OracleIntrospection(DatabaseIntrospection):
def data_types_reverse(self): ...
def get_geometry_type(self, table_name: Any, description: Any): ...

View File

@@ -1,30 +0,0 @@
from django.contrib.gis.db import models as models
from django.contrib.gis.db.backends.base.models import SpatialRefSysMixin as SpatialRefSysMixin
from typing import Any
class OracleGeometryColumns(models.Model):
table_name: Any = ...
column_name: Any = ...
srid: Any = ...
class Meta:
app_label: str = ...
db_table: str = ...
managed: bool = ...
@classmethod
def table_name_col(cls): ...
@classmethod
def geom_col_name(cls): ...
class OracleSpatialRefSys(models.Model, SpatialRefSysMixin):
cs_name: Any = ...
srid: Any = ...
auth_srid: Any = ...
auth_name: Any = ...
wktext: Any = ...
cs_bounds: Any = ...
class Meta:
app_label: str = ...
db_table: str = ...
managed: bool = ...
@property
def wkt(self): ...

View File

@@ -1,42 +0,0 @@
from django.contrib.gis.db.backends.base.operations import BaseSpatialOperations as BaseSpatialOperations
from django.contrib.gis.db.backends.utils import SpatialOperator as SpatialOperator
from django.db.backends.oracle.operations import DatabaseOperations as DatabaseOperations
from typing import Any
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: ...
def as_sql(self, connection: Any, lookup: Any, template_params: Any, sql_params: Any): ...
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): ...
def geo_db_type(self, f: Any): ...
def get_distance(self, f: Any, value: Any, lookup_type: Any): ...
def get_geom_placeholder(self, f: Any, value: Any, compiler: Any): ...
def spatial_aggregate_name(self, agg_name: Any): ...
def geometry_columns(self): ...
def spatial_ref_sys(self): ...
def modify_insert_params(self, placeholder: Any, params: Any): ...
def get_geometry_converter(self, expression: Any): ...
def get_area_att_for_field(self, field: Any): ...

View File

@@ -1,18 +0,0 @@
from django.db.backends.oracle.schema import DatabaseSchemaEditor
from typing import Any
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): ...
def column_sql(self, model: Any, field: Any, include_default: bool = ...): ...
def create_model(self, model: Any) -> None: ...
def delete_model(self, model: Any) -> None: ...
def add_field(self, model: Any, field: Any) -> None: ...
def remove_field(self, model: Any, field: Any) -> None: ...
def run_geometry_sql(self) -> None: ...

View File

@@ -1,13 +0,0 @@
from 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): ...
def __eq__(self, other: Any) -> Any: ...
def __hash__(self) -> Any: ...
def prepare(self, conn: Any) -> None: ...
def getquoted(self): ...

View File

@@ -1,10 +0,0 @@
from django.db.backends.postgresql.base import DatabaseWrapper as Psycopg2DatabaseWrapper
from typing import Any
class DatabaseWrapper(Psycopg2DatabaseWrapper):
SchemaEditorClass: Any = ...
features: Any = ...
ops: Any = ...
introspection: Any = ...
def __init__(self, *args: Any, **kwargs: Any) -> None: ...
def prepare_database(self) -> None: ...

View File

@@ -1,9 +0,0 @@
from 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

View File

@@ -1,9 +0,0 @@
from django.contrib.gis.db.backends.base.features import BaseSpatialFeatures as 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 = ...

View File

@@ -1,8 +0,0 @@
from django.db.backends.postgresql.introspection import DatabaseIntrospection as DatabaseIntrospection
from typing import Any
class PostGISIntrospection(DatabaseIntrospection):
postgis_oid_lookup: Any = ...
ignored_tables: Any = ...
def get_field_type(self, data_type: Any, description: Any): ...
def get_geometry_type(self, table_name: Any, description: Any): ...

View File

@@ -1,33 +0,0 @@
from django.contrib.gis.db.backends.base.models import SpatialRefSysMixin as SpatialRefSysMixin
from django.db import models as models
from typing import Any
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 = ...
class Meta:
app_label: str = ...
db_table: str = ...
managed: bool = ...
@classmethod
def table_name_col(cls): ...
@classmethod
def geom_col_name(cls): ...
class PostGISSpatialRefSys(models.Model, SpatialRefSysMixin):
srid: Any = ...
auth_name: Any = ...
auth_srid: Any = ...
srtext: Any = ...
proj4text: Any = ...
class Meta:
app_label: str = ...
db_table: str = ...
managed: bool = ...
@property
def wkt(self): ...

View File

@@ -1,56 +0,0 @@
from django.contrib.gis.db.backends.base.operations import BaseSpatialOperations
from django.contrib.gis.db.backends.utils import SpatialOperator
from django.db.backends.postgresql.operations import DatabaseOperations
from django.db.models import Func
from typing import Any
BILATERAL: str
class PostGISOperator(SpatialOperator):
geography: Any = ...
raster: Any = ...
def __init__(self, geography: bool = ..., raster: bool = ..., **kwargs: Any) -> None: ...
def as_sql(self, connection: Any, lookup: Any, template_params: Any, *args: Any): ...
def check_raster(self, lookup: Any, template_params: Any): ...
class ST_Polygon(Func):
function: str = ...
def __init__(self, expr: Any) -> None: ...
def output_field(self): ...
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 = ...
def function_names(self): ...
def spatial_version(self): ...
def geo_db_type(self, f: Any): ...
def get_distance(self, f: Any, dist_val: Any, lookup_type: Any): ...
def get_geom_placeholder(self, f: Any, value: Any, compiler: Any): ...
def postgis_geos_version(self): ...
def postgis_lib_version(self): ...
def postgis_proj_version(self): ...
def postgis_version(self): ...
def postgis_full_version(self): ...
def postgis_version_tuple(self): ...
def proj_version_tuple(self): ...
def spatial_aggregate_name(self, agg_name: Any): ...
def geometry_columns(self): ...
def spatial_ref_sys(self): ...
def parse_raster(self, value: Any): ...
def distance_expr_for_lookup(self, lhs: Any, rhs: Any, **kwargs: Any): ...
def get_geometry_converter(self, expression: Any): ...
def get_area_att_for_field(self, field: Any): ...

View File

@@ -1,7 +0,0 @@
from typing import Any
def pack(structure: Any, data: Any): ...
def unpack(structure: Any, data: Any): ...
def chunk(data: Any, index: Any): ...
def from_pgraster(data: Any): ...
def to_pgraster(rast: Any): ...

View File

@@ -1,10 +0,0 @@
from django.db.backends.postgresql.schema import DatabaseSchemaEditor
from typing import Any
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): ...

View File

@@ -1,5 +0,0 @@
from django.contrib.gis.db.backends.base.adapter import WKTAdapter as WKTAdapter
from typing import Any
class SpatiaLiteAdapter(WKTAdapter):
def __conform__(self, protocol: Any): ...

View File

@@ -1,13 +0,0 @@
from django.db.backends.sqlite3.base import DatabaseWrapper as SQLiteDatabaseWrapper
from typing import Any
class DatabaseWrapper(SQLiteDatabaseWrapper):
SchemaEditorClass: Any = ...
client_class: Any = ...
features_class: Any = ...
introspection_class: Any = ...
ops_class: Any = ...
lib_spatialite_paths: Any = ...
def __init__(self, *args: Any, **kwargs: Any) -> None: ...
def get_new_connection(self, conn_params: Any): ...
def prepare_database(self) -> None: ...

View File

@@ -1,4 +0,0 @@
from django.db.backends.sqlite3.client import DatabaseClient as DatabaseClient
class SpatiaLiteClient(DatabaseClient):
executable_name: str = ...

View File

@@ -1,6 +0,0 @@
from django.contrib.gis.db.backends.base.features import BaseSpatialFeatures as BaseSpatialFeatures
from django.db.backends.sqlite3.features import DatabaseFeatures as SQLiteDatabaseFeatures
class DatabaseFeatures(BaseSpatialFeatures, SQLiteDatabaseFeatures):
supports_3d_storage: bool = ...
def supports_area_geodetic(self): ...

View File

@@ -1,13 +0,0 @@
from django.db.backends.sqlite3.introspection import (
DatabaseIntrospection as DatabaseIntrospection,
FlexibleFieldLookupDict as FlexibleFieldLookupDict,
)
from typing import Any
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): ...
def get_constraints(self, cursor: Any, table_name: Any): ...

View File

@@ -1,33 +0,0 @@
from django.contrib.gis.db.backends.base.models import SpatialRefSysMixin as SpatialRefSysMixin
from django.db import models as models
from typing import Any
class SpatialiteGeometryColumns(models.Model):
f_table_name: Any = ...
f_geometry_column: Any = ...
coord_dimension: Any = ...
srid: Any = ...
spatial_index_enabled: Any = ...
type: Any = ...
class Meta:
app_label: str = ...
db_table: str = ...
managed: bool = ...
@classmethod
def table_name_col(cls): ...
@classmethod
def geom_col_name(cls): ...
class SpatialiteSpatialRefSys(models.Model, SpatialRefSysMixin):
srid: Any = ...
auth_name: Any = ...
auth_srid: Any = ...
ref_sys_name: Any = ...
proj4text: Any = ...
srtext: Any = ...
class Meta:
app_label: str = ...
db_table: str = ...
managed: bool = ...
@property
def wkt(self): ...

View File

@@ -1,33 +0,0 @@
from django.contrib.gis.db.backends.base.operations import BaseSpatialOperations
from django.contrib.gis.db.backends.utils import SpatialOperator as SpatialOperator
from django.db.backends.sqlite3.operations import DatabaseOperations
from typing import Any
class SpatialiteNullCheckOperator(SpatialOperator):
def as_sql(self, connection: Any, lookup: Any, template_params: Any, sql_params: Any): ...
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 = ...
def unsupported_functions(self): ...
def spatial_version(self): ...
def geo_db_type(self, f: Any) -> None: ...
def get_distance(self, f: Any, value: Any, lookup_type: Any): ...
def geos_version(self): ...
def proj4_version(self): ...
def lwgeom_version(self): ...
def spatialite_version(self): ...
def spatialite_version_tuple(self): ...
def spatial_aggregate_name(self, agg_name: Any): ...
def geometry_columns(self): ...
def spatial_ref_sys(self): ...
def get_geometry_converter(self, expression: Any): ...

View File

@@ -1,24 +0,0 @@
from django.db.backends.sqlite3.schema import DatabaseSchemaEditor as DatabaseSchemaEditor
from typing import Any
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): ...
def column_sql(self, model: Any, field: Any, include_default: bool = ...): ...
def remove_geometry_metadata(self, model: Any, field: Any) -> None: ...
def create_model(self, model: Any) -> None: ...
def delete_model(self, model: Any, **kwargs: Any) -> None: ...
def add_field(self, model: Any, field: Any) -> None: ...
def remove_field(self, model: Any, field: Any) -> None: ...
def alter_db_table(
self, model: Any, old_db_table: Any, new_db_table: Any, disable_constraints: bool = ...
) -> None: ...

View File

@@ -1,10 +0,0 @@
from typing import Any, Optional
class SpatialOperator:
sql_template: Any = ...
op: Any = ...
func: Any = ...
def __init__(self, op: Optional[Any] = ..., func: Optional[Any] = ...) -> None: ...
@property
def default_template(self): ...
def as_sql(self, connection: Any, lookup: Any, template_params: Any, sql_params: Any): ...

View File

@@ -1,8 +1,6 @@
# noqa: F401
from django.db.models import *
from django.contrib.gis.db.models.aggregates import *
from django.contrib.gis.db.models.fields import (
GeometryCollectionField as GeometryCollectionField,
from .fields import (
GeometryField as GeometryField,
LineStringField as LineStringField,
MultiLineStringField as MultiLineStringField,
@@ -10,5 +8,6 @@ from django.contrib.gis.db.models.fields import (
MultiPolygonField as MultiPolygonField,
PointField as PointField,
PolygonField as PolygonField,
GeometryCollectionField as GeometryCollectionField,
RasterField as RasterField,
)

View File

@@ -1,37 +0,0 @@
from django.db.models import Aggregate
from typing import Any, Optional
class GeoAggregate(Aggregate):
function: Any = ...
is_extent: bool = ...
def output_field(self): ...
def as_sql(self, compiler: Any, connection: Any, function: Optional[Any] = ..., **extra_context: Any): ...
def as_oracle(self, compiler: Any, connection: Any, **extra_context: Any): ...
def resolve_expression(
self,
query: Optional[Any] = ...,
allow_joins: bool = ...,
reuse: Optional[Any] = ...,
summarize: bool = ...,
for_save: bool = ...,
): ...
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 = ...

View File

@@ -1,6 +1,9 @@
from typing import Any, Iterable, NamedTuple, Optional, TypeVar, Union, Tuple
from django.db.models.fields import Field, _ErrorMessagesToOverride, _FieldChoices, _ValidatorCallable
_Connection = Any
# __set__ value type
_ST = TypeVar("_ST")
# __get__ return type
@@ -12,7 +15,7 @@ class SRIDCacheEntry(NamedTuple):
geodetic: bool
spheroid: str
def get_srid_info(srid: int, connection: Any) -> SRIDCacheEntry: ...
def get_srid_info(srid: int, connection: _Connection) -> SRIDCacheEntry: ...
class BaseSpatialField(Field[_ST, _GT]):
def __init__(
@@ -41,25 +44,12 @@ class BaseSpatialField(Field[_ST, _GT]):
validators: Iterable[_ValidatorCallable] = ...,
error_messages: Optional[_ErrorMessagesToOverride] = ...,
): ...
def deconstruct(self): ...
def db_type(self, connection: Any): ...
def spheroid(self, connection: Any): ...
def units(self, connection: Any): ...
def units_name(self, connection: Any): ...
def geodetic(self, connection: Any): ...
def get_placeholder(self, value: Any, compiler: Any, connection: Any): ...
def get_srid(self, obj: Any): ...
def get_db_prep_value(self, value: Any, connection: Any, *args: Any, **kwargs: Any): ...
def get_raster_prep_value(self, value: Any, is_candidate: Any): ...
def get_prep_value(self, value: Any): ...
def spheroid(self, connection: _Connection) -> str: ...
def units(self, connection: _Connection) -> Any: ...
def units_name(self, connection: _Connection) -> str: ...
def geodetic(self, connection: _Connection) -> bool: ...
class GeometryField(BaseSpatialField):
description: Any = ...
form_class: Any = ...
geom_type: str = ...
geom_class: Any = ...
dim: Any = ...
geography: Any = ...
def __init__(
self,
verbose_name: Optional[Union[str, bytes]] = ...,
@@ -90,61 +80,12 @@ class GeometryField(BaseSpatialField):
validators: Iterable[_ValidatorCallable] = ...,
error_messages: Optional[_ErrorMessagesToOverride] = ...,
): ...
def deconstruct(self): ...
def formfield(self, **kwargs: Any): ...
def select_format(self, compiler: Any, sql: Any, params: Any): ...
class PointField(GeometryField):
geom_type: str = ...
geom_class: Any = ...
form_class: Any = ...
description: Any = ...
class LineStringField(GeometryField):
geom_type: str = ...
geom_class: Any = ...
form_class: Any = ...
description: Any = ...
class PolygonField(GeometryField):
geom_type: str = ...
geom_class: Any = ...
form_class: Any = ...
description: Any = ...
class MultiPointField(GeometryField):
geom_type: str = ...
geom_class: Any = ...
form_class: Any = ...
description: Any = ...
class MultiLineStringField(GeometryField):
geom_type: str = ...
geom_class: Any = ...
form_class: Any = ...
description: Any = ...
class MultiPolygonField(GeometryField):
geom_type: str = ...
geom_class: Any = ...
form_class: Any = ...
description: Any = ...
class GeometryCollectionField(GeometryField):
geom_type: str = ...
geom_class: Any = ...
form_class: Any = ...
description: Any = ...
class ExtentField(Field):
description: Any = ...
def get_internal_type(self): ...
def select_format(self, compiler: Any, sql: Any, params: Any): ...
class RasterField(BaseSpatialField):
description: Any = ...
geom_type: str = ...
geography: bool = ...
def db_type(self, connection: Any): ...
def from_db_value(self, value: Any, expression: Any, connection: Any): ...
def get_transform(self, name: Any): ...
class PointField(GeometryField): ...
class LineStringField(GeometryField): ...
class PolygonField(GeometryField): ...
class MultiPointField(GeometryField): ...
class MultiLineStringField(GeometryField): ...
class MultiPolygonField(GeometryField): ...
class GeometryCollectionField(GeometryField): ...
class RasterField(BaseSpatialField): ...

View File

@@ -1,168 +0,0 @@
from django.db.models import Func, Transform as StandardTransform
from typing import Any, Optional
NUMERIC_TYPES: Any
class GeoFuncMixin:
function: Any = ...
geom_param_pos: Any = ...
def __init__(self, *expressions: Any, **extra: Any) -> None: ...
def geo_field(self): ...
def as_sql(self, compiler: Any, connection: Any, function: Optional[Any] = ..., **extra_context: Any): ...
def resolve_expression(self, *args: Any, **kwargs: Any): ...
class GeoFunc(GeoFuncMixin, Func): ...
class GeomOutputGeoFunc(GeoFunc):
def output_field(self): ...
class SQLiteDecimalToFloatMixin:
def as_sqlite(self, compiler: Any, connection: Any, **extra_context: Any): ...
class OracleToleranceMixin:
tolerance: float = ...
def as_oracle(self, compiler: Any, connection: Any, **extra_context: Any): ...
class Area(OracleToleranceMixin, GeoFunc):
arity: int = ...
def output_field(self): ...
def as_sqlite(self, compiler: Any, connection: Any, **extra_context: Any): ...
class Azimuth(GeoFunc):
output_field: Any = ...
arity: int = ...
geom_param_pos: Any = ...
class AsGeoJSON(GeoFunc):
output_field: Any = ...
def __init__(
self, expression: Any, bbox: bool = ..., crs: bool = ..., precision: int = ..., **extra: Any
) -> None: ...
def as_oracle(self, compiler: Any, connection: Any, **extra_context: Any): ...
class AsGML(GeoFunc):
geom_param_pos: Any = ...
output_field: Any = ...
def __init__(self, expression: Any, version: int = ..., precision: int = ..., **extra: Any) -> None: ...
def as_oracle(self, compiler: Any, connection: Any, **extra_context: Any): ...
class AsKML(GeoFunc):
output_field: Any = ...
def __init__(self, expression: Any, precision: int = ..., **extra: Any) -> None: ...
class AsSVG(GeoFunc):
output_field: Any = ...
def __init__(self, expression: Any, relative: bool = ..., precision: int = ..., **extra: Any) -> None: ...
class AsWKB(GeoFunc):
output_field: Any = ...
arity: int = ...
class AsWKT(GeoFunc):
output_field: Any = ...
arity: int = ...
class BoundingCircle(OracleToleranceMixin, GeoFunc):
def __init__(self, expression: Any, num_seg: int = ..., **extra: Any) -> None: ...
def as_oracle(self, compiler: Any, connection: Any, **extra_context: Any): ...
class Centroid(OracleToleranceMixin, GeomOutputGeoFunc):
arity: int = ...
class Difference(OracleToleranceMixin, GeomOutputGeoFunc):
arity: int = ...
geom_param_pos: Any = ...
class DistanceResultMixin:
def output_field(self): ...
def source_is_geography(self): ...
class Distance(DistanceResultMixin, OracleToleranceMixin, GeoFunc):
geom_param_pos: Any = ...
spheroid: Any = ...
def __init__(self, expr1: Any, expr2: Any, spheroid: Optional[Any] = ..., **extra: Any) -> None: ...
def as_postgresql(self, compiler: Any, connection: Any, **extra_context: Any): ...
def as_sqlite(self, compiler: Any, connection: Any, **extra_context: Any): ...
class Envelope(GeomOutputGeoFunc):
arity: int = ...
class ForcePolygonCW(GeomOutputGeoFunc):
arity: int = ...
class GeoHash(GeoFunc):
output_field: Any = ...
def __init__(self, expression: Any, precision: Optional[Any] = ..., **extra: Any) -> None: ...
def as_mysql(self, compiler: Any, connection: Any, **extra_context: Any): ...
class GeometryDistance(GeoFunc):
output_field: Any = ...
arity: int = ...
function: str = ...
arg_joiner: str = ...
geom_param_pos: Any = ...
class Intersection(OracleToleranceMixin, GeomOutputGeoFunc):
arity: int = ...
geom_param_pos: Any = ...
class IsValid(OracleToleranceMixin, GeoFuncMixin, StandardTransform):
lookup_name: str = ...
output_field: Any = ...
def as_oracle(self, compiler: Any, connection: Any, **extra_context: Any): ...
class Length(DistanceResultMixin, OracleToleranceMixin, GeoFunc):
spheroid: Any = ...
def __init__(self, expr1: Any, spheroid: bool = ..., **extra: Any) -> None: ...
def as_postgresql(self, compiler: Any, connection: Any, **extra_context: Any): ...
def as_sqlite(self, compiler: Any, connection: Any, **extra_context: Any): ...
class LineLocatePoint(GeoFunc):
output_field: Any = ...
arity: int = ...
geom_param_pos: Any = ...
class MakeValid(GeomOutputGeoFunc): ...
class MemSize(GeoFunc):
output_field: Any = ...
arity: int = ...
class NumGeometries(GeoFunc):
output_field: Any = ...
arity: int = ...
class NumPoints(GeoFunc):
output_field: Any = ...
arity: int = ...
class Perimeter(DistanceResultMixin, OracleToleranceMixin, GeoFunc):
arity: int = ...
def as_postgresql(self, compiler: Any, connection: Any, **extra_context: Any): ...
def as_sqlite(self, compiler: Any, connection: Any, **extra_context: Any): ...
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: Any, connection: Any, **extra_context: Any): ...
class Union(OracleToleranceMixin, GeomOutputGeoFunc):
arity: int = ...
geom_param_pos: Any = ...

View File

@@ -1,126 +0,0 @@
from django.db.models import Lookup, Transform
from typing import Any
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): ...
rhs: Any = ...
def process_rhs(self, compiler: Any, connection: Any): ...
def get_rhs_op(self, connection: Any, rhs: Any): ...
def as_sql(self, compiler: Any, connection: 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): ...
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): ...
class DWithinLookup(DistanceLookupBase):
lookup_name: str = ...
sql_template: str = ...
def process_distance(self, compiler: Any, connection: Any): ...
def process_rhs(self, compiler: Any, connection: Any): ...
class DistanceLookupFromFunction(DistanceLookupBase):
def as_sql(self, compiler: Any, connection: Any): ...
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 = ...

View File

@@ -1,7 +0,0 @@
from django.db.models.query_utils import DeferredAttribute
from typing import Any, Optional
class SpatialProxy(DeferredAttribute):
def __init__(self, klass: Any, field: Any, load_func: Optional[Any] = ...) -> None: ...
def __get__(self, instance: Any, cls: Optional[Any] = ...): ...
def __set__(self, instance: Any, value: Any): ...

View File

@@ -1,18 +0,0 @@
from django.db import models as models
from typing import Any
class AreaField(models.FloatField):
geo_field: Any = ...
def __init__(self, geo_field: Any) -> None: ...
def get_prep_value(self, value: Any): ...
def get_db_prep_value(self, value: Any, connection: Any, prepared: bool = ...): ...
def from_db_value(self, value: Any, expression: Any, connection: Any): ...
def get_internal_type(self): ...
class DistanceField(models.FloatField):
geo_field: Any = ...
def __init__(self, geo_field: Any) -> None: ...
def get_prep_value(self, value: Any): ...
def get_db_prep_value(self, value: Any, connection: Any, prepared: bool = ...): ...
def from_db_value(self, value: Any, expression: Any, connection: Any): ...
def get_internal_type(self): ...

View File

@@ -1,28 +0,0 @@
from django.contrib.syndication.views import Feed as BaseFeed
from django.utils.feedgenerator import Atom1Feed, Rss201rev2Feed
from typing import Any
class GeoFeedMixin:
def georss_coords(self, coords: Any): ...
def add_georss_point(self, handler: Any, coords: Any, w3c_geo: bool = ...) -> None: ...
def add_georss_element(self, handler: Any, item: Any, w3c_geo: bool = ...) -> None: ...
class GeoRSSFeed(Rss201rev2Feed, GeoFeedMixin):
def rss_attributes(self): ...
def add_item_elements(self, handler: Any, item: Any) -> None: ...
def add_root_elements(self, handler: Any) -> None: ...
class GeoAtom1Feed(Atom1Feed, GeoFeedMixin):
def root_attributes(self): ...
def add_item_elements(self, handler: Any, item: Any) -> None: ...
def add_root_elements(self, handler: Any) -> None: ...
class W3CGeoFeed(Rss201rev2Feed, GeoFeedMixin):
def rss_attributes(self): ...
def add_item_elements(self, handler: Any, item: Any) -> None: ...
def add_root_elements(self, handler: Any) -> None: ...
class Feed(BaseFeed):
feed_type: Any = ...
def feed_extra_kwargs(self, obj: Any): ...
def item_extra_kwargs(self, item: Any): ...

View File

@@ -1,33 +0,0 @@
from django import forms as forms
from typing import Any, Optional
class GeometryField(forms.Field):
widget: Any = ...
geom_type: str = ...
default_error_messages: Any = ...
srid: Any = ...
def __init__(self, *, srid: Optional[Any] = ..., geom_type: Optional[Any] = ..., **kwargs: Any) -> None: ...
def to_python(self, value: Any): ...
def clean(self, value: Any): ...
def has_changed(self, initial: Any, data: 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 = ...

View File

@@ -1,34 +0,0 @@
from django.forms.widgets import Widget as Widget
from typing import Any, Optional
logger: Any
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: Optional[Any] = ...) -> None: ...
def serialize(self, value: Any): ...
def deserialize(self, value: Any): ...
def get_context(self, name: Any, value: Any, attrs: Any): ...
class OpenLayersWidget(BaseGeometryWidget):
template_name: str = ...
map_srid: int = ...
class Media:
css: Any = ...
js: Any = ...
def serialize(self, value: Any): ...
def deserialize(self, value: Any): ...
class OSMWidget(OpenLayersWidget):
template_name: str = ...
default_lon: int = ...
default_lat: int = ...
default_zoom: int = ...
def __init__(self, attrs: Optional[Any] = ...) -> None: ...

View File

@@ -1,15 +0,0 @@
from django.contrib.gis.gdal.error import (
GDALException as GDALException,
SRSException as SRSException,
check_err as check_err,
)
from django.contrib.gis.gdal.libgdal import (
GDAL_VERSION as GDAL_VERSION,
gdal_full_version as gdal_full_version,
gdal_version as gdal_version,
)
from django.contrib.gis.gdal.srs import (
AxisOrder as AxisOrder,
CoordTransform as CoordTransform,
SpatialReference as SpatialReference,
)

View File

@@ -1,5 +0,0 @@
from django.contrib.gis.ptr import CPointerBase as CPointerBase
from typing import Any
class GDALBase(CPointerBase):
null_ptr_exception_class: Any = ...

View File

@@ -1,15 +0,0 @@
from django.contrib.gis.gdal.base import GDALBase as GDALBase
from typing import Any
class DataSource(GDALBase):
destructor: Any = ...
encoding: Any = ...
ptr: Any = ...
driver: Any = ...
def __init__(self, ds_input: Any, ds_driver: bool = ..., write: bool = ..., encoding: str = ...) -> None: ...
def __getitem__(self, index: Any): ...
def __len__(self): ...
@property
def layer_count(self): ...
@property
def name(self): ...

View File

@@ -1,12 +0,0 @@
from django.contrib.gis.gdal.base import GDALBase as GDALBase
from typing import Any
class Driver(GDALBase):
ptr: Any = ...
def __init__(self, dr_input: Any) -> None: ...
@classmethod
def ensure_registered(cls) -> None: ...
@classmethod
def driver_count(cls): ...
@property
def name(self): ...

View File

@@ -1,25 +0,0 @@
from ctypes import Structure
from typing import Any
class OGREnvelope(Structure): ...
class Envelope:
def __init__(self, *args: Any) -> None: ...
def __eq__(self, other: Any) -> Any: ...
def expand_to_include(self, *args: Any): ...
@property
def min_x(self): ...
@property
def min_y(self): ...
@property
def max_x(self): ...
@property
def max_y(self): ...
@property
def ur(self): ...
@property
def ll(self): ...
@property
def tuple(self): ...
@property
def wkt(self): ...

View File

@@ -1,10 +0,0 @@
from 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: ...

View File

@@ -1,26 +0,0 @@
from django.contrib.gis.gdal.base import GDALBase as GDALBase
from typing import Any
class Feature(GDALBase):
destructor: Any = ...
ptr: Any = ...
def __init__(self, feat: Any, layer: Any) -> None: ...
def __getitem__(self, index: Any): ...
def __len__(self): ...
def __eq__(self, other: Any) -> Any: ...
@property
def encoding(self): ...
@property
def fid(self): ...
@property
def layer_name(self): ...
@property
def num_fields(self): ...
@property
def fields(self): ...
@property
def geom(self): ...
@property
def geom_type(self): ...
def get(self, field: Any): ...
def index(self, field_name: Any): ...

View File

@@ -1,61 +0,0 @@
from django.contrib.gis.gdal.base import GDALBase as GDALBase
from typing import Any
class Field(GDALBase):
ptr: Any = ...
__class__: Any = ...
def __init__(self, feat: Any, index: Any) -> None: ...
def as_double(self): ...
def as_int(self, is_64: bool = ...): ...
def as_string(self): ...
def as_datetime(self): ...
@property
def is_set(self): ...
@property
def name(self): ...
@property
def precision(self): ...
@property
def type(self): ...
@property
def type_name(self): ...
@property
def value(self): ...
@property
def width(self): ...
class OFTInteger(Field):
@property
def value(self): ...
@property
def type(self): ...
class OFTReal(Field):
@property
def value(self): ...
class OFTString(Field): ...
class OFTWideString(Field): ...
class OFTBinary(Field): ...
class OFTDate(Field):
@property
def value(self): ...
class OFTDateTime(Field):
@property
def value(self): ...
class OFTTime(Field):
@property
def value(self): ...
class OFTInteger64(OFTInteger): ...
class OFTIntegerList(Field): ...
class OFTRealList(Field): ...
class OFTStringList(Field): ...
class OFTWideStringList(Field): ...
class OFTInteger64List(Field): ...
OGRFieldTypes: Any
ROGRFieldTypes: Any

View File

@@ -1,138 +0,0 @@
from django.contrib.gis.gdal.base import GDALBase as GDALBase
from typing import Any, Optional
class OGRGeometry(GDALBase):
destructor: Any = ...
ptr: Any = ...
srs: Any = ...
__class__: Any = ...
def __init__(self, geom_input: Any, srs: Optional[Any] = ...) -> None: ...
@classmethod
def from_bbox(cls, bbox: Any): ...
@staticmethod
def from_json(geom_input: Any): ...
@classmethod
def from_gml(cls, gml_string: Any): ...
def __or__(self, other: Any): ...
def __and__(self, other: Any): ...
def __sub__(self, other: Any): ...
def __xor__(self, other: Any): ...
def __eq__(self, other: Any) -> Any: ...
@property
def dimension(self): ...
coord_dim: Any = ...
@property
def geom_count(self): ...
@property
def point_count(self): ...
@property
def num_points(self): ...
@property
def num_coords(self): ...
@property
def geom_type(self): ...
@property
def geom_name(self): ...
@property
def area(self): ...
@property
def envelope(self): ...
@property
def empty(self): ...
@property
def extent(self): ...
srid: Any = ...
@property
def geos(self): ...
@property
def gml(self): ...
@property
def hex(self): ...
@property
def json(self): ...
geojson: Any = ...
@property
def kml(self): ...
@property
def wkb_size(self): ...
@property
def wkb(self): ...
@property
def wkt(self): ...
@property
def ewkt(self): ...
def clone(self): ...
def close_rings(self) -> None: ...
def transform(self, coord_trans: Any, clone: bool = ...): ...
def intersects(self, other: Any): ...
def equals(self, other: Any): ...
def disjoint(self, other: Any): ...
def touches(self, other: Any): ...
def crosses(self, other: Any): ...
def within(self, other: Any): ...
def contains(self, other: Any): ...
def overlaps(self, other: Any): ...
@property
def boundary(self): ...
@property
def convex_hull(self): ...
def difference(self, other: Any): ...
def intersection(self, other: Any): ...
def sym_difference(self, other: Any): ...
def union(self, other: Any): ...
class Point(OGRGeometry):
@property
def x(self): ...
@property
def y(self): ...
@property
def z(self): ...
@property
def tuple(self): ...
coords: Any = ...
class LineString(OGRGeometry):
def __getitem__(self, index: Any): ...
def __len__(self): ...
@property
def tuple(self): ...
coords: Any = ...
@property
def x(self): ...
@property
def y(self): ...
@property
def z(self): ...
class LinearRing(LineString): ...
class Polygon(OGRGeometry):
def __len__(self): ...
def __getitem__(self, index: Any): ...
@property
def shell(self): ...
exterior_ring: Any = ...
@property
def tuple(self): ...
coords: Any = ...
@property
def point_count(self): ...
@property
def centroid(self): ...
class GeometryCollection(OGRGeometry):
def __getitem__(self, index: Any): ...
def __len__(self): ...
def add(self, geom: Any) -> None: ...
@property
def point_count(self): ...
@property
def tuple(self): ...
coords: Any = ...
class MultiPoint(GeometryCollection): ...
class MultiLineString(GeometryCollection): ...
class MultiPolygon(GeometryCollection): ...
GEO_CLASSES: Any

View File

@@ -1,12 +0,0 @@
from typing import Any
class OGRGeomType:
wkb25bit: int = ...
num: Any = ...
def __init__(self, type_input: Any) -> None: ...
def __eq__(self, other: Any) -> Any: ...
@property
def name(self): ...
@property
def django(self): ...
def to_multi(self) -> None: ...

View File

@@ -1,31 +0,0 @@
from django.contrib.gis.gdal.base import GDALBase as GDALBase
from typing import Any
class Layer(GDALBase):
ptr: Any = ...
def __init__(self, layer_ptr: Any, ds: Any) -> None: ...
def __getitem__(self, index: Any): ...
def __iter__(self) -> Any: ...
def __len__(self): ...
@property
def extent(self): ...
@property
def name(self): ...
@property
def num_fields(self): ...
@property
def geom_type(self): ...
@property
def srs(self): ...
@property
def fields(self): ...
@property
def field_types(self): ...
@property
def field_widths(self): ...
@property
def field_precisions(self): ...
spatial_filter: Any = ...
def get_fields(self, field_name: Any): ...
def get_geoms(self, geos: bool = ...): ...
def test_capability(self, capability: Any): ...

View File

@@ -1,20 +0,0 @@
from typing import Any
logger: Any
lib_path: Any
lib_names: Any
lgdal: Any
lwingdal: Any
def std_call(func: Any): ...
def gdal_version(): ...
def gdal_full_version(): ...
def gdal_version_info(): ...
GDAL_VERSION: Any
CPLErrorHandler: Any
def err_handler(error_class: Any, error_number: Any, message: Any) -> None: ...
def function(name: Any, args: Any, restype: Any): ...
set_error_handler: Any

Some files were not shown because too many files have changed in this diff Show More