-
Notifications
You must be signed in to change notification settings - Fork 1
/
server.py
101 lines (82 loc) · 2.77 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
96
97
98
99
100
101
from flask import Flask, render_template, jsonify, request,redirect,url_for,Blueprint
app = Flask(__name__)
app.config['SECRET_KEY'] = 'secret!'
app.debug = True
# from flask_socketio import SocketIO, emit
# socketio = SocketIO(app)
import os
def workdirpath(wflowid):
return '{}/{}'.format(
os.environ.get('WORKDIRBASE',
'{}/workdirs'.format(os.getcwd())),wflowid)
def statefile(wflowid,mode = 'r'):
return open('{}/_yadage/yadage_instance.json'.format(workdirpath(wflowid)),mode)
index = Blueprint('index', 'index')
from flask.ext.autoindex import AutoIndex
AutoIndex(index, browse_root=workdirpath(''), add_url_rules = True)
app.register_blueprint(index, url_prefix='/index')
import celery
import os
import uuid
import wflowui
import json
from wflowui import backend as wflowbackend
import yadage.visualize
@app.route('/')
def index():
existing_flows = os.listdir(workdirpath(''))
return render_template('home.html', existing_flows = existing_flows)
@app.route('/startworkflow', methods = ['POST'])
def startworkflow():
wflowid = str(uuid.uuid1())
workdir = workdirpath(wflowid)
workflow = request.form['workflow']
toplevel = request.form['toplevel']
initdata = json.loads(request.form['initdata'])
wflow = wflowui.init_workflow(workdir,workflow,toplevel,initdata)
return redirect(url_for('workflow',wflowid = wflowid))
def getui(wflowid):
wflowbackend.adagebackend.app.set_current()
return wflowui.wflowui(
wflowui.load_workflow(
workdirpath(wflowid),wflowbackend
),
wflowbackend)
def save_state(ui,wflowid):
yadage.visualize.write_prov_graph(
'{}/_yadage'.format(workdirpath(wflowid)),
ui.state, vizformat = 'png'
)
json.dump(ui.state.json(),statefile(wflowid,'w'))
@app.route('/apply')
def apply_rule():
wflowid = request.args['wflowid']
ruleid = request.args['ruleid']
ui = getui(wflowid)
ui.apply_rule(ruleid)
save_state(ui,wflowid)
return redirect(url_for('workflow',wflowid = wflowid))
@app.route('/submit')
def submit_node():
wflowid = request.args['wflowid']
workdir = workdirpath(wflowid)
nodeid = request.args['nodeid']
ui = getui(wflowid)
ui.submit_node(nodeid)
save_state(ui,wflowid)
return redirect(url_for('workflow',wflowid = wflowid))
# @app.route('/workflow_json')
#
@app.route('/workflow/<wflowid>')
def workflow(wflowid):
workdir = workdirpath(wflowid)
ui = getui(wflowid)
ui.status()
return render_template('workflow.html', ui = ui, wflowid = wflowid)
# @socketio.on('hello')
# def hello(data):
# emit('world',data)
if __name__ == '__main__':
wflowbackend.adagebackend.app.set_current()
app.run(host = '0.0.0.0')
# socketio.run(app)