Se agregaron los moduloes de api_v2
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user