from celery.result import AsyncResult
from rest_framework.permissions import IsAuthenticated
from rest_framework.response import Response
from rest_framework.views import APIView


class TaskStatus(APIView):
    permission_classes = (IsAuthenticated,)

    def get(self, request, *args, **kwargs):
        task = AsyncResult(kwargs['task_id'])
        ready = task.ready()
        error = ready and not task.successful()

        return Response({
            'ready': ready,
            'result': task.result if ready and not error else None,
            'error': {'text': str(task.result)} if error else None,
        })