-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmain.py
More file actions
executable file
·135 lines (90 loc) · 3.18 KB
/
Copy pathmain.py
File metadata and controls
executable file
·135 lines (90 loc) · 3.18 KB
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
import os
import psutil
from datetime import datetime
from typing import Union
from flask import Flask, request, jsonify
from post import Post
# define Flask web app
app = Flask(__name__)
def run_chatterbox(post):
"""
Given the incoming POST request, construct the chatterbox command to be executed and execute it.
:param post: the incoming POST request to process
:return:
"""
if post.operation == 'SYNC':
response = post.process_sync()
return response
elif post.operation == 'ASYNC':
response = post.process_async()
return response
return post.BAD_POST_REQUEST
def parse_post_request(post_request):
print('POST request body:\n', post_request)
# instantiate Post object
post = Post(post_request, datetime.now())
response = {}
if post.request_is_valid():
# todo post.add_to_queue()
# execute chatterbox using POST request body
response = run_chatterbox(post)
return response
def process_get_request(get_request):
pass
def process_delete_request(delete_request):
pass
def is_valid_json():
return request.get_json() is not None
@app.route('/health', methods=['GET'])
def process_health_request():
process = psutil.Process(os.getpid())
response = {'healthy': 'true',
'memoryUsage': process.memory_info().rss} # in bytes
return response
@app.route('/model', methods=['GET'])
def process_model_request():
response = jsonify(['tts_models.en.ek1.tacotron2',
'tts_models.en.ljspeech.tacotron2-DDC',
'tts_models.en.ljspeech.glow-tts',
'tts_models.en.ljspeech.fast_pitch'])
return response
@app.route('/model/<id>', methods=['GET'])
def process_model_id_request():
pass
# return response
@app.route('/text', methods=['GET', 'POST'])
def process_text_request() -> Union[int, dict]:
if request.get_json() is None:
return 400 # if the request is NOT valid json then return error code 400
# if we get here we definitely received valid json
if request.method == 'POST':
response = parse_post_request(request.get_json())
elif request.method == 'GET':
# response = parse_get_request(request)
pass
return response
@app.route('/text/<id>', methods=['GET'])
def process_text_id_request():
if request.get_json() is None:
return 400 # if the request is NOT valid json then return error code 400
# if we get here we definitely received valid json
if request.method == 'DELETE':
# response = parse_delete_request(request.get_json())
pass
elif request.method == 'GET':
# response = parse_get_request(request)
pass
return None # todo - return response
# todo - how to handle dynamic request e.g. /model/{id}
def download_models():
# todo - download the supported models to avoid long waits on incoming requests.
pass
def setwd():
abspath = os.path.abspath(__file__)
dname = os.path.dirname(abspath)
os.chdir(dname)
return
if __name__ == "__main__":
setwd()
download_models()
app.run(debug=True, host='0.0.0.0', port=5000) # todo - remove debug=True