blob: 841dec8342d37162c17fdd1ee53d60365c8858a7 [file] [log] [blame]
from rest_framework import generics
from django.shortcuts import get_object_or_404
from crashreports.models import HeartBeat
from crashreports.serializers import HeartBeatSerializer
from crashreports.permissions import HasRightsOrIsDeviceOwnerDeviceCreation
# TODO: There is quite some code duplciation between here and the corresponding
# crashreport code. We should revisit this later.
class ListCreateView(generics.ListCreateAPIView):
queryset = HeartBeat.objects.all()
paginate_by = 20
permission_classes = (HasRightsOrIsDeviceOwnerDeviceCreation, )
serializer_class = HeartBeatSerializer
filter_fields = ('device', 'build_fingerprint', 'radio_version')
def get(self, *args, **kwargs):
if 'uuid' in kwargs:
self.queryset = HeartBeat.objects.filter(
device__uuid=kwargs['uuid'])
return generics.ListCreateAPIView.get(self, *args, **kwargs)
class RetrieveUpdateDestroyView(generics.RetrieveUpdateDestroyAPIView):
queryset = HeartBeat.objects.all()
permission_classes = (HasRightsOrIsDeviceOwnerDeviceCreation, )
serializer_class = HeartBeatSerializer
multiple_lookup_fields = {'id', 'device__uuid', 'device_local_id'}
def get_object(self):
queryset = self.get_queryset()
filter = {}
for field in self.multiple_lookup_fields:
if field in self.kwargs:
filter[field] = self.kwargs[field]
obj = get_object_or_404(queryset, **filter)
self.check_object_permissions(self.request, obj)
return obj