nuevo enpoint en segundo plano
This commit is contained in:
@@ -48,4 +48,58 @@ class TaskViewSet(LoggingMixin,viewsets.ModelViewSet,OrganizacionFiltradaMixin):
|
||||
# else:
|
||||
# return self.queryset.filter(organizacion_id=user.organizacion.id)
|
||||
return queryset
|
||||
|
||||
|
||||
from rest_framework.views import APIView
|
||||
from rest_framework.response import Response
|
||||
from rest_framework import status
|
||||
from celery.result import AsyncResult
|
||||
|
||||
|
||||
class TaskStatusView(APIView):
|
||||
"""
|
||||
Vista para consultar el estado de tareas de Celery.
|
||||
"""
|
||||
permission_classes = [IsAuthenticated]
|
||||
|
||||
def get(self, request, task_id):
|
||||
"""
|
||||
Consulta el estado de una tarea de Celery.
|
||||
|
||||
Returns:
|
||||
- PENDING: La tarea está esperando ser procesada
|
||||
- STARTED: La tarea ha sido iniciada
|
||||
- SUCCESS: La tarea se completó exitosamente
|
||||
- FAILURE: La tarea falló
|
||||
- RETRY: La tarea está reintentando
|
||||
"""
|
||||
try:
|
||||
task_result = AsyncResult(task_id)
|
||||
|
||||
response_data = {
|
||||
'task_id': task_id,
|
||||
'status': task_result.state,
|
||||
'ready': task_result.ready(),
|
||||
'successful': task_result.successful() if task_result.ready() else None,
|
||||
}
|
||||
|
||||
if task_result.ready() and task_result.successful():
|
||||
try:
|
||||
response_data['result'] = task_result.result
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
if task_result.state == 'FAILURE':
|
||||
response_data['error'] = str(task_result.info)
|
||||
|
||||
if task_result.state == 'STARTED':
|
||||
response_data['info'] = str(task_result.info) if task_result.info else None
|
||||
|
||||
return Response(response_data, status=status.HTTP_200_OK)
|
||||
|
||||
except Exception as e:
|
||||
return Response(
|
||||
{'error': f'Error al consultar tarea: {str(e)}'},
|
||||
status=status.HTTP_500_INTERNAL_SERVER_ERROR
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user