MessageViewSet.update()   A
last analyzed

Complexity

Conditions 1

Size

Total Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 0
loc 2
rs 10
cc 1
1
from django.http import Http404
2
from django.db.models import Q
3
4
from rest_framework import viewsets, decorators, status
5
from rest_framework.response import Response
6
from rest_framework.permissions import IsAuthenticated
7
from dry_rest_permissions.generics import DRYPermissionFiltersBase
8
9
from sigma_core.models.user import User
10
from sigma_chat.models.chat import Chat
11
from sigma_chat.models.chat_member import ChatMember
12
from sigma_chat.serializers.chat import ChatSerializer
13
from sigma_chat.models.message import Message
14
from sigma_chat.serializers.message import MessageSerializer
15
16
17
class MessageFilterBackend(DRYPermissionFiltersBase):
18
    filter_q = {
19
        'chat': lambda c: Q(chat_id=c)
20
    }
21
22
    def filter_queryset(self, request, queryset, view):
23
        """
24
        Limits all list requests w.r.t the Normal Rules of Visibility.
25
        """
26
        user_chat_ids = request.user.user_chatmember.filter(is_member=True).values_list('chat_id', flat=True)
27
        queryset = queryset.prefetch_related('chat_id', 'chatmember_id') \
28
            .filter(chat_id__in=user_chat_ids)
29
30
        for (param, q) in self.filter_q.items():
31
            x = request.query_params.get(param, None)
32
            if x is not None:
33
                queryset = queryset.filter(q(x))
34
35
        return queryset.distinct()
36
37
38
class MessageViewSet(viewsets.ModelViewSet):
39
    queryset = Message.objects.all()
40
    serializer_class = MessageSerializer
41
    permission_classes = [IsAuthenticated, ]
42
    filter_backends = (MessageFilterBackend, )
43
44
    def create(self, request):
45
        return Response("You're not authorized to create a new Message this way, please use the website.", status=status.HTTP_403_FORBIDDEN)
46
47
    def update(self, request, pk=None):
48
        return Response("You're not authorized to update a new Message this way, please use the website.", status=status.HTTP_403_FORBIDDEN)
49