Completed
Pull Request — master (#17)
by Camille
01:23
created

GroupMemberViewSet   A

Complexity

Total Complexity 4

Size/Duplication

Total Lines 39
Duplicated Lines 0 %
Metric Value
dl 0
loc 39
rs 10
wmc 4

2 Methods

Rating   Name   Duplication   Size   Complexity  
A create() 0 7 2
A accept_join_request() 0 14 2
1
from django.http import Http404
2
3
from rest_framework import viewsets, decorators, status, mixins
4
from rest_framework.response import Response
5
from rest_framework.permissions import IsAuthenticated
6
from dry_rest_permissions.generics import DRYPermissions
7
8
from sigma_core.models.user import User
9
from sigma_core.models.group_member import GroupMember
10
from sigma_core.serializers.user import BasicUserWithPermsSerializer, DetailedUserWithPermsSerializer, DetailedUserSerializer
11
from sigma_core.serializers.group_member import GroupMemberSerializer
12
13
class GroupMemberViewSet(viewsets.ModelViewSet):
14
    queryset = GroupMember.objects.select_related('group', 'user')
15
    serializer_class = GroupMemberSerializer
16
    permission_classes = [IsAuthenticated, DRYPermissions, ]
17
    filter_fields = ('user', 'group', )
18
19
    def create(self, request):
20
        serializer = GroupMemberSerializer(data=request.data)
21
        if not serializer.is_valid():
22
            return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
23
24
        mem = serializer.save()
25
        return Response(serializer.data, status=status.HTTP_201_CREATED)
26
27
    # def update(self, request, pk=None):
28
    #     pass
29
    #
30
    # @decorators.detail_route(methods=['put'])
31
    # def promote(self, request, pk=None):
32
    #     pass
33
    #
34
    # @decorators.detail_route(methods=['put'])
35
    # def demote(self, request, pk=None):
36
    #     pass
37
38
    @decorators.detail_route(methods=['put'])
39
    def accept_join_request(self, request, pk=None):
40
        try:
41
            gm = GroupMember.objects.select_related('group').get(pk=pk)
42
        except GroupMember.DoesNotExist:
43
            raise Http404()
44
45
        gm.perm_rank = 1 # default_perm_rank should be 0, so validation is to set perm_rank to 1
46
        gm.save()
47
48
        # TODO: notify user of that change
49
50
        s = GroupMemberSerializer(gm)
51
        return Response(s.data, status=status.HTTP_200_OK)
52
53
    # @decorators.detail_route(methods=['put'])
54
    # def kick(self, request, pk=None):
55
    #     pass
56
    #
57