3838 send_from_directory , Response , Request )
3939
4040from pygeoapi .api import API , APIRequest , apply_gzip
41+ import pygeoapi .api as core_api
4142import pygeoapi .api .coverages as coverages_api
4243import pygeoapi .api .environmental_data_retrieval as edr_api
4344import pygeoapi .api .itemtypes as itemtypes_api
4445import pygeoapi .api .maps as maps_api
4546import pygeoapi .api .processes as processes_api
4647import pygeoapi .api .stac as stac_api
4748import pygeoapi .api .tiles as tiles_api
49+ import pygeoapi .admin as admin_api
4850from pygeoapi .openapi import load_openapi_document
4951from pygeoapi .config import get_config
5052from pygeoapi .util import get_mimetype , get_api_rules
@@ -118,50 +120,39 @@ def schemas(path):
118120 mimetype = get_mimetype (basename_ ))
119121
120122
121- # TODO: inline in execute_from_flask when all views have been refactored
122- def get_response (result : tuple ):
123- """
124- Creates a Flask Response object and updates matching headers.
125-
126- :param result: The result of the API call.
127- This should be a tuple of (headers, status, content).
128-
129- :returns: A Response instance
130- """
131-
132- headers , status , content = result
133- response = make_response (content , status )
134-
135- if headers :
136- response .headers = headers
137- return response
138-
139-
140123def execute_from_flask (api_function , request : Request , * args ,
141- skip_valid_check = False ) -> Response :
124+ skip_valid_check = False ,
125+ alternative_api = None
126+ ) -> Response :
142127 """
143128 Executes API function from Flask
144129
145130 :param api_function: API function
146131 :param request: request object
147132 :param *args: variable length additional arguments
148133 :param skip_validity_check: bool
134+ :param alternative_api: specify custom api instance such as Admin
149135
150136 :returns: A Response instance
151137 """
152138
153- api_request = APIRequest .from_flask (request , api_ .locales )
139+ actual_api = api_ if alternative_api is None else alternative_api
140+
141+ api_request = APIRequest .from_flask (request , actual_api .locales )
154142
155143 content : Union [str , bytes ]
156144
157145 if not skip_valid_check and not api_request .is_valid ():
158- headers , status , content = api_ .get_format_exception (api_request )
146+ headers , status , content = actual_api .get_format_exception (api_request )
159147 else :
160- headers , status , content = api_function (api_ , api_request , * args )
148+ headers , status , content = api_function (actual_api , api_request , * args )
161149 content = apply_gzip (headers , content )
162- # handle jsonld too?
163150
164- return get_response ((headers , status , content ))
151+ response = make_response (content , status )
152+
153+ if headers :
154+ response .headers = headers
155+ return response
165156
166157
167158@BLUEPRINT .route ('/' )
@@ -171,7 +162,7 @@ def landing_page():
171162
172163 :returns: HTTP response
173164 """
174- return get_response ( api_ .landing_page ( request ) )
165+ return execute_from_flask ( core_api .landing_page , request )
175166
176167
177168@BLUEPRINT .route ('/openapi' )
@@ -182,7 +173,7 @@ def openapi():
182173 :returns: HTTP response
183174 """
184175
185- return get_response ( api_ .openapi_ ( request ) )
176+ return execute_from_flask ( core_api .openapi_ , request )
186177
187178
188179@BLUEPRINT .route ('/conformance' )
@@ -193,7 +184,7 @@ def conformance():
193184 :returns: HTTP response
194185 """
195186
196- return get_response ( api_ .conformance ( request ) )
187+ return execute_from_flask ( core_api .conformance , request )
197188
198189
199190@BLUEPRINT .route ('/TileMatrixSets/<tileMatrixSetId>' )
@@ -232,7 +223,8 @@ def collections(collection_id=None):
232223 :returns: HTTP response
233224 """
234225
235- return get_response (api_ .describe_collections (request , collection_id ))
226+ return execute_from_flask (core_api .describe_collections , request ,
227+ collection_id )
236228
237229
238230@BLUEPRINT .route ('/collections/<path:collection_id>/schema' )
@@ -245,7 +237,8 @@ def collection_schema(collection_id):
245237 :returns: HTTP response
246238 """
247239
248- return get_response (api_ .get_collection_schema (request , collection_id ))
240+ return execute_from_flask (core_api .get_collection_schema , request ,
241+ collection_id )
249242
250243
251244@BLUEPRINT .route ('/collections/<path:collection_id>/queryables' )
@@ -466,23 +459,6 @@ def get_job_result(job_id=None):
466459 return execute_from_flask (processes_api .get_job_result , request , job_id )
467460
468461
469- @BLUEPRINT .route ('/jobs/<job_id>/results/<resource>' ,
470- methods = ['GET' ])
471- def get_job_result_resource (job_id , resource ):
472- """
473- OGC API - Processes job result resource endpoint
474-
475- :param job_id: job identifier
476- :param resource: job resource
477-
478- :returns: HTTP response
479- """
480-
481- # TODO: this does not seem to exist?
482- return get_response (api_ .get_job_result_resource (
483- request , job_id , resource ))
484-
485-
486462@BLUEPRINT .route ('/collections/<path:collection_id>/position' )
487463@BLUEPRINT .route ('/collections/<path:collection_id>/area' )
488464@BLUEPRINT .route ('/collections/<path:collection_id>/cube' )
@@ -556,13 +532,16 @@ def admin_config():
556532 """
557533
558534 if request .method == 'GET' :
559- return get_response (admin_ .get_config (request ))
535+ return execute_from_flask (admin_api .get_config_ , request ,
536+ alternative_api = admin_ )
560537
561538 elif request .method == 'PUT' :
562- return get_response (admin_ .put_config (request ))
539+ return execute_from_flask (admin_api .put_config , request ,
540+ alternative_api = admin_ )
563541
564542 elif request .method == 'PATCH' :
565- return get_response (admin_ .patch_config (request ))
543+ return execute_from_flask (admin_api .patch_config , request ,
544+ alternative_api = admin_ )
566545
567546
568547@ADMIN_BLUEPRINT .route ('/admin/config/resources' , methods = ['GET' , 'POST' ])
@@ -574,10 +553,12 @@ def admin_config_resources():
574553 """
575554
576555 if request .method == 'GET' :
577- return get_response (admin_ .get_resources (request ))
556+ return execute_from_flask (admin_api .get_resources , request ,
557+ alternative_api = admin_ )
578558
579559 elif request .method == 'POST' :
580- return get_response (admin_ .post_resource (request ))
560+ return execute_from_flask (admin_api .post_resource , request ,
561+ alternative_api = admin_ )
581562
582563
583564@ADMIN_BLUEPRINT .route (
@@ -591,16 +572,24 @@ def admin_config_resource(resource_id):
591572 """
592573
593574 if request .method == 'GET' :
594- return get_response (admin_ .get_resource (request , resource_id ))
575+ return execute_from_flask (admin_api .get_resource , request ,
576+ resource_id ,
577+ alternative_api = admin_ )
595578
596579 elif request .method == 'DELETE' :
597- return get_response (admin_ .delete_resource (request , resource_id ))
580+ return execute_from_flask (admin_api .delete_resource , request ,
581+ resource_id ,
582+ alternative_api = admin_ )
598583
599584 elif request .method == 'PUT' :
600- return get_response (admin_ .put_resource (request , resource_id ))
585+ return execute_from_flask (admin_api .put_resource , request ,
586+ resource_id ,
587+ alternative_api = admin_ )
601588
602589 elif request .method == 'PATCH' :
603- return get_response (admin_ .patch_resource (request , resource_id ))
590+ return execute_from_flask (admin_api .patch_resource , request ,
591+ resource_id ,
592+ alternative_api = admin_ )
604593
605594
606595APP .register_blueprint (BLUEPRINT )
0 commit comments