-
Notifications
You must be signed in to change notification settings - Fork 472
/
Copy pathexports.py
executable file
·73 lines (52 loc) · 2.3 KB
/
exports.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
from flask import send_file
from flask_restplus import Namespace, Resource
from flask_login import login_required, current_user
import datetime
from ..util import query_util
from database import (
ExportModel,
fix_ids
)
api = Namespace('export', description='Export related operations')
@api.route('/<int:export_id>')
class DatasetExports(Resource):
@login_required
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.datasets.filter(id=export.dataset_id).first()
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
@login_required
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.datasets.filter(id=export.dataset_id).first()
if dataset is None:
return {"message": "Invalid dataset ID"}, 400
export.delete()
return {'success': True}
@api.route('/<int:export_id>/download')
class DatasetExports(Resource):
@login_required
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.datasets.filter(id=export.dataset_id).first()
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
if len(list(export.tags)) >0 and list(export.tags)[0] == "SemanticSeg":
return send_file(export.path, attachment_filename=f"{dataset.name}-{'-'.join(export.tags)}.zip", as_attachment=True)
return send_file(export.path, attachment_filename=f"{dataset.name}-{'-'.join(export.tags)}.json", as_attachment=True)