blob: ecf5d741eb71617384ba925f6cb4bc3657e5077e [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
Dirk Vogt83107df2017-05-02 12:04:19 +020015 filter_fields = ('device','build_fingerprint')
16
Dirk Vogtf2a33422016-10-11 17:17:26 +020017 pass
Dirk Vogte1784882016-10-13 16:09:38 +020018
19 def dispatch(self, *args, **kwargs):
20 if 'uuid' in kwargs:
21 self.queryset = Crashreport.objects.filter(
22 device__uuid=kwargs['uuid'])
23 return generics.ListCreateAPIView.dispatch(self, *args, **kwargs)
24
Dirk Vogteda80d32016-11-21 11:45:50 +010025 def perform_create(self, serializer):
26 serializer.save()
27 return Response(
28 {
29 'device_local_id': serializer.data['device_local_id']
30 }, status.HTTP_200_OK)
31
Dirk Vogte1784882016-10-13 16:09:38 +020032
33class RetrieveUpdateDestroyView(generics.RetrieveUpdateDestroyAPIView):
34 queryset = Crashreport.objects.all()
35 permission_classes = (HasRightsOrIsDeviceOwnerDeviceCreation, )
36 serializer_class = CrashReportSerializer
Dirk Vogt0d9d5d22016-10-13 16:17:57 +020037 multiple_lookup_fields = {'id', 'device__uuid', 'device_local_id'}
Dirk Vogte1784882016-10-13 16:09:38 +020038
39 def get_object(self):
40 queryset = self.get_queryset()
41 filter = {}
42 for field in self.multiple_lookup_fields:
43 if field in self.kwargs:
44 filter[field] = self.kwargs[field]
45 obj = get_object_or_404(queryset, **filter)
46 self.check_object_permissions(self.request, obj)
47 return obj