Skip to content

Commit 39e57e9

Browse files
committed
Re-add post/create on /dataset/
1 parent 2a1b3fd commit 39e57e9

File tree

1 file changed

+33
-0
lines changed

1 file changed

+33
-0
lines changed

src/server.py

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -317,6 +317,39 @@ def get(self, dataset):
317317
error_code = result.get('error_code') or 404
318318
api.abort(error_code, result['error'])
319319

320+
@api.doc('create')
321+
@api.response(405, 'Dataset not creatable')
322+
@api.response(422, 'Feature validation failed', feature_validation_response)
323+
@api.expect(geojson_feature_request)
324+
@api.marshal_with(geojson_feature, code=201)
325+
@optional_auth
326+
def post(self, dataset):
327+
"""Create a new dataset feature
328+
329+
Create new dataset feature from a GeoJSON Feature and return it as a
330+
GeoJSON Feature.
331+
"""
332+
translator = Translator(app, request)
333+
334+
if request.is_json:
335+
# parse request data (NOTE: catches invalid JSON)
336+
feature = api.payload
337+
if isinstance(feature, dict):
338+
data_service = data_service_handler()
339+
340+
result = data_service.create(
341+
get_identity(), translator, dataset, feature)
342+
if 'error' not in result:
343+
return result['feature'], 201
344+
else:
345+
error_code = result.get('error_code') or 404
346+
error_details = result.get('error_details') or {}
347+
api.abort(error_code, result['error'], **error_details)
348+
else:
349+
api.abort(400, translator.tr("error.json_is_not_an_object"))
350+
else:
351+
api.abort(400, translator.tr("error.request_data_is_not_json"))
352+
320353

321354
@api.route('/<path:dataset>/extent')
322355
@api.response(400, 'Bad request')

0 commit comments

Comments
 (0)