示例#1
0
def _handle_request(app, conn):
    env = DEFAULT_ENVIRON.copy()
    rawheaders = netstring.decode_stream(conn)
    it = iter(rawheaders.split(b"\0"))
    for key in it:
        if not key:
            break
        value = next(it)
        env[key.decode("latin1")] = value.decode("latin1")
    env['CONTENT_LENGTH'] = int(env["CONTENT_LENGTH"])
    env['wsgi.input'] = conn.makefile("rb", 32758)
    env['wsgi.errors'] = Logger(env["SCRIPT_NAME"], "LOCAL7")
    if env.get('HTTPS', 'off') in ('on', '1'):
        env['wsgi.url_scheme'] = 'https'
    else:
        env['wsgi.url_scheme'] = 'http'

    def start_response(status, headers, exc_info=None):
        if exc_info is not None:
            try:
                raise exc_info[0](exc_info[1]).with_traceback(exc_info[2])
            finally:
                exc_info = None
        conn.sendall("Status: {}\r\n".format(status).encode("ascii"))
        for h, v in headers:
            conn.sendall("{}: {}\r\n".format(h, v).encode("ascii"))
        conn.sendall(CRLF)

    if env["REQUEST_METHOD"] == "HEAD":
        app(env, start_response)
    else:
        for chunk in app(env, start_response):
            conn.sendall(chunk)  # app encodes the return
    env['wsgi.input'].close()
示例#2
0
文件: scgi.py 项目: kdart/pycopia3
def _handle_request(app, conn):
    env = DEFAULT_ENVIRON.copy()
    rawheaders = netstring.decode_stream(conn)
    it = iter(rawheaders.split(b"\0"))
    for key in it:
        if not key:
            break
        value = next(it)
        env[key.decode("latin1")] = value.decode("latin1")
    env['CONTENT_LENGTH'] = int(env["CONTENT_LENGTH"])
    env['wsgi.input'] = conn.makefile("rb", 32758)
    env['wsgi.errors'] = Logger(env["SCRIPT_NAME"], "LOCAL7")
    if env.get('HTTPS', 'off') in ('on', '1'):
        env['wsgi.url_scheme'] = 'https'
    else:
        env['wsgi.url_scheme'] = 'http'

    def start_response(status, headers, exc_info=None):
        if exc_info is not None:
            try:
                raise exc_info[0](exc_info[1]).with_traceback(exc_info[2])
            finally:
                exc_info = None
        conn.sendall("Status: {}\r\n".format(status).encode("ascii"))
        for h, v in headers:
            conn.sendall("{}: {}\r\n".format(h, v).encode("ascii"))
        conn.sendall(CRLF)

    if env["REQUEST_METHOD"] == "HEAD":
        app(env, start_response)
    else:
        for chunk in app(env, start_response):
            conn.sendall(chunk)  # app encodes the return
    env['wsgi.input'].close()
示例#3
0
def _netstring_listener(path, q):
    os.unlink(path) if os.path.exists(path) else None
    sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM, 0)
    sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
    sock.bind(path)
    sock.listen(5)
    news, addr = sock.accept()
    db = netstring.decode_stream(news)
    sock.close()
    q.put(db)
示例#4
0
文件: test.py 项目: kdart/pycopia3
def _netstring_listener(path, q):
    os.unlink(path) if os.path.exists(path) else None
    sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM, 0)
    sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
    sock.bind(path)
    sock.listen(5)
    news, addr = sock.accept()
    db = netstring.decode_stream(news)
    sock.close()
    q.put(db)