@@ -317,6 +317,39 @@ def get(self, dataset):
317
317
error_code = result .get ('error_code' ) or 404
318
318
api .abort (error_code , result ['error' ])
319
319
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
+
320
353
321
354
@api .route ('/<path:dataset>/extent' )
322
355
@api .response (400 , 'Bad request' )
0 commit comments