Coverage for examples/src/user_client.py: 100%
20 statements
« prev ^ index » next coverage.py v7.15.4, created at 2026-08-14 12:31 +0000
« prev ^ index » next coverage.py v7.15.4, created at 2026-08-14 12:31 +0000
1# src/user_client.py
3import requests
6class UserClient:
7 def __init__(self, base_url: str, timeout: float = 5.0):
8 if not base_url:
9 raise ValueError("base_url is required")
11 if timeout <= 0:
12 raise ValueError("timeout must be positive")
14 self.base_url = base_url.rstrip("/")
15 self.timeout = timeout
17 def get_user(self, user_id: int) -> dict:
18 if user_id <= 0:
19 raise ValueError("user_id must be positive")
21 response = requests.get(
22 f"{self.base_url}/users/{user_id}",
23 timeout=self.timeout,
24 )
26 response.raise_for_status()
28 data = response.json()
30 if not isinstance(data, dict):
31 raise ValueError("invalid response format")
33 if "id" not in data or "name" not in data:
34 raise ValueError("missing required user fields")
36 return data