Se agregaron los moduloes de api_v2

This commit is contained in:
2025-10-03 23:16:47 -06:00
parent ac075bfeb7
commit 7149515606
60 changed files with 3714 additions and 252 deletions

View File

@@ -5,21 +5,95 @@ import httpx
import datetime
import time
class SOAPController:
"""
Controlador para manejar las peticiones SOAP.
"""
class VUCEMController:
import ssl
# Contexto SSL personalizado para permitir claves DH pequeñas
ssl_context = ssl.create_default_context()
ssl_context.set_ciphers('DEFAULT@SECLEVEL=1')
ssl_context.check_hostname = False
ssl_context.verify_mode = ssl.CERT_NONE
def __init__(self):
self.base_url = settings.SOAP_SERVICE_URL
self.timeout = settings.TIMEOUT # Timeout por default
async def make_request(self, endpoint, data=None, headers=None, max_retries=5):
intento = 0
while intento < settings.MAX_RETRIES:
try:
with httpx.Client(verify=self.ssl_context, timeout=self.timeout) as client:
content = data.encode('utf-8') if data else None
response = client.post(
f"{self.base_url}/{endpoint}",
content=content,
headers=headers
)
response.raise_for_status()
return response # ✅ éxito
except Exception as e:
intento += 1
wait_time = 0
print(f"[{endpoint}] Error intento {intento}: {e}. Reintentando en {settings.WAIT_TIME}s...")
time.sleep(settings.WAIT_TIME)
print(f"[{endpoint}] Fallo tras {settings.MAX_RETRIES} intentos.")
return None
async def make_request_async(self, endpoint, data=None, headers=None, max_retries=5):
"""
Método asíncrono para hacer peticiones SOAP sin bloquear el event loop
Args:
endpoint: El endpoint al que se va a hacer la petición
data: Los datos a enviar en la petición
headers: Los headers HTTP a incluir en la petición
max_retries: Número máximo de reintentos en caso de fallo
Returns:
La respuesta de la petición, o None si falla tras los reintentos
"""
import asyncio
intento = 0
while intento < settings.MAX_RETRIES:
try:
async with httpx.AsyncClient(verify=self.ssl_context, timeout=self.timeout) as client:
content = data.encode('utf-8') if data else None
response = await client.post(
f"{self.base_url}/{endpoint}",
content=content,
headers=headers
)
response.raise_for_status()
return response # ✅ éxito
except Exception as e:
intento += 1
print(f"[{endpoint}] Error intento {intento}: {e}. Reintentando en {settings.WAIT_TIME}s...")
if intento < settings.MAX_RETRIES:
await asyncio.sleep(settings.WAIT_TIME) # ASYNC SLEEP!
print(f"[{endpoint}] Fallo tras {settings.MAX_RETRIES} intentos.")
return None
class SOAPController:
"""
Controlador para manejar las peticiones SOAP.
"""
import ssl
# Contexto SSL personalizado para permitir claves DH pequeñas
ssl_context = ssl.create_default_context()
ssl_context.set_ciphers('DEFAULT@SECLEVEL=1')
ssl_context.check_hostname = False
ssl_context.verify_mode = ssl.CERT_NONE
def __init__(self):
self.base_url = settings.SOAP_SERVICE_URL
self.timeout = settings.TIMEOUT # Timeout por default
async def make_request(self, endpoint, data=None, headers=None, max_retries=5):
intento = 0