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
« 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/>.
18from pyramid.config import Configurator
21def includeme(config: Configurator):
22 """
23 Function that gets included in server.py:main(); calls all route adding functions
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)
41def tac_member_routes(config: Configurator):
42 """
43 server routes for TAC Member
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 )
71def allocation_version_routes(config: Configurator):
72 """
73 server routes for Allocation Versions
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 )
110def proposal_disposition_routes(config: Configurator):
111 """
112 server routes for ProposalDispositions
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 )
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 )
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 )
156def allocation_disposition_routes(config: Configurator):
157 """
158 server routes for Allocation Dispositions
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 )
181def obspec_disposition_routes(config: Configurator):
182 """
183 server routes for Observation Specification Dispositions
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 )
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 )
211def time_reservation_routes(config: Configurator):
212 """
213 server routes for Time Reservations
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 )
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 )
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 )
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 )
242def available_time_model_version_routes(config: Configurator):
243 """
244 server routes for Available Time Model Versions
246 :param config: Pyramid server config object
247 """
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 )
272def available_time_model_routes(config: Configurator):
273 """
274 server routes for Available Time Models
276 :param config: Pyramid server config object
277 """
279 atmv_url = "available_time_model_version" # all endpoints are related to an Available Time Model Version
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 )
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 )
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")
308def allocated_science_target_routes(config: Configurator):
309 """
310 server routes for Allocated Science Targets
312 Note -
315 :param config: Pyramid server config object
317 """
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 )
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")