43 lines
1.6 KiB
Python
43 lines
1.6 KiB
Python
from celery_app import celery_app
|
|
|
|
from .services import obtener_edoc, obtener_edocs_masivo
|
|
import asyncio # Necesario para ejecutar funciones async dentro de Celery
|
|
|
|
@celery_app.task(bind=True)
|
|
def process_edoc_download_request(self, edoc_data: dict):
|
|
"""
|
|
Tarea de Celery para procesar la descarga de un solo documento edoc.
|
|
"""
|
|
try:
|
|
# Ejecutar la función asíncrona dentro del hilo síncrono de Celery
|
|
loop = asyncio.get_event_loop()
|
|
result = loop.run_until_complete(obtener_edoc(**edoc_data))
|
|
|
|
return {"status": "success", "result": result}
|
|
except Exception as e:
|
|
# Manejo de errores
|
|
self.update_state(
|
|
state='FAILURE',
|
|
meta={'exc_type': type(e).__name__, 'exc_message': str(e)}
|
|
)
|
|
# Es crucial volver a lanzar la excepción para que Celery la marque como fallida
|
|
raise e
|
|
|
|
@celery_app.task(bind=True)
|
|
def process_edocs_masivo_download_request(self, edoc_data: dict):
|
|
"""
|
|
Tarea de Celery para procesar la descarga de múltiples documentos edoc.
|
|
Esta tarea orquesta la ejecución, pero puede delegar en el servicio.
|
|
"""
|
|
try:
|
|
# Ejecutar la función asíncrona dentro del hilo síncrono de Celery
|
|
loop = asyncio.get_event_loop()
|
|
result = loop.run_until_complete(obtener_edocs_masivo(**edoc_data))
|
|
|
|
return {"status": "success", "result": result}
|
|
except Exception as e:
|
|
self.update_state(
|
|
state='FAILURE',
|
|
meta={'exc_type': type(e).__name__, 'exc_message': str(e)}
|
|
)
|
|
raise |