diff options
author | Richard <q@1bpm.net> | 2025-04-13 18:48:02 +0100 |
---|---|---|
committer | Richard <q@1bpm.net> | 2025-04-13 18:48:02 +0100 |
commit | 9fbf91db06a6d4f4b5cd8bb45389a731bb86bf22 (patch) | |
tree | 291bd79ce340e67affa755a8a6b4f6a83cce93ea /site/service/request.py | |
download | apps.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-x | site/service/request.py | 106 |
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() |