Coverage for src/data_api/domain/buses/models.py: 100%

11 statements  

« prev     ^ index     » next       coverage.py v7.16.2, created at 2026-11-13 19:28 +0000

1""" 

2Buses domain models. 

3Pure Python domain models representing business entities. 

4""" 

5 

6from dataclasses import dataclass 

7 

8 

9@dataclass(unsafe_hash=True) 

10class Stop: 

11 """Bus stop data model.""" 

12 

13 id: str # Added ID for easier lookup (e.g., "M1") 

14 name: str 

15 name_en: str 

16 latitude: str 

17 longitude: str 

18 

19 

20@dataclass 

21class Route: 

22 """Bus route data model.""" 

23 

24 id: str # e.g., "Red_M1_M5" 

25 stops: list[Stop] 

26 # time_offsets[i] = minutes from start stop to stops[i] 

27 time_offsets: list[int] 

28 

29 

30@dataclass 

31class BusSchedule: 

32 """Basic bus schedule entry from raw JSON.""" 

33 

34 time: str 

35 description: str 

36 bus_type: str 

37 line: str = "" # Main campus: red/green, Nanda: route_1/route_2 

38 dep_stop: str = "" 

39 

40 

41@dataclass 

42class BusDetailedSchedule: 

43 """Processed schedule with arrival times.""" 

44 

45 dep_info: dict[str, str] # {"time": "...", "description": "..."} 

46 arr_info: list[dict[str, str]] # [{"stop": "...", "arrive_time": "..."}] 

47 bus_type: str