From 1bf2a339d30595b05045d1de88cacba822dad744 Mon Sep 17 00:00:00 2001 From: Paulina Kujawa Date: Wed, 16 Oct 2024 22:56:11 +0200 Subject: [PATCH 1/2] apply change to other places --- src/hct_mis_api/api/endpoints/core/views.py | 21 ++++------------- src/hct_mis_api/api/endpoints/rdi/program.py | 24 ++++++++------------ 2 files changed, 14 insertions(+), 31 deletions(-) diff --git a/src/hct_mis_api/api/endpoints/core/views.py b/src/hct_mis_api/api/endpoints/core/views.py index ad16b5ff97..4ab4e1bb05 100644 --- a/src/hct_mis_api/api/endpoints/core/views.py +++ b/src/hct_mis_api/api/endpoints/core/views.py @@ -1,28 +1,15 @@ -from typing import TYPE_CHECKING, Any - +from django_filters.rest_framework import DjangoFilterBackend +from rest_framework.filters import OrderingFilter from rest_framework.generics import ListAPIView -from rest_framework.response import Response from hct_mis_api.api.endpoints.base import HOPEAPIView from hct_mis_api.api.endpoints.core.filters import BusinessAreaFilter from hct_mis_api.api.endpoints.core.serializers import BusinessAreaSerializer from hct_mis_api.apps.core.models import BusinessArea -if TYPE_CHECKING: - from rest_framework.request import Request - class BusinessAreaListView(HOPEAPIView, ListAPIView): serializer_class = BusinessAreaSerializer queryset = BusinessArea.objects.all() - - def list(self, request: "Request", *args: Any, **kwargs: Any) -> Response: - queryset = self.queryset - - filterset = BusinessAreaFilter(request.GET, queryset=queryset) - if filterset.is_valid(): - queryset = filterset.qs - - page = self.paginate_queryset(queryset) - serializer = self.get_serializer(page, many=True) - return self.get_paginated_response(serializer.data) + filter_backends = (OrderingFilter, DjangoFilterBackend) + filterset_class = BusinessAreaFilter diff --git a/src/hct_mis_api/api/endpoints/rdi/program.py b/src/hct_mis_api/api/endpoints/rdi/program.py index b64cf61dc3..78b57241ca 100644 --- a/src/hct_mis_api/api/endpoints/rdi/program.py +++ b/src/hct_mis_api/api/endpoints/rdi/program.py @@ -1,14 +1,16 @@ from typing import TYPE_CHECKING, Any +from django.db.models import QuerySet + from drf_spectacular.utils import extend_schema from rest_framework import serializers, status from rest_framework.exceptions import PermissionDenied -from rest_framework.mixins import CreateModelMixin +from rest_framework.generics import GenericAPIView +from rest_framework.mixins import CreateModelMixin, ListModelMixin from rest_framework.response import Response from hct_mis_api.api.endpoints.base import HOPEAPIBusinessAreaViewSet from hct_mis_api.api.models import Grant -from hct_mis_api.apps.core.api.filters import UpdatedAtFilter from hct_mis_api.apps.program.models import Program if TYPE_CHECKING: @@ -33,10 +35,14 @@ class Meta: ) -class ProgramViewSet(CreateModelMixin, HOPEAPIBusinessAreaViewSet): +class ProgramViewSet(CreateModelMixin, ListModelMixin, HOPEAPIBusinessAreaViewSet, GenericAPIView): serializer_class = ProgramSerializer - model = Program permission = Grant.API_READ_ONLY + queryset = Program.objects.all() + pagination_class = None + + def get_queryset(self) -> QuerySet: + return self.queryset.filter(business_area=self.selected_business_area) def perform_create(self, serializer_class: "BaseSerializer") -> None: serializer_class.save(business_area=self.selected_business_area) @@ -51,13 +57,3 @@ def create(self, request: "Request", *args: Any, **kwargs: Any) -> Response: self.perform_create(serializer) headers = self.get_success_headers(serializer.data) return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers) - - def list(self, request: "Request", *args: Any, **kwargs: Any) -> Response: - queryset = self.model.objects.filter(business_area=self.selected_business_area) - - filterset = UpdatedAtFilter(request.GET, queryset=queryset) - if filterset.is_valid(): - queryset = filterset.qs - - serializer = self.serializer_class(queryset, many=True) - return Response(serializer.data) From b3e52ca296788c95c6989603530d2989fb1929a7 Mon Sep 17 00:00:00 2001 From: Paulina Kujawa Date: Wed, 16 Oct 2024 23:55:48 +0200 Subject: [PATCH 2/2] add filter --- src/hct_mis_api/api/endpoints/rdi/program.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/hct_mis_api/api/endpoints/rdi/program.py b/src/hct_mis_api/api/endpoints/rdi/program.py index 78b57241ca..17e0fcb3e6 100644 --- a/src/hct_mis_api/api/endpoints/rdi/program.py +++ b/src/hct_mis_api/api/endpoints/rdi/program.py @@ -2,15 +2,18 @@ from django.db.models import QuerySet +from django_filters.rest_framework import DjangoFilterBackend from drf_spectacular.utils import extend_schema from rest_framework import serializers, status from rest_framework.exceptions import PermissionDenied +from rest_framework.filters import OrderingFilter from rest_framework.generics import GenericAPIView from rest_framework.mixins import CreateModelMixin, ListModelMixin from rest_framework.response import Response from hct_mis_api.api.endpoints.base import HOPEAPIBusinessAreaViewSet from hct_mis_api.api.models import Grant +from hct_mis_api.apps.core.api.filters import UpdatedAtFilter from hct_mis_api.apps.program.models import Program if TYPE_CHECKING: @@ -40,6 +43,8 @@ class ProgramViewSet(CreateModelMixin, ListModelMixin, HOPEAPIBusinessAreaViewSe permission = Grant.API_READ_ONLY queryset = Program.objects.all() pagination_class = None + filter_backends = (OrderingFilter, DjangoFilterBackend) + filterset_class = UpdatedAtFilter def get_queryset(self) -> QuerySet: return self.queryset.filter(business_area=self.selected_business_area)