-
Notifications
You must be signed in to change notification settings - Fork 111
/
Copy pathserver.py
137 lines (97 loc) · 2.93 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
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
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import json
from flask import Flask
from flask import render_template
from flask import request
from multiprocessing import Process
from copy import deepcopy
MSG = None
app = Flask(__name__)
MSG_INVALID_REQUEST = {'status': 'error', 'errmsg': 'invalid request'}
@app.route('/')
def index():
return render_template('index.html')
@app.route('/task', methods=['POST'])
def add_task():
payload = request.get_json()
MSG.put('create', payload)
return json.dumps(MSG.get())
@app.route('/task/list', methods=['GET'])
def list_task():
payload = {}
exerpt = request.args.get('exerpt', None)
if exerpt is None:
payload['exerpt'] = False
else:
payload['exerpt'] = True
payload['state'] = request.args.get('state', 'all')
MSG.put('list', payload)
return json.dumps(MSG.get())
@app.route('/task/state_counter', methods=['GET'])
def list_state():
MSG.put('state', None)
return json.dumps(MSG.get())
@app.route('/task/batch/<action>', methods=['POST'])
def task_batch(action):
payload={'act': action, 'detail': request.get_json()}
MSG.put('batch', payload)
return json.dumps(MSG.get())
@app.route('/task/tid/<tid>', methods=['DELETE'])
def delete_task(tid):
del_flag = request.args.get('del_file', False)
payload = {}
payload['tid'] = tid
payload['del_file'] = False if del_flag is False else True
MSG.put('delete', payload)
return json.dumps(MSG.get())
@app.route('/task/tid/<tid>', methods=['PUT'])
def manipulate_task(tid):
payload = {}
payload['tid'] = tid
act = request.args.get('act', None)
if act == 'pause':
payload['act'] = 'pause'
elif act == 'resume':
payload['act'] = 'resume'
else:
return json.dumps(MSG_INVALID_REQUEST)
MSG.put('manipulate', payload)
return json.dumps(MSG.get())
@app.route('/task/tid/<tid>/status', methods=['GET'])
def query_task(tid):
payload = {}
payload['tid'] = tid
exerpt = request.args.get('exerpt', None)
if exerpt is None:
payload['exerpt'] = False
else:
payload['exerpt'] = True
MSG.put('query', payload)
return json.dumps(MSG.get())
@app.route('/config', methods=['GET', 'POST'])
def get_config():
payload = {}
if request.method == 'POST':
payload['act'] = 'update'
payload['param'] = request.get_json()
else:
payload['act'] = 'get'
MSG.put('config', payload)
return json.dumps(MSG.get())
###
# test cases
###
@app.route('/test/<case>')
def test(case):
return render_template('test/{}.html'.format(case))
class Server(Process):
def __init__(self, msg_cli, host, port):
super(Server, self).__init__()
self.msg_cli = msg_cli
self.host = host
self.port = port
def run(self):
global MSG
MSG = self.msg_cli
app.run(host=self.host, port=int(self.port), use_reloader=False)