from celery_app import celery_app from .services import put_pedimento_data import asyncio import logging from ..tasks.services import register_task, update_task logger = logging.getLogger(__name__) @celery_app.task(bind=True) def process_pedimento_completo_request(self, pedimento_data: dict): """ Tarea de Celery para procesar la descarga de un pedimento completo. Args: pedimento_data (dict): Datos del pedimento a procesar Returns: dict: Resultado del procesamiento con estado y detalles """ loop = asyncio.get_event_loop() task_id = self.request.id servicio = 3 # Código para Pedimento Completo pedimento_id = pedimento_data.get('pedimento', {}).get('id') organizacion_id = pedimento_data.get('pedimento', {}).get('organizacion') try: # Registrar la tarea primero loop.run_until_complete( register_task( task_id=task_id, message=f"Iniciando procesamiento del pedimento completo", status="submitted", pedimento_id=pedimento_id, organizacion_id=organizacion_id, servicio=servicio ) ) # Luego actualizar estado a processing loop.run_until_complete( update_task( task_id=task_id, message=f"Iniciando procesamiento del pedimento completo", status="processing", pedimento_id=pedimento_id, organizacion_id=organizacion_id, servicio=servicio ) ) # Procesar pedimento result = loop.run_until_complete(put_pedimento_data(**pedimento_data)) # Actualizar estado a completed loop.run_until_complete( update_task( task_id=task_id, message=f"Pedimento completo procesado exitosamente", status="completed", pedimento_id=pedimento_id, organizacion_id=organizacion_id, servicio=servicio ) ) return {"status": "success", "result": result} except Exception as e: logger.error(f"Error procesando pedimento completo: {str(e)}", exc_info=True) # Actualizar estado a failed try: loop.run_until_complete( update_task( task_id=task_id, message=f"Error al procesar pedimento completo: {str(e)}", status="failed", pedimento_id=pedimento_id, organizacion_id=organizacion_id, servicio=servicio ) ) except Exception as update_error: logger.error(f"Error actualizando estado de tarea: {update_error}") # Re-lanzar la excepción para que Celery la marque como fallida raise