Coverage for dashboard\views.py: 69%
Shortcuts on this page
r m x toggle line displays
j k next/prev highlighted chunk
0 (zero) top of page
1 (one) first highlighted chunk
Shortcuts on this page
r m x toggle line displays
j k next/prev highlighted chunk
0 (zero) top of page
1 (one) first highlighted chunk
1from django.db.models import query
2from django.http.response import HttpResponse
3from django.shortcuts import render
4from rest_framework import status, generics, mixins
5from rest_framework.decorators import action
6from rest_framework.response import Response
7from rest_framework.views import APIView
8from rest_framework.viewsets import ModelViewSet
9from rest_framework.permissions import IsAuthenticated, SAFE_METHODS
10from rest_framework.authentication import (
11 BasicAuthentication,
12 TokenAuthentication
13)
14from django.db import transaction
16from .models import (
17 Dataset,
18 DataPair,
19 SetToUser,
20)
21from .serializers import (
22 DataPairSerializer,
23 DataSetSerializer,
24 FileUploadSerializer
25)
26from .custom_modules.mixins import (
27 MultipleFieldLookupMixin,
28 # GetRelatedMixin
29)
30from .custom_modules.permissions import (
31 UsersDataPermission
32)
33from .custom_modules.validators import (
34 FileValidator
35)
36from .data_interactions.ingestion import IngestData
39class DataPairSurveyView(UsersDataPermission, MultipleFieldLookupMixin, generics.RetrieveAPIView):
40 queryset = DataPair.objects.all()
41 serializer_class = DataPairSerializer
42 lookup_fields = ['key', 'dataset']
43 authentication_classes = [BasicAuthentication]
46class UserDataSetsView(MultipleFieldLookupMixin, generics.ListCreateAPIView):
47 queryset = Dataset.objects.all()
48 # serializer_class = DataSetSerializer
49 lookup_fields = ['dataset']
50 permission_classes = [IsAuthenticated]
51 authentication_classes = [TokenAuthentication, BasicAuthentication]
53 def get_serializer_class(self):
54 if self.request.method in SAFE_METHODS:
55 return DataSetSerializer
56 else:
57 return FileUploadSerializer
60 def get_queryset(self, *args, **kwargs):
61 queryset = Dataset.objects.filter(users=self.request.user)
62 return queryset
64 @transaction.atomic
65 def create(self, request, *args, **kwargs):
66 serializer = self.get_serializer(data=request.data)
67 serializer.is_valid(raise_exception=True)
68 file = serializer.validated_data['file']
69 file_type = FileValidator(file)
70 ingestor = IngestData(request.user, request.data['dataset_name'])
71 success = ingestor.ingest_csv(file)
73 if success:
74 return HttpResponse(status=201)
75 else:
76 return HttpResponse(status=400)
79# retrieve works, delete works, need to make custom edit that only allows a change to key value
80class UserDataPairView(UsersDataPermission, MultipleFieldLookupMixin, generics.RetrieveUpdateDestroyAPIView):
81 queryset = DataPair.objects.all()
82 serializer_class = DataPairSerializer
83 lookup_fields = ['key', 'value', 'dataset']
84 authentication_classes = [BasicAuthentication]
86 def patch(self, request, *args, **kwargs):
87 if 'key' and 'value' in request.data:
88 return self.partial_update(request, *args, **kwargs)
89 else:
90 print("values missing")
91 raise
93 def get_queryset(self, *args, **kwargs):
94 return DataPair.objects.all()
95 # return self.get_serializer_class().get_related(queryset)
97 # def check_object_permissions(self, request, obj):
98 # if request.method not in SAFE_METHODS:
99 # permitted_user = DataPair.objects.filter(id__contains=obj.id).select_related('dataset').prefetch_related('dataset__users').values('dataset__users__setToUser__can_write')
100 # return permitted_user
101 # else:
102 # return True
105class UserDataSetView(UsersDataPermission, generics.ListAPIView):
106 queryset = DataPair.objects.all()
107 serializer_class = DataPairSerializer
108 lookup_fields = ['dataset']
109 authentication_classes = [BasicAuthentication]
113# class UploadFileView(generics.CreateAPIView):
114# serializer_class = DataPairSerializer
116# def create(self, request, *args, **kwargs):
117# serializer = self.get_serializer(data=request.data)
118# serializer.is_valid(raise_exception=True)
119# file = serializer.validated_data['file']
120# file_type, issue = FileValidator(file)
121# if file_type is None:
122# return HttpResponse(status=400, headers={'error': issue})
123# ingestor = IngestData(request.user, request.dataset_name)
124# success = ingestor.ingest_csv(file)
126# if success:
127# return HttpResponse(status=201)
128# else:
129# return HttpResponse(status=400, headers={'error': issue})