4242coco_upload = reqparse .RequestParser ()
4343coco_upload .add_argument ('coco' , location = 'files' , type = FileStorage , required = True , help = 'Json coco' )
4444
45+ export = reqparse .RequestParser ()
46+ export .add_argument ('categories' , type = str , default = None , required = False , help = 'Ids of categories to export' )
4547
4648update_dataset = reqparse .RequestParser ()
4749update_dataset .add_argument ('categories' , location = 'json' , type = list , help = "New list of categories" )
@@ -173,6 +175,7 @@ def get(self, dataset_id):
173175
174176@api .route ('/<int:dataset_id>' )
175177class DatasetId (Resource ):
178+
176179 @login_required
177180 def delete (self , dataset_id ):
178181 """ Deletes dataset by ID (only owners)"""
@@ -341,13 +344,16 @@ def get(self, dataset_id):
341344
342345 subdirectories = [f for f in sorted (os .listdir (directory ))
343346 if os .path .isdir (directory + f ) and not f .startswith ('.' )]
347+
348+ categories = CategoryModel .objects (id__in = dataset .categories ).only ('id' , 'name' )
344349
345350 return {
346351 "pagination" : pagination .export (),
347352 "images" : images_json ,
348353 "folder" : folder ,
349354 "directory" : directory ,
350355 "dataset" : query_util .fix_ids (dataset ),
356+ "categories" : query_util .fix_ids (categories ),
351357 "subdirectories" : subdirectories
352358 }
353359
@@ -384,6 +390,26 @@ def get(self, dataset_id):
384390@api .route ('/<int:dataset_id>/export' )
385391class DatasetExport (Resource ):
386392
393+ @api .expect (export )
394+ @login_required
395+ def get (self , dataset_id ):
396+
397+ args = export .parse_args ()
398+ categories = args .get ('categories' )
399+
400+ if len (categories ) == 0 :
401+ categories = []
402+
403+ if len (categories ) > 0 or isinstance (categories , str ):
404+ categories = [int (c ) for c in categories .split (',' )]
405+
406+ dataset = DatasetModel .objects (id = dataset_id ).first ()
407+
408+ if not dataset :
409+ return {'message' : 'Invalid dataset ID' }, 400
410+
411+ return dataset .export_coco (categories = categories )
412+
387413 @api .expect (coco_upload )
388414 @login_required
389415 def post (self , dataset_id ):
@@ -412,7 +438,7 @@ def get(self, dataset_id):
412438 if not current_user .can_download (dataset ):
413439 return {"message" : "You do not have permission to download the dataset's annotations" }, 403
414440
415- return coco_util .get_dataset_coco (dataset )
441+ return coco_util .get_dataseext_coco (dataset )
416442
417443 @api .expect (coco_upload )
418444 @login_required
@@ -459,16 +485,3 @@ def get(self, dataset_id):
459485
460486 return dataset .scan ()
461487
462-
463- @api .route ('/<int:dataset_id>/export' )
464- class DatasetScan (Resource ):
465-
466- @login_required
467- def get (self , dataset_id ):
468-
469- dataset = DatasetModel .objects (id = dataset_id ).first ()
470-
471- if not dataset :
472- return {'message' : 'Invalid dataset ID' }, 400
473-
474- return dataset .export_coco ()
0 commit comments