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

1"""Internal payload shapes for MCP tool helpers (not public tool schemas).""" 

2 

3from typing import NotRequired, TypedDict 

4 

5 

6class LocationResult(TypedDict): 

7 name: str 

8 latitude: str 

9 longitude: str 

10 

11 

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] 

18 

19 

20class CampusDepartmentDetailsResult(TypedDict): 

21 contact: NotRequired[dict[str, object]] 

22 departments: NotRequired[list[dict[str, object]]] 

23 people: NotRequired[list[CampusPersonResult]] 

24 

25 

26class CampusDepartmentResult(TypedDict): 

27 index: str 

28 name: str 

29 parent_name: NotRequired[str | None] 

30 url: NotRequired[str | None] 

31 details: NotRequired[CampusDepartmentDetailsResult] 

32 

33 

34class LocationsResult(TypedDict): 

35 locations: list[LocationResult] 

36 

37 

38class DirectoryResult(TypedDict): 

39 departments: list[CampusDepartmentResult] 

40 people: list[CampusPersonResult] 

41 

42 

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] 

50 

51 

52class BusArrivalResult(TypedDict): 

53 stop: str 

54 arrive_time: str 

55 

56 

57class BusDetailedResult(TypedDict): 

58 dep_info: BusDepartureResult 

59 stops_time: list[BusArrivalResult] 

60 arrive_time: NotRequired[str] 

61 

62 

63class BusStopResult(TypedDict): 

64 name: str 

65 name_en: str 

66 latitude: str 

67 longitude: str 

68 

69 

70class BusRouteInfoResult(TypedDict, total=False): 

71 direction: str 

72 duration: str 

73 route: str 

74 routeEN: str 

75 

76 

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]] 

84 

85 

86class CoursesResult(TypedDict): 

87 count: int 

88 courses: list[dict[str, object]] 

89 

90 

91class AnnouncementArticleResult(TypedDict): 

92 title: str | None 

93 link: str | None 

94 date: str | None 

95 

96 

97class AnnouncementSourceResult(TypedDict): 

98 department: str | None 

99 language: str | None 

100 articles: list[AnnouncementArticleResult] 

101 

102 

103class AnnouncementsResult(TypedDict): 

104 count: int 

105 sources: list[AnnouncementSourceResult] 

106 

107 

108class DiningRestaurantResult(TypedDict): 

109 name: str | None 

110 phone: str | None 

111 schedule: dict[str, object] | None 

112 note: str | None 

113 

114 

115class DiningBuildingResult(TypedDict): 

116 building: str | None 

117 restaurants: list[DiningRestaurantResult] 

118 

119 

120class DiningBuildingsResult(TypedDict): 

121 buildings: list[DiningBuildingResult] 

122 

123 

124class LibrarySpaceResult(TypedDict): 

125 zone: str | None 

126 type: str | None 

127 available: str | int | None 

128 

129 

130class LibrarySpacesResult(TypedDict): 

131 spaces: list[LibrarySpaceResult] 

132 

133 

134class LibraryItemsResult(TypedDict): 

135 items: list[dict[str, str]] 

136 

137 

138class NewsletterArticleResult(TypedDict): 

139 title: str | None 

140 date: str | None 

141 

142 

143class NewsletterResult(TypedDict): 

144 name: str | None 

145 link: str | None 

146 latest_articles: list[NewsletterArticleResult] 

147 

148 

149class NewslettersResult(TypedDict): 

150 count: int 

151 newsletters: list[NewsletterResult] 

152 

153 

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 

160 

161 

162class EnergyResult(TypedDict): 

163 zones: list[EnergyZoneResult]