Browse Source

Add view for download dataset

pull/1310/head
Hironsan 3 years ago
parent
commit
294a840e4d
1 changed files with 43 additions and 0 deletions
  1. 43
      app/api/views/download/view.py

43
app/api/views/download/view.py

@ -0,0 +1,43 @@
from celery.result import AsyncResult
from django.http import FileResponse
from django.shortcuts import get_object_or_404
from rest_framework import status
from rest_framework.permissions import IsAuthenticated
from rest_framework.response import Response
from rest_framework.views import APIView
from ...models import Project
from ...permissions import IsProjectAdmin
from ...tasks import export_dataset
from .catalog import Options
class DatasetCatalog(APIView):
permission_classes = [IsAuthenticated & IsProjectAdmin]
def get(self, request, *args, **kwargs):
project_id = kwargs['project_id']
project = get_object_or_404(Project, pk=project_id)
options = Options.filter_by_task(project.project_type)
return Response(data=options, status=status.HTTP_200_OK)
class DownloadAPI(APIView):
permission_classes = [IsAuthenticated & IsProjectAdmin]
def get(self, request, *args, **kwargs):
task = AsyncResult(kwargs['task_id'])
ready = task.ready()
if ready:
filename = task.result
return FileResponse(open(filename, mode='rb'), as_attachment=True)
def post(self, request, *args, **kwargs):
project_id = self.kwargs['project_id']
format = request.data.pop('format')
task = export_dataset.delay(
project_id=project_id,
format=format,
**request.data
)
return Response({'task_id': task.task_id})
Loading…
Cancel
Save