#!/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()