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)