Coverage for src/data_api/mcp/tools/result_types.py: 100%
28 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"""Internal payload shapes for MCP tool helpers (not public tool schemas)."""
3from typing import NotRequired, TypedDict
6class LocationResult(TypedDict):
7 name: str
8 latitude: str
9 longitude: str
12class CampusPersonResult(TypedDict):
13 name: str
14 title: NotRequired[str | None]
15 extension: NotRequired[str | None]
16 email: NotRequired[str | None]
17 note: NotRequired[str | None]
20class CampusDepartmentDetailsResult(TypedDict):
21 contact: NotRequired[dict[str, object]]
22 departments: NotRequired[list[dict[str, object]]]
23 people: NotRequired[list[CampusPersonResult]]
26class CampusDepartmentResult(TypedDict):
27 index: str
28 name: str
29 parent_name: NotRequired[str | None]
30 url: NotRequired[str | None]
31 details: NotRequired[CampusDepartmentDetailsResult]
34class LocationsResult(TypedDict):
35 locations: list[LocationResult]
38class DirectoryResult(TypedDict):
39 departments: list[CampusDepartmentResult]
40 people: list[CampusPersonResult]
43class BusDepartureResult(TypedDict):
44 time: str
45 description: str
46 dep_stop: str
47 line: str
48 bus_type: str
49 arrive_time: NotRequired[str]
52class BusArrivalResult(TypedDict):
53 stop: str
54 arrive_time: str
57class BusDetailedResult(TypedDict):
58 dep_info: BusDepartureResult
59 stops_time: list[BusArrivalResult]
60 arrive_time: NotRequired[str]
63class BusStopResult(TypedDict):
64 name: str
65 name_en: str
66 latitude: str
67 longitude: str
70class BusRouteInfoResult(TypedDict, total=False):
71 direction: str
72 duration: str
73 route: str
74 routeEN: str
77class BusResult(TypedDict):
78 current_time: str
79 day_type: str
80 buses: list[BusDepartureResult | BusDetailedResult]
81 route_info: list[BusRouteInfoResult]
82 stop_name: NotRequired[str]
83 stop_info: NotRequired[list[BusStopResult]]
86class CoursesResult(TypedDict):
87 count: int
88 courses: list[dict[str, object]]
91class AnnouncementArticleResult(TypedDict):
92 title: str | None
93 link: str | None
94 date: str | None
97class AnnouncementSourceResult(TypedDict):
98 department: str | None
99 language: str | None
100 articles: list[AnnouncementArticleResult]
103class AnnouncementsResult(TypedDict):
104 count: int
105 sources: list[AnnouncementSourceResult]
108class DiningRestaurantResult(TypedDict):
109 name: str | None
110 phone: str | None
111 schedule: dict[str, object] | None
112 note: str | None
115class DiningBuildingResult(TypedDict):
116 building: str | None
117 restaurants: list[DiningRestaurantResult]
120class DiningBuildingsResult(TypedDict):
121 buildings: list[DiningBuildingResult]
124class LibrarySpaceResult(TypedDict):
125 zone: str | None
126 type: str | None
127 available: str | int | None
130class LibrarySpacesResult(TypedDict):
131 spaces: list[LibrarySpaceResult]
134class LibraryItemsResult(TypedDict):
135 items: list[dict[str, str]]
138class NewsletterArticleResult(TypedDict):
139 title: str | None
140 date: str | None
143class NewsletterResult(TypedDict):
144 name: str | None
145 link: str | None
146 latest_articles: list[NewsletterArticleResult]
149class NewslettersResult(TypedDict):
150 count: int
151 newsletters: list[NewsletterResult]
154class EnergyZoneResult(TypedDict):
155 name: str | None
156 usage_kw: float
157 capacity_kw: float | None
158 usage_percent: float
159 last_updated: str | None
162class EnergyResult(TypedDict):
163 zones: list[EnergyZoneResult]