-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathroutes.py
More file actions
128 lines (101 loc) · 3.74 KB
/
routes.py
File metadata and controls
128 lines (101 loc) · 3.74 KB
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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
from flask import request, send_from_directory, Blueprint, jsonify
from slugify import slugify
import uuid
from ..main import app
from .tasks import compute_vectorization
from .lib.utils import delete_directory
from ..shared import routes as shared_routes
from ..shared.utils.fileutils import delete_path, clear_dir
from .const import (
IMG_PATH, VEC_RESULTS_PATH
)
from ..shared.utils.logging import console
blueprint = Blueprint("vectorization", __name__, url_prefix="/vectorization")
@blueprint.route("start", methods=["POST"])
@shared_routes.get_client_id
@shared_routes.error_wrapper
def start_vectorization(client_id):
"""
{ "doc_id":"wit17_img17_anno17"
"model":"0036"
"callback": "https://domain-name.com/receive-vecto"
"images":
{
"img_name": "https://domain-name.com/image_name.jpg",
"img_name": "https://other-domain.com/image_name.jpg",
"img_name": "https://iiif-server.com/.../coordinates/size/rotation/default.jpg",
"img_name": "..."
}
}
A list of images to download + informations
"""
if not request.is_json:
return "No JSON in request: Vectorization task aborted!"
json_param = request.get_json()
console(json_param, color="cyan")
experiment_id = json_param.get("experiment_id")
documents = json_param.get("documents", {})
model = json_param.get("model", None)
notify_url = json_param.get("callback", None)
tracking_url = json_param.get("tracking_url")
return shared_routes.start_task(
compute_vectorization,
experiment_id,
{
"documents": documents,
"model": model,
"notify_url": notify_url,
"tracking_url": tracking_url,
},
)
@blueprint.route("<tracking_id>/cancel", methods=["POST"])
def cancel_vectorization(tracking_id: str):
return shared_routes.cancel_task(tracking_id)
@blueprint.route("<tracking_id>/status", methods=["GET"])
def status_vectorization(tracking_id: str):
return shared_routes.status(tracking_id, compute_vectorization)
@blueprint.route("qsizes", methods=["GET"])
def qsizes_similarity():
"""
List the queues of the broker and the number of tasks in each queue
"""
return shared_routes.qsizes(compute_vectorization.broker)
@blueprint.route("monitor", methods=["GET"])
def monitor_similarity():
return shared_routes.monitor(VEC_RESULTS_PATH, compute_vectorization.broker)
@blueprint.route("delete_and_relaunch", methods=["POST"])
@shared_routes.get_client_id
@shared_routes.error_wrapper
def delete_and_relaunch(client_id):
if not request.is_json:
return "No JSON in request: Vectorization task aborted!"
data = request.get_json()
console(data, color="cyan")
experiment_id = slugify(request.form.get("experiment_id", str(uuid.uuid4())))
# dict of document ids with a URL containing a list of images
dataset = data.get("images", {})
# which url to send back the similarity results and updates on the task
notify_url = data.get("callback", None)
doc_id = data.get("doc_id", None)
model = data.get("model", None)
cleared_img_dir = delete_directory(doc_id)
if cleared_img_dir:
start_response = shared_routes.start_task(
compute_vectorization,
experiment_id,
{
"dataset": dataset,
"notify_url": notify_url,
"doc_id": doc_id,
"model" : model
},
)
return jsonify({
"cleared_img_dir": 1,
"start_vectorization": start_response
})
else:
return jsonify({
"cleared_img_dir": 0,
"start_vectorization": "Directory deletion failed, vectorization not started."
})