1
# -*- coding: iso-8859-1 -*-
3
MoinMoin - CGI Request Implementation for std. CGI web servers
4
like Apache or IIS or others.
6
@copyright: 2001-2003 by Juergen Hermann <jh@web.de>,
7
2003-2006 MoinMoin:ThomasWaldmann
8
@license: GNU GPL, see COPYING for details.
12
from MoinMoin import log
13
logging = log.getLogger(__name__)
15
from MoinMoin.request import RequestBase, RemoteClosedConnection
17
class Request(RequestBase):
18
""" specialized on CGI requests """
20
def __init__(self, properties={}):
22
# force input/output to binary
23
if sys.platform == "win32":
25
msvcrt.setmode(sys.stdin.fileno(), os.O_BINARY)
26
msvcrt.setmode(sys.stdout.fileno(), os.O_BINARY)
28
self._setup_vars_from_std_env(os.environ)
29
RequestBase.__init__(self, properties)
31
except Exception, err:
34
def _setup_args_from_cgi_form(self):
35
""" Override to create cgi form """
36
form = cgi.FieldStorage(keep_blank_values=1)
37
return RequestBase._setup_args_from_cgi_form(self, form)
40
""" Read from input stream. """
42
logging.warning("calling request.read(None) might block")
43
return sys.stdin.read()
45
return sys.stdin.read(n)
47
def write(self, *data):
48
""" Write to output stream. """
49
data = self.encode(data)
51
sys.stdout.write(data)
53
raise RemoteClosedConnection()
59
RequestBase.finish(self)
60
# flush the output, ignore errors caused by the user closing the socket
65
if ex.errno != errno.EPIPE:
68
def _emit_http_headers(self, headers):
69
""" private method to send out preprocessed list of HTTP headers """
70
for header in headers:
71
self.write("%s\r\n" % header)