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

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 

4 

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 

11 

12 

13class MemberGroupListView(ListAPIView): 

14 """Returns an overview of all member groups.""" 

15 

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"] 

28 

29 

30class MemberGroupDetailView(RetrieveAPIView): 

31 """Returns details of a member group.""" 

32 

33 serializer_class = MemberGroupSerializer 

34 queryset = MemberGroup.active_objects.all() 

35 permission_classes = [ 

36 IsAuthenticatedOrTokenHasScope, 

37 ] 

38 required_scopes = ["activemembers:read"] 

39 

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) 

44 

45 def get_serializer_context(self): 

46 context = super().get_serializer_context() 

47 context["get_memberships"] = self._get_memberships 

48 return context 

49 

50 

51class BoardDetailView(MemberGroupDetailView): 

52 """Returns details of a board group.""" 

53 

54 queryset = Board.active_objects.all() 

55 

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 ) 

63 

64 # May raise a permission denied 

65 self.check_object_permissions(self.request, obj) 

66 return obj