def get(self, dataset_id): """ Returns exports of images and annotations in the dataset (only owners) """ dataset = current_user.find_dataset_by_id(dataset_id) if dataset is None: return {"message": "Invalid dataset ID"}, 400 if not current_user.can_download(dataset): return { "message": "You do not have permission to download the dataset's annotations" }, 403 exports = ExportModel.objects( dataset_id=dataset.id).order_by('-created_at').limit(50) dict_export = [] for export in exports: time_delta = datetime.datetime.utcnow() - export.created_at dict_export.append({ 'id': export.id, 'ago': query_util.td_format(time_delta), 'tags': export.tags }) return dict_export
def post(self, dataset_id): """ Adds coco formatted annotations to the dataset """ args = coco_upload.parse_args() coco = args['coco'] dataset = current_user.find_dataset_by_id(dataset_id) if dataset is None: return {'message': 'Invalid dataset ID'}, 400 return dataset.import_coco(json.load(coco))
def delete(self, export_id): """ Returns exports """ export = ExportModel.objects(id=export_id).first() if export is None: return {"message": "Invalid export ID"}, 400 dataset = current_user.find_dataset_by_id(export.dataset_id) if dataset is None: return {"message": "Invalid dataset ID"}, 400 export.delete() return {'success': True}
def get(self, image_id): """ Called when loading from the annotator client """ image = ImageModel.objects(id=image_id)\ .exclude('events').first() if image is None: return {'success': False, 'message': 'Could not load image'}, 400 dataset = current_user.find_dataset_by_id(image.dataset_id) if dataset is None: return {'success': False, 'message': 'Could not find associated dataset'}, 400 categories = CategoryModel.objects(deleted=False)\ .in_bulk(dataset.categories).items() # Get next and previous image images = ImageModel.objects(dataset_id=dataset.id, deleted=False) pre = images.filter(file_name__lt=image.file_name).order_by('-file_name').first() nex = images.filter(file_name__gt=image.file_name).order_by('file_name').first() preferences = {} if not Config.LOGIN_DISABLED: preferences = current_user.get_preferences() # Generate data about the image to return to client data = { 'image': query_util.fix_ids(image), 'categories': [], 'dataset': query_util.fix_ids(dataset), 'preferences': preferences, 'permissions': { 'dataset': dataset.permissions(current_user), 'image': image.permissions(current_user) } } data['image']['previous'] = pre.id if pre else None data['image']['next'] = nex.id if nex else None for category in categories: category = query_util.fix_ids(category[1]) category_id = category.get('id') annotations = AnnotationModel.objects(image_id=image_id, category_id=category_id, deleted=False)\ .exclude('events').all() category['show'] = True category['visualize'] = False category['annotations'] = [] if annotations is None else query_util.fix_ids(annotations) data.get('categories').append(category) return data
def get(self, dataset_id): """ Returns coco of images and annotations in the dataset (only owners) """ dataset = current_user.find_dataset_by_id(dataset_id) if dataset is None: return {"message": "Invalid dataset ID"}, 400 if not current_user.can_download(dataset): return { "message": "You do not have permission to download the dataset's annotations" }, 403 return coco_util.get_dataset_coco(dataset)
def get(self, export_id): """ Returns exports """ export = ExportModel.objects(id=export_id).first() if export is None: return {"message": "Invalid export ID"}, 400 dataset = current_user.find_dataset_by_id(export.dataset_id) if dataset is None: return {"message": "Invalid dataset ID"}, 400 time_delta = datetime.datetime.utcnow() - export.created_at d = fix_ids(export) d['ago'] = query_util.td_format(time_delta) return d