blob: 804bd1b59405ae60a2e8b356e9a4ce02b7958a7b [file] [log] [blame]
Dirk Vogtf130c752016-08-23 14:45:01 +02001# -*- coding: utf-8 -*-
Dirk Vogt05218ef2016-09-21 13:35:02 +02002import django_filters
Dirk Vogt05218ef2016-09-21 13:35:02 +02003from rest_framework import filters
Dirk Vogt05218ef2016-09-21 13:35:02 +02004from rest_framework.permissions import BasePermission
Dirk Vogtf2a33422016-10-11 17:17:26 +02005from rest_framework import viewsets
Dirk Vogt05218ef2016-09-21 13:35:02 +02006from crashreports.models import Crashreport
Dirk Vogtf2a33422016-10-11 17:17:26 +02007from crashreports.serializers import CrashReportSerializer
Dirk Vogt05218ef2016-09-21 13:35:02 +02008
Dirk Vogt05218ef2016-09-21 13:35:02 +02009
Dirk Vogtd1345212016-09-14 14:31:45 +020010class IsCreationOrIsAuthenticated(BasePermission):
Dirk Vogtc9e10ab2016-10-12 13:58:15 +020011
Dirk Vogtd1345212016-09-14 14:31:45 +020012 def has_permission(self, request, view):
13 if not request.user.is_authenticated():
14 if view.action == 'create':
15 return True
16 else:
17 return False
18 else:
19 return True
20
Dirk Vogtf2a33422016-10-11 17:17:26 +020021
Dirk Vogtd1345212016-09-14 14:31:45 +020022class ListFilter(django_filters.Filter):
Dirk Vogtc9e10ab2016-10-12 13:58:15 +020023
Dirk Vogtd1345212016-09-14 14:31:45 +020024 def filter(self, qs, value):
25 value_list = value.split(u',')
Dirk Vogtc9e10ab2016-10-12 13:58:15 +020026 return super(ListFilter, self).filter(
27 qs, django_filters.fields.Lookup(value_list, 'in'))
Dirk Vogtf130c752016-08-23 14:45:01 +020028
Dirk Vogtf2a33422016-10-11 17:17:26 +020029
Dirk Vogtd1345212016-09-14 14:31:45 +020030class CrashreportFilter(filters.FilterSet):
31 start_date = django_filters.DateTimeFilter(name="date", lookup_expr='gte')
32 end_date = django_filters.DateTimeFilter(name="date", lookup_expr='lte')
33 boot_reason = ListFilter(name='boot_reason')
Dirk Vogtc9e10ab2016-10-12 13:58:15 +020034
Dirk Vogtd1345212016-09-14 14:31:45 +020035 class Meta:
36 model = Crashreport
Dirk Vogtc9e10ab2016-10-12 13:58:15 +020037 fields = ['build_fingerprint', 'boot_reason',
38 'power_on_reason', 'power_off_reason']
39
Dirk Vogtf130c752016-08-23 14:45:01 +020040
Dirk Vogtd1345212016-09-14 14:31:45 +020041class CrashreportViewSet(viewsets.ModelViewSet):
42 queryset = Crashreport.objects.all()
Dirk Vogtc9e10ab2016-10-12 13:58:15 +020043 serializer_class = CrashReportSerializer
Dirk Vogtd1345212016-09-14 14:31:45 +020044 permission_classes = [IsCreationOrIsAuthenticated]
45 filter_backends = (filters.DjangoFilterBackend,)
46 filter_class = CrashreportFilter