diff --git a/django-stubs/test/client.pyi b/django-stubs/test/client.pyi index e15e2b58a..0ebc06393 100644 --- a/django-stubs/test/client.pyi +++ b/django-stubs/test/client.pyi @@ -4,8 +4,9 @@ from io import BytesIO, IOBase from json import JSONEncoder from re import Pattern from types import TracebackType -from typing import Any, Generic, NoReturn, TypeVar, type_check_only +from typing import Any, Generic, Literal, NoReturn, TypedDict, TypeVar, type_check_only +from asgiref.typing import ASGIVersions from django.contrib.auth.base_user import AbstractBaseUser from django.contrib.sessions.backends.base import SessionBase from django.core.handlers.asgi import ASGIRequest @@ -154,8 +155,27 @@ class _RequestFactory(Generic[_T]): class RequestFactory(_RequestFactory[WSGIRequest]): ... +# A non total duplication of `asgiref.typing.HTTPScope` @type_check_only -class _AsyncRequestFactory(_RequestFactory[_T]): ... +class _HTTPScope(TypedDict, total=False): + type: Literal["http"] + asgi: ASGIVersions + http_version: str + method: str + scheme: str + path: str + raw_path: bytes + query_string: bytes + root_path: str + headers: Iterable[tuple[bytes, bytes]] + client: tuple[str, int] | None + server: tuple[str, int | None] | None + state: dict[str, Any] + extensions: dict[str, dict[object, object]] | None + +@type_check_only +class _AsyncRequestFactory(_RequestFactory[_T]): + defaults: _HTTPScope # type: ignore[assignment] class AsyncRequestFactory(_AsyncRequestFactory[ASGIRequest]): ... diff --git a/setup.py b/setup.py index 752fc1ab5..611675766 100644 --- a/setup.py +++ b/setup.py @@ -22,6 +22,7 @@ def find_stub_files(name: str) -> List[str]: dependencies = [ "django", + "asgiref", "django-stubs-ext>=5.0.0.dev1", "tomli; python_version < '3.11'", # Types: