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
|
#!/usr/bin/python
import json
import os
import cgi
import sys
import db
class PostRequest(object):
def run(self, data):
pass
def GetRequest(object):
def run(self, data):
pass
class TextResponse(object):
def __init__(self, text):
self.text = text
def respond(self):
print "Content-Type: text/plain\r\n\r\n"
print self.text
class Response(object):
def __init__(self, data=None):
if data is None or data is True:
data = {"success": True}
elif data is False:
data = {"success": False}
elif data.get("success") is None:
data["success"] = True
self.data = data
def respond(self):
print "Content-type: text/json\r\n\r\n"
print json.dumps(self.data)
class LogError(PostRequest):
def run(self, data):
if not data.get("session_id"):
session = db.Session.create()
else:
session = db.Session.select().where(db.Session.id == data["session_id"]).get()
db.JData.create(
session=session,
category="error",
data=data["error"]
)
return Response({"session_id": session.id})
class SaveData(PostRequest):
def run(self, data):
query = db.JData.create(
session=data.get("session_id"),
category=data["category"],
data=data["data"]
)
return Response()
class GetData(PostRequest):
def run(self, data):
query = db.JData.select()
query = query.where(db.JData.id == data.id)
if not query.exists():
return Response(False)
resp = data.get()
return Response({"data": resp})
class UploadAudio(PostRequest):
def run(self, data):
return Response(False)
filename, ext = os.path.splitext(path)
if ext.lower() != ".mp3":
cmd = ["ffmpeg", "-i", path, "-acodec", "libmp3lame", "-q:a", "5", output]
def handle():
try:
method = os.environ["REQUEST_METHOD"]
if method == "POST":
data = json.loads(sys.stdin.read())
request_type = data.get("request_type")
base_class = PostRequest
elif method == "GET":
data = cgi.FieldStorage()
request_type = data.getvalue("request_type")
base_class = GetRequest
else:
raise Exception("No handler for this method")
request_types = {}
for item in base_class.__subclasses__():
request_types[item.__name__] = item
request_class = request_types.get(request_type)
if not request_class:
raise Exception("No handler for this request" + str(data))
req = request_class()
response = req.run(data)
response.respond()
except Exception, ex:
import traceback
print "Content-Type: text/json\r\n\r\n"
resp = {"success": False, "error": str(ex), "traceback": traceback.format_exc()}
print json.dumps(resp)
if __name__ == "__main__":
handle()
|