Spaces:
Sleeping
Sleeping
File size: 895 Bytes
bdde028 af43a76 09fcee9 bdde028 af43a76 bdde028 af43a76 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
import os
import httpx
import logging
import asyncio
API_SECRET = os.getenv("API_SECRET")
logger = logging.getLogger(__name__)
def validate_secret(secret: str) -> bool:
# Constant-time comparison to prevent timing attacks
from hmac import compare_digest
return compare_digest(secret, API_SECRET)
async def retry_request(func, *args, retries=3, delay=3, **kwargs):
last_exc = None
for attempt in range(retries):
try:
return await func(*args, **kwargs)
except (httpx.HTTPStatusError, httpx.RequestError) as e:
last_exc = e
logger.warning(f"Request failed on attempt {attempt + 1}/{retries}: {e}")
if attempt < retries - 1:
await asyncio.sleep(delay)
else:
logger.error("Max retries reached.")
raise last_exc
if last_exc:
raise last_exc
|