strompreis/utils/request_utils.py

41 lines
1.1 KiB
Python

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