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.
Files changed (68) hide show
  1. django-stubs/contrib/admin/__init__.pyi +1 -0
  2. django-stubs/contrib/admin/options.pyi +63 -35
  3. django-stubs/contrib/admin/templatetags/base.pyi +1 -1
  4. django-stubs/contrib/admin/views/main.pyi +2 -1
  5. django-stubs/contrib/auth/__init__.pyi +14 -4
  6. django-stubs/contrib/auth/base_user.pyi +1 -1
  7. django-stubs/contrib/auth/models.pyi +28 -26
  8. django-stubs/contrib/contenttypes/fields.pyi +1 -1
  9. django-stubs/contrib/contenttypes/models.pyi +3 -1
  10. django-stubs/contrib/postgres/fields/array.pyi +5 -3
  11. django-stubs/contrib/postgres/fields/citext.pyi +12 -6
  12. django-stubs/contrib/postgres/fields/hstore.pyi +4 -2
  13. django-stubs/core/cache/backends/base.pyi +9 -0
  14. django-stubs/core/exceptions.pyi +16 -11
  15. django-stubs/core/files/base.pyi +1 -1
  16. django-stubs/core/files/storage.pyi +2 -2
  17. django-stubs/core/mail/message.pyi +6 -6
  18. django-stubs/core/serializers/json.pyi +1 -1
  19. django-stubs/core/servers/basehttp.pyi +2 -2
  20. django-stubs/db/migrations/recorder.pyi +1 -1
  21. django-stubs/db/models/base.pyi +0 -1
  22. django-stubs/db/models/constraints.pyi +1 -0
  23. django-stubs/db/models/enums.pyi +9 -19
  24. django-stubs/db/models/expressions.pyi +1 -1
  25. django-stubs/db/models/fields/__init__.pyi +225 -75
  26. django-stubs/db/models/fields/files.pyi +2 -2
  27. django-stubs/db/models/fields/json.pyi +9 -5
  28. django-stubs/db/models/fields/related.pyi +40 -18
  29. django-stubs/db/models/fields/related_descriptors.pyi +3 -3
  30. django-stubs/db/models/functions/__init__.pyi +2 -0
  31. django-stubs/db/models/functions/comparison.pyi +8 -0
  32. django-stubs/db/models/manager.pyi +11 -6
  33. django-stubs/db/models/query.pyi +4 -1
  34. django-stubs/db/models/query_utils.pyi +1 -0
  35. django-stubs/db/transaction.pyi +7 -1
  36. django-stubs/forms/boundfield.pyi +3 -1
  37. django-stubs/forms/forms.pyi +28 -35
  38. django-stubs/forms/formsets.pyi +98 -63
  39. django-stubs/forms/models.pyi +20 -14
  40. django-stubs/forms/renderers.pyi +26 -13
  41. django-stubs/forms/utils.pyi +38 -11
  42. django-stubs/http/cookie.pyi +3 -1
  43. django-stubs/http/request.pyi +37 -14
  44. django-stubs/http/response.pyi +38 -30
  45. django-stubs/template/backends/base.pyi +14 -5
  46. django-stubs/template/backends/django.pyi +24 -3
  47. django-stubs/template/backends/dummy.pyi +7 -6
  48. django-stubs/template/backends/jinja2.pyi +20 -2
  49. django-stubs/template/backends/utils.pyi +3 -3
  50. django-stubs/template/base.pyi +1 -1
  51. django-stubs/template/context.pyi +2 -2
  52. django-stubs/template/library.pyi +79 -15
  53. django-stubs/template/loader.pyi +5 -3
  54. django-stubs/template/response.pyi +3 -3
  55. django-stubs/template/utils.pyi +6 -4
  56. django-stubs/test/client.pyi +176 -20
  57. django-stubs/test/testcases.pyi +2 -2
  58. django-stubs/test/utils.pyi +41 -55
  59. django-stubs/urls/conf.pyi +7 -0
  60. django-stubs/utils/datastructures.pyi +3 -3
  61. django-stubs/utils/deconstruct.pyi +10 -2
  62. django-stubs/utils/log.pyi +1 -1
  63. django-stubs/utils/six.pyi +1 -1
  64. django-stubs/views/decorators/csrf.pyi +1 -1
  65. {django_types-0.19.0.dist-info → django_types-0.20.0.dist-info}/METADATA +8 -3
  66. {django_types-0.19.0.dist-info → django_types-0.20.0.dist-info}/RECORD +68 -68
  67. {django_types-0.19.0.dist-info → django_types-0.20.0.dist-info}/WHEEL +1 -1
  68. {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) -> tuple[Any, ...]: ...
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(self, request: HttpRequest, obj: _ModelT | None = ...) -> Any: ...
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[Any]: ...
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: Any = ...
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[Any] = ...
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, request: Any, obj: _ModelT | None = ..., change: bool = ..., **kwargs: Any
189
- ) -> Any: ...
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(self, request: Any, **kwargs: Any) -> Any: ...
198
- def get_changelist_formset(self, request: Any, **kwargs: Any) -> Any: ...
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[Any],
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(self, request: Any, form: Any, change: Any) -> Any: ...
269
+ def save_form(
270
+ self, request: HttpRequest, form: ModelForm, change: bool
271
+ ) -> _ModelT: ...
260
272
  def save_model(
261
- self, request: Any, obj: _ModelT, form: Any, change: Any
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[Any]
277
+ self, request: HttpRequest, queryset: QuerySet[_ModelT]
266
278
  ) -> None: ...
267
279
  def save_formset(
268
- self, request: Any, form: Any, formset: Any, change: Any
280
+ self,
281
+ request: HttpRequest,
282
+ form: ModelForm,
283
+ formset: BaseModelFormSet,
284
+ change: bool,
269
285
  ) -> None: ...
270
286
  def save_related(
271
- self, request: Any, form: Any, formsets: Any, change: Any
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: Any,
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
- ) -> Any: ...
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[Any]
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(self, request: Any, context: Any) -> Any: ...
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
- ) -> Any: ...
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, request: HttpRequest, object_id: str, extra_context: None = ...
333
- ) -> Any: ...
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, request: HttpRequest, object_id: str, extra_context: None = ...
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: Any, obj: _ModelT | None = ..., **kwargs: Any
378
- ) -> Any: ...
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(request: Any = ..., **credentials: Any) -> AbstractBaseUser | None: ...
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 get_user_model() -> type[AbstractBaseUser]: ...
29
- def get_user(request: HttpRequest | Client) -> AbstractBaseUser | AnonymousUser: ...
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 | None) -> _ModelT: ...
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 Collection
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 = Model | AnonymousUser
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
- ) -> Any: ...
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: _AnyUser | None = ...) -> set[str]: ...
79
- def get_group_permissions(self, obj: _AnyUser | None = ...) -> set[str]: ...
80
- def get_all_permissions(self, obj: _AnyUser | None = ...) -> set[str]: ...
81
- def has_perm(self, perm: str, obj: _AnyUser | None = ...) -> bool: ...
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=30, blank=True)
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: Any = ...
111
- pk: Any = ...
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) -> Any: ...
117
- def delete(self) -> Any: ...
118
- def set_password(self, raw_password: str) -> Any: ...
119
- def check_password(self, raw_password: str) -> Any: ...
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[Any]: ...
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: Collection[str], obj: _AnyUser | None = ...
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[ContentTypeManager] = ...
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__( # type: ignore [misc]
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 = ...