Coverage for website/activemembers/api/v2/views.py: 65.71%
33 statements
« prev ^ index » next coverage.py v7.6.7, created at 2025-08-14 10:31 +0000
« prev ^ index » next coverage.py v7.6.7, created at 2025-08-14 10:31 +0000
1from oauth2_provider.contrib.rest_framework import IsAuthenticatedOrTokenHasScope
2from rest_framework import filters as framework_filters
3from rest_framework.generics import ListAPIView, RetrieveAPIView, get_object_or_404
5from activemembers.api.v2 import filters
6from activemembers.api.v2.serializers.member_group import (
7 MemberGroupListSerializer,
8 MemberGroupSerializer,
9)
10from activemembers.models import Board, MemberGroup, MemberGroupMembership
13class MemberGroupListView(ListAPIView):
14 """Returns an overview of all member groups."""
16 serializer_class = MemberGroupListSerializer
17 queryset = MemberGroup.active_objects.all()
18 filter_backends = (
19 framework_filters.SearchFilter,
20 filters.MemberGroupTypeFilter,
21 filters.MemberGroupDateFilter,
22 )
23 search_fields = ("name",)
24 permission_classes = [
25 IsAuthenticatedOrTokenHasScope,
26 ]
27 required_scopes = ["activemembers:read"]
30class MemberGroupDetailView(RetrieveAPIView):
31 """Returns details of a member group."""
33 serializer_class = MemberGroupSerializer
34 queryset = MemberGroup.active_objects.all()
35 permission_classes = [
36 IsAuthenticatedOrTokenHasScope,
37 ]
38 required_scopes = ["activemembers:read"]
40 def _get_memberships(self, group):
41 if hasattr(group, "board"):
42 return MemberGroupMembership.objects.filter(group=group)
43 return MemberGroupMembership.active_objects.filter(group=group)
45 def get_serializer_context(self):
46 context = super().get_serializer_context()
47 context["get_memberships"] = self._get_memberships
48 return context
51class BoardDetailView(MemberGroupDetailView):
52 """Returns details of a board group."""
54 queryset = Board.active_objects.all()
56 def get_object(self):
57 queryset = self.filter_queryset(self.get_queryset())
58 obj = get_object_or_404(
59 queryset,
60 since__year=self.kwargs.get("since"),
61 until__year=self.kwargs.get("until"),
62 )
64 # May raise a permission denied
65 self.check_object_permissions(self.request, obj)
66 return obj