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

81 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 author_routes(config) 

28 proposal_routes(config) 

29 allocation_request_routes(config) 

30 capability_request_routes(config) 

31 scijust_routes(config) 

32 techjust_routes(config) 

33 observation_specification_routes(config) 

34 science_target_routes(config) 

35 reference_target_routes(config) 

36 science_target_list_routes(config) 

37 global_routes(config) 

38 

39 

40def author_routes(config: Configurator): 

41 """ 

42 server routes for Authors 

43 

44 :param config: Pyramid server config object 

45 """ 

46 authors_url = "authors" 

47 single_author_url = authors_url + "/{id}" 

48 config.add_route(name="authors_list", pattern=authors_url, request_method="GET") 

49 config.add_route(name="author_by_id", pattern=single_author_url, request_method="GET") 

50 config.add_route(name="author_add", pattern=authors_url, request_method="POST") 

51 config.add_route(name="author_update", pattern=single_author_url, request_method="PUT") 

52 config.add_route(name="author_delete", pattern=single_author_url, request_method="DELETE") 

53 

54 

55def proposal_routes(config: Configurator): 

56 """ 

57 server routes for Proposals 

58 

59 :param config: Pyramid server config object 

60 """ 

61 proposals_url = "proposals" 

62 single_proposal_url = proposals_url + "/{proposal_id}" 

63 proposal_state_url = proposals_url + "/{proposal_id}/{state}" 

64 config.add_route(name="proposals_list", pattern=proposals_url, request_method="GET") 

65 config.add_route(name="proposals_search", pattern=f"{proposals_url}/search", request_method="GET") 

66 config.add_route(name="proposal_by_id", pattern=single_proposal_url, request_method="GET") 

67 config.add_route(name="proposal_upsert", pattern=proposals_url, request_method="PUT") 

68 config.add_route(name="proposal_change_state", pattern=proposal_state_url, request_method="PUT") 

69 config.add_route( 

70 name="proposal_set_display_order", pattern=single_proposal_url + "/set_display_order", request_method="POST" 

71 ) 

72 config.add_route( 

73 name="proposal_set_discussed", pattern=single_proposal_url + "/set_discussed", request_method="POST" 

74 ) 

75 

76 

77def allocation_request_routes(config: Configurator): 

78 """ 

79 server routes for AllocationRequests 

80 

81 :param config: Pyramid server config object 

82 """ 

83 allocation_request_url = "allocation_requests" 

84 single_ar_url = allocation_request_url + "/{ar_id}" 

85 config.add_route(name="allocation_request_upsert", pattern=allocation_request_url, request_method="PUT") 

86 config.add_route(name="allocation_requests_list", pattern=allocation_request_url, request_method="GET") 

87 config.add_route(name="allocation_request_by_id", pattern=single_ar_url, request_method="GET") 

88 config.add_route(name="allocation_request_delete", pattern=single_ar_url, request_method="DELETE") 

89 

90 

91def capability_request_routes(config: Configurator): 

92 """ 

93 server routes for Capability Requests 

94 

95 :param config: Pyramid server config object 

96 """ 

97 capability_request_url = "capability_requests" 

98 single_capability_request_url = capability_request_url + "/{id}" 

99 config.add_route( 

100 name="capability_request_list", 

101 pattern="allocation_requests/{allocation_request_id}/capability_requests", 

102 request_method="GET", 

103 ) 

104 config.add_route(name="capability_request_by_id", pattern=single_capability_request_url, request_method="GET") 

105 config.add_route(name="capability_request_upsert", pattern=capability_request_url, request_method="PUT") 

106 config.add_route(name="capability_request_delete", pattern=single_capability_request_url, request_method="DELETE") 

107 

108 

109def scijust_routes(config: Configurator): 

110 """ 

111 server routes for Scientific Justifications 

112 

113 :param config: Pyramid server config object 

114 """ 

115 scijust_url = "proposal_copies/{proposal_copy_id}/scientific_justification" 

116 config.add_route(name="scijust_by_proposal_copy_id", pattern=scijust_url, request_method="GET") 

