-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMarsyasServer.py
executable file
·104 lines (88 loc) · 3.15 KB
/
MarsyasServer.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
102
103
104
#!/usr/bin/env python
from marsyas import *
from marsyas_util import *
import os
from flask import Flask, render_template, request, redirect, url_for, session
import yaml
import importlib
def toBool(s):
return s == "True"
app = Flask(__name__)
app.debug = True
app.secret_key = os.environ['KEY']
global_net = "1" #sessions do not support the storage of objects, thus resort to use global variables in a server instance
@app.route("/InitNet", methods=['POST'])
def InitNet():
try:
netSpec = yaml.safe_load(request.data)['netDef'] #Using yaml.safe_load to unpack json since it will maintain the type of the input from client rather than re-encoding itself through json.loads()
global global_net
global_net = create(netSpec)
return "Network Created"
except(error):
print error
raise 400
@app.route("/LinkCtrl", methods=['POST'])
def LinkCtrl():
try:
data = yaml.safe_load(request.data)
dest = str(data['dest'])
mrs_type = str(data['mrs_type'])
global_net.linkControl(dest, mrs_type)
return "Link Control added"
except(error):
print error
raise 400
@app.route("/UpdateCtrl", methods=['POST'])
def UpdateCtrl():
try:
data = yaml.safe_load(request.data)
dest_key = str(data['dest_key'])
dest_value = str(data['dest_value'])
global_net.updControl(dest_key, dest_value)
return "Link Control added"
except(error):
print error
raise 400
#Functions involving GetCtrl
@app.route("/FuncGetCtrl", methods=['POST'])
def FuncGetCtrl():
try:
data = yaml.safe_load(request.data)
Var = str(data['Var'])
RunMethod = str(data['RunMethod'])
MethodVar = str(data['MethodVar'])
MethodVarType = str(data['MethodVarType'])
IsReturn = toBool(data['IsReturn'])
IsTick = toBool(data['IsTick'])
#print data
#exec_method = getattr(global_net, Func) #Setting up net.getControl()
#temp = exec_method(Var) #Executing net.getControl()
temp = global_net.getControl(Var)
result = getattr(temp, RunMethod) #Setting up net.getControl().Function()
print data
print IsTick
if(IsTick):
print "TICK"
global_net.tick()
if(MethodVar != ""): #IE:/ not empty ""
module = importlib.import_module('__builtin__') #For future expansion of other types, need to change '__builtin__' to be a variable for dynamic cases
print "TYPE", MethodVarType
convert = getattr(module, MethodVarType)
MethodVar = convert(MethodVar) #Convert To the correct type
print MethodVar
result = result(MethodVar) #Run net.getControl.Function(MethodVar) || net.getControl.Function()
else:
result = result()
if(IsReturn):
return str(result)
else:
return "get control"
except:
print error
raise 400
@app.errorhandler(400)
def handle_error_networknotcreated(error):
print "NNC"
return {'message': error.message}, 400
if __name__ == "__main__":
app.run(host='0.0.0.0')