import BaseHTTPServer, SimpleHTTPServer, cgi, traceback, json

class Server(BaseHTTPServer.HTTPServer):
        allow_reuse_address = True

class Handler(SimpleHTTPServer. SimpleHTTPRequestHandler):

    def do_POST(self):
        try:
            size = int(self.headers["Content-length"])
            msg = json.read(self.rfile.read(size))
            reply = process_json(msg)
        except:
            self.send_response(500)
            self.end_headers()
            print "Function process_json failed:"
            traceback.print_exc()
            return

        self.send_response(200)
        self.end_headers()
        self.wfile.write(json.write(reply))

    def do_GET(self):

        if '?' in self.path:
            path, query_str = self.path.split("?", 1)
            query = cgi.parse_qs(query_str)
        else:
            path = self.path
            query = {}

        try:
            mime, reply = process_get(path, query)
        except:
            self.send_response(500)
            self.end_headers()
            print >> self.wfile, "Function process_query failed:\n"
            traceback.print_exc(file=self.wfile)
            return

        self.send_response(200)
        self.send_header("mime-type", mime)
        self.end_headers()
        self.wfile.write(reply)


def process_json(msg):
    return msg

def process_get(path, query):
    return "text/plain", "Echo: path '%s' and query '%s'" %\
               (path, query)

def init_server():
    print "Server starts"

init_server()
httpd = Server(('', 9000), Handler)
httpd.serve_forever()