1
1
import attr
2
- from attrs import define , field
3
2
from fastapi import APIRouter , HTTPException , Response
4
3
from starlette .responses import JSONResponse
5
4
6
- from openeo_fastapi .client import models
5
+ from openeo_fastapi .api import responses
7
6
8
7
HIDDEN_PATHS = ["/openapi.json" , "/docs" , "/docs/oauth2-redirect" , "/redoc" ]
9
8
10
9
11
- @define
10
+ @attr . define
12
11
class OpenEOApi :
13
12
"""Factory for creating FastApi applications conformant to the OpenEO Api specification."""
14
13
15
- client : field
16
- app : field
14
+ client : attr . field
15
+ app : attr . field
17
16
router : APIRouter = attr .ib (default = attr .Factory (APIRouter ))
18
17
response_class : type [Response ] = attr .ib (default = JSONResponse )
19
18
@@ -27,7 +26,7 @@ def register_well_known(self):
27
26
self .router .add_api_route (
28
27
name = ".well-known" ,
29
28
path = "/.well-known/openeo" ,
30
- response_model = models .WellKnownOpeneoGetResponse ,
29
+ response_model = responses .WellKnownOpeneoGetResponse ,
31
30
response_model_exclude_unset = False ,
32
31
response_model_exclude_none = True ,
33
32
methods = ["GET" ],
@@ -43,13 +42,28 @@ def register_get_capabilities(self):
43
42
self .router .add_api_route (
44
43
name = "capabilities" ,
45
44
path = f"/{ self .client .settings .OPENEO_VERSION } " + "/" ,
46
- response_model = models .Capabilities ,
45
+ response_model = responses .Capabilities ,
47
46
response_model_exclude_unset = False ,
48
47
response_model_exclude_none = True ,
49
48
methods = ["GET" ],
50
49
endpoint = self .client .get_capabilities ,
51
50
)
52
51
52
+ def register_get_conformance (self ):
53
+ """Register conformance page (GET /).
54
+ Returns:
55
+ None
56
+ """
57
+ self .router .add_api_route (
58
+ name = "conformance" ,
59
+ path = f"/{ self .client .settings .OPENEO_VERSION } /conformance" ,
60
+ response_model = responses .ConformanceGetResponse ,
61
+ response_model_exclude_unset = False ,
62
+ response_model_exclude_none = True ,
63
+ methods = ["GET" ],
64
+ endpoint = self .client .get_conformance ,
65
+ )
66
+
53
67
def register_get_collections (self ):
54
68
"""Register collection Endpoint (GET /collections).
55
69
Returns:
@@ -58,11 +72,11 @@ def register_get_collections(self):
58
72
self .router .add_api_route (
59
73
name = "collections" ,
60
74
path = f"/{ self .client .settings .OPENEO_VERSION } /collections" ,
61
- response_model = None ,
75
+ response_model = responses . Collections ,
62
76
response_model_exclude_unset = False ,
63
77
response_model_exclude_none = True ,
64
78
methods = ["GET" ],
65
- endpoint = self .client .get_collections ,
79
+ endpoint = self .client ._collections . get_collections ,
66
80
)
67
81
68
82
def register_get_collection (self ):
@@ -74,42 +88,187 @@ def register_get_collection(self):
74
88
name = "collection" ,
75
89
path = f"/{ self .client .settings .OPENEO_VERSION } "
76
90
+ "/collections/{collection_id}" ,
77
- response_model = None ,
91
+ response_model = responses . Collection ,
78
92
response_model_exclude_unset = False ,
79
93
response_model_exclude_none = True ,
80
94
methods = ["GET" ],
81
- endpoint = self .client .get_collection ,
95
+ endpoint = self .client ._collections . get_collection ,
82
96
)
83
97
84
- def register_get_conformance (self ):
85
- """Register conformance page (GET /).
98
+ def register_get_processes (self ):
99
+ """Register Endpoint for Processes (GET /processes).
100
+
86
101
Returns:
87
102
None
88
103
"""
89
104
self .router .add_api_route (
90
- name = "conformance " ,
91
- path = f"/{ self .client .settings .OPENEO_VERSION } /conformance " ,
92
- response_model = models . ConformanceGetResponse ,
105
+ name = "processes " ,
106
+ path = f"/{ self .client .settings .OPENEO_VERSION } /processes " ,
107
+ response_model = responses . ProcessesGetResponse ,
93
108
response_model_exclude_unset = False ,
94
109
response_model_exclude_none = True ,
95
110
methods = ["GET" ],
96
- endpoint = self .client .get_conformance ,
111
+ endpoint = self .client ._processes . list_processes ,
97
112
)
98
113
99
- def register_get_processes (self ):
100
- """Register Endpoint for Processes (GET /processes ).
114
+ def register_get_jobs (self ):
115
+ """Register Endpoint for Jobs (GET /jobs ).
101
116
102
117
Returns:
103
118
None
104
119
"""
105
120
self .router .add_api_route (
106
- name = "processes" ,
107
- path = f"/{ self .client .settings .OPENEO_VERSION } /processes" ,
121
+ name = "get_jobs" ,
122
+ path = f"/{ self .client .settings .OPENEO_VERSION } /jobs" ,
123
+ response_model = responses .JobsGetResponse ,
124
+ response_model_exclude_unset = False ,
125
+ response_model_exclude_none = True ,
126
+ methods = ["GET" ],
127
+ endpoint = self .client ._jobs .list_jobs ,
128
+ )
129
+
130
+ def register_create_job (self ):
131
+ """Register Endpoint for Jobs (POST /jobs).
132
+
133
+ Returns:
134
+ None
135
+ """
136
+ self .router .add_api_route (
137
+ name = "post_job" ,
138
+ path = f"/{ self .client .settings .OPENEO_VERSION } /jobs" ,
139
+ response_model = None ,
140
+ response_model_exclude_unset = False ,
141
+ response_model_exclude_none = True ,
142
+ methods = ["POST" ],
143
+ endpoint = self .client ._jobs .create_job ,
144
+ )
145
+
146
+ def register_update_job (self ):
147
+ """Register Endpoint for Jobs (POST /jobs/{job_id}).
148
+
149
+ Returns:
150
+ None
151
+ """
152
+ self .router .add_api_route (
153
+ name = "post_job" ,
154
+ path = f"/{ self .client .settings .OPENEO_VERSION } /jobs" + "/{job_id}" ,
108
155
response_model = None ,
109
156
response_model_exclude_unset = False ,
110
157
response_model_exclude_none = True ,
158
+ methods = ["PATCH" ],
159
+ endpoint = self .client ._jobs .update_job ,
160
+ )
161
+
162
+ def register_get_job (self ):
163
+ """Register Endpoint for Jobs (GET /jobs/{job_id}).
164
+
165
+ Returns:
166
+ None
167
+ """
168
+ self .router .add_api_route (
169
+ name = "get_job" ,
170
+ path = f"/{ self .client .settings .OPENEO_VERSION } /jobs" + "/{job_id}" ,
171
+ response_model = responses .BatchJob ,
172
+ response_model_exclude_unset = False ,
173
+ response_model_exclude_none = True ,
111
174
methods = ["GET" ],
112
- endpoint = self .client .get_processes ,
175
+ endpoint = self .client ._jobs .get_job ,
176
+ )
177
+
178
+ def register_delete_job (self ):
179
+ """Register Endpoint for Jobs (GET /jobs/{job_id}).
180
+
181
+ Returns:
182
+ None
183
+ """
184
+ self .router .add_api_route (
185
+ name = "delete_job" ,
186
+ path = f"/{ self .client .settings .OPENEO_VERSION } /jobs" + "/{job_id}" ,
187
+ response_model = None ,
188
+ response_model_exclude_unset = False ,
189
+ response_model_exclude_none = True ,
190
+ methods = ["DELETE" ],
191
+ endpoint = self .client ._jobs .delete_job ,
192
+ )
193
+
194
+ def register_get_estimate (self ):
195
+ """Register Endpoint for Jobs (GET /jobs/{job_id}).
196
+
197
+ Returns:
198
+ None
199
+ """
200
+ self .router .add_api_route (
201
+ name = "get_estimate" ,
202
+ path = f"/{ self .client .settings .OPENEO_VERSION } /jobs" + "/{job_id}/estimate" ,
203
+ response_model = responses .JobsGetEstimateGetResponse ,
204
+ response_model_exclude_unset = False ,
205
+ response_model_exclude_none = True ,
206
+ methods = ["GET" ],
207
+ endpoint = self .client ._jobs .estimate ,
208
+ )
209
+
210
+ def register_get_logs (self ):
211
+ """Register Endpoint for Jobs (GET /jobs/{job_id}).
212
+
213
+ Returns:
214
+ None
215
+ """
216
+ self .router .add_api_route (
217
+ name = "get_logs" ,
218
+ path = f"/{ self .client .settings .OPENEO_VERSION } /jobs" + "/{job_id}/logs" ,
219
+ response_model = responses .JobsGetLogsResponse ,
220
+ response_model_exclude_unset = False ,
221
+ response_model_exclude_none = True ,
222
+ methods = ["GET" ],
223
+ endpoint = self .client ._jobs .logs ,
224
+ )
225
+
226
+ def register_get_results (self ):
227
+ """Register Endpoint for Jobs (GET /jobs/{job_id}).
228
+
229
+ Returns:
230
+ None
231
+ """
232
+ self .router .add_api_route (
233
+ name = "get_results" ,
234
+ path = f"/{ self .client .settings .OPENEO_VERSION } /jobs" + "/{job_id}/results" ,
235
+ response_model = responses .Collection ,
236
+ response_model_exclude_unset = False ,
237
+ response_model_exclude_none = True ,
238
+ methods = ["GET" ],
239
+ endpoint = self .client ._jobs .get_results ,
240
+ )
241
+
242
+ def register_start_job (self ):
243
+ """Register Endpoint for Jobs (GET /jobs/{job_id}).
244
+
245
+ Returns:
246
+ None
247
+ """
248
+ self .router .add_api_route (
249
+ name = "start_job" ,
250
+ path = f"/{ self .client .settings .OPENEO_VERSION } /jobs" + "/{job_id}/results" ,
251
+ response_model = None ,
252
+ response_model_exclude_unset = False ,
253
+ response_model_exclude_none = True ,
254
+ methods = ["POST" ],
255
+ endpoint = self .client ._jobs .start_job ,
256
+ )
257
+
258
+ def register_cancel_job (self ):
259
+ """Register Endpoint for Jobs (GET /jobs/{job_id}).
260
+
261
+ Returns:
262
+ None
263
+ """
264
+ self .router .add_api_route (
265
+ name = "start_job" ,
266
+ path = f"/{ self .client .settings .OPENEO_VERSION } /jobs" + "/{job_id}/results" ,
267
+ response_model = None ,
268
+ response_model_exclude_unset = False ,
269
+ response_model_exclude_none = True ,
270
+ methods = ["DELETE" ],
271
+ endpoint = self .client ._jobs .cancel_job ,
113
272
)
114
273
115
274
def register_core (self ):
@@ -132,6 +291,16 @@ def register_core(self):
132
291
self .register_get_collections ()
133
292
self .register_get_collection ()
134
293
self .register_get_processes ()
294
+ self .register_get_jobs ()
295
+ self .register_create_job ()
296
+ self .register_update_job ()
297
+ self .register_get_job ()
298
+ self .register_delete_job ()
299
+ self .register_get_estimate ()
300
+ self .register_get_logs ()
301
+ self .register_get_results ()
302
+ self .register_start_job ()
303
+ self .register_cancel_job ()
135
304
self .register_well_known ()
136
305
137
306
def http_exception_handler (self , request , exception ):
0 commit comments