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

1# src/user_client.py 

2 

3import requests 

4 

5 

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") 

10 

11 if timeout <= 0: 

12 raise ValueError("timeout must be positive") 

13 

14 self.base_url = base_url.rstrip("/") 

15 self.timeout = timeout 

16 

17 def get_user(self, user_id: int) -> dict: 

18 if user_id <= 0: 

19 raise ValueError("user_id must be positive") 

20 

21 response = requests.get( 

22 f"{self.base_url}/users/{user_id}", 

23 timeout=self.timeout, 

24 ) 

25 

26 response.raise_for_status() 

27 

28 data = response.json() 

29 

30 if not isinstance(data, dict): 

31 raise ValueError("invalid response format") 

32 

33 if "id" not in data or "name" not in data: 

34 raise ValueError("missing required user fields") 

35 

36 return data