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