# Minimal HTTP client with token auth and typed responses import requests from typing import Any, Dict, Optional class ApiError(Exception): def __init__(self, status: int, message: str): self.status = status self.message = message super().__init__(f"{status}: {message}") class ApiClient: def __init__(self, base_url: str, token: Optional[str] = None): self.base_url = base_url.rstrip("/") self.token = token def set_token(self, token: str): self.token = token def get(self, path: str) -> Dict[str, Any]: return self._request("GET", path) def post(self, path: str, payload: Optional[dict] = None) -> Dict[str, Any]: return self._request("POST", path, payload) def _request(self, method: str, path: str, payload: Optional[dict] = None): url = self.base_url + path headers = {"Content-Type": "application/json"} if self.token: headers["Authorization"] = f"Bearer {self.token}" resp = requests.request(method, url, json=payload, headers=headers, timeout=10) if not resp.ok: raise ApiError(resp.status_code, resp.text) return resp.json() # Example usage if __name__ == "__main__": api = ApiClient("https://api.pastehub.de", "user-token") me = api.get("/me") print("Logged in as", me["username"])