blob: 836530310b12feaa0ca0d942949a9f1227318266 [file] [log] [blame]
Dirk Vogtf2a33422016-10-11 17:17:26 +02001from rest_framework import generics
Dirk Vogtf2a33422016-10-11 17:17:26 +02002from crashreports.models import Crashreport
Dirk Vogte1784882016-10-13 16:09:38 +02003from django.shortcuts import get_object_or_404
Dirk Vogtc9e10ab2016-10-12 13:58:15 +02004from crashreports.permissions import HasRightsOrIsDeviceOwnerDeviceCreation
Dirk Vogtf2a33422016-10-11 17:17:26 +02005from crashreports.serializers import CrashReportSerializer
Dirk Vogteda80d32016-11-21 11:45:50 +01006from rest_framework import status
7from rest_framework.response import Response
Dirk Vogtf2a33422016-10-11 17:17:26 +02008
Dirk Vogtf2a33422016-10-11 17:17:26 +02009
Dirk Vogte1784882016-10-13 16:09:38 +020010class ListCreateView(generics.ListCreateAPIView):
Dirk Vogtf2a33422016-10-11 17:17:26 +020011 queryset = Crashreport.objects.all()
12 paginate_by = 20
Dirk Vogtc9e10ab2016-10-12 13:58:15 +020013 permission_classes = (HasRightsOrIsDeviceOwnerDeviceCreation, )
Dirk Vogtf2a33422016-10-11 17:17:26 +020014 serializer_class = CrashReportSerializer
15 pass
Dirk Vogte1784882016-10-13 16:09:38 +020016
17 def dispatch(self, *args, **kwargs):
18 if 'uuid' in kwargs:
19 self.queryset = Crashreport.objects.filter(
20 device__uuid=kwargs['uuid'])
21 return generics.ListCreateAPIView.dispatch(self, *args, **kwargs)
22
Dirk Vogteda80d32016-11-21 11:45:50 +010023 def perform_create(self, serializer):
24 serializer.save()
25 return Response(
26 {
27 'device_local_id': serializer.data['device_local_id']
28 }, status.HTTP_200_OK)
29
Dirk Vogte1784882016-10-13 16:09:38 +020030
31class RetrieveUpdateDestroyView(generics.RetrieveUpdateDestroyAPIView):
32 queryset = Crashreport.objects.all()
33 permission_classes = (HasRightsOrIsDeviceOwnerDeviceCreation, )
34 serializer_class = CrashReportSerializer
Dirk Vogt0d9d5d22016-10-13 16:17:57 +020035 multiple_lookup_fields = {'id', 'device__uuid', 'device_local_id'}
Dirk Vogte1784882016-10-13 16:09:38 +020036
37 def get_object(self):
38 queryset = self.get_queryset()
39 filter = {}
40 for field in self.multiple_lookup_fields:
41 if field in self.kwargs:
42 filter[field] = self.kwargs[field]
43 obj = get_object_or_404(queryset, **filter)
44 self.check_object_permissions(self.request, obj)
45 return obj