You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
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 members.permissions import IsProjectAdmin
from ..models import Project from ..tasks import export_dataset from .download.catalog import Options
class DownloadDatasetCatalog(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_id = request.GET['taskId'] task = AsyncResult(task_id) ready = task.ready() if ready: filename = task.result return FileResponse(open(filename, mode='rb'), as_attachment=True) return Response({'status': 'Not ready'})
def post(self, request, *args, **kwargs): project_id = self.kwargs['project_id'] format = request.data.pop('format') export_approved = request.data.pop('exportApproved', False) task = export_dataset.delay( project_id=project_id, format=format, export_approved=export_approved, **request.data ) return Response({'task_id': task.task_id})
|