diff --git a/program/views.py b/program/views.py index f8e9204ee874684f41248cc6398f28d661863461..c6c0e22ccfb94b412f5b22c29b57bf22bdf717cd 100644 --- a/program/views.py +++ b/program/views.py @@ -848,7 +848,22 @@ class APINoteViewSet(viewsets.ModelViewSet): return Response(status=status.HTTP_401_UNAUTHORIZED) -class APICategoryViewSet(viewsets.ModelViewSet): +class ActiveInactiveMixin: + permission_classes = [permissions.DjangoModelPermissionsOrAnonReadOnly] + + 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(ActiveInactiveMixin, viewsets.ModelViewSet): """ /categories/ returns all categories (GET, POST) /categories/?active=true returns all active categories (GET) @@ -858,21 +873,9 @@ class APICategoryViewSet(viewsets.ModelViewSet): queryset = Category.objects.all() serializer_class = CategorySerializer - permission_classes = [permissions.DjangoModelPermissionsOrAnonReadOnly] - - def get_queryset(self): - """Filters""" - - if self.request.query_params.get('active') == 'true': - return Category.objects.filter(is_active=True) - - if self.request.query_params.get('active') == 'false': - return Category.objects.filter(is_active=False) - - return Category.objects.all() -class APITypeViewSet(viewsets.ModelViewSet): +class APITypeViewSet(ActiveInactiveMixin, viewsets.ModelViewSet): """ /types/ returns all types (GET, POST) /types/?active=true returns all active types (GET) @@ -882,44 +885,21 @@ class APITypeViewSet(viewsets.ModelViewSet): queryset = Type.objects.all() serializer_class = TypeSerializer - permission_classes = [permissions.DjangoModelPermissionsOrAnonReadOnly] - - def get_queryset(self): - """Filters""" - - if self.request.query_params.get('active') == 'true': - return Type.objects.filter(is_active=True) - - if self.request.query_params.get('active') == 'false': - return Type.objects.filter(is_active=False) - - return Type.objects.all() -class APITopicViewSet(viewsets.ModelViewSet): +class APITopicViewSet(ActiveInactiveMixin, viewsets.ModelViewSet): """ /topics/: Returns all topics (GET, POST) /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() serializer_class = TopicSerializer - permission_classes = [permissions.DjangoModelPermissionsOrAnonReadOnly] - - def get_queryset(self): - """Filters""" - - if self.request.query_params.get('active') == 'true': - return Topic.objects.filter(is_active=True) - - if self.request.query_params.get('active') == 'false': - return Topic.objects.filter(is_active=False) - - return Topic.objects.all() -class APIMusicFocusViewSet(viewsets.ModelViewSet): +class APIMusicFocusViewSet(ActiveInactiveMixin, viewsets.ModelViewSet): """ /musicfocus/ returns all music focuses (GET, POST) /musicfocus/?active=true: returns all active music focuses (GET) @@ -929,21 +909,9 @@ class APIMusicFocusViewSet(viewsets.ModelViewSet): queryset = MusicFocus.objects.all() serializer_class = MusicFocusSerializer - permission_classes = [permissions.DjangoModelPermissionsOrAnonReadOnly] - - def get_queryset(self): - """Filters""" - - if self.request.query_params.get('active') == 'true': - return MusicFocus.objects.filter(is_active=True) - - if self.request.query_params.get('active') == 'false': - return MusicFocus.objects.filter(is_active=False) - - return MusicFocus.objects.all() -class APIFundingCategoryViewSet(viewsets.ModelViewSet): +class APIFundingCategoryViewSet(ActiveInactiveMixin, viewsets.ModelViewSet): """ /fundingcategories/: returns all funding categories (GET, POST) /fundingcategories/?active=true returns all active funding categories (GET) @@ -953,21 +921,9 @@ class APIFundingCategoryViewSet(viewsets.ModelViewSet): queryset = FundingCategory.objects.all() serializer_class = FundingCategorySerializer - permission_classes = [permissions.DjangoModelPermissionsOrAnonReadOnly] - - def get_queryset(self): - """Filters""" - - if self.request.query_params.get('active') == 'true': - return FundingCategory.objects.filter(is_active=True) - - if self.request.query_params.get('active') == 'false': - return FundingCategory.objects.filter(is_active=False) - - return FundingCategory.objects.all() -class APILanguageViewSet(viewsets.ModelViewSet): +class APILanguageViewSet(ActiveInactiveMixin, viewsets.ModelViewSet): """ /languages/ returns all languages (GET, POST) /languages/?active=true returns all active languages (GET) @@ -977,21 +933,9 @@ class APILanguageViewSet(viewsets.ModelViewSet): queryset = Language.objects.all() serializer_class = LanguageSerializer - permission_classes = [permissions.DjangoModelPermissionsOrAnonReadOnly] - - def get_queryset(self): - """Filters""" - - if self.request.query_params.get('active') == 'true': - return Language.objects.filter(is_active=True) - - if self.request.query_params.get('active') == 'false': - return Language.objects.filter(is_active=False) - - return Language.objects.all() -class APIHostViewSet(viewsets.ModelViewSet): +class APIHostViewSet(ActiveInactiveMixin, viewsets.ModelViewSet): """ /hosts/ returns all hosts (GET, POST) /hosts/?active=true returns all active hosts (GET) @@ -1001,16 +945,4 @@ class APIHostViewSet(viewsets.ModelViewSet): queryset = Host.objects.all() serializer_class = HostSerializer - permission_classes = [permissions.DjangoModelPermissionsOrAnonReadOnly] pagination_class = LimitOffsetPagination - - def get_queryset(self): - """Filters""" - - if self.request.query_params.get('active') == 'true': - return Host.objects.filter(is_active=True) - - if self.request.query_params.get('active') == 'false': - return Host.objects.filter(is_active=False) - - return Host.objects.all()