fix/forzar el procesamiento de un pedimento cargado por datastage
This commit is contained in:
@@ -1,11 +1,11 @@
|
||||
from fastapi import APIRouter, HTTPException, BackgroundTasks
|
||||
from schemas.pedimentoSchema import PedimentoRequest
|
||||
from schemas.serviceSchema import ServiceBaseSchema, ServiceRemesaSchema
|
||||
from schemas.serviceSchema import ServiceBaseSchema, ServiceRemesaSchema, MultiPedimentoCompletoSchema
|
||||
from fastapi.responses import JSONResponse
|
||||
from celery_app import celery_app
|
||||
from tasks import pedimento_completo_task
|
||||
import logging
|
||||
from typing import Dict, Any
|
||||
from typing import Dict, Any, List
|
||||
import uuid
|
||||
from datetime import datetime
|
||||
|
||||
@@ -63,6 +63,54 @@ async def async_get_pedimento_completo(request: ServiceRemesaSchema):
|
||||
status_code=500,
|
||||
detail=f"Error al agendar la tarea: {str(e)}"
|
||||
)
|
||||
|
||||
@router.post("/async/services/pedimento_completo/multiple")
|
||||
async def async_multi_pedimento_completo(request: MultiPedimentoCompletoSchema):
|
||||
"""
|
||||
Agenda la tarea de obtener pedimentos completos de forma asíncrona para MÚLTIPLES pedimentos.
|
||||
|
||||
Args:
|
||||
request: MultiPedimentoCompletoSchema con lista de pedimentos y organización
|
||||
|
||||
Returns:
|
||||
JSONResponse con task_id para consultar el estado de la tarea
|
||||
|
||||
Raises:
|
||||
HTTPException: En caso de errores de validación
|
||||
"""
|
||||
try:
|
||||
pedimentos_ids = request.pedimentos
|
||||
organizacion = request.organizacion
|
||||
|
||||
logger.info(f"Agendando tarea para {len(pedimentos_ids)} pedimentos completos")
|
||||
|
||||
# Agendar la tarea en Celery
|
||||
from tasks import multi_pedimento_completo_task
|
||||
task = multi_pedimento_completo_task.delay(pedimentos_ids, organizacion)
|
||||
|
||||
# Crear respuesta inmediata (EXACTAMENTE igual a tus otras respuestas)
|
||||
response_data = {
|
||||
"success": True,
|
||||
"message": f"Tarea agendada exitosamente para {len(pedimentos_ids)} pedimentos. La consulta de pedimentos completos se está procesando en segundo plano.",
|
||||
"task_id": task.id,
|
||||
"total_pedimentos": len(pedimentos_ids),
|
||||
"pedimentos": pedimentos_ids,
|
||||
"organizacion": organizacion,
|
||||
"status": "PENDING",
|
||||
"timestamp": datetime.utcnow().isoformat(),
|
||||
"estimated_completion": f"{len(pedimentos_ids) * 2}-{len(pedimentos_ids) * 5} minutos",
|
||||
"check_status_url": f"/async/task-status/{task.id}"
|
||||
}
|
||||
|
||||
logger.info(f"Tarea múltiple agendada exitosamente - Task ID: {task.id}")
|
||||
return JSONResponse(content=response_data, status_code=202)
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"Error al agendar tarea múltiple de pedimento completo: {e}")
|
||||
raise HTTPException(
|
||||
status_code=500,
|
||||
detail=f"Error al agendar la tarea: {str(e)}"
|
||||
)
|
||||
|
||||
@router.get("/async/task-status/{task_id}")
|
||||
async def get_task_status(task_id: str):
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
from fastapi import APIRouter, HTTPException
|
||||
from schemas.pedimentoSchema import PedimentoRequest
|
||||
from schemas.serviceSchema import ServiceBaseSchema, ServiceRemesaSchema
|
||||
from schemas.serviceSchema import ServiceBaseSchema, ServiceRemesaSchema, MultiPedimentoCompletoSchema
|
||||
import asyncio
|
||||
import logging
|
||||
logger = logging.getLogger("app.api")
|
||||
|
||||
@@ -6,8 +6,9 @@ from .tasks import process_pedimento_completo_request
|
||||
from .services import put_pedimento_data_vu
|
||||
from api.api_v2.modules.tasks.services import register_task
|
||||
import logging
|
||||
logger = logging.getLogger("app.api")
|
||||
from celery import group, chord, chain
|
||||
|
||||
logger = logging.getLogger("app.api")
|
||||
router = APIRouter()
|
||||
|
||||
@router.post("/services/pedimento_completo", status_code=status.HTTP_202_ACCEPTED)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
from typing import Optional, Union, Dict, Any
|
||||
from typing import Optional, Union, Dict, Any, List
|
||||
from uuid import UUID
|
||||
from datetime import datetime
|
||||
# CORRECCIÓN CLAVE: Se importa el 'validator' para que el decorador funcione
|
||||
|
||||
Reference in New Issue
Block a user