Skip to content
Snippets Groups Projects
Commit 2d9fd804 authored by Konrad Mohrfeldt's avatar Konrad Mohrfeldt :koala:
Browse files

refactor: implement active filter for various viewsets

APICategoryViewSet, APITypeViewSet, APITopicViewSet,
APIMusicFocusViewSet, APIFundingCategoryViewSet, APILanguageViewSet, and
APIHostViewSet all used the same base class implementing get_queryset
for filtering by their active state. This is now handled by a generic
FilterSet.
parent cf82526d
No related branches found
No related tags found
1 merge request!20refactor collection filters with django_filters
...@@ -199,3 +199,12 @@ class TimeSlotFilterSet(filters.FilterSet): ...@@ -199,3 +199,12 @@ class TimeSlotFilterSet(filters.FilterSet):
def clean_end(self): def clean_end(self):
end = self.cleaned_data.get("end", None) end = self.cleaned_data.get("end", None)
return end or self.cleaned_data["start"] + datetime.timedelta(days=60) return end or self.cleaned_data["start"] + datetime.timedelta(days=60)
class ActiveFilterSet(StaticFilterHelpTextMixin, filters.FilterSet):
active = filters.BooleanFilter(field_name="is_active")
class Meta:
fields = [
"active",
]
...@@ -820,99 +820,67 @@ class APINoteViewSet(viewsets.ModelViewSet): ...@@ -820,99 +820,67 @@ class APINoteViewSet(viewsets.ModelViewSet):
return Response(status=status.HTTP_204_NO_CONTENT) return Response(status=status.HTTP_204_NO_CONTENT)
class ActiveInactiveViewSet(viewsets.ModelViewSet): class ActiveFilterMixin:
permission_classes = [permissions.DjangoModelPermissionsOrAnonReadOnly] filter_class = filters.ActiveFilterSet
def get_queryset(self: viewsets.ModelViewSet):
"""Filters"""
if self.request.query_params.get("active") == "true":
return self.queryset.model.objects.filter(is_active=True)
if self.request.query_params.get("active") == "false":
return self.queryset.model.objects.filter(is_active=False)
return self.queryset.model.objects.all()
class APICategoryViewSet(ActiveInactiveViewSet): class APICategoryViewSet(ActiveFilterMixin, viewsets.ModelViewSet):
""" """
/categories/ returns all categories (GET, POST) Returns a list of categories.
/categories/?active=true returns all active categories (GET)
/categories/?active=false returns all inactive categories (GET)
/categories/{pk} Returns a category by its ID (GET, PUT, DELETE)
""" """
queryset = Category.objects.all() queryset = Category.objects.all()
serializer_class = CategorySerializer serializer_class = CategorySerializer
class APITypeViewSet(ActiveInactiveViewSet): class APITypeViewSet(ActiveFilterMixin, viewsets.ModelViewSet):
""" """
/types/ returns all types (GET, POST) Returns a list of types.
/types/?active=true returns all active types (GET)
/types/?active=false returns all inactive types (GET)
/types/{pk} returns a type by its ID (GET, PUT, DELETE)
""" """
queryset = Type.objects.all() queryset = Type.objects.all()
serializer_class = TypeSerializer serializer_class = TypeSerializer
class APITopicViewSet(ActiveInactiveViewSet): class APITopicViewSet(ActiveFilterMixin, viewsets.ModelViewSet):
""" """
/topics/: Returns all topics (GET, POST) Returns a list of topics.
/topics/?active=true Returns all active topics (GET)
/topics/?active=false Returns all inactive topics (GET)
/topics/{pk}: Returns a topic by its ID (GET, PUT, DELETE)
""" """
queryset = Topic.objects.all() queryset = Topic.objects.all()
serializer_class = TopicSerializer serializer_class = TopicSerializer
class APIMusicFocusViewSet(ActiveInactiveViewSet): class APIMusicFocusViewSet(ActiveFilterMixin, viewsets.ModelViewSet):
""" """
/musicfocus/ returns all music focuses (GET, POST) Returns a list of music focuses.
/musicfocus/?active=true: returns all active music focuses (GET)
/musicfocus/?active=false: returns all inactive music focuses (GET)
/musicfocus/{pk}: returns a music focus by its ID (GET, PUT, DELETE)
""" """
queryset = MusicFocus.objects.all() queryset = MusicFocus.objects.all()
serializer_class = MusicFocusSerializer serializer_class = MusicFocusSerializer
class APIFundingCategoryViewSet(ActiveInactiveViewSet): class APIFundingCategoryViewSet(ActiveFilterMixin, viewsets.ModelViewSet):
""" """
/fundingcategories/: returns all funding categories (GET, POST) Returns a list of funding categories.
/fundingcategories/?active=true returns all active funding categories (GET)
/fundingcategories/?active=false returns all inactive funding categories (GET)
/fundingcategories/{pk} returns a funding category by its ID (GET, PUT, DELETE)
""" """
queryset = FundingCategory.objects.all() queryset = FundingCategory.objects.all()
serializer_class = FundingCategorySerializer serializer_class = FundingCategorySerializer
class APILanguageViewSet(ActiveInactiveViewSet): class APILanguageViewSet(ActiveFilterMixin, viewsets.ModelViewSet):
""" """
/languages/ returns all languages (GET, POST) Returns a list of languages.
/languages/?active=true returns all active languages (GET)
/languages/?active=false returns all inactive languages (GET)
/languages/{pk} returns a language by its ID (GET, PUT, DELETE)
""" """
queryset = Language.objects.all() queryset = Language.objects.all()
serializer_class = LanguageSerializer serializer_class = LanguageSerializer
class APIHostViewSet(ActiveInactiveViewSet): class APIHostViewSet(ActiveFilterMixin, viewsets.ModelViewSet):
""" """
/hosts/ returns all hosts (GET, POST) Returns a list of hosts.
/hosts/?active=true returns all active hosts (GET)
/hosts/?active=false returns all inactive hosts (GET)
/hosts/{pk} returns a host by its ID (GET, PUT, DELETE)
""" """
queryset = Host.objects.all() queryset = Host.objects.all()
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment