Coverage for middle_layer/allocate/application_layer/rest_api/routes.py: 100.00%

72 statements  

« prev     ^ index     » next       coverage.py v7.10.5, created at 2026-03-09 06:13 +0000

1# Copyright 2024 Associated Universities, Inc. 

2# 

3# This file is part of Telescope Time Allocation Tools (TTAT). 

4# 

5# TTAT is free software: you can redistribute it and/or modify 

6# it under the terms of the GNU General Public License as published by 

7# the Free Software Foundation, either version 3 of the License, or 

8# any later version. 

9# 

10# TTAT is distributed in the hope that it will be useful, 

11# but WITHOUT ANY WARRANTY; without even the implied warranty of 

12# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 

13# GNU General Public License for more details. 

14# 

15# You should have received a copy of the GNU General Public License 

16# along with TTAT. If not, see <https://www.gnu.org/licenses/>. 

17 

18from pyramid.config import Configurator 

19 

20 

21def includeme(config: Configurator): 

22 """ 

23 Function that gets included in server.py:main(); calls all route adding functions 

24 

25 :param config: Pyramid server config object 

26 """ 

27 tac_member_routes(config) 

28 allocation_version_routes(config) 

29 proposal_disposition_routes(config) 

30 allocation_disposition_routes(config) 

31 obspec_disposition_routes(config) 

32 proposal_summary_routes(config) 

33 time_reservation_routes(config) 

34 available_time_model_version_routes(config) 

35 available_time_model_routes(config) 

36 timebin_routes(config) 

37 allocated_science_target_routes(config) 

38 calendar_routes(config) 

39 

40 

41def tac_member_routes(config: Configurator): 

42 """ 

43 server routes for TAC Member 

44 

45 :param config: Pyramid server config object 

46 """ 

47 tm_url = "tac_member" 

48 tm_individual_url = f"{tm_url}/{{tm_id}}" 

49 config.add_route( 

50 name="tac_member_list_by_solicitation_id", 

51 pattern=f"solicitations/{{solicitation_id}}/{tm_url}", 

52 request_method="GET", 

53 ) 

54 config.add_route( 

55 name="tac_member_upsert", 

56 pattern=tm_url, 

57 request_method="PUT", 

58 ) 

59 config.add_route( 

60 name="tac_member_delete", 

61 pattern=tm_individual_url, 

62 request_method="DELETE", 

63 ) 

64 config.add_route( 

65 name="proposals_by_tac_member", 

66 pattern=f"proposals_by_tac_member/{{solicitation_id}}", 

67 request_method="GET", 

68 ) 

69 

70 

71def allocation_version_routes(config: Configurator): 

72 """ 

73 server routes for Allocation Versions 

74 

75 :param config: Pyramid server config object 

76 """ 

77 av_url = "allocation_version" 

78 config.add_route( 

79 name="allocation_version_list_by_group_id", 

80 pattern=f"proposal_disposition_groups/{{group_id}}/{av_url}", 

81 request_method="GET", 

82 ) 

83 config.add_route( 

84 name="allocation_version_create", 

85 pattern=f"allocation_version_create/{{group_id}}", 

86 request_method="PUT", 

87 ) 

88 config.add_route( 

89 name="allocation_version_update", 

90 pattern=f"{av_url}/{{allocation_version_id}}/update", 

91 request_method="PUT", 

92 ) 

93 config.add_route( 

94 name="allocation_version_publish", 

95 pattern=f"{av_url}/{{allocation_version_id}}/publish/{{publication_destination}}/{{available_time_model_version_id}}", 

96 request_method="PUT", 

97 ) 

98 config.add_route( 

99 name="obspec_disposition_prioritize", 

100 pattern=f"{av_url}/{{allocation_version_id}}/{{available_time_model_version_id}}/prioritize", 

101 request_method="PUT", 

102 ) 

103 config.add_route( 

104 name="source_conflict_check", 

105 pattern=f"{av_url}/{{allocation_version_id}}/source_conflict_check", 

106 request_method="GET", 

107 ) 

108 

109 

110def proposal_disposition_routes(config: Configurator): 

111 """ 

112 server routes for ProposalDispositions 

113 

114 :param config: Pyramid server config object 

115 """ 

116 pd_url = "proposal_disposition" 

117 config.add_route( 

118 name="proposal_disposition_list_by_solicitation_id", 

119 pattern=f"solicitations/{{solicitation_id}}/{pd_url}", 

120 request_method="GET", 

121 ) 

122 config.add_route( 

123 name="proposal_disposition_update", 

124 pattern=f"proposal_disposition_update/{{proposal_id}}", 

125 request_method="PUT", 

126 ) 

127 config.add_route( 

128 name="proposal_disposition_group_create", 

129 pattern=f"proposal_disposition_group_create/{{solicitation_id}}", 

130 request_method="PUT", 

131 ) 

132 config.add_route( 

133 name="proposal_disposition_group_update", 

134 pattern=f"proposal_disposition_group/{{proposal_disposition_group_id}}", 

135 request_method="PUT", 

136 ) 

137 config.add_route( 

138 name="proposal_disposition_group_list_by_solicitation_id", 

139 pattern=f"solicitations/{{solicitation_id}}/{pd_url}_group", 

140 request_method="GET", 

141 ) 

142 

143 config.add_route( 

144 name="proposal_disposition_group_comment_export", 

145 pattern=f"proposal_disposition_groups/{{group_id}}/export_comments", 

146 request_method="GET", 

147 ) 

148 

149 config.add_route( 

150 name="proposal_disposition_group_comment_import", 

151 pattern=f"proposal_disposition_groups/{{group_id}}/import_comments", 

152 request_method="POST", 

153 ) 

154 

155 

156def allocation_disposition_routes(config: Configurator): 

157 """ 

158 server routes for Allocation Dispositions 

159 

160 :param config: Pyramid server config object 

161 """ 

162 individual_ad_url = f"allocation_dispositions/{{allocation_disposition_id}}" 

163 config.add_route(name="allocation_disposition_update", pattern="allocation_dispositions", request_method="PUT") 

164 config.add_route( 

165 name="allocation_disposition_list_by_allocation_version_id", 

166 pattern=f"allocation_versions/{{allocation_version_id}}/allocation_disposition", 

167 request_method="GET", 

168 ) 

169 config.add_route( 

170 name="allocation_disposition_list_by_proposal_disposition_group_id", 

171 pattern=f"proposal_disposition_group/{{proposal_disposition_group_id}}/allocation_dispositions", 

172 request_method="GET", 

173 ) 

174 config.add_route( 

175 name="allocation_disposition_restore", 

176 pattern=f"{individual_ad_url}/restore", 

177 request_method="PUT", 

178 ) 

179 

180 

181def obspec_disposition_routes(config: Configurator): 

182 """ 

183 server routes for Observation Specification Dispositions 

184 

185 :param config: Pyramid server config object 

186 """ 

187 config.add_route( 

188 name="obspec_disposition_update", 

189 pattern=f"allocation_dispositions/{{allocation_disposition_id}}/obspec_disposition_update", 

190 request_method="PUT", 

191 ) 

192 

193 

194def proposal_summary_routes(config: Configurator): 

195 """ 

196 server routes for Proposal Summaries 

197 :param config: Pyramid server config object 

198 """ 

199 config.add_route( 

200 name="proposal_summary_list_by_solicitation_id", 

201 pattern=f"solicitations/{{solicitation_id}}/proposal_summary", 

202 request_method="GET", 

203 ) 

204 config.add_route( 

205 name="proposal_summary_export", 

206 pattern=f"solicitations/{{solicitation_id}}/export_proposal_summary", 

207 request_method="GET", 

208 ) 

209 

210 

211def time_reservation_routes(config: Configurator): 

212 """ 

213 server routes for Time Reservations 

214 

215 :param config: Pyramid server config object 

216 """ 

217 config.add_route( 

218 name="time_reservation_upsert", 

219 pattern=f"time_reservation", 

220 request_method="PUT", 

221 ) 

222 

223 config.add_route( 

224 name="time_reservation_delete", 

225 pattern=f"available_time_model_version/{{atmv_id}}/delete_time_reservation/{{time_reservation_id}}", 

226 request_method="DELETE", 

227 ) 

228 

229 config.add_route( 

230 name="time_reservation_delete_all", 

231 pattern=f"available_time_model_version/{{atmv_id}}/delete_all_time_reservations", 

232 request_method="DELETE", 

233 ) 

234 

235 config.add_route( 

236 name="time_reservation_import", 

237 pattern=f"available_time_model_version/{{atmv_id}}/import_time_reservations", 

238 request_method="POST", 

239 ) 

240 

241 

242def available_time_model_version_routes(config: Configurator): 

243 """ 

244 server routes for Available Time Model Versions 

245 

246 :param config: Pyramid server config object 

247 """ 

248 

249 atmv_url = "available_time_model_version" 

250 config.add_route( 

251 name="available_time_model_version_list_by_solicitation_id_and_facility_id", 

252 pattern=f"{atmv_url}/solicitation/{{solicitation_id}}/facility/{{facility_id}}", 

253 request_method="GET", 

254 ) 

255 config.add_route( 

256 name="available_time_model_version_create", 

257 pattern=f"available_time_model_version_create/{{solicitation_id}}", 

258 request_method="PUT", 

259 ) 

260 config.add_route( 

261 name="available_time_model_version_update", 

262 pattern=f"{atmv_url}/{{available_time_model_version_id}}/update", 

263 request_method="PUT", 

264 ) 

265 config.add_route( 

266 name="available_time_model_version_by_id", 

267 pattern=f"{atmv_url}/{{atmv_id}}", 

268 request_method="GET", 

269 ) 

270 

271 

272def available_time_model_routes(config: Configurator): 

273 """ 

274 server routes for Available Time Models 

275 

276 :param config: Pyramid server config object 

277 """ 

278 

279 atmv_url = "available_time_model_version" # all endpoints are related to an Available Time Model Version 

280 

281 config.add_route( 

282 name="available_time_model_list_by_available_time_model_version_id", 

283 pattern=f"{atmv_url}/{{available_time_model_version_id}}/available_time_model", 

284 request_method="GET", 

285 ) 

286 

287 config.add_route( 

288 name="available_time_model_upsert", 

289 pattern=f"{atmv_url}/{{available_time_model_version_id}}/available_time_model", 

290 request_method="PUT", 

291 ) 

292 config.add_route( 

293 name="available_time_model_delete", 

294 pattern=f"{atmv_url}/{{available_time_model_version_id}}/available_time_model/{{available_time_model_id}}", 

295 request_method="DELETE", 

296 ) 

297 

298 

299def timebin_routes(config: Configurator): 

300 """ 

301 server routes for TimeBins 

302 :param config: Pyramid server config object 

303 """ 

304 config.add_route("timebins", "timebins", request_method="GET") 

305 config.add_route("timebins_export", "timebins_export", request_method="GET") 

306 

307 

308def allocated_science_target_routes(config: Configurator): 

309 """ 

310 server routes for Allocated Science Targets 

311 

312 Note - 

313 

314 

315 :param config: Pyramid server config object 

316 

317 """ 

318 

319 # Note - this is an endpoint related to AllocationDisposition since it affects updates on one or more 

320 # AllocatedScienceTargets associated with a specfic AllocationDisposition 

321 config.add_route( 

322 name="allocated_science_target_update", 

323 pattern=f"allocation_dispositions/{{allocation_disposition_id}}/allocated_science_target_list_update", 

324 request_method="POST", 

325 ) 

326 

327 

328def calendar_routes(config): 

329 """ 

330 Server routes for Calendars 

331 :param config: Pyramid server config object 

332 """ 

333 config.add_route("calendar", "calendar", request_method="GET")