Se agregaron catch de errores
This commit is contained in:
@@ -20,20 +20,8 @@ def process_acuse_request(acuse_request: Dict[str, Any]) -> Dict[str, Any]:
|
||||
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)
|
||||
loop = asyncio.get_event_loop()
|
||||
acuse_response = loop.run_until_complete(obtener_acuse(**acuse_request))
|
||||
|
||||
return {"status": "processed", "data": acuse_response}
|
||||
|
||||
|
||||
@@ -95,7 +95,6 @@ async def consume_ws_get_cove(**kwargs):
|
||||
# Enviar documento
|
||||
_file_name = f"vu_COVE_{pedimento_app}_{cove}.xml"
|
||||
try:
|
||||
|
||||
document_response = await coves_rest_controller.post_document(
|
||||
soap_response=soap_response,
|
||||
organizacion=kwargs.get('pedimento').get('organizacion'),
|
||||
@@ -162,19 +161,33 @@ async def consume_ws_get_acuse_cove(**kwargs):
|
||||
if response.status_code != 200:
|
||||
raise Exception(f"Error en la solicitud SOAP: {response.status}")
|
||||
|
||||
if soap_error(response):
|
||||
rest_response = await coves_rest_controller.post_document(
|
||||
soap_response=response,
|
||||
organizacion=kwargs.get('pedimento').get('organizacion'),
|
||||
pedimento=kwargs.get('pedimento').get('id'),
|
||||
file_name=f"vu_AC_COVE_{kwargs.get('pedimento', {}).get('pedimento_app', 'N/A')}_{kwargs['cove'].get('cove', 'N/A')}_ERROR.xml",
|
||||
document_type=10,
|
||||
)
|
||||
raise Exception("Error detectado en la respuesta SOAP.")
|
||||
if (response) and (not soap_error(response)):
|
||||
logger.debug(f"Respuesta SOAP recibida, extrayendo acuse...")
|
||||
acuse_base64 = _extract_acuse_data(response.text)
|
||||
|
||||
if acuse_base64 is None:
|
||||
logger.error("No se encontró elemento acuseDocumento en la respuesta")
|
||||
logger.debug(f"Contenido de respuesta (primeros 1000 chars): {response.text[:1000]}")
|
||||
logger.debug(f"Contenido de respuesta (primeros 1000 chars): {response.text}")
|
||||
else:
|
||||
logger.error("Error en respuesta SOAP o soap_error detectado")
|
||||
logger.debug(f"Contenido de respuesta con error: {response.text[:500] if response else 'No response'}")
|
||||
logger.debug(f"Contenido de respuesta con error: {response.text if response else 'No response'}")
|
||||
|
||||
if acuse_base64 is None:
|
||||
raise Exception("No se pudo extraer el acuse del documento de la respuesta SOAP.")
|
||||
# Log de la respuesta SOAP para debugging
|
||||
logger.error(f"Contenido de respuesta SOAP: {response.text}")
|
||||
raise HTTPException(
|
||||
status_code=500,
|
||||
detail="No se pudo extraer el acuse del documento de la respuesta SOAP. Verifique el log para más detalles."
|
||||
)
|
||||
|
||||
|
||||
pdf_bytes = _decode_acuse_base64_content(acuse_base64)
|
||||
@@ -330,7 +343,9 @@ def _extract_acuse_data(soap_response_text: str) -> str:
|
||||
# Log de todos los elementos para debugging
|
||||
logger.error("No se encontró elemento acuseDocumento. Elementos disponibles:")
|
||||
for elem in root.iter():
|
||||
logger.debug(f" - {elem.tag}: {elem.text[:50] if elem.text else 'Sin contenido'}...")
|
||||
logger.error(f" - {elem.tag}: {elem.text[:50] if elem.text else 'Sin contenido'}...")
|
||||
if 'acuse' in elem.tag.lower():
|
||||
logger.error(f"Elemento similar encontrado: {elem.tag}")
|
||||
return None
|
||||
|
||||
if acuse_elemento is not None and acuse_elemento.text:
|
||||
|
||||
@@ -13,102 +13,16 @@ logger = logging.getLogger(__name__)
|
||||
|
||||
@celery_app.task(bind=True)
|
||||
def process_cove_request(self, cove_request: Dict[str, Any]) -> Dict[str, Any]:
|
||||
"""
|
||||
Tarea de Celery para procesar la solicitud de descarga de COVE.
|
||||
|
||||
Args:
|
||||
cove_request: Diccionario con los datos de la solicitud de COVE.
|
||||
|
||||
Returns:
|
||||
Diccionario con la respuesta del COVE procesado.
|
||||
"""
|
||||
try:
|
||||
logger.info(f"Iniciando procesamiento de COVE - Task ID: {self.request.id}")
|
||||
|
||||
# Actualizar progreso
|
||||
self.update_state(state='PROGRESS', meta={'current': 10, 'total': 100, 'status': 'Iniciando procesamiento de COVE'})
|
||||
|
||||
# Usar run_async_task para ejecutar la función asíncrona
|
||||
result = run_async_task(consume_ws_get_cove, **cove_request)
|
||||
|
||||
# Actualizar progreso
|
||||
self.update_state(state='SUCCESS', meta={'current': 100, 'total': 100, 'status': 'COVE procesado exitosamente'})
|
||||
|
||||
logger.info(f"COVE procesado exitosamente - Task ID: {self.request.id}")
|
||||
|
||||
# Asegurar que la respuesta sea serializable para Celery
|
||||
return {
|
||||
"status": "processed",
|
||||
"data": result,
|
||||
"task_id": self.request.id
|
||||
}
|
||||
loop = asyncio.get_event_loop()
|
||||
cove_response = loop.run_until_complete(consume_ws_get_cove(**cove_request))
|
||||
|
||||
except Exception as e:
|
||||
error_msg = f"Error procesando COVE: {str(e)}"
|
||||
logger.error(error_msg, exc_info=True)
|
||||
|
||||
# Actualizar estado con error
|
||||
self.update_state(
|
||||
state='FAILURE',
|
||||
meta={
|
||||
'current': 0,
|
||||
'total': 100,
|
||||
'status': error_msg,
|
||||
'error': str(e)
|
||||
}
|
||||
)
|
||||
|
||||
# Re-lanzar excepción para que Celery la registre
|
||||
raise e
|
||||
return {"status": "processed", "data": cove_response}
|
||||
|
||||
|
||||
@celery_app.task(bind=True)
|
||||
def process_acuse_cove_request(self, cove_request: Dict[str, Any]) -> Dict[str, Any]:
|
||||
"""
|
||||
Tarea de Celery para procesar la solicitud de acuse de COVE.
|
||||
|
||||
Args:
|
||||
cove_request: Diccionario con los datos de la solicitud de acuse.
|
||||
|
||||
Returns:
|
||||
Diccionario con la respuesta del acuse procesado.
|
||||
"""
|
||||
try:
|
||||
logger.info(f"Iniciando procesamiento de acuse de COVE - Task ID: {self.request.id}")
|
||||
|
||||
# Actualizar progreso
|
||||
self.update_state(state='PROGRESS', meta={'current': 10, 'total': 100, 'status': 'Iniciando procesamiento de acuse de COVE'})
|
||||
|
||||
# Usar run_async_task para ejecutar la función asíncrona
|
||||
result = run_async_task(consume_ws_get_acuse_cove, **cove_request)
|
||||
|
||||
# Actualizar progreso
|
||||
self.update_state(state='SUCCESS', meta={'current': 100, 'total': 100, 'status': 'Acuse de COVE procesado exitosamente'})
|
||||
|
||||
logger.info(f"Acuse de COVE procesado exitosamente - Task ID: {self.request.id}")
|
||||
|
||||
# Asegurar que la respuesta sea serializable para Celery
|
||||
return {
|
||||
"status": "processed",
|
||||
"data": result,
|
||||
"task_id": self.request.id
|
||||
}
|
||||
loop = asyncio.get_event_loop()
|
||||
acuse_response = loop.run_until_complete(consume_ws_get_acuse_cove(**cove_request))
|
||||
|
||||
except Exception as e:
|
||||
error_msg = f"Error procesando acuse de COVE: {str(e)}"
|
||||
logger.error(error_msg, exc_info=True)
|
||||
|
||||
# Actualizar estado con error
|
||||
self.update_state(
|
||||
state='FAILURE',
|
||||
meta={
|
||||
'current': 0,
|
||||
'total': 100,
|
||||
'status': error_msg,
|
||||
'error': str(e)
|
||||
}
|
||||
)
|
||||
|
||||
# Re-lanzar excepción para que Celery la registre
|
||||
raise e
|
||||
return {"status": "processed", "data": acuse_response}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user