From a63adde4fd2d3a9ff47fe3840b2fe9ac02f139b2 Mon Sep 17 00:00:00 2001 From: Tom Carrick Date: Fri, 12 Aug 2022 12:08:58 +0200 Subject: [PATCH 1/4] Add get_queryset to GenericAPIView --- rest_framework-stubs/generics.pyi | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/rest_framework-stubs/generics.pyi b/rest_framework-stubs/generics.pyi index 2dad49277..b22cbc92e 100644 --- a/rest_framework-stubs/generics.pyi +++ b/rest_framework-stubs/generics.pyi @@ -1,4 +1,4 @@ -from typing import Any, Dict, List, Optional, Sequence, Type, TypeVar, Union, overload +from typing import Any, Dict, List, Optional, Protocol, Sequence, Type, TypeVar, Union, overload from django.db.models import Manager, Model from django.db.models.query import QuerySet @@ -23,7 +23,11 @@ _D = TypeVar("_D", bound=Model) _Q = TypeVar("_Q", bound=Union[QuerySet[Any], MongoQuerySet[Any]]) -class GenericAPIView(views.APIView): +class UsesQuerySet(Protocol[_MT_co]): + def get_queryset(self) -> QuerySet[_MT_co]: ... + def get_queryset(self) -> MongoQuerySet[_MT_co]: ... + +class GenericAPIView(views.APIView, UsesQuerySet[_MT_co]): serializer_class: Optional[Type[BaseSerializer]] = ... lookup_field: str = ... lookup_url_kwarg: Optional[str] = ... From c25c14e4685d65548525d864affe9a4de21c5056 Mon Sep 17 00:00:00 2001 From: Tom Carrick Date: Fri, 12 Aug 2022 12:52:37 +0200 Subject: [PATCH 2/4] Add overload --- rest_framework-stubs/generics.pyi | 1 + 1 file changed, 1 insertion(+) diff --git a/rest_framework-stubs/generics.pyi b/rest_framework-stubs/generics.pyi index b22cbc92e..be6a3d6c9 100644 --- a/rest_framework-stubs/generics.pyi +++ b/rest_framework-stubs/generics.pyi @@ -25,6 +25,7 @@ _Q = TypeVar("_Q", bound=Union[QuerySet[Any], MongoQuerySet[Any]]) class UsesQuerySet(Protocol[_MT_co]): def get_queryset(self) -> QuerySet[_MT_co]: ... + @overload def get_queryset(self) -> MongoQuerySet[_MT_co]: ... class GenericAPIView(views.APIView, UsesQuerySet[_MT_co]): From c75e77c75099dae5932b2b6274c654df63bfbc84 Mon Sep 17 00:00:00 2001 From: Tom Carrick Date: Fri, 12 Aug 2022 13:02:16 +0200 Subject: [PATCH 3/4] Simpler approach --- rest_framework-stubs/generics.pyi | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/rest_framework-stubs/generics.pyi b/rest_framework-stubs/generics.pyi index be6a3d6c9..902c25e48 100644 --- a/rest_framework-stubs/generics.pyi +++ b/rest_framework-stubs/generics.pyi @@ -23,12 +23,7 @@ _D = TypeVar("_D", bound=Model) _Q = TypeVar("_Q", bound=Union[QuerySet[Any], MongoQuerySet[Any]]) -class UsesQuerySet(Protocol[_MT_co]): - def get_queryset(self) -> QuerySet[_MT_co]: ... - @overload - def get_queryset(self) -> MongoQuerySet[_MT_co]: ... - -class GenericAPIView(views.APIView, UsesQuerySet[_MT_co]): +class GenericAPIView(views.APIView): serializer_class: Optional[Type[BaseSerializer]] = ... lookup_field: str = ... lookup_url_kwarg: Optional[str] = ... @@ -46,6 +41,7 @@ class GenericAPIView(views.APIView, UsesQuerySet[_MT_co]): @overload def paginate_queryset(self, queryset: MongoQuerySet[_T]) -> Optional[List[_T]]: ... def get_paginated_response(self, data: Any) -> Response: ... + def get_queryset(self) -> Union[QuerySet[_MT_co], MongoQuerySet[_T]]: ... class CreateAPIView(mixins.CreateModelMixin, GenericAPIView): def post(self, request: Request, *args: Any, **kwargs: Any) -> HttpResponse: ... From bbcdacf104a641650735856f0b3c7a36da72187d Mon Sep 17 00:00:00 2001 From: Tom Carrick Date: Fri, 12 Aug 2022 13:03:39 +0200 Subject: [PATCH 4/4] Remove unused import --- rest_framework-stubs/generics.pyi | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rest_framework-stubs/generics.pyi b/rest_framework-stubs/generics.pyi index 902c25e48..6ae651401 100644 --- a/rest_framework-stubs/generics.pyi +++ b/rest_framework-stubs/generics.pyi @@ -1,4 +1,4 @@ -from typing import Any, Dict, List, Optional, Protocol, Sequence, Type, TypeVar, Union, overload +from typing import Any, Dict, List, Optional, Sequence, Type, TypeVar, Union, overload from django.db.models import Manager, Model from django.db.models.query import QuerySet