Skip to content

Commit 6434124

Browse files
committed
Add csv renderer to some API endpoints for csv exports
References #121
1 parent 146f7f3 commit 6434124

File tree

2 files changed

+20
-3
lines changed

2 files changed

+20
-3
lines changed

FAIRshakeAPI/views.py

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
from django.urls import reverse
1818
from django.core.exceptions import MultipleObjectsReturned
1919
from rest_framework import views, viewsets, schemas, response, mixins, decorators, renderers, permissions, status
20+
from rest_framework_csv.renderers import CSVRenderer
2021
from functools import reduce
2122
from collections import defaultdict, OrderedDict
2223

@@ -59,6 +60,7 @@ def get_template_context(self, data, renderer_context):
5960
class CustomModelViewSet(viewsets.ModelViewSet):
6061
renderer_classes = [
6162
renderers.JSONRenderer,
63+
CSVRenderer,
6264
CustomTemplateHTMLRenderer,
6365
CustomBrowsableAPIRenderer,
6466
]
@@ -138,14 +140,27 @@ def get_or_create(self, request, **kwargs):
138140
headers = self.get_success_headers(serialized_item.data)
139141
return response.Response(serialized_item.data, status=status.HTTP_200_OK if found else status.HTTP_201_CREATED, headers=headers)
140142

141-
@swagger_auto_schema(methods=['get'], auto_schema=None)
143+
@swagger_auto_schema(methods=['get'])
142144
@decorators.action(
143145
detail=True, methods=['get'], schema=None,
144-
renderer_classes=[CustomTemplateHTMLRenderer],
146+
renderer_classes=[
147+
renderers.JSONRenderer,
148+
CSVRenderer,
149+
CustomTemplateHTMLRenderer
150+
],
145151
)
146152
def assessments(self, request, pk=None, **kwargs):
147153
self.check_permissions(request)
148-
return response.Response()
154+
if isinstance(request.accepted_renderer, CustomTemplateHTMLRenderer):
155+
return response.Response()
156+
# redirect /object/{pk}/assessments => assessments?object={pk}
157+
GET = request.GET.copy()
158+
GET[self.get_model_name()] = pk
159+
return shortcuts.redirect(
160+
reverse('assessment-list')
161+
+ '?'
162+
+ GET.urlencode()
163+
)
149164

150165
@swagger_auto_schema(methods=['get', 'post'], auto_schema=None)
151166
@decorators.action(
@@ -323,6 +338,7 @@ class DigitalObjectViewSet(IdentifiableModelViewSet):
323338
detail=True, methods=['get'],
324339
renderer_classes=[
325340
renderers.JSONRenderer,
341+
CSVRenderer,
326342
CustomBrowsableAPIRenderer,
327343
],
328344
)

requirements.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ django-filter==2.3.0
1212
django-livereload-server==0.3.2
1313
django-rest-auth==0.9.5
1414
Django==2.2.13
15+
djangorestframework-csv==2.1.1
1516
djangorestframework==3.11.0
1617
drf-yasg==1.17.1
1718
dynamic-rest==1.9.6

0 commit comments

Comments
 (0)