Dirk Vogt | f130c75 | 2016-08-23 14:45:01 +0200 | [diff] [blame] | 1 | # -*- coding: utf-8 -*- |
Dirk Vogt | 05218ef | 2016-09-21 13:35:02 +0200 | [diff] [blame] | 2 | import django_filters |
Dirk Vogt | 05218ef | 2016-09-21 13:35:02 +0200 | [diff] [blame] | 3 | from rest_framework import filters |
Dirk Vogt | 05218ef | 2016-09-21 13:35:02 +0200 | [diff] [blame] | 4 | from rest_framework.permissions import BasePermission |
Dirk Vogt | f2a3342 | 2016-10-11 17:17:26 +0200 | [diff] [blame] | 5 | from rest_framework import viewsets |
Dirk Vogt | 05218ef | 2016-09-21 13:35:02 +0200 | [diff] [blame] | 6 | from crashreports.models import Crashreport |
Dirk Vogt | f2a3342 | 2016-10-11 17:17:26 +0200 | [diff] [blame] | 7 | from crashreports.serializers import CrashReportSerializer |
Dirk Vogt | 05218ef | 2016-09-21 13:35:02 +0200 | [diff] [blame] | 8 | |
Dirk Vogt | 05218ef | 2016-09-21 13:35:02 +0200 | [diff] [blame] | 9 | |
Dirk Vogt | d134521 | 2016-09-14 14:31:45 +0200 | [diff] [blame] | 10 | class IsCreationOrIsAuthenticated(BasePermission): |
Dirk Vogt | c9e10ab | 2016-10-12 13:58:15 +0200 | [diff] [blame] | 11 | |
Dirk Vogt | d134521 | 2016-09-14 14:31:45 +0200 | [diff] [blame] | 12 | 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 Vogt | f2a3342 | 2016-10-11 17:17:26 +0200 | [diff] [blame] | 21 | |
Dirk Vogt | d134521 | 2016-09-14 14:31:45 +0200 | [diff] [blame] | 22 | class ListFilter(django_filters.Filter): |
Dirk Vogt | c9e10ab | 2016-10-12 13:58:15 +0200 | [diff] [blame] | 23 | |
Dirk Vogt | d134521 | 2016-09-14 14:31:45 +0200 | [diff] [blame] | 24 | def filter(self, qs, value): |
| 25 | value_list = value.split(u',') |
Dirk Vogt | c9e10ab | 2016-10-12 13:58:15 +0200 | [diff] [blame] | 26 | return super(ListFilter, self).filter( |
| 27 | qs, django_filters.fields.Lookup(value_list, 'in')) |
Dirk Vogt | f130c75 | 2016-08-23 14:45:01 +0200 | [diff] [blame] | 28 | |
Dirk Vogt | f2a3342 | 2016-10-11 17:17:26 +0200 | [diff] [blame] | 29 | |
Dirk Vogt | d134521 | 2016-09-14 14:31:45 +0200 | [diff] [blame] | 30 | class 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 Vogt | c9e10ab | 2016-10-12 13:58:15 +0200 | [diff] [blame] | 34 | |
Dirk Vogt | d134521 | 2016-09-14 14:31:45 +0200 | [diff] [blame] | 35 | class Meta: |
| 36 | model = Crashreport |
Dirk Vogt | c9e10ab | 2016-10-12 13:58:15 +0200 | [diff] [blame] | 37 | fields = ['build_fingerprint', 'boot_reason', |
| 38 | 'power_on_reason', 'power_off_reason'] |
| 39 | |
Dirk Vogt | f130c75 | 2016-08-23 14:45:01 +0200 | [diff] [blame] | 40 | |
Dirk Vogt | d134521 | 2016-09-14 14:31:45 +0200 | [diff] [blame] | 41 | class CrashreportViewSet(viewsets.ModelViewSet): |
| 42 | queryset = Crashreport.objects.all() |
Dirk Vogt | c9e10ab | 2016-10-12 13:58:15 +0200 | [diff] [blame] | 43 | serializer_class = CrashReportSerializer |
Dirk Vogt | d134521 | 2016-09-14 14:31:45 +0200 | [diff] [blame] | 44 | permission_classes = [IsCreationOrIsAuthenticated] |
| 45 | filter_backends = (filters.DjangoFilterBackend,) |
| 46 | filter_class = CrashreportFilter |