-
Notifications
You must be signed in to change notification settings - Fork 0
/
app.py
137 lines (117 loc) · 4.1 KB
/
app.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
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
# coding=utf-8
import threading
import requests
import logging
from flask import Flask, request, render_template, Response, json, jsonify, flash, redirect, abort, url_for
from flask_login import LoginManager, login_required, login_user, logout_user
from flask_login import login_manager
from login import User, is_safe_url
log = logging.getLogger('werkzeug')
log.setLevel(logging.INFO)
# api_server = 'http://labpc:8080/api/'
api_server = 'http://13.250.36.18:8080/api/'
app = Flask(__name__, template_folder='site/templates', static_folder='site/static')
# static_path=None, static_url_path=None, static_folder=’static’, template_folder=’templates’, instance_path=None, instance_relative_config=False, root_path=None
# app.config['JSONIFY_PRETTYPRINT_REGULAR'] = False
# flask-login
app.secret_key = 'app_secret_key_bi12$*(!aAa^jf1'
login_manager = LoginManager()
login_manager.init_app(app)
login_manager.login_view = "/login.html"
# login_manager.login_message = u"Bonvolu ensaluti por uzi tiun paĝon."
# login_manager.login_message_category = "info"
def start_server(port=3000):
app.run(host='', port=port, threaded=True, debug=True)
# @app.route('/<string:page_name>/')
# def static_page(page_name):
# return app.send_static_file('../templates/index.html')
# return render_template('%s.html' % page_name)
@app.route('/')
@app.route('/index')
@app.route('/index.html')
@login_required
def index():
return render_template('index.html')
@app.route('/rule.html', methods = ['GET'])
@login_required
def rule_page():
rules = requests.get(api_server+'rules', timeout=2).text
return render_template('rule.html', rules=rules)
@app.route('/config.html', methods = ['GET'])
@login_required
def config_page():
return render_template('config.html')
@app.route('/login.html', methods = ['GET'])
def login_page():
return render_template('login.html')
@app.route('/login', methods=['POST'])
def login():
email = request.form['email']
passwd = request.form['password']
print(email, passwd)
if email == User.admin_email and passwd == User.admin_passwd:
user = User(email)
login_user(user)
flash('Logged in successfully.')
next = request.args.get('next')
# is_safe_url should check if the url is safe for redirects.
# See http://flask.pocoo.org/snippets/62/ for an example.
if not is_safe_url(next):
return abort(400)
return redirect(next or url_for('index'))
errmsg = "email or password is wrong!"
return render_template('login.html', email=email, msg=errmsg)
@app.route("/logout")
@login_required
def logout():
logout_user()
flash("Bye~")
return redirect("/index.html")
@app.route('/state', methods = ['GET'])
@login_required
def get_state():
# data = requests.get(api_server+'state').json()
# data = {'data' : app.context.report()}
data = {'data' : ''}
# js = json.dumps(data, indent=4)
# resp = Response(js, status=200, mimetype='application/json')
resp = jsonify(data)
resp.headers['Access-Control-Allow-Origin'] = '*'
return resp
@app.route('/stocks', methods = ['POST'])
@login_required
def create_stock():
name = request.form['name']
code = request.form['code']
price = request.form['price']
shares = request.form['shares']
print(name, code, price, shares)
return "ok"
@app.route('/rules', methods = ['POST'])
@login_required
def create_rules():
rule_json = request.data
res = requests.post(api_server+"rules", data={"ruleJson":rule_json})
if res.status_code == 200:
return "ok"
return "error"
@app.route('/task/<name>/<action>', methods = ['PUT'])
@login_required
def take_action(name, action):
resp = jsonify(name + action)
# app.monitor.stop_task()
task = app.context.get_task(name)
code = task.stop()
resp = jsonify(code)
return resp
@login_manager.user_loader
def load_user(user_id):
if user_id == User.admin_email:
return User(User.admin_email)
return None
# @login_manager.unauthorized_handler
# def unauthorized():
# # do stuff
# return a_response
if __name__ == "__main__":
start_server(3000)