1
# -*- coding: iso-8859-1 -*-
3
MoinMoin - WSGI Request Implementation for std. WSGI web servers.
5
@copyright: 2001-2003 Juergen Hermann <jh@web.de>,
6
2003-2006 MoinMoin:ThomasWaldmann
7
@license: GNU GPL, see COPYING for details.
11
from MoinMoin import log
12
logging = log.getLogger(__name__)
14
from MoinMoin.request import RequestBase, RemoteClosedConnection
16
class Request(RequestBase):
17
""" specialized on WSGI requests """
18
def __init__(self, env):
21
self.hasContentType = False
23
self.stdin = env['wsgi.input']
24
self.stdout = StringIO.StringIO()
26
# used by MoinMoin.server.server_wsgi:
27
self.status = '200 OK'
31
self._send_file = None
32
self._send_bufsize = None
34
self._setup_vars_from_std_env(env)
35
RequestBase.__init__(self, {})
37
except Exception, err:
40
def _setup_args_from_cgi_form(self):
41
""" Override to create cgi form """
42
form = cgi.FieldStorage(fp=self.stdin, environ=self.env, keep_blank_values=1)
43
return RequestBase._setup_args_from_cgi_form(self, form)
47
logging.warning("calling request.read(None) might block")
48
return self.stdin.read()
50
return self.stdin.read(n)
52
def send_file(self, fileobj, bufsize=8192, do_flush=None):
53
# For now, we just remember fileobj and bufsize for sending it later:
54
self._send_file = fileobj
55
self._send_bufsize = bufsize
57
def write(self, *data):
58
data = self.encode(data)
60
self.stdout.write(data)
62
raise RemoteClosedConnection()
64
def _emit_http_headers(self, headers):
65
""" private method to send out preprocessed list of HTTP headers """
66
st_header, other_headers = headers[0], headers[1:]
67
self.status = st_header.split(':', 1)[1].lstrip()
68
for header in other_headers:
69
key, value = header.split(':', 1)
70
value = value.lstrip()
71
self.headers.append((key, value))
77
# called by MoinMoin.server.server_wsgi
78
return self.stdout.getvalue()