aboutsummaryrefslogtreecommitdiff
path: root/site/service/request.py
diff options
context:
space:
mode:
authorRichard <q@1bpm.net>2025-04-13 18:48:02 +0100
committerRichard <q@1bpm.net>2025-04-13 18:48:02 +0100
commit9fbf91db06a6d4f4b5cd8bb45389a731bb86bf22 (patch)
tree291bd79ce340e67affa755a8a6b4f6a83cce93ea /site/service/request.py
downloadapps.csound.1bpm.net-9fbf91db06a6d4f4b5cd8bb45389a731bb86bf22.tar.gz
apps.csound.1bpm.net-9fbf91db06a6d4f4b5cd8bb45389a731bb86bf22.tar.bz2
apps.csound.1bpm.net-9fbf91db06a6d4f4b5cd8bb45389a731bb86bf22.zip
initial
Diffstat (limited to 'site/service/request.py')
-rwxr-xr-xsite/service/request.py106
1 files changed, 106 insertions, 0 deletions
diff --git a/site/service/request.py b/site/service/request.py
new file mode 100755
index 0000000..ae7d843
--- /dev/null
+++ b/site/service/request.py
@@ -0,0 +1,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()