import asyncio import logging from celery import Celery from celery_app import celery_app from typing import Dict, Any from .services import consume_ws_get_cove, consume_ws_get_acuse_cove from api.api_v2.modules.tasks.services import update_task, register_task # Logger para el módulo logger = logging.getLogger(__name__) @celery_app.task(bind=True) def process_cove_request(self, cove_request: Dict[str, Any]) -> Dict[str, Any]: """ Tarea para procesar solicitudes de COVE. """ task_id = self.request.id pedimento_info = cove_request.get('pedimento', {}) pedimento_id = pedimento_info.get('id') organizacion_id = pedimento_info.get('organizacion') pedimento_app = pedimento_info.get('pedimento_app', 'N/A') cove_info = cove_request.get('cove', {}) cove_number = cove_info.get('numero_cove', 'N/A') try: # Registrar el inicio de la tarea logger.info(f"[COVE] Registrando inicio de tarea {task_id}") asyncio.run( register_task( task_id=task_id, status="submitted", message=f"Iniciando proceso de COVE {cove_number} para pedimento {pedimento_app}", pedimento_id=pedimento_id, organizacion_id=organizacion_id, servicio=8 # 8 corresponde a "Cove" ) ) logger.info(f"[COVE] Actualizando estado a processing para tarea {task_id}") asyncio.run( update_task( task_id=task_id, status="processing", message=f"Procesando COVE {cove_number} para pedimento {pedimento_app}", pedimento_id=pedimento_id, organizacion_id=organizacion_id, servicio=8 ) ) cove_response = asyncio.run(consume_ws_get_cove(**cove_request)) asyncio.run( update_task( task_id=task_id, status="completed", message=f"COVE {cove_number} obtenido exitosamente para pedimento {pedimento_app}", pedimento_id=pedimento_id, organizacion_id=organizacion_id, servicio=8 ) ) return {"status": "processed", "data": cove_response} except Exception as e: error_message = f"Error al procesar COVE {cove_number} para pedimento {pedimento_app}: {str(e)}" logger.error(error_message) try: asyncio.run( update_task( task_id=task_id, status="failed", message=error_message, pedimento_id=pedimento_id, organizacion_id=organizacion_id, servicio=8 ) ) except Exception as update_error: logger.error(f"No se pudo actualizar el estado de la tarea: {update_error}") raise @celery_app.task(bind=True) def process_acuse_cove_request(self, cove_request: Dict[str, Any]) -> Dict[str, Any]: """ Tarea para procesar solicitudes de acuse de COVE. """ task_id = self.request.id pedimento_info = cove_request.get('pedimento', {}) pedimento_id = pedimento_info.get('id') organizacion_id = pedimento_info.get('organizacion') pedimento_app = pedimento_info.get('pedimento_app', 'N/A') cove_info = cove_request.get('cove', {}) cove_number = cove_info.get('numero_cove', 'N/A') try: # Registrar el inicio de la tarea logger.info(f"[COVE] Registrando inicio de tarea de acuse {task_id}") asyncio.run( register_task( task_id=task_id, status="submitted", message=f"Iniciando proceso de acuse de COVE {cove_number} para pedimento {pedimento_app}", pedimento_id=pedimento_id, organizacion_id=organizacion_id, servicio=9 # 9 corresponde a "Acuse Cove" ) ) logger.info(f"[COVE] Actualizando estado a processing para tarea de acuse {task_id}") asyncio.run( update_task( task_id=task_id, status="processing", message=f"Procesando acuse de COVE {cove_number} para pedimento {pedimento_app}", pedimento_id=pedimento_id, organizacion_id=organizacion_id, servicio=9 ) ) acuse_response = asyncio.run(consume_ws_get_acuse_cove(**cove_request)) asyncio.run( update_task( task_id=task_id, status="completed", message=f"Acuse de COVE {cove_number} obtenido exitosamente para pedimento {pedimento_app}", pedimento_id=pedimento_id, organizacion_id=organizacion_id, servicio=9 ) ) return {"status": "processed", "data": acuse_response} except Exception as e: error_message = f"Error al procesar acuse de COVE {cove_number} para pedimento {pedimento_app}: {str(e)}" logger.error(error_message) try: asyncio.run( update_task( task_id=task_id, status="failed", message=error_message, pedimento_id=pedimento_id, organizacion_id=organizacion_id, servicio=9 ) ) except Exception as update_error: logger.error(f"No se pudo actualizar el estado de la tarea: {update_error}") raise