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

62 statements  

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 

15 

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 

37 

38 

39class DataPairSurveyView(UsersDataPermission, MultipleFieldLookupMixin, generics.RetrieveAPIView): 

40 queryset = DataPair.objects.all() 

41 serializer_class = DataPairSerializer 

42 lookup_fields = ['key', 'dataset'] 

43 authentication_classes = [BasicAuthentication] 

44 

45 

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] 

52 

53 def get_serializer_class(self): 

54 if self.request.method in SAFE_METHODS: 

55 return DataSetSerializer 

56 else: 

57 return FileUploadSerializer 

58 

59 

60 def get_queryset(self, *args, **kwargs): 

61 queryset = Dataset.objects.filter(users=self.request.user) 

62 return queryset 

63 

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) 

72 

73 if success: 

74 return HttpResponse(status=201) 

75 else: 

76 return HttpResponse(status=400) 

77 

78 

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] 

85 

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 

92 

93 def get_queryset(self, *args, **kwargs): 

94 return DataPair.objects.all() 

95 # return self.get_serializer_class().get_related(queryset) 

96 

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 

103 

104 

105class UserDataSetView(UsersDataPermission, generics.ListAPIView): 

106 queryset = DataPair.objects.all() 

107 serializer_class = DataPairSerializer 

108 lookup_fields = ['dataset'] 

109 authentication_classes = [BasicAuthentication] 

110 

111 

112 

113# class UploadFileView(generics.CreateAPIView): 

114# serializer_class = DataPairSerializer 

115 

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) 

125 

126# if success: 

127# return HttpResponse(status=201) 

128# else: 

129# return HttpResponse(status=400, headers={'error': issue})