blob: df9973228432091a55d2f7787d0efccb89567fcc [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
Mitja Nikolauscb50f2c2018-08-24 13:54:48 +020013 permission_classes = (HasRightsOrIsDeviceOwnerDeviceCreation,)
Dirk Vogtf2a33422016-10-11 17:17:26 +020014 serializer_class = CrashReportSerializer
Mitja Nikolauscb50f2c2018-08-24 13:54:48 +020015 filter_fields = ("device", "build_fingerprint", "radio_version")
Dirk Vogt83107df2017-05-02 12:04:19 +020016
Dirk Vogtf2a33422016-10-11 17:17:26 +020017 pass
Dirk Vogte1784882016-10-13 16:09:38 +020018
19 def dispatch(self, *args, **kwargs):
Mitja Nikolauscb50f2c2018-08-24 13:54:48 +020020 if "uuid" in kwargs:
Dirk Vogte1784882016-10-13 16:09:38 +020021 self.queryset = Crashreport.objects.filter(
Mitja Nikolauscb50f2c2018-08-24 13:54:48 +020022 device__uuid=kwargs["uuid"]
23 )
Dirk Vogte1784882016-10-13 16:09:38 +020024 return generics.ListCreateAPIView.dispatch(self, *args, **kwargs)
25
Dirk Vogteda80d32016-11-21 11:45:50 +010026 def perform_create(self, serializer):
27 serializer.save()
28 return Response(
Mitja Nikolauscb50f2c2018-08-24 13:54:48 +020029 {"device_local_id": serializer.data["device_local_id"]},
30 status.HTTP_200_OK,
31 )
Dirk Vogteda80d32016-11-21 11:45:50 +010032
Dirk Vogte1784882016-10-13 16:09:38 +020033
34class RetrieveUpdateDestroyView(generics.RetrieveUpdateDestroyAPIView):
35 queryset = Crashreport.objects.all()
Mitja Nikolauscb50f2c2018-08-24 13:54:48 +020036 permission_classes = (HasRightsOrIsDeviceOwnerDeviceCreation,)
Dirk Vogte1784882016-10-13 16:09:38 +020037 serializer_class = CrashReportSerializer
Mitja Nikolauscb50f2c2018-08-24 13:54:48 +020038 multiple_lookup_fields = {"id", "device__uuid", "device_local_id"}
Dirk Vogte1784882016-10-13 16:09:38 +020039
40 def get_object(self):
41 queryset = self.get_queryset()
42 filter = {}
43 for field in self.multiple_lookup_fields:
44 if field in self.kwargs:
45 filter[field] = self.kwargs[field]
46 obj = get_object_or_404(queryset, **filter)
47 self.check_object_permissions(self.request, obj)
48 return obj