69 Commits

Author SHA1 Message Date
sobolevn
cb1fa08a82 Version 1.7.0 released 2020-10-28 11:41:15 +03:00
proxy
e2f6abe579 add additional failing test for ModelAdmin generic (#505)
this will ensure that the generic constraint holds
2020-10-28 10:28:04 +03:00
proxy
ffb6551eb4 make BaseModelAdmin generic to properly type methods dealing with models (#504)
* make BaseModelAdmin generic to properly type the `obj` argument of ModelAdmin.delete_model
closes #482

* turn BaseModelAdmin into bound generic, run black

* add test for generic ModelAdmin
2020-10-28 01:02:43 +03:00
Nikita Sobolev
40c8bfa510 Update migration.pyi (#501)
* Update migration.pyi

* Fixes tests

* Fixes tests

* Fixes tests
2020-10-26 11:43:47 +03:00
Nikita Sobolev
402b7d563f Update http.pyi (#502) 2020-10-26 00:01:36 +03:00
Daniel Hillier
92eb068a04 Fix #224 add paths in mypy's mypy_path option or MYPYPATH env var for import discovery (#498) 2020-10-23 01:06:49 +03:00
Brian Helba
9d4d06f8b3 Allow overridable checks to be CheckMessage (#497)
* Allow overridable checks to be CheckMessage

The checks framework expects return types to be "List[CheckMessage]". This
allows all overridable checks-returning methods to return the more general
"CheckMessage", instead of the "Error" subclass.

* Ignore an incorrect usage of the checks API in Django 2.2
2020-10-22 15:12:36 +03:00
giladsheffer
d746e3f5e4 user parameter for login accepts None (#496)
Co-authored-by: Gilad Sheffer <gilad@orca.security>
2020-10-19 18:15:44 +03:00
proxy
8729a74f81 correct the type signature of AbstractBaseUser.set_password (#493) 2020-10-18 11:54:10 +03:00
Mark Story
56361b353e Fix typoand grammar in readme (#491) 2020-10-15 12:47:15 +03:00
Noam
b71c9ad282 Changed model exceptions to use more specific base classes. (#490) 2020-10-14 18:41:23 +03:00
Na'aman Hirschfeld
ce370ea79f Missing stubs (#467)
* adding missing db.backends typings and updated test

* added missing stubs

* reformatted files

* removed contrib.postgres.forms

* fixed test
2020-10-11 12:14:08 +03:00
Mariam Maarouf
2a732fd257 renderer = BaseRenderer instead of EngineMixin in Widget.render() (#481) 2020-10-07 20:19:12 +03:00
sobolevn
645ee97e78 Release 1.6.0 2020-10-01 10:57:05 +03:00
William Schwartz
5bc3759ea2 Template Loader.get_template_sources yield Origins (#476)
django.template.loaders.base.Loader.get_template_sources should yield Origins:
https://docs.djangoproject.com/en/3.1/ref/templates/api/#django.template.loaders.base.Loader.get_template_sources

Currently it's returning none. Objects that yield should be marked as iterables.
https://mypy.readthedocs.io/en/stable/kinds_of_types.html#generators
2020-09-30 01:21:38 +03:00
henribru
534a028ea2 Use AbstractBaseUser where possible (#475)
Fixes #431
2020-09-29 22:04:20 +03:00
Nicolas Delaby
87856754ea psycopg2-binary is faster to install (#473) 2020-09-29 12:50:11 +03:00
Szymon Pyżalski
2f7fac2eaf Allowed to use decimal in combinables (#454)
Co-authored-by: Szymon Pyżalski <spyzalski@egnyte.com>
2020-09-21 15:00:32 +03:00
Marti Raudsepp
5ff99fd047 Check arguments to django.urls.{path,re_path} functions (#464)
These functions were added in Django 2.0, but the stubs have been
incomplete since commit 9a68263257

The implementation is almost identical to `url()` from
`conf/urls/__init__.pyi`
2020-09-17 18:08:26 +03:00
Marti Raudsepp
f77ebcd22c Add db.models.constants stub module (#462) 2020-09-17 18:07:03 +03:00
Alexander Viklund
34b126e3da Fix wrong type for parse_until in template parser (#460) 2020-09-12 01:58:09 +03:00
Jonathan Moss
6e5f5f2cdb Allows FileField storage to be a Callable (#453)
* Allows FileField storage to be a Callable

The `storage` parameter of `FileField` (and by extension `ImageField`)
is not limited to just taking an instance of `Storage`. It can also take
a no-args callable that returns an instance of `Storage`.

* correcting linting issue in forms.pyi
2020-08-28 10:14:57 +03:00
James Perretta
95252cde60 Add "one_to_many", "one_to_one", "many_to_many," and "many_to_one" attributes to Field base class (#449)
* Add "_to_many" and "_to_one" bool attributes to Field base class.

* Remove unused import from test case.
2020-08-24 23:09:15 +03:00
Zach Waggoner
6ef2cf0331 Add force_color parameter to django.core.management.color.color_style (#448) 2020-08-21 12:41:51 +03:00
Alexander Viklund
9f3b95841b return type for translation.get_language should not be Optional (#446) 2020-08-18 12:41:52 +03:00
Federico Bond
e764b1cf4c Add route argument to ResolverMatch constructor (#442) 2020-08-12 15:36:01 +03:00
Šarūnas Nejus
8a64d87917 Output a more clear configuration error (#421)
* Output a more clear configuration error

* Performance related improvements in config read handling

* Check python 3.6 with travis

* Revert the .travis.yml py36 inclusion

* Added tests for input error handling

* Thanks isort, isorted it out

* Make exit() function a bit more aesthetic

* Single quote -> double quote docstrings

* Whitespace removed
2020-08-09 11:27:21 +03:00
Daniel Hillier
60f3f9dd9f Change select_for_update's 'of' type to Sequence[str] (#440) 2020-08-08 20:21:55 +03:00
Mantas Zimnickas
ca10ee9242 Fix staff_member_required annotations (#436)
* Fix staff_member_required annotations

`redirect_field_name` can be `None`.

* Reformat code with black
2020-07-31 10:35:35 +03:00
Sigurd Ljødal
f651f27ddf Fix type of update_fields parameter to Model.save (#437)
Sending in a single string leads to unexpected behavior and the method
accepts any iterable, not just sequences, of strings.

Technically sending in a single string is still allowed because a string
is an iterable of strings, but this way the intention of that argument
is clearer.
2020-07-31 10:14:35 +03:00
Kacper
3915aa0639 AttributeError exception in build_unannotated_method_args (#429)
* AttributeError exception in build_unannotated_method_args

* assigning [] to arguments if AttributeError

Co-authored-by: Kacper Szmigiel <szmigielkacper@gmai.com>
2020-07-21 15:31:19 +03:00
Nate Clark
97ec2ee43b Allow Field.widget to be a class or instance (#426)
According to source below, a Field's widget is allowed to be a class or instance of Widget.

156a2138db/django/forms/fields.py (L63-L66)
2020-07-16 00:51:29 +03:00
Daniel Hillier
19c73a106d admin: Allow ModelAdmin.actions to contain str (#425)
Strings are allowed in ModelAdmin.actions when they refer to a method on
the ModelAdmin subclass.
2020-07-14 10:43:50 +03:00
Kacper
92ef5d9d95 additional defer() to offset the effect of using the type before decl… (#424)
* additional defer() to offset the effect of using the type before declaring

* linter fix

* linter fix

* linter fix

* test case

Co-authored-by: Kacper Szmigiel <szmigielkacper@gmai.com>
2020-07-13 16:31:13 +03:00
Daniel Hillier
f16d1b8cb6 Improve *HttpResponse.getvalue() types (#422)
* Change returned type of StreamingHttpResponse.getvalue() to bytes

* Add HttpResponse.getvalue() definition
2020-07-11 15:57:35 +03:00
Alexander Viklund
c3cdc1c2d5 Allow more types for args to Paginator.get_page (#418) 2020-07-08 22:53:38 +03:00
Alexander Viklund
3704d0ab98 Don't change type of HttpRequest.user if type has been changed by subclassing (#415)
* Don't change type of HttpRequest.user if type has been changed by subclassing

* Asserts for typing

* Add tests

* Add description of HttpRequest subclassing to README

* Dummy to rebuild travis
2020-07-07 12:52:21 +03:00
Kacper
b1d619edb2 Bumped required Mypy version to newest in requirements (#414)
* pytest-mypy-plugins package newer version

* Revert "pytest-mypy-plugins package newer version"

This reverts commit 871347a86577a5dad867bc751689bbc06d2bcae0.

* update tests ignores for django

* Revert "update tests ignores for django"

This reverts commit 93fc66e311af62cf8cf5b79a72ab723bf3cf060a.

* changed required mypy version to the newest

Co-authored-by: Kacper Szmigiel <szmigielkacper@gmai.com>
2020-07-06 10:34:17 +03:00
Akseli Nelander
e680326c72 Fix partition signature (#413) 2020-07-01 15:35:35 +03:00
Étienne
574a87e68c explicitly mark value and label types on choices enum (#406)
In addition to the meta properties added
to the Choices enums, value and label are
set for each choice.
This commit explicitly types those instead of the
tuple value and non-extant label types
2020-06-22 11:08:09 +03:00
coiax
82ae1751ed 🐑 Update update_session_auth_hash() stub (#401)
The update_session_auth_hash() stub doesn't match the documented and
actual type that the function expects.

---

Resolves #400.
2020-06-16 19:19:11 +03:00
Ceesjan Luiten
69042783b1 Allow form.save() in CreateView / UpdateView (#374) 2020-06-12 21:12:56 +03:00
Kacper
391bbc59d5 WIP Fix ci/cd (#396)
* pytest-mypy-plugins package newer version

* Revert "pytest-mypy-plugins package newer version"

This reverts commit 871347a86577a5dad867bc751689bbc06d2bcae0.

* update tests ignores for django

* Revert "update tests ignores for django"

This reverts commit 93fc66e311af62cf8cf5b79a72ab723bf3cf060a.

* lets see what happen :)

Co-authored-by: Kacper Szmigiel <szmigielkacper@gmai.com>
2020-06-11 23:05:59 +03:00
Michael
28c76df3b2 Fix compatibility table in readme (#395) 2020-06-10 16:03:00 +03:00
Nikita Sobolev
3d2534ea8d Closes #392 2020-06-08 10:55:30 +03:00
Kacper
54f5f63e71 Issue 379 (#391)
* pytest-mypy-plugins package newer version

* Revert "pytest-mypy-plugins package newer version"

This reverts commit 871347a86577a5dad867bc751689bbc06d2bcae0.

* update tests ignores for django

* Revert "update tests ignores for django"

This reverts commit 93fc66e311af62cf8cf5b79a72ab723bf3cf060a.

* tests for python 3.8 WIP - initial commit

Co-authored-by: Kacper Szmigiel <szmigielkacper@gmai.com>
2020-06-06 14:28:28 +03:00
Kacper
4c5723d368 WIP Issue 388 (#390)
* updated mypy dependency

* update readme

* readme update v2

* pytest-mypy-plugins newer version

* updated pytest_mypy_plugins name

* update ignored errors for typechecking django test suite

Co-authored-by: Kacper Szmigiel <szmigielkacper@gmai.com>
2020-06-06 11:35:51 +03:00
Alexander Viklund
7e0e43135d BaseForm.prefix may be None (#389) 2020-06-04 21:24:42 +03:00
Kacper
e05b84e32d Issue 378 (#387)
* proper redirect return type annotations made with Literal

* Mapping instead of Dict type annotation for context in render() with test

* removed Union and Context

* typo

Co-authored-by: Kacper Szmigiel <szmigielkacper@gmai.com>

Add __init__ to OrderedSet (#381)

Issue 382 (#384)

* WIP fix, pushed for testing

* added _ prefix for internal types

Co-authored-by: Kacper Szmigiel <szmigielkacper@gmai.com>

Fix parameter types for assertJSONEqual/NotEqual (#385)

Add get_supported_language_variant (#386)

Issue 309 (#383)

* added tags for user models

* type test for HttpRequest.user

* test for User and AnonymousUser tags

* httrequest test fix

* checking python version fix for readibility

* Rewrite version check for readability

* Annotate is_authenticated/is_anonymous with Literal-type

* Add auth in INSTALLED_APPS in test

* Fix wrong type assertion in test

* Fix misconception of how branch-testing works

* Remove user from WSGIRequest

* Change HttpRequest-transformer to set user-type to include AnonymousUser

* Add check for anonymous_user_info=None to appease mypy

* Isort transformers/request

* Remove trailing whitespace

* Remove unused import

Co-authored-by: Kacper Szmigiel <szmigielkacper@gmai.com>

* fix formatting and unused import

* reformatted again

Co-authored-by: Kacper Szmigiel <szmigielkacper@gmai.com>
2020-06-03 23:46:30 +03:00
Alexander Viklund
71751d3795 Issue 309 (#383)
* added tags for user models

* type test for HttpRequest.user

* test for User and AnonymousUser tags

* httrequest test fix

* checking python version fix for readibility

* Rewrite version check for readability

* Annotate is_authenticated/is_anonymous with Literal-type

* Add auth in INSTALLED_APPS in test

* Fix wrong type assertion in test

* Fix misconception of how branch-testing works

* Remove user from WSGIRequest

* Change HttpRequest-transformer to set user-type to include AnonymousUser

* Add check for anonymous_user_info=None to appease mypy

* Isort transformers/request

* Remove trailing whitespace

* Remove unused import

Co-authored-by: Kacper Szmigiel <szmigielkacper@gmai.com>
2020-06-03 20:29:19 +03:00
Alexander Viklund
25f92e8e56 Add get_supported_language_variant (#386) 2020-06-03 20:04:19 +03:00
Alexander Viklund
28d47c7e93 Fix parameter types for assertJSONEqual/NotEqual (#385) 2020-06-03 20:03:59 +03:00
Kacper
197cb4058e Issue 382 (#384)
* WIP fix, pushed for testing

* added _ prefix for internal types

Co-authored-by: Kacper Szmigiel <szmigielkacper@gmai.com>
2020-06-03 12:58:03 +03:00
Alexander Viklund
dac2b31fb2 Add __init__ to OrderedSet (#381) 2020-06-02 13:56:11 +03:00
Kacper
8d2600136a Issue 355 (#376)
* Mapping instead of Dict type annotation for context in render() with test

* removed Union and Context

* typo

Co-authored-by: Kacper Szmigiel <szmigielkacper@gmai.com>
2020-06-01 19:41:57 +03:00
Pavel Savchenko
570772f973 Revert "Allow template render to string helper functions to accept Context (#372)" (#377)
This reverts commit 64cbb0f70e.
2020-06-01 14:34:21 +03:00
Anton Agestam
d5c1bfb12a Increase accuracy of ModelAdmin types (#375)
* Increase accuracy of ModelAdmin types

* Add comment for regression test
2020-05-30 00:24:47 +03:00
Pavel Savchenko
64cbb0f70e Allow template render to string helper functions to accept Context (#372)
* Add failing test case for render_to_string

* Allow Context objects in template render functions
2020-05-23 13:47:39 +03:00
Ville Skyttä
6f5a39625e Add release notes project URL (#365)
Background info at https://github.com/pypa/warehouse/pull/7882
2020-05-05 18:38:11 +03:00
Anthony Ricaud
bf604a0398 Add BaseForm._html_output (#364) 2020-04-30 14:36:55 +03:00
Ashish Bansal (mrphantom)
92c8dfc93f Fix wrong BaseCache typings (#363)
django.core.cache.backends.base.BaseCache were invalid. This commit
fixes them in accordance with [0].

[0] 447980e72a/django/core/cache/backends/base.py (L108)
2020-04-24 12:44:55 +03:00
Jorgen Phillips
c10c55052c Add add_to_class method to Model (#361)
* Add add_to_class method to Model

* Fix @classmethod decorator
2020-04-24 01:11:16 +03:00
Sergey Tikhonov
96914e466b Annotate AdminForm.__init__ (#359) 2020-04-16 18:22:21 +03:00
Onyeka Aghanenu
90ed7f332d Fix Modelform auto_id to accept Boolean type. (#356) 2020-04-13 19:04:18 +03:00
Kacper
a801501151 stub for _build_app_dict (#351)
Co-authored-by: Kacper Szmigiel <szmigielkacper@gmai.com>
2020-04-04 20:38:42 +03:00
Sid Mitra
8ea59985df Add RESTRICT and RestrictedError to django.db.models.deletion (#345)
* Add RESTRICT and RestrictedError to django.db.models.deletion

* Add black fomatting changes
2020-04-03 17:02:34 +03:00
Ceesjan Luiten
2964ed53d7 Improve type of BaseForms.files (#350)
This is valid Django, which failed to pass with the old type-defintion:

    class MyForm(Form):
      myparam = MultiFileField(...)

      self.clean(self, *args, **kwargs):
        self.files.getlist('myparam', [])
2020-03-31 10:16:02 +03:00
Stevan Milic
1b9176f994 Add state attribute to Model (#347) (#348)
Add from_db method to Model

Co-authored-by: Stevan Milic <stevan.milic@tradecore.com>
2020-03-30 10:35:40 +03:00
Nikita Sobolev
54d0d018c6 Minor type improvements after linting (#343) 2020-03-19 18:04:51 +03:00
255 changed files with 5591 additions and 269 deletions

3
.gitignore vendored
View File

@@ -11,4 +11,5 @@ pip-wheel-metadata/
.pytest_cache/
/.envrc
/.direnv
django-sources/
django-sources/
.venv/

View File

@@ -4,10 +4,19 @@ 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: |
@@ -29,7 +38,7 @@ jobs:
- name: Lint with black
python: 3.7
script: 'black --check django-stubs/'
script: 'black --check django-stubs/ setup.py'
- name: Lint plugin code with flake8
python: 3.7

View File

@@ -47,7 +47,10 @@ We rely on different `django` and `mypy` versions:
| django-stubs | mypy version | django version | python version
| ------------ | ---- | ---- | ---- |
| 1.3.0 | 0.750 | 2.2.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.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
| 0.12.x | old semantic analyzer (<0.711), dmypy support | 2.1.x | ^3.6
@@ -57,7 +60,7 @@ We rely on different `django` and `mypy` versions:
### Is this an official Django project?
No, it is not. We are indendepent from Django at the moment.
No, it is not. We are independent from Django at the moment.
There's a [proposal](https://github.com/django/deps/pull/65) to merge our project into the Django itself.
You show your support by linking the PR.
@@ -70,11 +73,11 @@ 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()`.
The 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.
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.
You can also run `mypy` with the [`--tb`](https://mypy.readthedocs.io/en/stable/command_line.html#cmdoption-mypy-show-traceback)
option to get extra information about errors.
### I cannot use QuerySet or Manager with type annotations
@@ -87,19 +90,24 @@ You can use strings instead: `'QuerySet[MyModel]'` and `'Manager[MyModel]'`, thi
Currently we [are working](https://github.com/django/django/pull/12405) on providing `__class_getitem__` to the classes where we need them.
### How can I use HttpRequest with custom user model?
### How can I create a HttpRequest that's guaranteed to have an authenticated user?
You can subclass standard request like so:
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 MyRequest(HttpRequest):
class AuthenticatedHttpRequest(HttpRequest):
user: MyUser
```
And then use `MyRequest` instead of standard `HttpRequest` inside your project.
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.
## Related projects
@@ -115,4 +123,4 @@ And then use `MyRequest` instead of standard `HttpRequest` inside your project.
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.
If you think you have a more generic typing issue, please refer to <https://github.com/python/mypy> and their Gitter.

View File

@@ -1,6 +1,6 @@
black
pytest-mypy-plugins==1.2.0
psycopg2
pytest-mypy-plugins==1.6.1
psycopg2-binary
flake8==3.7.9
flake8-pyi==19.3.0
isort==4.3.21

View File

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

View File

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

View File

@@ -1,7 +1,7 @@
from typing import Any, Callable, Dict, Iterator, List, Optional, Tuple, Union, Iterable
from django.contrib.auth.forms import AdminPasswordChangeForm
from django.forms.boundfield import BoundField
from django.forms.forms import BaseForm
from django.forms.utils import ErrorDict
from django.forms.widgets import Media, Widget
from django.utils.safestring import SafeText
@@ -23,7 +23,7 @@ class AdminForm:
readonly_fields: Any = ...
def __init__(
self,
form: AdminPasswordChangeForm,
form: BaseForm,
fieldsets: List[Tuple[None, Dict[str, List[str]]]],
prepopulated_fields: Dict[Any, Any],
readonly_fields: Optional[Iterable[Any]] = ...,

View File

@@ -1,5 +1,24 @@
from collections import OrderedDict
from typing import Any, Callable, Dict, Iterator, List, Optional, Sequence, Set, Tuple, Type, Union
from typing import (
Any,
Callable,
Dict,
Generic,
Iterator,
List,
Optional,
Sequence,
Set,
Tuple,
Type,
Union,
Mapping,
TypeVar,
)
from django.forms.forms import BaseForm
from django.forms.formsets import BaseFormSet
from typing_extensions import Literal, TypedDict
from django.contrib.admin.filters import ListFilter
from django.contrib.admin.models import LogEntry
@@ -7,7 +26,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 Error
from django.core.checks.messages import CheckMessage
from django.core.paginator import Paginator
from django.db.models.base import Model
from django.db.models.fields.related import ForeignKey, ManyToManyField, RelatedField
@@ -26,8 +45,10 @@ from django.db.models.fields import Field
IS_POPUP_VAR: str
TO_FIELD_VAR: str
HORIZONTAL: Any
VERTICAL: Any
HORIZONTAL: Literal[1] = ...
VERTICAL: Literal[2] = ...
_Direction = Union[Literal[1], Literal[2]]
def get_content_type_for_model(obj: Union[Type[Model], Model]) -> ContentType: ...
def get_ul_class(radio_style: int) -> str: ...
@@ -37,25 +58,43 @@ class IncorrectLookupParameters(Exception): ...
FORMFIELD_FOR_DBFIELD_DEFAULTS: Any
csrf_protect_m: Any
class BaseModelAdmin:
autocomplete_fields: Any = ...
raw_id_fields: Any = ...
fields: Any = ...
exclude: Any = ...
fieldsets: Any = ...
form: Any = ...
filter_vertical: Any = ...
filter_horizontal: Any = ...
radio_fields: Any = ...
prepopulated_fields: Any = ...
formfield_overrides: Any = ...
readonly_fields: Any = ...
ordering: Any = ...
sortable_by: Any = ...
class _OptionalFieldOpts(TypedDict, total=False):
classes: Sequence[str]
description: str
class _FieldOpts(_OptionalFieldOpts, total=True):
fields: Sequence[Union[str, Sequence[str]]]
# Workaround for mypy issue, a Sequence type should be preferred here.
# https://github.com/python/mypy/issues/8921
# _FieldsetSpec = Sequence[Tuple[Optional[str], _FieldOpts]]
_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]):
autocomplete_fields: Sequence[str] = ...
raw_id_fields: Sequence[str] = ...
fields: Sequence[Union[str, Sequence[str]]] = ...
exclude: Sequence[str] = ...
fieldsets: _FieldsetSpec = ...
form: Type[BaseForm] = ...
filter_vertical: Sequence[str] = ...
filter_horizontal: Sequence[str] = ...
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]]] = ...
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[Union[str, Error]]: ...
def check(self, **kwargs: Any) -> List[CheckMessage]: ...
def formfield_for_dbfield(
self, db_field: Field, request: Optional[HttpRequest], **kwargs: Any
) -> Optional[Field]: ...
@@ -72,28 +111,28 @@ class BaseModelAdmin:
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[Model] = ...) -> Optional[str]: ...
def get_view_on_site_url(self, obj: Optional[_ModelT] = ...) -> Optional[str]: ...
def get_empty_value_display(self) -> SafeText: ...
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_exclude(self, request: HttpRequest, obj: Optional[_ModelT] = ...) -> Any: ...
def get_fields(self, request: HttpRequest, obj: Optional[_ModelT] = ...) -> Sequence[Union[Callable, str]]: ...
def get_fieldsets(
self, request: HttpRequest, obj: Optional[Model] = ...
self, request: HttpRequest, obj: Optional[_ModelT] = ...
) -> 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[Model] = ...) -> Union[List[str], Tuple]: ...
def get_prepopulated_fields(self, request: HttpRequest, obj: Optional[Model] = ...) -> Dict[str, Tuple[str]]: ...
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_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[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_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_module_permission(self, request: HttpRequest) -> bool: ...
class ModelAdmin(BaseModelAdmin):
list_display: Sequence[Union[str, Callable]] = ...
class ModelAdmin(BaseModelAdmin[_ModelT]):
list_display: Sequence[Union[str, Callable[[_ModelT], 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]] = ...
@@ -101,43 +140,43 @@ class ModelAdmin(BaseModelAdmin):
list_max_show_all: int = ...
list_editable: Sequence[str] = ...
search_fields: Sequence[str] = ...
date_hierarchy: Optional[Any] = ...
date_hierarchy: Optional[str] = ...
save_as: bool = ...
save_as_continue: bool = ...
save_on_top: bool = ...
paginator: Any = ...
paginator: Type = ...
preserve_filters: bool = ...
inlines: Sequence[Type[InlineModelAdmin]] = ...
add_form_template: Any = ...
change_form_template: Any = ...
change_list_template: Any = ...
delete_confirmation_template: Any = ...
delete_selected_confirmation_template: Any = ...
object_history_template: Any = ...
popup_response_template: Any = ...
actions: Any = ...
add_form_template: str = ...
change_form_template: str = ...
change_list_template: str = ...
delete_confirmation_template: str = ...
delete_selected_confirmation_template: str = ...
object_history_template: str = ...
popup_response_template: str = ...
actions: Sequence[Union[Callable[[ModelAdmin, HttpRequest, QuerySet], None], str]] = ...
action_form: Any = ...
actions_on_top: bool = ...
actions_on_bottom: bool = ...
actions_selection_counter: bool = ...
model: Type[Model] = ...
model: Type[_ModelT] = ...
opts: Options = ...
admin_site: AdminSite = ...
def __init__(self, model: Type[Model], admin_site: Optional[AdminSite]) -> None: ...
def get_inline_instances(self, request: HttpRequest, obj: Optional[Model] = ...) -> List[InlineModelAdmin]: ...
def __init__(self, model: Type[_ModelT], admin_site: Optional[AdminSite]) -> None: ...
def get_inline_instances(self, request: HttpRequest, obj: Optional[_ModelT] = ...) -> 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[Any] = ..., change: bool = ..., **kwargs: Any): ...
def get_form(self, request: Any, obj: Optional[_ModelT] = ..., 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[Model]: ...
def get_object(self, request: HttpRequest, object_id: str, from_field: None = ...) -> Optional[_ModelT]: ...
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[Model] = ...) -> Iterator[Any]: ...
def get_formsets_with_inlines(self, request: HttpRequest, obj: Optional[_ModelT] = ...) -> Iterator[Any]: ...
def get_paginator(
self,
request: HttpRequest,
@@ -146,10 +185,10 @@ class ModelAdmin(BaseModelAdmin):
orphans: int = ...,
allow_empty_first_page: bool = ...,
) -> Paginator: ...
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 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 get_actions(self, request: HttpRequest) -> OrderedDict: ...
def get_action_choices(
self, request: HttpRequest, default_choices: List[Tuple[str, str]] = ...
@@ -178,8 +217,8 @@ class ModelAdmin(BaseModelAdmin):
fail_silently: bool = ...,
) -> None: ...
def save_form(self, request: Any, form: Any, change: Any): ...
def save_model(self, request: Any, obj: Any, form: Any, change: Any) -> None: ...
def delete_model(self, request: HttpRequest, obj: Model) -> None: ...
def save_model(self, request: Any, obj: _ModelT, form: Any, change: Any) -> None: ...
def delete_model(self, request: HttpRequest, obj: _ModelT) -> None: ...
def delete_queryset(self, request: HttpRequest, queryset: QuerySet) -> None: ...
def save_formset(self, request: Any, form: Any, formset: Any, change: Any) -> None: ...
def save_related(self, request: Any, form: Any, formsets: Any, change: Any) -> None: ...
@@ -190,19 +229,19 @@ class ModelAdmin(BaseModelAdmin):
add: bool = ...,
change: bool = ...,
form_url: str = ...,
obj: Optional[Any] = ...,
obj: Optional[_ModelT] = ...,
): ...
def response_add(
self, request: HttpRequest, obj: Model, post_url_continue: Optional[str] = ...
self, request: HttpRequest, obj: _ModelT, post_url_continue: Optional[str] = ...
) -> HttpResponse: ...
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_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_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[Model] = ...
self, request: HttpRequest, formsets: List[Any], inline_instances: List[Any], obj: Optional[_ModelT] = ...
) -> List[Any]: ...
def get_changeform_initial_data(self, request: HttpRequest) -> Dict[str, str]: ...
def changeform_view(
@@ -226,10 +265,10 @@ class ModelAdmin(BaseModelAdmin):
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):
model: Any = ...
fk_name: Any = ...
formset: Any = ...
class InlineModelAdmin(BaseModelAdmin[_ModelT]):
model: Type[_ModelT] = ...
fk_name: str = ...
formset: BaseFormSet = ...
extra: int = ...
min_num: Optional[int] = ...
max_num: Optional[int] = ...
@@ -238,18 +277,18 @@ class InlineModelAdmin(BaseModelAdmin):
verbose_name_plural: Optional[str] = ...
can_delete: bool = ...
show_change_link: bool = ...
classes: Any = ...
admin_site: Any = ...
classes: Optional[Sequence[str]] = ...
admin_site: AdminSite = ...
parent_model: Any = ...
opts: Any = ...
has_registered_model: Any = ...
def __init__(self, parent_model: Union[Type[Model], Model], admin_site: AdminSite) -> None: ...
def __init__(self, parent_model: Union[Type[_ModelT], _ModelT], admin_site: AdminSite) -> None: ...
@property
def media(self) -> Media: ...
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): ...
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): ...
class StackedInline(InlineModelAdmin): ...
class TabularInline(InlineModelAdmin): ...
class StackedInline(InlineModelAdmin[_ModelT]): ...
class TabularInline(InlineModelAdmin[_ModelT]): ...

View File

@@ -63,6 +63,7 @@ class AdminSite:
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]: ...
def get_app_list(self, request: WSGIRequest) -> List[Any]: ...
def index(self, request: WSGIRequest, extra_context: Optional[Dict[str, Any]] = ...) -> TemplateResponse: ...
def app_index(

View File

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

View File

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

View File

@@ -2,7 +2,7 @@ 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 AbstractUser, AnonymousUser
from django.contrib.auth.models import AnonymousUser
from django.core.handlers.wsgi import WSGIRequest
from django.db.models.base import Model
from django.db.models.options import Options
@@ -23,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: AbstractBaseUser, backend: Optional[Union[Type[ModelBackend], str]] = ...
request: HttpRequest, user: Optional[AbstractBaseUser], backend: Optional[Union[Type[ModelBackend], str]] = ...
) -> None: ...
def logout(request: HttpRequest) -> None: ...
def get_user_model() -> Type[Model]: ...
def get_user(request: HttpRequest) -> Union[AbstractBaseUser, AnonymousUser]: ...
def get_permission_codename(action: str, opts: Options) -> str: ...
def update_session_auth_hash(request: WSGIRequest, user: AbstractUser) -> None: ...
def update_session_auth_hash(request: HttpRequest, user: AbstractBaseUser) -> None: ...
default_app_config: str

View File

@@ -1,9 +1,15 @@
import sys
from typing import Any, Optional, Tuple, List, overload, TypeVar
from django.db.models.base import Model
from django.db import models
if sys.version_info < (3, 8):
from typing_extensions import Literal
else:
from typing import Literal
_T = TypeVar("_T", bound=Model)
class BaseUserManager(models.Manager[_T]):
@@ -20,10 +26,10 @@ class AbstractBaseUser(models.Model):
def get_username(self) -> str: ...
def natural_key(self) -> Tuple[str]: ...
@property
def is_anonymous(self) -> bool: ...
def is_anonymous(self) -> Literal[False]: ...
@property
def is_authenticated(self) -> bool: ...
def set_password(self, raw_password: Optional[str]) -> None: ...
def is_authenticated(self) -> Literal[True]: ...
def set_password(self, raw_password: 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,7 +1,7 @@
from typing import Any, Dict, Iterator, Optional
from django.contrib.auth.base_user import AbstractBaseUser
from django.contrib.auth.models import AbstractUser, User
from django.contrib.auth.models import 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: AbstractUser, *args: Any, **kwargs: Any) -> None: ...
def __init__(self, user: AbstractBaseUser, *args: Any, **kwargs: Any) -> None: ...
def clean_password2(self) -> str: ...
def save(self, commit: bool = ...) -> AbstractUser: ...
def save(self, commit: bool = ...) -> AbstractBaseUser: ...

View File

@@ -1,3 +1,4 @@
import sys
from typing import Any, Collection, Optional, Set, Tuple, Type, TypeVar, Union
from django.contrib.auth.backends import ModelBackend
@@ -9,6 +10,11 @@ from django.db.models.manager import EmptyManager
from django.db import models
if sys.version_info < (3, 8):
from typing_extensions import Literal
else:
from typing import Literal
_AnyUser = Union[Model, "AnonymousUser"]
def update_last_login(sender: Type[AbstractBaseUser], user: AbstractBaseUser, **kwargs: Any) -> None: ...
@@ -105,7 +111,7 @@ class AnonymousUser:
def has_perms(self, perm_list: Collection[str], obj: Optional[_AnyUser] = ...) -> bool: ...
def has_module_perms(self, module: str) -> bool: ...
@property
def is_anonymous(self) -> bool: ...
def is_anonymous(self) -> Literal[True]: ...
@property
def is_authenticated(self) -> bool: ...
def is_authenticated(self) -> Literal[False]: ...
def get_username(self) -> str: ...

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 Error
from django.core.checks.messages import CheckMessage
from django.db.models.base import Model
from django.db.models.expressions import Combinable
from django.db.models.fields.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[Error]: ...
def check(self, **kwargs: Any) -> List[CheckMessage]: ...
def get_cache_name(self) -> str: ...
def get_content_type(
self, obj: Optional[Model] = ..., id: Optional[int] = ..., using: Optional[str] = ...

View File

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

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

View File

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

View File

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

View File

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

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

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

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

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

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

View File

@@ -0,0 +1,37 @@
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,9 +1,6 @@
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
@@ -15,7 +12,7 @@ class SRIDCacheEntry(NamedTuple):
geodetic: bool
spheroid: str
def get_srid_info(srid: int, connection: _Connection) -> SRIDCacheEntry: ...
def get_srid_info(srid: int, connection: Any) -> SRIDCacheEntry: ...
class BaseSpatialField(Field[_ST, _GT]):
def __init__(
@@ -44,12 +41,25 @@ class BaseSpatialField(Field[_ST, _GT]):
validators: Iterable[_ValidatorCallable] = ...,
error_messages: Optional[_ErrorMessagesToOverride] = ...,
): ...
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: ...
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): ...
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]] = ...,
@@ -80,12 +90,61 @@ 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): ...
class LineStringField(GeometryField): ...
class PolygonField(GeometryField): ...
class MultiPointField(GeometryField): ...
class MultiLineStringField(GeometryField): ...
class MultiPolygonField(GeometryField): ...
class GeometryCollectionField(GeometryField): ...
class RasterField(BaseSpatialField): ...
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): ...

View File

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

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

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

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

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

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

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

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

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

View File

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

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

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

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

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

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

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

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

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

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

View File

@@ -0,0 +1,51 @@
from typing import Any
c_int_p: Any
register_all: Any
cleanup_all: Any
get_driver: Any
get_driver_by_name: Any
get_driver_count: Any
get_driver_name: Any
open_ds: Any
destroy_ds: Any
release_ds: Any
get_ds_name: Any
get_layer: Any
get_layer_by_name: Any
get_layer_count: Any
get_extent: Any
get_feature: Any
get_feature_count: Any
get_layer_defn: Any
get_layer_srs: Any
get_next_feature: Any
reset_reading: Any
test_capability: Any
get_spatial_filter: Any
set_spatial_filter: Any
set_spatial_filter_rect: Any
get_fd_geom_type: Any
get_fd_name: Any
get_feat_name: Any
get_field_count: Any
get_field_defn: Any
clone_feature: Any
destroy_feature: Any
feature_equal: Any
get_feat_geom_ref: Any
get_feat_field_count: Any
get_feat_field_defn: Any
get_fid: Any
get_field_as_datetime: Any
get_field_as_double: Any
get_field_as_integer: Any
get_field_as_integer64: Any
is_field_set: Any
get_field_as_string: Any
get_field_index: Any
get_field_name: Any
get_field_precision: Any
get_field_type: Any
get_field_type_name: Any
get_field_width: Any

View File

@@ -0,0 +1,14 @@
from typing import Any, Optional
def arg_byref(args: Any, offset: int = ...): ...
def ptr_byref(args: Any, offset: int = ...): ...
def check_const_string(result: Any, func: Any, cargs: Any, offset: Optional[Any] = ..., cpl: bool = ...): ...
def check_string(result: Any, func: Any, cargs: Any, offset: int = ..., str_result: bool = ...): ...
def check_envelope(result: Any, func: Any, cargs: Any, offset: int = ...): ...
def check_geom(result: Any, func: Any, cargs: Any): ...
def check_geom_offset(result: Any, func: Any, cargs: Any, offset: int = ...): ...
def check_srs(result: Any, func: Any, cargs: Any): ...
def check_arg_errcode(result: Any, func: Any, cargs: Any, cpl: bool = ...): ...
def check_errcode(result: Any, func: Any, cargs: Any, cpl: bool = ...) -> None: ...
def check_pointer(result: Any, func: Any, cargs: Any): ...
def check_str_arg(result: Any, func: Any, cargs: Any): ...

View File

@@ -0,0 +1,20 @@
from ctypes import c_char_p
from typing import Any, Optional
class gdal_char_p(c_char_p): ...
def bool_output(func: Any, argtypes: Any, errcheck: Optional[Any] = ...): ...
def double_output(func: Any, argtypes: Any, errcheck: bool = ..., strarg: bool = ..., cpl: bool = ...): ...
def geom_output(func: Any, argtypes: Any, offset: Optional[Any] = ...): ...
def int_output(func: Any, argtypes: Any, errcheck: Optional[Any] = ...): ...
def int64_output(func: Any, argtypes: Any): ...
def srs_output(func: Any, argtypes: Any): ...
def const_string_output(
func: Any, argtypes: Any, offset: Optional[Any] = ..., decoding: Optional[Any] = ..., cpl: bool = ...
): ...
def string_output(
func: Any, argtypes: Any, offset: int = ..., str_result: bool = ..., decoding: Optional[Any] = ...
): ...
def void_output(func: Any, argtypes: Any, errcheck: bool = ..., cpl: bool = ...): ...
def voidptr_output(func: Any, argtypes: Any, errcheck: bool = ...): ...
def chararray_output(func: Any, argtypes: Any, errcheck: bool = ...): ...

View File

@@ -0,0 +1,56 @@
from typing import Any
def env_func(f: Any, argtypes: Any): ...
def pnt_func(f: Any): ...
def topology_func(f: Any): ...
from_json: Any
to_json: Any
to_kml: Any
getx: Any
gety: Any
getz: Any
from_wkb: Any
from_wkt: Any
from_gml: Any
create_geom: Any
clone_geom: Any
get_geom_ref: Any
get_boundary: Any
geom_convex_hull: Any
geom_diff: Any
geom_intersection: Any
geom_sym_diff: Any
geom_union: Any
add_geom: Any
import_wkt: Any
destroy_geom: Any
to_wkb: Any
to_wkt: Any
to_gml: Any
get_wkbsize: Any
assign_srs: Any
get_geom_srs: Any
get_area: Any
get_centroid: Any
get_dims: Any
get_coord_dim: Any
set_coord_dim: Any
is_empty: Any
get_geom_count: Any
get_geom_name: Any
get_geom_type: Any
get_point_count: Any
get_point: Any
geom_close_rings: Any
ogr_contains: Any
ogr_crosses: Any
ogr_disjoint: Any
ogr_equals: Any
ogr_intersects: Any
ogr_overlaps: Any
ogr_touches: Any
ogr_within: Any
geom_transform: Any
geom_transform_to: Any
get_envelope: Any

View File

@@ -0,0 +1,48 @@
from typing import Any
register_all: Any
get_driver: Any
get_driver_by_name: Any
get_driver_count: Any
get_driver_description: Any
create_ds: Any
open_ds: Any
close_ds: Any
flush_ds: Any
copy_ds: Any
add_band_ds: Any
get_ds_description: Any
get_ds_driver: Any
get_ds_xsize: Any
get_ds_ysize: Any
get_ds_raster_count: Any
get_ds_raster_band: Any
get_ds_projection_ref: Any
set_ds_projection_ref: Any
get_ds_geotransform: Any
set_ds_geotransform: Any
get_ds_metadata: Any
set_ds_metadata: Any
get_ds_metadata_domain_list: Any
get_ds_metadata_item: Any
set_ds_metadata_item: Any
free_dsl: Any
get_ds_info: Any
band_io: Any
get_band_xsize: Any
get_band_ysize: Any
get_band_index: Any
get_band_description: Any
get_band_ds: Any
get_band_datatype: Any
get_band_color_interp: Any
get_band_nodata_value: Any
set_band_nodata_value: Any
delete_band_nodata_value: Any
get_band_statistics: Any
compute_band_statistics: Any
reproject_image: Any
auto_create_warped_vrt: Any
create_vsi_file_from_mem_buffer: Any
get_mem_buffer_from_vsi_file: Any
unlink_vsi_file: Any

View File

@@ -0,0 +1,36 @@
from typing import Any
def srs_double(f: Any): ...
def units_func(f: Any): ...
clone_srs: Any
new_srs: Any
release_srs: Any
destroy_srs: Any
srs_validate: Any
set_axis_strategy: Any
semi_major: Any
semi_minor: Any
invflattening: Any
from_wkt: Any
from_proj: Any
from_epsg: Any
from_xml: Any
from_user_input: Any
morph_to_esri: Any
morph_from_esri: Any
identify_epsg: Any
linear_units: Any
angular_units: Any
to_wkt: Any
to_proj: Any
to_pretty_wkt: Any
to_xml: Any
get_attr_value: Any
get_auth_name: Any
get_auth_code: Any
isgeographic: Any
islocal: Any
isprojected: Any
new_ct: Any
destroy_ct: Any

View File

@@ -0,0 +1,44 @@
from django.contrib.gis.gdal.raster.base import GDALRasterBase as GDALRasterBase
from typing import Any, Optional
class GDALBand(GDALRasterBase):
source: Any = ...
def __init__(self, source: Any, index: Any) -> None: ...
@property
def description(self): ...
@property
def width(self): ...
@property
def height(self): ...
@property
def pixel_count(self): ...
def statistics(self, refresh: bool = ..., approximate: bool = ...): ...
@property
def min(self): ...
@property
def max(self): ...
@property
def mean(self): ...
@property
def std(self): ...
@property
def nodata_value(self): ...
@nodata_value.setter
def nodata_value(self, value: Any) -> None: ...
def datatype(self, as_string: bool = ...): ...
def color_interp(self, as_string: bool = ...): ...
def data(
self,
data: Optional[Any] = ...,
offset: Optional[Any] = ...,
size: Optional[Any] = ...,
shape: Optional[Any] = ...,
as_memoryview: bool = ...,
): ...
class BandList(list):
source: Any = ...
def __init__(self, source: Any) -> None: ...
def __iter__(self) -> Any: ...
def __len__(self): ...
def __getitem__(self, index: Any): ...

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