#!/usr/bin/python # -*- coding: utf-8 -*- # main (wsgi) request handler for patch-tracking system # this handler file basically farms out all its work to the ReqHandler # module, which in turn splits up the request URI and acts accordingly. import os import sys def application(env, resp): # everything is currently run relative to the pagehandler script. whereami = os.path.dirname(env['SCRIPT_FILENAME']) sys.path+=[whereami] os.chdir(whereami) import patchtracker.ReqHandler as ReqHandler try: cmdh = ReqHandler.CmdHandler(env) resp(cmdh.status, cmdh.headers) return cmdh.output() except ReqHandler.ReqHandlerException, e: resp(e.status, [('Content-Type', 'text/html')]) return ReqHandler.ErrorCmd(str(e), e.status).output() def profile_app(call): import cProfile as profile, pstats profile.run(call, "profile.out") p = pstats.Stats("profile.out") p.sort_stats('time', 'cumulative') p.print_stats() p.print_callers() p.print_callees() if __name__ == '__main__': os.environ['SCRIPT_FILENAME'] = sys.argv[0] from wsgiref import simple_server as ss import getopt def cmd_help(): print """ usage: %s [-hp] -h: help message -p: enable profiling """%(os.path.basename(sys.argv[0])) def cmdline_resp(status, headers): print "STATUS:",status print "HEADERS START" for h,v in headers: print "%s: %s"%(h,v) print opts,args = getopt.getopt(sys.argv[1:], "ho:p") profiling = False interactive_ofile = sys.stdout for o,v in opts: if o == "-h": cmd_help() sys.exit(0) if o == "-p": profiling = True if o == "-o": interactive_ofile = file(v, "w") if not args: print "pagehandler test server running..." server = ss.WSGIServer( ('',8080), ss.WSGIRequestHandler) server.set_app(application) while True: try: if not profiling: server.handle_request() else: profile_app("server.handle_request()") except IOError, e: print "adsf: ",e else: os.environ['PATH_INFO'] = args[0] if not profiling: interactive_ofile.write(application(os.environ, cmdline_resp)) else: profile_app("interactive_ofile.write(application(os.environ, cmdline_resp))")