def gen_cgi(self): try: self._proto.unpackReq(self._field) interfaceName = self._proto.req["interfaceName"] intent = interfaceName.split("."); if len(intent) != 2: raise InterErr(InterErr.E_INVALID_PARA, "interfaceName[%s] is invalid" % interfaceName) intent[0] = intent[0].strip() intent[1] = intent[1].strip() str_module = "worker.%s.%s" % (intent[0], intent[1]) module = __import__(str_module, fromlist=[""]) if not hasattr(module, intent[1]): raise InterErr(InterErr.E_NO_INTERFACE, "no that interfaceName[%s]" % intent[1]) inter_obj = getattr(module, intent[1])(self._proto) return inter_obj except ImportError, e: Log.error(traceback.format_exc()) e = InterErr(InterErr.E_INVALID_PARA, "invalid interfaceName") return CgiBase(self._proto, exception=e)
def gen_cgi(self): try: self._proto.unpackReq(self._field) interfaceName = self._proto.req["interfaceName"] intent = interfaceName.split(".") if len(intent) != 2: raise InterErr(InterErr.E_INVALID_PARA, "interfaceName[%s] is invalid" % interfaceName) intent[0] = intent[0].strip() intent[1] = intent[1].strip() str_module = "worker.%s.%s" % (intent[0], intent[1]) module = __import__(str_module, fromlist=[""]) if not hasattr(module, intent[1]): raise InterErr(InterErr.E_NO_INTERFACE, "no that interfaceName[%s]" % intent[1]) inter_obj = getattr(module, intent[1])(self._proto) return inter_obj except ImportError, e: Log.error(traceback.format_exc()) e = InterErr(InterErr.E_INVALID_PARA, "invalid interfaceName") return CgiBase(self._proto, exception=e)
def init_env(): """设置运行环境""" # 默认编码 reload(sys) sys.setdefaultencoding("utf8") # 配置文件 this_path = os.path.split(os.path.realpath(__file__))[0] Log.init(iniPath="%s/config" % this_path)
def init_env(): """设置运行环境""" #默认编码 reload(sys) sys.setdefaultencoding('utf8') #配置文件 this_path = os.path.split(os.path.realpath(__file__))[0] Log.init(iniPath="%s/config" % this_path)
def reply(self, reply_header): reply_header(self._status, self._header) try: reply_data = self._proto.packRsp() if isinstance(reply_data, basestring): return [reply_data] else: return reply_data except Exception, e: Log.error(traceback.format_exc()) return [str(e)]
def unpackReq(self, field): raw_req = field.get_request() Log.info("query string: %s" %(str(raw_req))) try: json_req = json.loads(raw_req) except: raise InterErr(InterErr.E_PARAM_ERR, "input is not a json") check_param = {"interfaceName":[basestring, utils.isNotEmpty], "data":[dict]} utils.check_dict_data(json_req, check_param) self.req["interfaceName"] = json_req["interfaceName"] self.req["data"] = json_req["data"]
def process(self): """这才是处理的主方法,也可以改写~~~""" #纯粹的错误处理 if self._exception != None: self.error(self._exception) return try: self.check_data() self.do_process() except Exception, e: Log.error(traceback.format_exc()) self.error(e)
def application(environ, start_response): Log.update_id() # 保证每次请求的id都不同 if "REMOTE_ADDR" in environ: Log.info("request from %s" % (str(environ["REMOTE_ADDR"]))) field = None if "wsgi.input" in environ: # wsgi field = RequestFieldStorage(fp=environ["wsgi.input"], environ=environ) else: # 普通cgi field = RequestFieldStorage(environ=environ) try: cgi = CgiFactory(field).gen_cgi() cgi.process() ret = cgi.reply(start_response) except Exception, e: process_header("200", [("Content-Type", "text/plain")]) ret = traceback.format_exc()
def application(environ, start_response): Log.update_id() #保证每次请求的id都不同 if "REMOTE_ADDR" in environ: Log.info("request from %s" %(str(environ["REMOTE_ADDR"]))) field = None if "wsgi.input" in environ: #wsgi field = RequestFieldStorage(fp=environ['wsgi.input'], environ=environ) else: #普通cgi field = RequestFieldStorage(environ=environ) try: cgi = CgiFactory(field).gen_cgi() cgi.process() ret = cgi.reply(start_response) except Exception, e: process_header("200", [('Content-Type', 'text/plain')]) ret = traceback.format_exc()
class CgiFactory(object): """cgi 工厂,用于生成各种cgi""" def __init__(self, field): self._field = field self._proto = Protocol() def gen_error_cgi(self, errno, errmsg): """产生一个错误处理的cgi""" cgi = CgiBase(self._proto) cgi.gen_json_reply(errno, errmsg) return cgi def gen_cgi(self): try: self._proto.unpackReq(self._field) interfaceName = self._proto.req["interfaceName"] intent = interfaceName.split(".") if len(intent) != 2: raise InterErr(InterErr.E_INVALID_PARA, "interfaceName[%s] is invalid" % interfaceName) intent[0] = intent[0].strip() intent[1] = intent[1].strip() str_module = "worker.%s.%s" % (intent[0], intent[1]) module = __import__(str_module, fromlist=[""]) if not hasattr(module, intent[1]): raise InterErr(InterErr.E_NO_INTERFACE, "no that interfaceName[%s]" % intent[1]) inter_obj = getattr(module, intent[1])(self._proto) return inter_obj except ImportError, e: Log.error(traceback.format_exc()) e = InterErr(InterErr.E_INVALID_PARA, "invalid interfaceName") return CgiBase(self._proto, exception=e) except Exception, e: Log.error(traceback.format_exc()) return CgiBase(self._proto, exception=e)
if "REMOTE_ADDR" in environ: Log.info("request from %s" % (str(environ["REMOTE_ADDR"]))) field = None if "wsgi.input" in environ: # wsgi field = RequestFieldStorage(fp=environ["wsgi.input"], environ=environ) else: # 普通cgi field = RequestFieldStorage(environ=environ) try: cgi = CgiFactory(field).gen_cgi() cgi.process() ret = cgi.reply(start_response) except Exception, e: process_header("200", [("Content-Type", "text/plain")]) ret = traceback.format_exc() if "REMOTE_ADDR" in environ: Log.info("response to %s: %s" % (str(environ["REMOTE_ADDR"]), str(ret))) return ret if __name__ == "__main__": import os ret = application(os.environ, process_header) for item in ret: sys.stdout.write(item) sys.stdout.flush()
Log.update_id() #保证每次请求的id都不同 if "REMOTE_ADDR" in environ: Log.info("request from %s" %(str(environ["REMOTE_ADDR"]))) field = None if "wsgi.input" in environ: #wsgi field = RequestFieldStorage(fp=environ['wsgi.input'], environ=environ) else: #普通cgi field = RequestFieldStorage(environ=environ) try: cgi = CgiFactory(field).gen_cgi() cgi.process() ret = cgi.reply(start_response) except Exception, e: process_header("200", [('Content-Type', 'text/plain')]) ret = traceback.format_exc() if "REMOTE_ADDR" in environ: Log.info("response to %s: %s" %(str(environ["REMOTE_ADDR"]), str(ret))) return ret if __name__ == "__main__": import os ret = application(os.environ, process_header) for item in ret: sys.stdout.write(item) sys.stdout.flush()