Coverage for crunch/django/app/views.py: 100.00%
130 statements
« prev ^ index » next coverage.py v6.5.0, created at 2023-10-01 13:43 +0000
« prev ^ index » next coverage.py v6.5.0, created at 2023-10-01 13:43 +0000
1from django.http import HttpResponse
2from django.views.generic import ListView, DetailView, CreateView, UpdateView
3from django.contrib.auth.mixins import PermissionRequiredMixin
4from rest_framework import viewsets
5from rest_framework import permissions
6from rest_framework.views import APIView
7from rest_framework.response import Response
8from rest_framework import generics
9from . import models, serializers
12######################################################
13## Project Views
14######################################################
16class ProjectListView(PermissionRequiredMixin, ListView):
17 model = models.Project
18 paginate_by = 50
19 permission_required = "crunch.view_project"
22class ProjectDetailView(PermissionRequiredMixin, DetailView):
23 model = models.Project
24 permission_required = "crunch.view_project"
25 # lookup_field = 'slug'
28class ProjectCreateView(PermissionRequiredMixin, CreateView):
29 model = models.Project
30 permission_required = "crunch.add_project"
33class ProjectUpdateView(PermissionRequiredMixin, UpdateView):
34 model = models.Project
35 template_name = "crunch/form.html"
36 # form_class = ProjectForm
37 permission_required = "crunch.update_project"
38 extra_context = dict(
39 form_title="Update Project",
40 )
43class ProjectAPI(viewsets.ModelViewSet):
44 """
45 API endpoint that allows projects to be viewed or edited.
46 """
47 queryset = models.Project.objects.all()
48 serializer_class = serializers.ProjectSerializer
49 permission_classes = [permissions.DjangoModelPermissions]
50 lookup_field = 'slug'
53######################################################
54## Dataset Views
55######################################################
58class DatasetDetailView(PermissionRequiredMixin, DetailView):
59 model = models.Dataset
60 permission_required = "crunch.view_dataset"
61 lookup_field = 'slug'
64class DatasetAPI(viewsets.ModelViewSet):
65 """
66 API endpoint that allows datasets to be viewed or edited.
67 """
68 queryset = models.Dataset.objects.all()
69 serializer_class = serializers.DatasetSerializer
70 permission_classes = [permissions.DjangoModelPermissions]
71 lookup_field = 'slug'
74class DatasetCreateView(PermissionRequiredMixin, CreateView):
75 model = models.Dataset
76 permission_required = "crunch.add_dataset"
79class DatasetUpdateView(PermissionRequiredMixin, UpdateView):
80 model = models.Dataset
81 template_name = "crunch/form.html"
82 # form_class = DatasetForm
83 permission_required = "crunch.update_dataset"
84 extra_context = dict(
85 form_title="Update Dataset",
86 )
89class ProjectNextDatasetReference(APIView):
90 """
91 Retuns the study accession ID and the batch index to process next for a particular project.
92 """
93 permission_classes = [permissions.IsAuthenticated] # should be 'view_dataset'
95 def get(self, request, format=None, slug=None):
96 assert slug is not None
97 project = models.Project.objects.get(slug=slug)
98 dataset = project.next_unprocessed_dataset()
100 dataset_reference = dict(project=dataset.parent.slug, dataset=dataset.slug) if dataset else dict(project="", dataset="")
101 serializer = serializers.DatasetReferenceSerializer(dataset_reference)
102 return Response(serializer.data)
105class NextDatasetReference(APIView):
106 """
107 Retuns the study accession ID and the batch index to process next.
108 """
109 permission_classes = [permissions.IsAuthenticated] # should be 'view_dataset'
111 def get(self, request, format=None):
112 dataset = models.Dataset.next_unprocessed()
114 dataset_reference = dict(project=dataset.parent.slug, dataset=dataset.slug) if dataset else dict(project="", dataset="")
115 serializer = serializers.DatasetReferenceSerializer(dataset_reference)
116 return Response(serializer.data)
119class StatusListCreateAPIView(generics.ListCreateAPIView):
120 queryset = models.Status.objects.all()
121 serializer_class = serializers.StatusSerializer
123 def perform_create(self, serializer):
124 serializer.save(
125 site_user=self.request.user,
126 )
129######################################################
130## Item Views
131######################################################
133class ItemDetailView(PermissionRequiredMixin, DetailView):
134 model = models.Item
135 permission_required = "crunch.view_item"
136 lookup_field = 'slug'
139class ItemCreateView(PermissionRequiredMixin, CreateView):
140 model = models.Item
141 permission_required = "crunch.add_item"
144class ItemUpdateView(PermissionRequiredMixin, UpdateView):
145 model = models.Item
146 template_name = "crunch/form.html"
147 # form_class = ItemForm
148 permission_required = "crunch.update_item"
149 extra_context = dict(
150 form_title="Update Item",
151 )
154class ItemMapView(ItemDetailView):
155 def get(self, request, slug) -> HttpResponse:
156 item = self.get_object()
157 map = item.map()
158 html = map.to_html(as_string=True) if map else "<p>No map available</p>"
159 return HttpResponse(html)
162class ItemAPI(viewsets.ModelViewSet):
163 """
164 API endpoint that allows items to be viewed or edited.
165 """
166 queryset = models.Item.objects.all()
167 serializer_class = serializers.ItemSerializer
168 permission_classes = [permissions.DjangoModelPermissions]
169 lookup_field = 'slug'
172######################################################
173## Attribute Views
174######################################################
176class CharAttributeAPI(viewsets.ModelViewSet):
177 queryset = models.CharAttribute.objects.all()
178 serializer_class = serializers.CharAttributeSerializer
179 permission_classes = [permissions.DjangoModelPermissions]
182class FloatAttributeAPI(viewsets.ModelViewSet):
183 queryset = models.FloatAttribute.objects.all()
184 serializer_class = serializers.FloatAttributeSerializer
185 permission_classes = [permissions.DjangoModelPermissions]
188class IntegerAttributeAPI(viewsets.ModelViewSet):
189 queryset = models.IntegerAttribute.objects.all()
190 serializer_class = serializers.IntegerAttributeSerializer
191 permission_classes = [permissions.DjangoModelPermissions]
194class FilesizeAttributeAPI(viewsets.ModelViewSet):
195 queryset = models.FilesizeAttribute.objects.all()
196 serializer_class = serializers.FilesizeAttributeSerializer
197 permission_classes = [permissions.DjangoModelPermissions]
200class BooleanAttributeAPI(viewsets.ModelViewSet):
201 queryset = models.BooleanAttribute.objects.all()
202 serializer_class = serializers.BooleanAttributeSerializer
203 permission_classes = [permissions.DjangoModelPermissions]
206class FloatAttributeAPI(viewsets.ModelViewSet):
207 queryset = models.FloatAttribute.objects.all()
208 serializer_class = serializers.FloatAttributeSerializer
209 permission_classes = [permissions.DjangoModelPermissions]
212class URLAttributeAPI(viewsets.ModelViewSet):
213 queryset = models.URLAttribute.objects.all()
214 serializer_class = serializers.URLAttributeSerializer
215 permission_classes = [permissions.DjangoModelPermissions]
218class LatLongAttributeAPI(viewsets.ModelViewSet):
219 queryset = models.LatLongAttribute.objects.all()
220 serializer_class = serializers.LatLongAttributeSerializer
221 permission_classes = [permissions.DjangoModelPermissions]
224class DateTimeAttributeAPI(viewsets.ModelViewSet):
225 queryset = models.DateTimeAttribute.objects.all()
226 serializer_class = serializers.DateTimeAttributeSerializer
227 permission_classes = [permissions.DjangoModelPermissions]
230class DateAttributeAPI(viewsets.ModelViewSet):
231 queryset = models.DateAttribute.objects.all()
232 serializer_class = serializers.DateAttributeSerializer
233 permission_classes = [permissions.DjangoModelPermissions]