Se agregaron estados y update a cada una de las tareas
This commit is contained in:
@@ -1,26 +1,87 @@
|
||||
from celery_app import celery_app
|
||||
|
||||
from .services import put_pedimento_data
|
||||
import asyncio # Necesario para ejecutar funciones async dentro de Celery
|
||||
|
||||
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 solo documento edoc.
|
||||
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:
|
||||
# Ejecutar la función asíncrona dentro del hilo síncrono de Celery
|
||||
loop = asyncio.get_event_loop()
|
||||
# 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))
|
||||
|
||||
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)}
|
||||
# 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
|
||||
)
|
||||
)
|
||||
# Es crucial volver a lanzar la excepción para que Celery la marque como fallida
|
||||
raise e
|
||||
|
||||
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
|
||||
Reference in New Issue
Block a user