Beispiel #1
0
            def echo_lines(self, req, resp):
                f = req.environ['wsgi.input']

                output = []
                while True:
                    line = f.readline().decode("ISO-8859-1")
                    if not line:
                        break
                    output.append(line)

                if hasattr(f, 'read_trailer_lines'):
                    for line in f.read_trailer_lines():
                        k, v = line.split(ntob(":"), 1)
                        k = tonative(k.strip())
                        v = tonative(v.strip())
                        resp.headers[k] = v

                return output
Beispiel #2
0
            def echo_lines(self, req, resp):
                f = req.environ['wsgi.input']

                output = []
                while True:
                    line = f.readline().decode("ISO-8859-1")
                    if not line:
                        break
                    output.append(line)

                if hasattr(f, 'read_trailer_lines'):
                    for line in f.read_trailer_lines():
                        k, v = line.split(ntob(":"), 1)
                        k = tonative(k.strip())
                        v = tonative(v.strip())
                        resp.headers[k] = v

                return output
Beispiel #3
0
    def get_environ(self):
        """Return a new environ dict targeting the given wsgi.version"""
        req = self.req
        env = {
            # set a non-standard environ entry so the WSGI app can know what
            # the *real* server protocol is (and what features to support).
            # See http://www.faqs.org/rfcs/rfc2145.html.
            'ACTUAL_SERVER_PROTOCOL': req.server.protocol,
            'PATH_INFO': tonative(req.path),
            'QUERY_STRING': tonative(req.qs),
            'REMOTE_ADDR': req.conn.remote_addr or '',
            'REMOTE_PORT': str(req.conn.remote_port or ''),
            'REQUEST_METHOD': tonative(req.method),
            'REQUEST_URI': req.uri,
            'SCRIPT_NAME': '',
            'SERVER_NAME': req.server.server_name,
            # Bah. "SERVER_PROTOCOL" is actually the REQUEST protocol.
            'SERVER_PROTOCOL': tonative(req.request_protocol),
            'SERVER_SOFTWARE': req.server.software,
            'wsgi.errors': sys.stderr,
            'wsgi.input': req.rfile,
            'wsgi.multiprocess': False,
            'wsgi.multithread': True,
            'wsgi.run_once': False,
            'wsgi.url_scheme': tonative(req.scheme),
            'wsgi.version': (1, 0),
        }

        if isinstance(req.server.bind_addr, basestring):
            # AF_UNIX. This isn't really allowed by WSGI, which doesn't
            # address unix domain sockets. But it's better than nothing.
            env["SERVER_PORT"] = ""
        else:
            env["SERVER_PORT"] = str(req.server.bind_addr[1])

        # Request headers
        for k, v in req.inheaders.items():
            k = tonative(k).upper().replace("-", "_")
            env["HTTP_" + k] = tonative(v)

        # CONTENT_TYPE/CONTENT_LENGTH
        ct = env.pop("HTTP_CONTENT_TYPE", None)
        if ct is not None:
            env["CONTENT_TYPE"] = ct
        cl = env.pop("HTTP_CONTENT_LENGTH", None)
        if cl is not None:
            env["CONTENT_LENGTH"] = cl

        if req.conn.ssl_env:
            env.update(req.conn.ssl_env)

        return env
Beispiel #4
0
 def get_environ(self):
     """Return a new environ dict targeting the given wsgi.version"""
     req = self.req
     env = {
         # set a non-standard environ entry so the WSGI app can know what
         # the *real* server protocol is (and what features to support).
         # See http://www.faqs.org/rfcs/rfc2145.html.
         'ACTUAL_SERVER_PROTOCOL': req.server.protocol,
         'PATH_INFO': tonative(req.path),
         'QUERY_STRING': tonative(req.qs),
         'REMOTE_ADDR': req.conn.remote_addr or '',
         'REMOTE_PORT': str(req.conn.remote_port or ''),
         'REQUEST_METHOD': tonative(req.method),
         'REQUEST_URI': req.uri,
         'SCRIPT_NAME': '',
         'SERVER_NAME': req.server.server_name,
         # Bah. "SERVER_PROTOCOL" is actually the REQUEST protocol.
         'SERVER_PROTOCOL': tonative(req.request_protocol),
         'SERVER_SOFTWARE': req.server.software,
         'wsgi.errors': sys.stderr,
         'wsgi.input': req.rfile,
         'wsgi.multiprocess': False,
         'wsgi.multithread': True,
         'wsgi.run_once': False,
         'wsgi.url_scheme': tonative(req.scheme),
         'wsgi.version': (1, 0),
         }
     
     if isinstance(req.server.bind_addr, basestring):
         # AF_UNIX. This isn't really allowed by WSGI, which doesn't
         # address unix domain sockets. But it's better than nothing.
         env["SERVER_PORT"] = ""
     else:
         env["SERVER_PORT"] = str(req.server.bind_addr[1])
     
     # Request headers
     for k, v in req.inheaders.items():
         k = tonative(k).upper().replace("-", "_")
         env["HTTP_" + k] = tonative(v)
     
     # CONTENT_TYPE/CONTENT_LENGTH
     ct = env.pop("HTTP_CONTENT_TYPE", None)
     if ct is not None:
         env["CONTENT_TYPE"] = ct
     cl = env.pop("HTTP_CONTENT_LENGTH", None)
     if cl is not None:
         env["CONTENT_LENGTH"] = cl
     
     if req.conn.ssl_env:
         env.update(req.conn.ssl_env)
     
     return env