40 lines
1.1 KiB
Python
40 lines
1.1 KiB
Python
from celery import Celery
|
|
from celery_app import celery_app
|
|
import asyncio
|
|
import logging
|
|
from typing import Dict, Any
|
|
from contextlib import asynccontextmanager
|
|
|
|
from .services import obtener_acuse
|
|
from api.api_v2.modules.tasks.tasks import run_async_task
|
|
|
|
|
|
@celery_app.task
|
|
def process_acuse_request(acuse_request: Dict[str, Any]) -> Dict[str, Any]:
|
|
"""
|
|
Tarea de Celery para procesar la solicitud de acuse.
|
|
|
|
Args:
|
|
acuse_request: Diccionario con los datos de la solicitud de acuse.
|
|
|
|
Returns:
|
|
Diccionario con la respuesta del acuse.
|
|
"""
|
|
try:
|
|
# Crear un nuevo event loop para esta tarea
|
|
loop = asyncio.new_event_loop()
|
|
asyncio.set_event_loop(loop)
|
|
|
|
# Ejecutar la corutina
|
|
acuse_response = loop.run_until_complete(obtener_acuse(**acuse_request))
|
|
|
|
return {"status": "processed", "data": acuse_response}
|
|
except Exception as e:
|
|
logging.error(f"Error processing acuse request: {str(e)}")
|
|
raise
|
|
finally:
|
|
# Asegurarse de cerrar el loop y limpiarlo
|
|
loop.close()
|
|
asyncio.set_event_loop(None)
|
|
|