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)
|
||||
loop = asyncio.get_event_loop()
|
||||
acuse_response = loop.run_until_complete(obtener_acuse(**acuse_request))
|
||||
|
||||
# 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)
|
||||
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.
|
||||
loop = asyncio.get_event_loop()
|
||||
cove_response = loop.run_until_complete(consume_ws_get_cove(**cove_request))
|
||||
|
||||
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
|
||||
}
|
||||
|
||||
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.
|
||||
loop = asyncio.get_event_loop()
|
||||
acuse_response = loop.run_until_complete(consume_ws_get_acuse_cove(**cove_request))
|
||||
|
||||
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
|
||||
}
|
||||
|
||||
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}
|
||||
|
||||
|
||||
74
test.xml
74
test.xml
@@ -1,4 +1,4 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
|
||||
<S:Header>
|
||||
<wsse:Security
|
||||
@@ -6,68 +6,22 @@
|
||||
S:mustUnderstand="1">
|
||||
<wsu:Timestamp
|
||||
xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
|
||||
<wsu:Created>2025-10-04T02:03:34Z</wsu:Created>
|
||||
<wsu:Expires>2025-10-04T02:04:34Z</wsu:Expires>
|
||||
<wsu:Created>2025-10-06T01:09:44Z</wsu:Created>
|
||||
<wsu:Expires>2025-10-06T01:10:44Z</wsu:Expires>
|
||||
</wsu:Timestamp>
|
||||
</wsse:Security>
|
||||
</S:Header>
|
||||
<S:Body>
|
||||
<ns3:consultarRemesasRespuesta
|
||||
xmlns="http://www.ventanillaunica.gob.mx/pedimentos/ws/oxml/comunes"
|
||||
xmlns:ns2="http://www.ventanillaunica.gob.mx/common/ws/oxml/respuesta"
|
||||
xmlns:ns3="http://www.ventanillaunica.gob.mx/pedimentos/ws/oxml/consultarremesas"
|
||||
xmlns:ns4="http://www.ventanillaunica.gob.mx/common/ws/oxml/resolucion"
|
||||
xmlns:ns5="http://www.ventanillaunica.gob.mx/common/ws/oxml/respuestatra"
|
||||
xmlns:ns6="http://www.ventanillaunica.gob.mx/common/ws/oxml/dictamen"
|
||||
xmlns:ns7="http://www.ventanillaunica.gob.mx/common/ws/oxml/observacion"
|
||||
xmlns:ns8="http://www.ventanillaunica.gob.mx/common/ws/oxml/requisito"
|
||||
xmlns:ns9="http://www.ventanillaunica.gob.mx/common/ws/oxml/opinion">
|
||||
<ns2:tieneError>false</ns2:tieneError>
|
||||
<ns3:remesas>
|
||||
<ns3:comprobanteVE>COVE2040ICIR4</ns3:comprobanteVE>
|
||||
<ns3:remesaAgente>1</ns3:remesaAgente>
|
||||
<ns3:remesaSA>1</ns3:remesaSA>
|
||||
</ns3:remesas>
|
||||
<ns3:remesas>
|
||||
<ns3:comprobanteVE>COVE2040OQV98</ns3:comprobanteVE>
|
||||
<ns3:remesaAgente>2</ns3:remesaAgente>
|
||||
<ns3:remesaSA>2</ns3:remesaSA>
|
||||
</ns3:remesas>
|
||||
<ns3:remesas>
|
||||
<ns3:comprobanteVE>COVE2040OQVJ5</ns3:comprobanteVE>
|
||||
<ns3:remesaAgente>3</ns3:remesaAgente>
|
||||
<ns3:remesaSA>3</ns3:remesaSA>
|
||||
</ns3:remesas>
|
||||
<ns3:remesas>
|
||||
<ns3:comprobanteVE>COVE2040OQVS2</ns3:comprobanteVE>
|
||||
<ns3:remesaAgente>4</ns3:remesaAgente>
|
||||
<ns3:remesaSA>4</ns3:remesaSA>
|
||||
</ns3:remesas>
|
||||
<ns3:remesas>
|
||||
<ns3:comprobanteVE>COVE2040OQVT3</ns3:comprobanteVE>
|
||||
<ns3:remesaAgente>5</ns3:remesaAgente>
|
||||
<ns3:remesaSA>5</ns3:remesaSA>
|
||||
</ns3:remesas>
|
||||
<ns3:remesas>
|
||||
<ns3:comprobanteVE>COVE2040OQW01</ns3:comprobanteVE>
|
||||
<ns3:remesaAgente>6</ns3:remesaAgente>
|
||||
<ns3:remesaSA>6</ns3:remesaSA>
|
||||
</ns3:remesas>
|
||||
<ns3:remesas>
|
||||
<ns3:comprobanteVE>COVE2040OQW17</ns3:comprobanteVE>
|
||||
<ns3:remesaAgente>7</ns3:remesaAgente>
|
||||
<ns3:remesaSA>7</ns3:remesaSA>
|
||||
</ns3:remesas>
|
||||
<ns3:remesas>
|
||||
<ns3:comprobanteVE>COVE2040OQW66</ns3:comprobanteVE>
|
||||
<ns3:remesaAgente>8</ns3:remesaAgente>
|
||||
<ns3:remesaSA>8</ns3:remesaSA>
|
||||
</ns3:remesas>
|
||||
<ns3:remesas>
|
||||
<ns3:comprobanteVE>COVE2040OQWB5</ns3:comprobanteVE>
|
||||
<ns3:remesaAgente>9</ns3:remesaAgente>
|
||||
<ns3:remesaSA>9</ns3:remesaSA>
|
||||
</ns3:remesas>
|
||||
</ns3:consultarRemesasRespuesta>
|
||||
<ns3:responseConsultaAcuses
|
||||
xmlns:ns2="http://www.ventanillaunica.gob.mx/consulta/acuses/oxml"
|
||||
xmlns:ns3="http://www.ventanillaunica.gob.mx/ws/consulta/acuses/">
|
||||
<code>0</code>
|
||||
<error>true</error>
|
||||
<mensajeErrores>
|
||||
<claveMensaje>4</claveMensaje>
|
||||
<descripcion>El RFC no tiene relación con el eDocument. </descripcion>
|
||||
</mensajeErrores>
|
||||
</ns3:responseConsultaAcuses>
|
||||
</S:Body>
|
||||
</S:Envelope>
|
||||
--uuid:29d62a47-b685-4746-9959-43ab40c1ef88--
|
||||
Reference in New Issue
Block a user