-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathserver.py
95 lines (74 loc) · 2.68 KB
/
server.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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
#!/usr/bin/env python
from flask import Flask, render_template, json, request, redirect, url_for, \
send_from_directory, send_file, abort
from flask_cors import CORS
from modules.runner import Runner
from modules.validator import validate_setup
from modules.logger import Logger
from modules.constants import GENERAL_CONFIG_FILE, CONFIGURATOR_NAME, \
SHOP_NAME
from modules.download import zip_result
import os
app = Flask(__name__)
CORS(app)
validate_setup(GENERAL_CONFIG_FILE, CONFIGURATOR_NAME, SHOP_NAME)
runner = Runner()
@app.route("/reload", methods=["GET"])
def reload():
if runner.is_running():
return json.dumps({ "success": False })
else:
runner.reload()
return json.dumps({ "success": True })
@app.route("/manufacturers", methods=["GET"])
def manufacturers():
return json.dumps(runner.get_manufacturers())
@app.route("/exporters", methods=["GET"])
def exporters():
return json.dumps(runner.get_exporters())
@app.route("/run", methods=["GET"])
def run():
exporter = request.args.get("exporter")
manufacturers = request.args.get("manufacturers").split(",")
error_code = runner.add_task(exporter, manufacturers)
if error_code != None:
return json.dumps({ "error": True, "code": error_code, "exporters": runner.get_exporters() })
else:
return json.dumps(runner.get_exporters());
def send_attachement(path):
try:
return send_file(path, as_attachment=True)
except FileNotFoundError:
abort(404)
@app.route("/log", methods=["GET"])
def get_log():
exporter = request.args.get("exporter")
logger = Logger()
log_path = logger.last_log_path(exporter)
return send_attachement(log_path)
@app.route("/result", methods=["GET"])
def get_result():
exporter = request.args.get("exporter")
exporter_path = runner.exporters[exporter]["module"].output_directory()
if len(os.listdir(exporter_path)) == 1:
file_path = os.path.join(exporter_path, os.listdir(exporter_path)[0])
else:
file_path = zip_result(exporter, exporter_path)
return send_attachement(file_path)
# Routes for client built with `npm run build`
@app.route("/")
def serve():
return send_from_directory("client/build/", "index.html")
@app.route("/static/js/<path:path>")
def servejs(path):
return send_from_directory("client/build/static/js/", path)
@app.route("/favicon.ico")
def servefav():
return send_from_directory("client/build/", "favicon.png")
@app.route("/static/media/<path:path>")
def servemedia(path):
return send_from_directory("client/build/static/media/", path)
if __name__ == "__main__":
app.env = "development"
app.debug = True
app.run(host="0.0.0.0", port=5000)