import json from urllib.parse import urlencode from urllib.request import Request, urlopen from urllib.error import HTTPError class AlefbaClient: def __init__(self, api_key: str, base_url: str = "https://alefba.eu/api/v1") -> None: if not api_key: raise ValueError("ALEFBA API key is required.") self.api_key = api_key self.base_url = base_url.rstrip("/") def get(self, path: str, query: dict | None = None) -> dict: url = f"{self.base_url}/{path.lstrip('/')}" if query: url = f"{url}?{urlencode(query)}" request = Request( url, headers={ "Accept": "application/json", "Authorization": f"Bearer {self.api_key}", }, method="GET", ) try: with urlopen(request, timeout=20) as response: return json.loads(response.read().decode("utf-8")) except HTTPError as exc: payload = json.loads(exc.read().decode("utf-8")) message = payload.get("error", {}).get("message", "ALEFBA API request failed.") raise RuntimeError(message) from exc