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
« 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"""
6from dataclasses import dataclass
9@dataclass(unsafe_hash=True)
10class Stop:
11 """Bus stop data model."""
13 id: str # Added ID for easier lookup (e.g., "M1")
14 name: str
15 name_en: str
16 latitude: str
17 longitude: str
20@dataclass
21class Route:
22 """Bus route data model."""
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]
30@dataclass
31class BusSchedule:
32 """Basic bus schedule entry from raw JSON."""
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 = ""
41@dataclass
42class BusDetailedSchedule:
43 """Processed schedule with arrival times."""
45 dep_info: dict[str, str] # {"time": "...", "description": "..."}
46 arr_info: list[dict[str, str]] # [{"stop": "...", "arrive_time": "..."}]
47 bus_type: str