From 6e7b58a85f3def9c4b35fc33a5f910adf7ff01e9 Mon Sep 17 00:00:00 2001
From: sks444 <krishnasingh.ss30@gmail.com>
Date: Mon, 3 Aug 2020 17:18:09 +0530
Subject: [PATCH] Move filters to filter.py file

---
 hypha/apply/api/v1/filters.py | 69 +++++++++++++++++++++++++++++++++++
 hypha/apply/api/v1/views.py   | 65 +++------------------------------
 2 files changed, 74 insertions(+), 60 deletions(-)
 create mode 100644 hypha/apply/api/v1/filters.py

diff --git a/hypha/apply/api/v1/filters.py b/hypha/apply/api/v1/filters.py
new file mode 100644
index 000000000..b5a7506f4
--- /dev/null
+++ b/hypha/apply/api/v1/filters.py
@@ -0,0 +1,69 @@
+from django.db.models import Q
+
+from django_filters import rest_framework as filters
+
+from wagtail.core.models import Page
+
+from hypha.apply.funds.models import (
+    ApplicationSubmission,
+    FundType,
+    LabType,
+    RoundsAndLabs,
+)
+from hypha.apply.funds.workflow import PHASES
+from hypha.apply.activity.models import Activity
+
+
+class RoundLabFilter(filters.ModelChoiceFilter):
+    def filter(self, qs, value):
+        if not value:
+            return qs
+
+        return qs.filter(Q(round=value) | Q(page=value))
+
+
+class SubmissionsFilter(filters.FilterSet):
+    round = RoundLabFilter(queryset=RoundsAndLabs.objects.all())
+    status = filters.MultipleChoiceFilter(choices=PHASES)
+    active = filters.BooleanFilter(method='filter_active', label='Active')
+    submit_date = filters.DateFromToRangeFilter(field_name='submit_time', label='Submit date')
+    fund = filters.ModelMultipleChoiceFilter(
+        field_name='page', label='fund',
+        queryset=Page.objects.type(FundType) | Page.objects.type(LabType)
+    )
+
+    class Meta:
+        model = ApplicationSubmission
+        fields = ('status', 'round', 'active', 'submit_date', 'fund', )
+
+    def filter_active(self, qs, name, value):
+        if value is None:
+            return qs
+
+        if value:
+            return qs.active()
+        else:
+            return qs.inactive()
+
+
+class NewerThanFilter(filters.ModelChoiceFilter):
+    def filter(self, qs, value):
+        if not value:
+            return qs
+
+        return qs.newer(value)
+
+
+class CommentFilter(filters.FilterSet):
+    since = filters.DateTimeFilter(field_name="timestamp", lookup_expr='gte')
+    before = filters.DateTimeFilter(field_name="timestamp", lookup_expr='lte')
+    newer = NewerThanFilter(queryset=Activity.comments.all())
+
+    class Meta:
+        model = Activity
+        fields = ['visibility', 'since', 'before', 'newer']
+
+
+class AllCommentFilter(CommentFilter):
+    class Meta(CommentFilter.Meta):
+        fields = CommentFilter.Meta.fields + ['source_object_id']
diff --git a/hypha/apply/api/v1/views.py b/hypha/apply/api/v1/views.py
index 93e27dcc7..867f9e105 100644
--- a/hypha/apply/api/v1/views.py
+++ b/hypha/apply/api/v1/views.py
@@ -1,6 +1,6 @@
 from django.core.exceptions import PermissionDenied as DjangoPermissionDenied
 from django.db import transaction
-from django.db.models import Prefetch, Q
+from django.db.models import Prefetch
 from django.utils import timezone
 from django_filters import rest_framework as filters
 from rest_framework import mixins, permissions, viewsets
@@ -8,18 +8,14 @@ from rest_framework.exceptions import NotFound, PermissionDenied, ValidationErro
 from rest_framework.response import Response
 from rest_framework.decorators import action
 from rest_framework_api_key.permissions import HasAPIKey
-from wagtail.core.models import Page
 
 from hypha.apply.activity.messaging import MESSAGES, messenger
 from hypha.apply.activity.models import COMMENT, Activity
 from hypha.apply.determinations.views import DeterminationCreateOrUpdateView
 from hypha.apply.funds.models import (
     ApplicationSubmission,
-    FundType,
-    LabType,
     RoundsAndLabs,
 )
-from hypha.apply.funds.workflow import PHASES
 from hypha.apply.review.models import Review
 
 from .pagination import StandardResultsSetPagination
@@ -35,38 +31,10 @@ from .serializers import (
     SubmissionListSerializer,
 )
 from .mixin import SubmissionNextedMixin
-
-
-class RoundLabFilter(filters.ModelChoiceFilter):
-    def filter(self, qs, value):
-        if not value:
-            return qs
-
-        return qs.filter(Q(round=value) | Q(page=value))
-
-
-class SubmissionsFilter(filters.FilterSet):
-    round = RoundLabFilter(queryset=RoundsAndLabs.objects.all())
-    status = filters.MultipleChoiceFilter(choices=PHASES)
-    active = filters.BooleanFilter(method='filter_active', label='Active')
-    submit_date = filters.DateFromToRangeFilter(field_name='submit_time', label='Submit date')
-    fund = filters.ModelMultipleChoiceFilter(
-        field_name='page', label='fund',
-        queryset=Page.objects.type(FundType) | Page.objects.type(LabType)
-    )
-
-    class Meta:
-        model = ApplicationSubmission
-        fields = ('status', 'round', 'active', 'submit_date', 'fund', )
-
-    def filter_active(self, qs, name, value):
-        if value is None:
-            return qs
-
-        if value:
-            return qs.active()
-        else:
-            return qs.inactive()
+from .filters import (
+    SubmissionsFilter,
+    CommentFilter,
+)
 
 
 class SubmissionViewSet(viewsets.ReadOnlyModelViewSet):
@@ -170,29 +138,6 @@ class RoundViewSet(
         return RoundLabDetailSerializer
 
 
-class NewerThanFilter(filters.ModelChoiceFilter):
-    def filter(self, qs, value):
-        if not value:
-            return qs
-
-        return qs.newer(value)
-
-
-class CommentFilter(filters.FilterSet):
-    since = filters.DateTimeFilter(field_name="timestamp", lookup_expr='gte')
-    before = filters.DateTimeFilter(field_name="timestamp", lookup_expr='lte')
-    newer = NewerThanFilter(queryset=Activity.comments.all())
-
-    class Meta:
-        model = Activity
-        fields = ['visibility', 'since', 'before', 'newer']
-
-
-class AllCommentFilter(CommentFilter):
-    class Meta(CommentFilter.Meta):
-        fields = CommentFilter.Meta.fields + ['source_object_id']
-
-
 class SubmissionCommentViewSet(
     SubmissionNextedMixin,
     mixins.ListModelMixin,
-- 
GitLab