mirror of
https://github.com/davidhalter/django-stubs.git
synced 2025-12-10 14:01:56 +08:00
change get_user to use a protocol requiring a session (#522)
* change get_user to use a protocol requiring a session define a "_HasSession" protocol, and update contrib.auth.get_user to use it get_user only requires a session field, and idiomatic django testing frequently calls get_user with a TestClient * run black * use union for get_user instead of a protocol * create tests for get_user typechecking * properly import test client
This commit is contained in:
@@ -7,12 +7,11 @@ from django.core.handlers.wsgi import WSGIRequest
|
||||
from django.db.models.base import Model
|
||||
from django.db.models.options import Options
|
||||
from django.http.request import HttpRequest
|
||||
from django.test.client import Client
|
||||
|
||||
from .signals import (
|
||||
user_logged_in as user_logged_in,
|
||||
user_logged_out as user_logged_out,
|
||||
user_login_failed as user_login_failed,
|
||||
)
|
||||
from .signals import user_logged_in as user_logged_in
|
||||
from .signals import user_logged_out as user_logged_out
|
||||
from .signals import user_login_failed as user_login_failed
|
||||
|
||||
SESSION_KEY: str
|
||||
BACKEND_SESSION_KEY: str
|
||||
@@ -27,7 +26,7 @@ def login(
|
||||
) -> None: ...
|
||||
def logout(request: HttpRequest) -> None: ...
|
||||
def get_user_model() -> Type[Model]: ...
|
||||
def get_user(request: HttpRequest) -> Union[AbstractBaseUser, AnonymousUser]: ...
|
||||
def get_user(request: Union[HttpRequest, Client]) -> Union[AbstractBaseUser, AnonymousUser]: ...
|
||||
def get_permission_codename(action: str, opts: Options) -> str: ...
|
||||
def update_session_auth_hash(request: HttpRequest, user: AbstractBaseUser) -> None: ...
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ from typing_extensions import Literal
|
||||
|
||||
from django.http import HttpRequest, HttpResponse
|
||||
|
||||
_FormT = TypeVar('_FormT', bound=BaseForm)
|
||||
_FormT = TypeVar("_FormT", bound=BaseForm)
|
||||
|
||||
class AbstractFormMixin(ContextMixin):
|
||||
initial: Dict[str, Any] = ...
|
||||
|
||||
15
tests/typecheck/contrib/auth/test_misc.yml
Normal file
15
tests/typecheck/contrib/auth/test_misc.yml
Normal file
@@ -0,0 +1,15 @@
|
||||
- case: test_request_session
|
||||
main: |
|
||||
from django.contrib.auth import get_user
|
||||
from django.contrib.sessions.middleware import SessionMiddleware
|
||||
from django.http import HttpRequest
|
||||
|
||||
request = HttpRequest()
|
||||
SessionMiddleware().process_request(request)
|
||||
get_user(request)
|
||||
- case: test_client_session
|
||||
main: |
|
||||
from django.contrib.auth import get_user
|
||||
from django.test import Client
|
||||
|
||||
get_user(Client())
|
||||
Reference in New Issue
Block a user