From e191bf4768a8283bde6ef1cb986edf0d8ca162b3 Mon Sep 17 00:00:00 2001 From: Tom Kralidis Date: Fri, 30 Sep 2022 09:22:59 -0400 Subject: [PATCH] detect whether an HTTP POST to .../items is a transaction or CQL --- pygeoapi/django_/views.py | 10 +++++++--- pygeoapi/flask_app.py | 13 +++++++------ pygeoapi/starlette_app.py | 16 +++++++++------- 3 files changed, 23 insertions(+), 16 deletions(-) diff --git a/pygeoapi/django_/views.py b/pygeoapi/django_/views.py index ac07cc0..2540878 100644 --- a/pygeoapi/django_/views.py +++ b/pygeoapi/django_/views.py @@ -140,9 +140,13 @@ def collection_items(request: HttpRequest, collection_id: str) -> HttpResponse: collection_id, ) elif request.method == 'POST': - response_ = _feed_response( - request, 'manage_collection_item', request, 'create', collection_id - ) + if request.content_type is not None: + if request.content_type == 'application/geo+json': + response_ = _feed_response(request, 'manage_collection_item', + request, 'create', collection_id) + else: + response_ = _feed_response(request, 'post_collection_items', + request, collection_id) response = _to_django_response(*response_) diff --git a/pygeoapi/flask_app.py b/pygeoapi/flask_app.py index 0dbcd66..1a9457f 100644 --- a/pygeoapi/flask_app.py +++ b/pygeoapi/flask_app.py @@ -195,12 +195,13 @@ def collection_items(collection_id, item_id=None): api_.get_collection_items(request, collection_id)) elif request.method == 'POST': # filter or manage items if request.content_type is not None: - return get_response( - api_.manage_collection_item(request, 'create', - collection_id)) - else: - return get_response( - api_.post_collection_items(request, collection_id)) + if request.content_type == 'application/geo+json': + return get_response( + api_.manage_collection_item(request, 'create', + collection_id)) + else: + return get_response( + api_.post_collection_items(request, collection_id)) elif request.method == 'DELETE': return get_response( diff --git a/pygeoapi/starlette_app.py b/pygeoapi/starlette_app.py index c287b2f..307d7d5 100644 --- a/pygeoapi/starlette_app.py +++ b/pygeoapi/starlette_app.py @@ -233,13 +233,15 @@ async def collection_items(request: Request, collection_id=None, item_id=None): api_.get_collection_items( request, collection_id)) elif request.method == 'POST': # filter or manage items - if request.headers.get('content-type') is not None: - return get_response( - api_.manage_collection_item(request, 'create', - collection_id)) - else: - return get_response( - api_.post_collection_items(request, collection_id)) + content_type = request.headers.get('content-type') + if content_type is not None: + if content_type == 'application/geo+json': + return get_response( + api_.manage_collection_item(request, 'create', + collection_id)) + else: + return get_response( + api_.post_collection_items(request, collection_id)) elif request.method == 'DELETE': return get_response(