from fastapi import HTTPException from utils.Logger import logger from utils.configs import retry_times async def async_retry(func, *args, max_retries=retry_times, **kwargs): for attempt in range(max_retries + 1): try: result = await func(*args, **kwargs) return result except HTTPException as e: if attempt == max_retries: logger.error(f"Throw an exception {e.status_code}, {e.detail}") if e.status_code == 500: raise HTTPException(status_code=500, detail="Server error") raise HTTPException(status_code=e.status_code, detail=e.detail) logger.info(f"Retry {attempt + 1} status code {e.status_code}, {e.detail}. Retrying...") def retry(func, *args, max_retries=retry_times, **kwargs): for attempt in range(max_retries + 1): try: result = func(*args, **kwargs) return result except HTTPException as e: if attempt == max_retries: logger.error(f"Throw an exception {e.status_code}, {e.detail}") if e.status_code == 500: raise HTTPException(status_code=500, detail="Server error") raise HTTPException(status_code=e.status_code, detail=e.detail) logger.error(f"Retry {attempt + 1} status code {e.status_code}, {e.detail}. Retrying...")