11from collections .abc import Iterable
22from logging import Logger
3- from typing import Any , TypeAlias , TypeVar
3+ from typing import Any , Generic
44
55from django import forms
6- from django .contrib .auth .base_user import AbstractBaseUser , _UserModel
6+ from django .contrib .auth .models import _User , _UserModel , _UserType
77from django .contrib .auth .tokens import PasswordResetTokenGenerator
88from django .core .exceptions import ValidationError
99from django .db import models
@@ -14,9 +14,7 @@ from django.http.request import HttpRequest
1414from django .utils .functional import _StrOrPromise
1515
1616logger : Logger
17-
18- UserModel : TypeAlias = type [_UserModel ]
19- _User = TypeVar ("_User" , bound = AbstractBaseUser )
17+ UserModel = _UserModel
2018
2119class ReadOnlyPasswordHashWidget (forms .Widget ):
2220 template_name : str
@@ -31,7 +29,7 @@ class UsernameField(forms.CharField):
3129 def to_python (self , value : Any | None ) -> Any | None : ...
3230 def widget_attrs (self , widget : Widget ) -> dict [str , Any ]: ...
3331
34- class SetPasswordMixin :
32+ class SetPasswordMixin ( Generic [ _UserType ]) :
3533 error_messages : _ErrorMessagesDict
3634
3735 @staticmethod
@@ -43,12 +41,12 @@ class SetPasswordMixin:
4341 password1_field_name : str = ...,
4442 password2_field_name : str = ...,
4543 ) -> None : ...
46- def validate_password_for_user (self , user : AbstractBaseUser , password_field_name : str = "password2" ) -> None : ...
44+ def validate_password_for_user (self , user : _UserType , password_field_name : str = "password2" ) -> None : ...
4745 def set_password_and_save (
48- self , user : AbstractBaseUser , password_field_name : str = "password1" , commit : bool = True
49- ) -> AbstractBaseUser : ...
46+ self , user : _UserType , password_field_name : str = "password1" , commit : bool = True
47+ ) -> _UserType : ...
5048
51- class SetUnusablePasswordMixin :
49+ class SetUnusablePasswordMixin ( Generic [ _UserType ]) :
5250 usable_password_help_text : _StrOrPromise
5351
5452 @staticmethod
@@ -59,20 +57,20 @@ class SetUnusablePasswordMixin:
5957 password2_field_name : str = ...,
6058 usable_password_field_name : str = ...,
6159 ) -> None : ...
62- def validate_password_for_user (self , user : AbstractBaseUser , ** kwargs : Any ) -> None : ...
60+ def validate_password_for_user (self , user : _UserType , ** kwargs : Any ) -> None : ...
6361 def set_password_and_save (self , user : _User , commit : bool = True , ** kwargs : Any ) -> _User : ...
6462
65- class BaseUserCreationForm (forms .ModelForm [_User ]):
63+ class BaseUserCreationForm (Generic [ _UserType ], forms .ModelForm [_UserType ]):
6664 error_messages : _ErrorMessagesDict
6765 password1 : forms .Field
6866 password2 : forms .Field
6967 def __init__ (self , * args : Any , ** kwargs : Any ) -> None : ...
70- def save (self , commit : bool = ...) -> _User : ...
68+ def save (self , commit : bool = ...) -> _UserType : ...
7169
72- class UserCreationForm (BaseUserCreationForm [_User ]):
70+ class UserCreationForm (BaseUserCreationForm [_UserType ]):
7371 def clean_username (self ) -> str : ...
7472
75- class UserChangeForm (forms .ModelForm [_User ]):
73+ class UserChangeForm (forms .ModelForm [_UserType ]):
7674 password : forms .Field
7775 def __init__ (self , * args : Any , ** kwargs : Any ) -> None : ...
7876
@@ -81,11 +79,11 @@ class AuthenticationForm(forms.Form):
8179 password : forms .Field
8280 error_messages : _ErrorMessagesDict
8381 request : HttpRequest | None
84- user_cache : _UserModel | None
82+ user_cache : _User | None
8583 username_field : models .Field
8684 def __init__ (self , request : HttpRequest | None = ..., * args : Any , ** kwargs : Any ) -> None : ...
87- def confirm_login_allowed (self , user : AbstractBaseUser ) -> None : ...
88- def get_user (self ) -> _UserModel : ...
85+ def confirm_login_allowed (self , user : _User ) -> None : ...
86+ def get_user (self ) -> _User : ...
8987 def get_invalid_login_error (self ) -> ValidationError : ...
9088 def clean (self ) -> dict [str , Any ]: ...
9189
@@ -100,7 +98,7 @@ class PasswordResetForm(forms.Form):
10098 to_email : str ,
10199 html_email_template_name : str | None = ...,
102100 ) -> None : ...
103- def get_users (self , email : str ) -> Iterable [_UserModel ]: ...
101+ def get_users (self , email : str ) -> Iterable [_User ]: ...
104102 def save (
105103 self ,
106104 domain_override : str | None = ...,
@@ -114,28 +112,26 @@ class PasswordResetForm(forms.Form):
114112 extra_email_context : dict [str , str ] | None = ...,
115113 ) -> None : ...
116114
117- class SetPasswordForm (forms .Form ):
118- error_messages : _ErrorMessagesDict
115+ class SetPasswordForm (Generic [_UserType ], SetPasswordMixin , forms .Form ):
119116 new_password1 : forms .Field
120117 new_password2 : forms .Field
121- user : AbstractBaseUser
122- def __init__ (self , user : AbstractBaseUser , * args : Any , ** kwargs : Any ) -> None : ...
123- def save (self , commit : bool = ...) -> AbstractBaseUser : ...
118+ user : _UserType
119+ def __init__ (self , user : _UserType , * args : Any , ** kwargs : Any ) -> None : ...
120+ def save (self , commit : bool = ...) -> _UserType : ...
124121
125122class PasswordChangeForm (SetPasswordForm ):
126- error_messages : _ErrorMessagesDict
127123 old_password : forms .Field
128124 def clean_old_password (self ) -> str : ...
129125
130- class AdminPasswordChangeForm (forms .Form ):
126+ class AdminPasswordChangeForm (Generic [ _UserType ], forms .Form ):
131127 error_messages : _ErrorMessagesDict
132128 required_css_class : str
133129 usable_password_help_text : str
134130 password1 : forms .Field
135131 password2 : forms .Field
136- user : AbstractBaseUser
137- def __init__ (self , user : AbstractBaseUser , * args : Any , ** kwargs : Any ) -> None : ...
138- def save (self , commit : bool = ...) -> AbstractBaseUser : ...
132+ user : _UserType
133+ def __init__ (self , user : _UserType , * args : Any , ** kwargs : Any ) -> None : ...
134+ def save (self , commit : bool = ...) -> _UserType : ...
139135 @property
140136 def changed_data (self ) -> list [str ]: ...
141137
0 commit comments