django-types 0.19.0__py3-none-any.whl → 0.20.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- django-stubs/contrib/admin/__init__.pyi +1 -0
- django-stubs/contrib/admin/options.pyi +63 -35
- django-stubs/contrib/admin/templatetags/base.pyi +1 -1
- django-stubs/contrib/admin/views/main.pyi +2 -1
- django-stubs/contrib/auth/__init__.pyi +14 -4
- django-stubs/contrib/auth/base_user.pyi +1 -1
- django-stubs/contrib/auth/models.pyi +28 -26
- django-stubs/contrib/contenttypes/fields.pyi +1 -1
- django-stubs/contrib/contenttypes/models.pyi +3 -1
- django-stubs/contrib/postgres/fields/array.pyi +5 -3
- django-stubs/contrib/postgres/fields/citext.pyi +12 -6
- django-stubs/contrib/postgres/fields/hstore.pyi +4 -2
- django-stubs/core/cache/backends/base.pyi +9 -0
- django-stubs/core/exceptions.pyi +16 -11
- django-stubs/core/files/base.pyi +1 -1
- django-stubs/core/files/storage.pyi +2 -2
- django-stubs/core/mail/message.pyi +6 -6
- django-stubs/core/serializers/json.pyi +1 -1
- django-stubs/core/servers/basehttp.pyi +2 -2
- django-stubs/db/migrations/recorder.pyi +1 -1
- django-stubs/db/models/base.pyi +0 -1
- django-stubs/db/models/constraints.pyi +1 -0
- django-stubs/db/models/enums.pyi +9 -19
- django-stubs/db/models/expressions.pyi +1 -1
- django-stubs/db/models/fields/__init__.pyi +225 -75
- django-stubs/db/models/fields/files.pyi +2 -2
- django-stubs/db/models/fields/json.pyi +9 -5
- django-stubs/db/models/fields/related.pyi +40 -18
- django-stubs/db/models/fields/related_descriptors.pyi +3 -3
- django-stubs/db/models/functions/__init__.pyi +2 -0
- django-stubs/db/models/functions/comparison.pyi +8 -0
- django-stubs/db/models/manager.pyi +11 -6
- django-stubs/db/models/query.pyi +4 -1
- django-stubs/db/models/query_utils.pyi +1 -0
- django-stubs/db/transaction.pyi +7 -1
- django-stubs/forms/boundfield.pyi +3 -1
- django-stubs/forms/forms.pyi +28 -35
- django-stubs/forms/formsets.pyi +98 -63
- django-stubs/forms/models.pyi +20 -14
- django-stubs/forms/renderers.pyi +26 -13
- django-stubs/forms/utils.pyi +38 -11
- django-stubs/http/cookie.pyi +3 -1
- django-stubs/http/request.pyi +37 -14
- django-stubs/http/response.pyi +38 -30
- django-stubs/template/backends/base.pyi +14 -5
- django-stubs/template/backends/django.pyi +24 -3
- django-stubs/template/backends/dummy.pyi +7 -6
- django-stubs/template/backends/jinja2.pyi +20 -2
- django-stubs/template/backends/utils.pyi +3 -3
- django-stubs/template/base.pyi +1 -1
- django-stubs/template/context.pyi +2 -2
- django-stubs/template/library.pyi +79 -15
- django-stubs/template/loader.pyi +5 -3
- django-stubs/template/response.pyi +3 -3
- django-stubs/template/utils.pyi +6 -4
- django-stubs/test/client.pyi +176 -20
- django-stubs/test/testcases.pyi +2 -2
- django-stubs/test/utils.pyi +41 -55
- django-stubs/urls/conf.pyi +7 -0
- django-stubs/utils/datastructures.pyi +3 -3
- django-stubs/utils/deconstruct.pyi +10 -2
- django-stubs/utils/log.pyi +1 -1
- django-stubs/utils/six.pyi +1 -1
- django-stubs/views/decorators/csrf.pyi +1 -1
- {django_types-0.19.0.dist-info → django_types-0.20.0.dist-info}/METADATA +8 -3
- {django_types-0.19.0.dist-info → django_types-0.20.0.dist-info}/RECORD +68 -68
- {django_types-0.19.0.dist-info → django_types-0.20.0.dist-info}/WHEEL +1 -1
- {django_types-0.19.0.dist-info → django_types-0.20.0.dist-info}/LICENSE.txt +0 -0
|
@@ -6,6 +6,7 @@ from .filters import AllValuesFieldListFilter as AllValuesFieldListFilter
|
|
|
6
6
|
from .filters import BooleanFieldListFilter as BooleanFieldListFilter
|
|
7
7
|
from .filters import ChoicesFieldListFilter as ChoicesFieldListFilter
|
|
8
8
|
from .filters import DateFieldListFilter as DateFieldListFilter
|
|
9
|
+
from .filters import EmptyFieldListFilter as EmptyFieldListFilter
|
|
9
10
|
from .filters import FieldListFilter as FieldListFilter
|
|
10
11
|
from .filters import ListFilter as ListFilter
|
|
11
12
|
from .filters import RelatedFieldListFilter as RelatedFieldListFilter
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
from collections import OrderedDict
|
|
2
2
|
from collections.abc import Callable, Iterator, Mapping, Sequence
|
|
3
|
-
from typing import Any, Generic, TypeVar
|
|
3
|
+
from typing import Any, Generic, Iterable, TypeVar
|
|
4
4
|
from typing_extensions import Literal, TypedDict
|
|
5
5
|
|
|
6
6
|
from django.contrib.admin.filters import ListFilter
|
|
7
|
+
from django.contrib.admin.helpers import ActionForm
|
|
7
8
|
from django.contrib.admin.models import LogEntry
|
|
8
9
|
from django.contrib.admin.sites import AdminSite
|
|
9
10
|
from django.contrib.admin.views.main import ChangeList
|
|
@@ -20,7 +21,9 @@ from django.forms.fields import TypedChoiceField
|
|
|
20
21
|
from django.forms.forms import BaseForm
|
|
21
22
|
from django.forms.models import (
|
|
22
23
|
BaseInlineFormSet,
|
|
24
|
+
BaseModelFormSet,
|
|
23
25
|
ModelChoiceField,
|
|
26
|
+
ModelForm,
|
|
24
27
|
ModelMultipleChoiceField,
|
|
25
28
|
)
|
|
26
29
|
from django.forms.widgets import Media
|
|
@@ -81,8 +84,8 @@ class BaseModelAdmin(Generic[_ModelT]):
|
|
|
81
84
|
prepopulated_fields: Mapping[str, Sequence[str]] = ...
|
|
82
85
|
formfield_overrides: Mapping[type[Field[Any, Any]], Mapping[str, Any]] = ...
|
|
83
86
|
readonly_fields: Sequence[str | Callable[[_ModelT], Any]] = ...
|
|
84
|
-
ordering: Sequence[str] = ...
|
|
85
|
-
sortable_by: Sequence[str] = ...
|
|
87
|
+
ordering: Sequence[str] | None = ...
|
|
88
|
+
sortable_by: Sequence[str] | None = ...
|
|
86
89
|
view_on_site: bool = ...
|
|
87
90
|
show_full_result_count: bool = ...
|
|
88
91
|
checks_class: Any = ...
|
|
@@ -105,10 +108,12 @@ class BaseModelAdmin(Generic[_ModelT]):
|
|
|
105
108
|
request: HttpRequest | None,
|
|
106
109
|
**kwargs: Any
|
|
107
110
|
) -> ModelMultipleChoiceField: ...
|
|
108
|
-
def get_autocomplete_fields(self, request: HttpRequest) ->
|
|
111
|
+
def get_autocomplete_fields(self, request: HttpRequest) -> Sequence[str]: ...
|
|
109
112
|
def get_view_on_site_url(self, obj: _ModelT | None = ...) -> str | None: ...
|
|
110
113
|
def get_empty_value_display(self) -> SafeText: ...
|
|
111
|
-
def get_exclude(
|
|
114
|
+
def get_exclude(
|
|
115
|
+
self, request: HttpRequest, obj: _ModelT | None = ...
|
|
116
|
+
) -> Sequence[str]: ...
|
|
112
117
|
def get_fields(
|
|
113
118
|
self, request: HttpRequest, obj: _ModelT | None = ...
|
|
114
119
|
) -> Sequence[Callable[..., Any] | str]: ...
|
|
@@ -122,10 +127,13 @@ class BaseModelAdmin(Generic[_ModelT]):
|
|
|
122
127
|
def get_prepopulated_fields(
|
|
123
128
|
self, request: HttpRequest, obj: _ModelT | None = ...
|
|
124
129
|
) -> dict[str, tuple[str]]: ...
|
|
125
|
-
def get_queryset(self, request: HttpRequest) -> QuerySet[
|
|
130
|
+
def get_queryset(self, request: HttpRequest) -> QuerySet[_ModelT]: ...
|
|
126
131
|
def get_sortable_by(
|
|
127
132
|
self, request: HttpRequest
|
|
128
133
|
) -> list[Callable[..., Any]] | list[str] | tuple[Any, ...]: ...
|
|
134
|
+
def get_inlines(
|
|
135
|
+
self, request: HttpRequest, obj: _ModelT | None
|
|
136
|
+
) -> Iterable[type[InlineModelAdmin[Any]]]: ...
|
|
129
137
|
def lookup_allowed(self, lookup: str, value: str) -> bool: ...
|
|
130
138
|
def to_field_allowed(self, request: HttpRequest, to_field: str) -> bool: ...
|
|
131
139
|
def has_add_permission(self, request: HttpRequest) -> bool: ...
|
|
@@ -167,12 +175,12 @@ class ModelAdmin(BaseModelAdmin[_ModelT]):
|
|
|
167
175
|
Callable[[ModelAdmin[Any], HttpRequest, QuerySet[Any]], HttpResponse | None]
|
|
168
176
|
| str
|
|
169
177
|
] | None = ...
|
|
170
|
-
action_form:
|
|
178
|
+
action_form: type[ActionForm] = ...
|
|
171
179
|
actions_on_top: bool = ...
|
|
172
180
|
actions_on_bottom: bool = ...
|
|
173
181
|
actions_selection_counter: bool = ...
|
|
174
182
|
model: type[_ModelT] = ...
|
|
175
|
-
opts: Options[
|
|
183
|
+
opts: Options[_ModelT] = ...
|
|
176
184
|
admin_site: AdminSite = ...
|
|
177
185
|
def __init__(self, model: type[_ModelT], admin_site: AdminSite | None) -> None: ...
|
|
178
186
|
def get_inline_instances(
|
|
@@ -185,8 +193,12 @@ class ModelAdmin(BaseModelAdmin[_ModelT]):
|
|
|
185
193
|
def media(self) -> Media: ...
|
|
186
194
|
def get_model_perms(self, request: HttpRequest) -> dict[str, bool]: ...
|
|
187
195
|
def get_form(
|
|
188
|
-
self,
|
|
189
|
-
|
|
196
|
+
self,
|
|
197
|
+
request: HttpRequest,
|
|
198
|
+
obj: _ModelT | None = ...,
|
|
199
|
+
change: bool = ...,
|
|
200
|
+
**kwargs: Any
|
|
201
|
+
) -> type[ModelForm]: ...
|
|
190
202
|
def get_changelist(
|
|
191
203
|
self, request: HttpRequest, **kwargs: Any
|
|
192
204
|
) -> type[ChangeList]: ...
|
|
@@ -194,15 +206,19 @@ class ModelAdmin(BaseModelAdmin[_ModelT]):
|
|
|
194
206
|
def get_object(
|
|
195
207
|
self, request: HttpRequest, object_id: str, from_field: None = ...
|
|
196
208
|
) -> _ModelT | None: ...
|
|
197
|
-
def get_changelist_form(
|
|
198
|
-
|
|
209
|
+
def get_changelist_form(
|
|
210
|
+
self, request: HttpRequest, **kwargs: Any
|
|
211
|
+
) -> type[ModelForm]: ...
|
|
212
|
+
def get_changelist_formset(
|
|
213
|
+
self, request: HttpRequest, **kwargs: Any
|
|
214
|
+
) -> type[BaseModelFormSet]: ...
|
|
199
215
|
def get_formsets_with_inlines(
|
|
200
216
|
self, request: HttpRequest, obj: _ModelT | None = ...
|
|
201
217
|
) -> Iterator[Any]: ...
|
|
202
218
|
def get_paginator(
|
|
203
219
|
self,
|
|
204
220
|
request: HttpRequest,
|
|
205
|
-
queryset: QuerySet[
|
|
221
|
+
queryset: QuerySet[_ModelT],
|
|
206
222
|
per_page: int,
|
|
207
223
|
orphans: int = ...,
|
|
208
224
|
allow_empty_first_page: bool = ...,
|
|
@@ -235,12 +251,6 @@ class ModelAdmin(BaseModelAdmin[_ModelT]):
|
|
|
235
251
|
self, request: HttpRequest, queryset: QuerySet[Any], search_term: str
|
|
236
252
|
) -> tuple[QuerySet[Any], bool]: ...
|
|
237
253
|
def get_preserved_filters(self, request: HttpRequest) -> str: ...
|
|
238
|
-
def _get_edited_object_pks(
|
|
239
|
-
self, request: HttpRequest, prefix: str
|
|
240
|
-
) -> list[str]: ...
|
|
241
|
-
def _get_list_editable_queryset(
|
|
242
|
-
self, request: HttpRequest, prefix: str
|
|
243
|
-
) -> QuerySet[Any]: ...
|
|
244
254
|
def construct_change_message(
|
|
245
255
|
self,
|
|
246
256
|
request: HttpRequest,
|
|
@@ -256,29 +266,39 @@ class ModelAdmin(BaseModelAdmin[_ModelT]):
|
|
|
256
266
|
extra_tags: str = ...,
|
|
257
267
|
fail_silently: bool = ...,
|
|
258
268
|
) -> None: ...
|
|
259
|
-
def save_form(
|
|
269
|
+
def save_form(
|
|
270
|
+
self, request: HttpRequest, form: ModelForm, change: bool
|
|
271
|
+
) -> _ModelT: ...
|
|
260
272
|
def save_model(
|
|
261
|
-
self, request:
|
|
273
|
+
self, request: HttpRequest, obj: _ModelT, form: ModelForm, change: bool
|
|
262
274
|
) -> None: ...
|
|
263
275
|
def delete_model(self, request: HttpRequest, obj: _ModelT) -> None: ...
|
|
264
276
|
def delete_queryset(
|
|
265
|
-
self, request: HttpRequest, queryset: QuerySet[
|
|
277
|
+
self, request: HttpRequest, queryset: QuerySet[_ModelT]
|
|
266
278
|
) -> None: ...
|
|
267
279
|
def save_formset(
|
|
268
|
-
self,
|
|
280
|
+
self,
|
|
281
|
+
request: HttpRequest,
|
|
282
|
+
form: ModelForm,
|
|
283
|
+
formset: BaseModelFormSet,
|
|
284
|
+
change: bool,
|
|
269
285
|
) -> None: ...
|
|
270
286
|
def save_related(
|
|
271
|
-
self,
|
|
287
|
+
self,
|
|
288
|
+
request: HttpRequest,
|
|
289
|
+
form: ModelForm,
|
|
290
|
+
formsets: BaseModelFormSet,
|
|
291
|
+
change: bool,
|
|
272
292
|
) -> None: ...
|
|
273
293
|
def render_change_form(
|
|
274
294
|
self,
|
|
275
|
-
request:
|
|
276
|
-
context: Any,
|
|
295
|
+
request: HttpRequest,
|
|
296
|
+
context: Mapping[str, Any],
|
|
277
297
|
add: bool = ...,
|
|
278
298
|
change: bool = ...,
|
|
279
299
|
form_url: str = ...,
|
|
280
300
|
obj: _ModelT | None = ...,
|
|
281
|
-
) ->
|
|
301
|
+
) -> TemplateResponse: ...
|
|
282
302
|
def response_add(
|
|
283
303
|
self, request: HttpRequest, obj: _ModelT, post_url_continue: str | None = ...
|
|
284
304
|
) -> HttpResponse: ...
|
|
@@ -290,12 +310,14 @@ class ModelAdmin(BaseModelAdmin[_ModelT]):
|
|
|
290
310
|
self, request: HttpRequest, obj: _ModelT
|
|
291
311
|
) -> HttpResponseRedirect: ...
|
|
292
312
|
def response_action(
|
|
293
|
-
self, request: HttpRequest, queryset: QuerySet[
|
|
313
|
+
self, request: HttpRequest, queryset: QuerySet[_ModelT]
|
|
294
314
|
) -> HttpResponseBase | None: ...
|
|
295
315
|
def response_delete(
|
|
296
316
|
self, request: HttpRequest, obj_display: str, obj_id: int
|
|
297
317
|
) -> HttpResponse: ...
|
|
298
|
-
def render_delete_form(
|
|
318
|
+
def render_delete_form(
|
|
319
|
+
self, request: HttpRequest, context: Mapping[str, Any]
|
|
320
|
+
) -> TemplateResponse: ...
|
|
299
321
|
def get_inline_formsets(
|
|
300
322
|
self,
|
|
301
323
|
request: HttpRequest,
|
|
@@ -310,7 +332,7 @@ class ModelAdmin(BaseModelAdmin[_ModelT]):
|
|
|
310
332
|
object_id: str | None = ...,
|
|
311
333
|
form_url: str = ...,
|
|
312
334
|
extra_context: dict[str, bool] | None = ...,
|
|
313
|
-
) ->
|
|
335
|
+
) -> TemplateResponse: ...
|
|
314
336
|
def autocomplete_view(self, request: HttpRequest) -> JsonResponse: ...
|
|
315
337
|
def add_view(
|
|
316
338
|
self, request: HttpRequest, form_url: str = ..., extra_context: None = ...
|
|
@@ -329,10 +351,16 @@ class ModelAdmin(BaseModelAdmin[_ModelT]):
|
|
|
329
351
|
self, objs: QuerySet[Any], request: HttpRequest
|
|
330
352
|
) -> tuple[list[Any], dict[Any, Any], set[Any], list[Any]]: ...
|
|
331
353
|
def delete_view(
|
|
332
|
-
self,
|
|
333
|
-
|
|
354
|
+
self,
|
|
355
|
+
request: HttpRequest,
|
|
356
|
+
object_id: str,
|
|
357
|
+
extra_context: dict[str, str] | None = ...,
|
|
358
|
+
) -> HttpResponse: ...
|
|
334
359
|
def history_view(
|
|
335
|
-
self,
|
|
360
|
+
self,
|
|
361
|
+
request: HttpRequest,
|
|
362
|
+
object_id: str,
|
|
363
|
+
extra_context: dict[str, str] | None = ...,
|
|
336
364
|
) -> HttpResponse: ...
|
|
337
365
|
def get_formset_kwargs(
|
|
338
366
|
self,
|
|
@@ -374,8 +402,8 @@ class InlineModelAdmin(BaseModelAdmin[_ModelT]):
|
|
|
374
402
|
self, request: HttpRequest, obj: _ModelT | None = ..., **kwargs: Any
|
|
375
403
|
) -> int | None: ...
|
|
376
404
|
def get_formset(
|
|
377
|
-
self, request:
|
|
378
|
-
) ->
|
|
405
|
+
self, request: HttpRequest, obj: _ModelT | None = ..., **kwargs: Any
|
|
406
|
+
) -> type[BaseInlineFormSet]: ...
|
|
379
407
|
|
|
380
408
|
class StackedInline(InlineModelAdmin[_ModelT]): ...
|
|
381
409
|
class TabularInline(InlineModelAdmin[_ModelT]): ...
|
|
@@ -10,7 +10,7 @@ class InclusionAdminNode(InclusionNode):
|
|
|
10
10
|
args: list[Any]
|
|
11
11
|
func: Callable[..., Any]
|
|
12
12
|
kwargs: dict[Any, Any]
|
|
13
|
-
takes_context: bool
|
|
13
|
+
takes_context: bool # pyright: ignore[reportIncompatibleVariableOverride]
|
|
14
14
|
template_name: str = ...
|
|
15
15
|
def __init__(
|
|
16
16
|
self,
|
|
@@ -12,6 +12,7 @@ from django.db.models.expressions import Combinable, CombinedExpression, OrderBy
|
|
|
12
12
|
from django.db.models.options import Options
|
|
13
13
|
from django.db.models.query import QuerySet
|
|
14
14
|
from django.forms.formsets import BaseFormSet
|
|
15
|
+
from django.forms.models import ModelForm
|
|
15
16
|
|
|
16
17
|
ALL_VAR: str
|
|
17
18
|
ORDER_VAR: str
|
|
@@ -47,7 +48,7 @@ class ChangeList:
|
|
|
47
48
|
queryset: Any = ...
|
|
48
49
|
title: Any = ...
|
|
49
50
|
pk_attname: Any = ...
|
|
50
|
-
formset: BaseFormSet | None
|
|
51
|
+
formset: BaseFormSet[ModelForm] | None
|
|
51
52
|
def __init__(
|
|
52
53
|
self,
|
|
53
54
|
request: WSGIRequest,
|
|
@@ -2,7 +2,7 @@ from typing import Any
|
|
|
2
2
|
|
|
3
3
|
from django.contrib.auth.backends import ModelBackend
|
|
4
4
|
from django.contrib.auth.base_user import AbstractBaseUser
|
|
5
|
-
from django.contrib.auth.models import AnonymousUser
|
|
5
|
+
from django.contrib.auth.models import AbstractUser, AnonymousUser
|
|
6
6
|
from django.db.models.options import Options
|
|
7
7
|
from django.http.request import HttpRequest
|
|
8
8
|
from django.test.client import Client
|
|
@@ -18,15 +18,25 @@ REDIRECT_FIELD_NAME: str
|
|
|
18
18
|
|
|
19
19
|
def load_backend(path: str) -> ModelBackend: ...
|
|
20
20
|
def get_backends() -> list[ModelBackend]: ...
|
|
21
|
-
def authenticate(
|
|
21
|
+
def authenticate(
|
|
22
|
+
request: HttpRequest | None = ..., **credentials: Any
|
|
23
|
+
) -> AbstractUser | None: ...
|
|
22
24
|
def login(
|
|
23
25
|
request: HttpRequest,
|
|
24
26
|
user: AbstractBaseUser | None,
|
|
25
27
|
backend: type[ModelBackend] | str | None = ...,
|
|
26
28
|
) -> None: ...
|
|
27
29
|
def logout(request: HttpRequest) -> None: ...
|
|
28
|
-
def
|
|
29
|
-
|
|
30
|
+
async def aauthenticate(
|
|
31
|
+
request: HttpRequest = ..., **credentials: Any
|
|
32
|
+
) -> AbstractBaseUser | None: ...
|
|
33
|
+
async def alogin(
|
|
34
|
+
request: HttpRequest,
|
|
35
|
+
user: AbstractBaseUser | None,
|
|
36
|
+
backend: type[ModelBackend] | str | None = ...,
|
|
37
|
+
) -> None: ...
|
|
38
|
+
def get_user_model() -> type[AbstractUser]: ...
|
|
39
|
+
def get_user(request: HttpRequest | Client) -> AbstractUser | AnonymousUser: ...
|
|
30
40
|
def get_permission_codename(action: str, opts: Options[Any]) -> str: ...
|
|
31
41
|
def update_session_auth_hash(request: HttpRequest, user: AbstractBaseUser) -> None: ...
|
|
32
42
|
|
|
@@ -14,7 +14,7 @@ class BaseUserManager(models.Manager[_ModelT]):
|
|
|
14
14
|
def make_random_password(
|
|
15
15
|
self, length: int = ..., allowed_chars: str = ...
|
|
16
16
|
) -> str: ...
|
|
17
|
-
def get_by_natural_key(self, username: str
|
|
17
|
+
def get_by_natural_key(self, username: str) -> _ModelT: ...
|
|
18
18
|
|
|
19
19
|
class AbstractBaseUser(models.Model):
|
|
20
20
|
REQUIRED_FIELDS: list[str] = ...
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
from collections.abc import
|
|
1
|
+
from collections.abc import Iterable
|
|
2
2
|
from typing import Any, ClassVar, TypeVar
|
|
3
|
-
from typing_extensions import Literal, Self
|
|
3
|
+
from typing_extensions import Literal, Never, Self
|
|
4
4
|
|
|
5
5
|
from django.contrib.auth.backends import ModelBackend
|
|
6
6
|
from django.contrib.auth.base_user import AbstractBaseUser as AbstractBaseUser
|
|
@@ -9,9 +9,9 @@ from django.contrib.auth.validators import UnicodeUsernameValidator
|
|
|
9
9
|
from django.contrib.contenttypes.models import ContentType
|
|
10
10
|
from django.db import models
|
|
11
11
|
from django.db.models.base import Model
|
|
12
|
-
from django.db.models.manager import EmptyManager
|
|
12
|
+
from django.db.models.manager import EmptyManager, ManyToManyRelatedManager
|
|
13
13
|
|
|
14
|
-
_AnyUser =
|
|
14
|
+
_AnyUser = AbstractUser | AnonymousUser
|
|
15
15
|
|
|
16
16
|
_T = TypeVar("_T", bound=Model)
|
|
17
17
|
|
|
@@ -34,6 +34,7 @@ class Permission(models.Model):
|
|
|
34
34
|
content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE)
|
|
35
35
|
codename = models.CharField(max_length=100)
|
|
36
36
|
def natural_key(self) -> tuple[str, str, str]: ...
|
|
37
|
+
group_set = ManyToManyRelatedManager["Group", "Permission"]()
|
|
37
38
|
|
|
38
39
|
_GroupT = TypeVar("_GroupT", bound=Group)
|
|
39
40
|
|
|
@@ -45,22 +46,24 @@ class Group(models.Model):
|
|
|
45
46
|
|
|
46
47
|
name = models.CharField(max_length=150)
|
|
47
48
|
permissions = models.ManyToManyField[Permission, Any](Permission)
|
|
48
|
-
def natural_key(self) -> tuple[str
|
|
49
|
+
def natural_key(self) -> tuple[str]: ...
|
|
50
|
+
user_set = ManyToManyRelatedManager["PermissionsMixin", "Group"]()
|
|
49
51
|
|
|
50
52
|
class UserManager(BaseUserManager[_T]):
|
|
53
|
+
use_in_migrations: bool = ...
|
|
51
54
|
def create_user(
|
|
52
55
|
self,
|
|
53
56
|
username: str,
|
|
54
57
|
email: str | None = ...,
|
|
55
58
|
password: str | None = ...,
|
|
56
|
-
**extra_fields: Any
|
|
59
|
+
**extra_fields: Any,
|
|
57
60
|
) -> _T: ...
|
|
58
61
|
def create_superuser(
|
|
59
62
|
self,
|
|
60
63
|
username: str,
|
|
61
64
|
email: str | None,
|
|
62
65
|
password: str | None,
|
|
63
|
-
**extra_fields: Any
|
|
66
|
+
**extra_fields: Any,
|
|
64
67
|
) -> _T: ...
|
|
65
68
|
def with_perm(
|
|
66
69
|
self,
|
|
@@ -69,26 +72,24 @@ class UserManager(BaseUserManager[_T]):
|
|
|
69
72
|
include_superusers: bool = ...,
|
|
70
73
|
backend: type[ModelBackend] | str | None = ...,
|
|
71
74
|
obj: Model | None = ...,
|
|
72
|
-
) ->
|
|
75
|
+
) -> Self | UserManager[_T]: ...
|
|
73
76
|
|
|
74
77
|
class PermissionsMixin(models.Model):
|
|
75
78
|
is_superuser = models.BooleanField()
|
|
76
79
|
groups = models.ManyToManyField[Group, Any](Group)
|
|
77
80
|
user_permissions = models.ManyToManyField[Permission, Any](Permission)
|
|
78
|
-
def get_user_permissions(self, obj:
|
|
79
|
-
def get_group_permissions(self, obj:
|
|
80
|
-
def get_all_permissions(self, obj:
|
|
81
|
-
def has_perm(self, perm: str, obj:
|
|
82
|
-
def has_perms(
|
|
83
|
-
self, perm_list: Collection[str], obj: _AnyUser | None = ...
|
|
84
|
-
) -> bool: ...
|
|
81
|
+
def get_user_permissions(self, obj: Model | None = ...) -> set[str]: ...
|
|
82
|
+
def get_group_permissions(self, obj: Model | None = ...) -> set[str]: ...
|
|
83
|
+
def get_all_permissions(self, obj: Model | None = ...) -> set[str]: ...
|
|
84
|
+
def has_perm(self, perm: str, obj: Model | None = ...) -> bool: ...
|
|
85
|
+
def has_perms(self, perm_list: Iterable[str], obj: Model | None = ...) -> bool: ...
|
|
85
86
|
def has_module_perms(self, app_label: str) -> bool: ...
|
|
86
87
|
|
|
87
88
|
class AbstractUser(AbstractBaseUser, PermissionsMixin):
|
|
88
89
|
username_validator: UnicodeUsernameValidator = ...
|
|
89
90
|
|
|
90
91
|
username = models.CharField(max_length=150)
|
|
91
|
-
first_name = models.CharField(max_length=
|
|
92
|
+
first_name = models.CharField(max_length=150, blank=True)
|
|
92
93
|
last_name = models.CharField(max_length=150, blank=True)
|
|
93
94
|
email = models.EmailField(blank=True)
|
|
94
95
|
is_staff = models.BooleanField()
|
|
@@ -100,33 +101,34 @@ class AbstractUser(AbstractBaseUser, PermissionsMixin):
|
|
|
100
101
|
def get_full_name(self) -> str: ...
|
|
101
102
|
def get_short_name(self) -> str: ...
|
|
102
103
|
def email_user(
|
|
103
|
-
self, subject: str, message: str, from_email: str = ..., **kwargs: Any
|
|
104
|
+
self, subject: str, message: str, from_email: str | None = ..., **kwargs: Any
|
|
104
105
|
) -> None: ...
|
|
105
106
|
|
|
106
|
-
class User(AbstractUser):
|
|
107
107
|
objects: ClassVar[UserManager[Self]] # type: ignore[assignment]
|
|
108
108
|
|
|
109
|
+
class User(AbstractUser): ...
|
|
110
|
+
|
|
109
111
|
class AnonymousUser:
|
|
110
|
-
id:
|
|
111
|
-
pk:
|
|
112
|
+
id: None = ...
|
|
113
|
+
pk: None = ...
|
|
112
114
|
username: str = ...
|
|
113
115
|
is_staff: bool = ...
|
|
114
116
|
is_active: bool = ...
|
|
115
117
|
is_superuser: bool = ...
|
|
116
|
-
def save(self) ->
|
|
117
|
-
def delete(self) ->
|
|
118
|
-
def set_password(self, raw_password: str) ->
|
|
119
|
-
def check_password(self, raw_password: str) ->
|
|
118
|
+
def save(self) -> Never: ...
|
|
119
|
+
def delete(self) -> Never: ...
|
|
120
|
+
def set_password(self, raw_password: str) -> Never: ...
|
|
121
|
+
def check_password(self, raw_password: str) -> Never: ...
|
|
120
122
|
@property
|
|
121
123
|
def groups(self) -> EmptyManager[Group]: ...
|
|
122
124
|
@property
|
|
123
125
|
def user_permissions(self) -> EmptyManager[Permission]: ...
|
|
124
126
|
def get_user_permissions(self, obj: _AnyUser | None = ...) -> set[str]: ...
|
|
125
|
-
def get_group_permissions(self, obj: _AnyUser | None = ...) -> set[
|
|
127
|
+
def get_group_permissions(self, obj: _AnyUser | None = ...) -> set[str]: ...
|
|
126
128
|
def get_all_permissions(self, obj: _AnyUser | None = ...) -> set[str]: ...
|
|
127
129
|
def has_perm(self, perm: str, obj: _AnyUser | None = ...) -> bool: ...
|
|
128
130
|
def has_perms(
|
|
129
|
-
self, perm_list:
|
|
131
|
+
self, perm_list: Iterable[str], obj: _AnyUser | None = ...
|
|
130
132
|
) -> bool: ...
|
|
131
133
|
def has_module_perms(self, module: str) -> bool: ...
|
|
132
134
|
@property
|
|
@@ -67,7 +67,7 @@ class GenericForeignKey(FieldCacheMixin):
|
|
|
67
67
|
def __set__(self, instance: Model, value: Any | None) -> None: ...
|
|
68
68
|
|
|
69
69
|
class GenericRel(ForeignObjectRel):
|
|
70
|
-
field: GenericRelation
|
|
70
|
+
field: GenericRelation # pyright: ignore[reportIncompatibleVariableOverride]
|
|
71
71
|
def __init__(
|
|
72
72
|
self,
|
|
73
73
|
field: GenericRelation,
|
|
@@ -22,7 +22,9 @@ class ContentType(models.Model):
|
|
|
22
22
|
id: int
|
|
23
23
|
app_label: models.CharField[Any] = ...
|
|
24
24
|
model: models.CharField[Any] = ...
|
|
25
|
-
objects: ClassVar[
|
|
25
|
+
objects: ClassVar[ # pyright: ignore[reportIncompatibleVariableOverride]
|
|
26
|
+
ContentTypeManager
|
|
27
|
+
] = ...
|
|
26
28
|
permission_set: Manager[Permission]
|
|
27
29
|
@property
|
|
28
30
|
def name(self) -> str: ...
|
|
@@ -17,17 +17,18 @@ class ArrayField(CheckFieldDefaultMixin, Generic[_V], Field[_V | Combinable, _V]
|
|
|
17
17
|
from_db_value: Any = ...
|
|
18
18
|
base_field: Field[_V, _V] = ...
|
|
19
19
|
@overload
|
|
20
|
-
def __new__(
|
|
20
|
+
def __new__(
|
|
21
21
|
cls,
|
|
22
22
|
base_field: Field[Any, _V],
|
|
23
23
|
size: int | None = ...,
|
|
24
24
|
verbose_name: str | None = ...,
|
|
25
|
+
*,
|
|
25
26
|
name: str | None = ...,
|
|
26
27
|
primary_key: bool = ...,
|
|
27
28
|
max_length: int | None = ...,
|
|
28
29
|
unique: bool = ...,
|
|
29
30
|
blank: bool = ...,
|
|
30
|
-
null: Literal[False] =
|
|
31
|
+
null: Literal[False] = False,
|
|
31
32
|
db_index: bool = ...,
|
|
32
33
|
default: list[_V] | Callable[[], list[_V]] | None = ...,
|
|
33
34
|
editable: bool = ...,
|
|
@@ -51,12 +52,13 @@ class ArrayField(CheckFieldDefaultMixin, Generic[_V], Field[_V | Combinable, _V]
|
|
|
51
52
|
base_field: Field[Any, _V],
|
|
52
53
|
size: int | None = ...,
|
|
53
54
|
verbose_name: str | None = ...,
|
|
55
|
+
*,
|
|
54
56
|
name: str | None = ...,
|
|
55
57
|
primary_key: bool = ...,
|
|
56
58
|
max_length: int | None = ...,
|
|
57
59
|
unique: bool = ...,
|
|
58
60
|
blank: bool = ...,
|
|
59
|
-
null: Literal[True]
|
|
61
|
+
null: Literal[True],
|
|
60
62
|
db_index: bool = ...,
|
|
61
63
|
default: list[_V] | Callable[[], list[_V]] | None = ...,
|
|
62
64
|
editable: bool = ...,
|
|
@@ -20,12 +20,13 @@ class CICharField(CIText, CharField[_C]):
|
|
|
20
20
|
def __init__(
|
|
21
21
|
self: CICharField[str],
|
|
22
22
|
verbose_name: str | bytes | None = ...,
|
|
23
|
+
*,
|
|
23
24
|
name: str | None = ...,
|
|
24
25
|
primary_key: bool = ...,
|
|
25
26
|
max_length: int | None = ...,
|
|
26
27
|
unique: bool = ...,
|
|
27
28
|
blank: bool = ...,
|
|
28
|
-
null: Literal[False] =
|
|
29
|
+
null: Literal[False] = False,
|
|
29
30
|
db_index: bool = ...,
|
|
30
31
|
default: Any = ...,
|
|
31
32
|
editable: bool = ...,
|
|
@@ -45,12 +46,13 @@ class CICharField(CIText, CharField[_C]):
|
|
|
45
46
|
def __init__(
|
|
46
47
|
self: CICharField[str | None],
|
|
47
48
|
verbose_name: str | bytes | None = ...,
|
|
49
|
+
*,
|
|
48
50
|
name: str | None = ...,
|
|
49
51
|
primary_key: bool = ...,
|
|
50
52
|
max_length: int | None = ...,
|
|
51
53
|
unique: bool = ...,
|
|
52
54
|
blank: bool = ...,
|
|
53
|
-
null: Literal[True]
|
|
55
|
+
null: Literal[True],
|
|
54
56
|
db_index: bool = ...,
|
|
55
57
|
default: Any = ...,
|
|
56
58
|
editable: bool = ...,
|
|
@@ -74,12 +76,13 @@ class CIEmailField(CIText, EmailField[_C]):
|
|
|
74
76
|
def __init__(
|
|
75
77
|
self: CIEmailField[str],
|
|
76
78
|
verbose_name: str | bytes | None = ...,
|
|
79
|
+
*,
|
|
77
80
|
name: str | None = ...,
|
|
78
81
|
primary_key: bool = ...,
|
|
79
82
|
max_length: int | None = ...,
|
|
80
83
|
unique: bool = ...,
|
|
81
84
|
blank: bool = ...,
|
|
82
|
-
null: Literal[False] =
|
|
85
|
+
null: Literal[False] = False,
|
|
83
86
|
db_index: bool = ...,
|
|
84
87
|
default: Any = ...,
|
|
85
88
|
editable: bool = ...,
|
|
@@ -99,12 +102,13 @@ class CIEmailField(CIText, EmailField[_C]):
|
|
|
99
102
|
def __init__(
|
|
100
103
|
self: CIEmailField[str | None],
|
|
101
104
|
verbose_name: str | bytes | None = ...,
|
|
105
|
+
*,
|
|
102
106
|
name: str | None = ...,
|
|
103
107
|
primary_key: bool = ...,
|
|
104
108
|
max_length: int | None = ...,
|
|
105
109
|
unique: bool = ...,
|
|
106
110
|
blank: bool = ...,
|
|
107
|
-
null: Literal[True]
|
|
111
|
+
null: Literal[True],
|
|
108
112
|
db_index: bool = ...,
|
|
109
113
|
default: Any = ...,
|
|
110
114
|
editable: bool = ...,
|
|
@@ -128,12 +132,13 @@ class CITextField(CIText, TextField[_C]):
|
|
|
128
132
|
def __init__(
|
|
129
133
|
self: CITextField[str],
|
|
130
134
|
verbose_name: str | bytes | None = ...,
|
|
135
|
+
*,
|
|
131
136
|
name: str | None = ...,
|
|
132
137
|
primary_key: bool = ...,
|
|
133
138
|
max_length: int | None = ...,
|
|
134
139
|
unique: bool = ...,
|
|
135
140
|
blank: bool = ...,
|
|
136
|
-
null: Literal[False] =
|
|
141
|
+
null: Literal[False] = False,
|
|
137
142
|
db_index: bool = ...,
|
|
138
143
|
default: Any = ...,
|
|
139
144
|
editable: bool = ...,
|
|
@@ -153,12 +158,13 @@ class CITextField(CIText, TextField[_C]):
|
|
|
153
158
|
def __init__(
|
|
154
159
|
self: CITextField[str | None],
|
|
155
160
|
verbose_name: str | bytes | None = ...,
|
|
161
|
+
*,
|
|
156
162
|
name: str | None = ...,
|
|
157
163
|
primary_key: bool = ...,
|
|
158
164
|
max_length: int | None = ...,
|
|
159
165
|
unique: bool = ...,
|
|
160
166
|
blank: bool = ...,
|
|
161
|
-
null: Literal[True]
|
|
167
|
+
null: Literal[True],
|
|
162
168
|
db_index: bool = ...,
|
|
163
169
|
default: Any = ...,
|
|
164
170
|
editable: bool = ...,
|
|
@@ -19,12 +19,13 @@ class HStoreField(Generic[_T], CheckFieldDefaultMixin, Field[Any, Any]):
|
|
|
19
19
|
def __init__(
|
|
20
20
|
self: HStoreField[dict[str, str | None]],
|
|
21
21
|
verbose_name: str | bytes | None = ...,
|
|
22
|
+
*,
|
|
22
23
|
name: str | None = ...,
|
|
23
24
|
primary_key: bool = ...,
|
|
24
25
|
max_length: int | None = ...,
|
|
25
26
|
unique: bool = ...,
|
|
26
27
|
blank: bool = ...,
|
|
27
|
-
null: Literal[False] =
|
|
28
|
+
null: Literal[False] = False,
|
|
28
29
|
db_index: bool = ...,
|
|
29
30
|
default: Any = ...,
|
|
30
31
|
editable: bool = ...,
|
|
@@ -44,12 +45,13 @@ class HStoreField(Generic[_T], CheckFieldDefaultMixin, Field[Any, Any]):
|
|
|
44
45
|
def __init__(
|
|
45
46
|
self: HStoreField[dict[str, str | None] | None],
|
|
46
47
|
verbose_name: str | bytes | None = ...,
|
|
48
|
+
*,
|
|
47
49
|
name: str | None = ...,
|
|
48
50
|
primary_key: bool = ...,
|
|
49
51
|
max_length: int | None = ...,
|
|
50
52
|
unique: bool = ...,
|
|
51
53
|
blank: bool = ...,
|
|
52
|
-
null: Literal[True]
|
|
54
|
+
null: Literal[True],
|
|
53
55
|
db_index: bool = ...,
|
|
54
56
|
default: Any = ...,
|
|
55
57
|
editable: bool = ...,
|
|
@@ -61,6 +61,9 @@ class BaseCache:
|
|
|
61
61
|
def get_many(
|
|
62
62
|
self, keys: Iterable[str], version: int | None = ...
|
|
63
63
|
) -> dict[str, int | str]: ...
|
|
64
|
+
async def aget_many(
|
|
65
|
+
self, keys: Iterable[str], version: int | None = ...
|
|
66
|
+
) -> dict[str, int | str]: ...
|
|
64
67
|
def get_or_set(
|
|
65
68
|
self,
|
|
66
69
|
key: str,
|
|
@@ -85,6 +88,12 @@ class BaseCache:
|
|
|
85
88
|
timeout: int | None = ...,
|
|
86
89
|
version: int | None = ...,
|
|
87
90
|
) -> list[Any]: ...
|
|
91
|
+
async def aset_many(
|
|
92
|
+
self,
|
|
93
|
+
data: dict[str, Any],
|
|
94
|
+
timeout: int | None = ...,
|
|
95
|
+
version: int | None = ...,
|
|
96
|
+
) -> list[Any]: ...
|
|
88
97
|
def delete_many(self, keys: Iterable[str], version: int | None = ...) -> None: ...
|
|
89
98
|
async def adelete_many(
|
|
90
99
|
self, keys: Iterable[str], version: int | None = ...
|