117 config.add_route(name="scijust_add", pattern=scijust_url, request_method="POST") 

118 config.add_route(name="scijust_delete", pattern=scijust_url, request_method="DELETE") 

119 

120 

121def techjust_routes(config: Configurator): 

122 """ 

123 server routes for Technical Justification answers 

124 

125 :param config: Pyramid server config object 

126 """ 

127 techjust_url = "proposal_copies/{proposal_copy_id}/technical_justification_answers" 

128 config.add_route(name="techjust_add", pattern=techjust_url, request_method="PUT") 

129 

130 

131def observation_specification_routes(config: Configurator): 

132 """ 

133 server routes for ObservationSpecification endpoints 

134 

135 :param config: Pyramid server config object 

136 """ 

137 obspec_url = "/observation_specifications" 

138 single_obspec_url = obspec_url + "/{id}" 

139 obspec_list_url = "allocation_requests/{allocation_request_id}/observation_specifications" 

140 config.add_route( 

141 name="observation_specifications_by_ar", 

142 pattern=obspec_list_url, 

143 request_method="GET", 

144 ) 

145 config.add_route( 

146 name="observation_specifications_by_av", 

147 pattern="allocation_versions/{allocation_version_id}/observation_specifications", 

148 request_method="GET", 

149 ) 

150 config.add_route( 

151 name="observation_specifications_by_proposal_disposition_group_id", 

152 pattern="proposal_disposition_group/{proposal_disposition_group_id}/observation_specifications", 

153 request_method="GET", 

154 ) 

155 config.add_route( 

156 name="generate_observation_specifications", 

157 pattern=obspec_list_url, 

158 request_method="POST", 

159 ) 

160 config.add_route("observation_specifications_by_id", pattern=single_obspec_url, request_method="GET") 

161 config.add_route(name="update_observation_specification", pattern=obspec_url, request_method="PUT") 

162 config.add_route(name="delete_observation_specification", pattern=single_obspec_url, request_method="DELETE") 

163 

164 

165def science_target_routes(config: Configurator): 

166 config.add_route( 

167 name="science_target_upsert", 

168 pattern="/science_target", 

169 request_method="PUT", 

170 ) 

171 config.add_route( 

172 name="science_target_delete", 

173 pattern="/science_target/{science_target_id}", 

174 request_method="DELETE", 

175 ) 

176 config.add_route( 

177 name="generate_science_targets", 

178 pattern="allocation_requests/{allocation_request_id}/science_targets", 

179 request_method="POST", 

180 ) 

181 

182 

183def reference_target_routes(config: Configurator): 

184 config.add_route( 

185 name="reference_target_upsert", 

186 pattern="/reference_target", 

187 request_method="PUT", 

188 ) 

189 config.add_route( 

190 name="reference_target_delete", 

191 pattern="/reference_target/{reference_target_id}", 

192 request_method="DELETE", 

193 ) 

194 config.add_route( 

195 name="reference_target_list", 

196 pattern="reference_target_list/{ar_id}", 

197 request_method="GET", 

198 ) 

199 config.add_route( 

200 name="generate_reference_targets", 

201 pattern="allocation_requests/{allocation_request_id}/reference_targets", 

202 request_method="POST", 

203 ) 

204 

205 

206def science_target_list_routes(config: Configurator): 

207 """ 

208 server routes for ScienceTargetList endpoints 

209 

210 :param config: Pyramid server config object 

211 """ 

212 config.add_route( 

213 name="science_target_list", 

214 pattern="science_target_list/{ar_id}", 

215 request_method="GET", 

216 ) 

217 

218 

219def global_routes(config: Configurator): 

220 """ 

221 server routes for global parameter lists 

222 

223 :param config: Pyramid server config object 

224 """ 

225 config.add_route(name="globals_list", pattern="globals", request_method="GET") 

226 config.add_route(name="scan_intent_list", pattern="globals/scan_intents", request_method="GET") 

227 config.add_route(name="subscan_intent_list", pattern="globals/subscan_intents", request_method="GET") 

228 config.add_route(name="spectral_band_list", pattern="globals/spectral_bands", request_method="GET")