import logging import requests from tenacity import ( retry, retry_if_exception_type, stop_after_attempt, wait_exponential, ) logger = logging.getLogger(__name__) @retry( stop=stop_after_attempt(3), wait=wait_exponential(multiplier=1, min=2, max=10), retry=retry_if_exception_type((requests.exceptions.RequestException,)), reraise=True, ) def make_requests( url: str, headers: dict = None, params: dict = None, timeout: int = 20 ) -> dict: headers = headers or {} params = params or {} try: logger.debug(f"Requesting URL: {url} with params: {params}") res = requests.get(url, headers=headers, params=params, timeout=timeout) res.raise_for_status() return res.json() except requests.exceptions.HTTPError as errh: logger.error(f"HTTP Error: {errh}") raise except requests.ConnectionError as errc: logger.error(f"Connection Error: {errc}") raise except requests.exceptions.Timeout as errt: logger.error(f"Timeout Error: {errt}") raise except Exception as e: logger.error(f"Unknown Exception: {e}") raise