Ejemplo n.º 1
0
    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)
Ejemplo n.º 2
0
    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)
Ejemplo n.º 3
0
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)
Ejemplo n.º 4
0
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)
Ejemplo n.º 5
0
 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)]
Ejemplo n.º 6
0
 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)]
Ejemplo n.º 7
0
    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"]
Ejemplo n.º 8
0
    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)
Ejemplo n.º 9
0
    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)
Ejemplo n.º 10
0
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()
Ejemplo n.º 11
0
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()
Ejemplo n.º 12
0
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)
Ejemplo n.º 13
0
    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()
Ejemplo n.º 14
0
    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()