14 self.destmaker = destmaker |
14 self.destmaker = destmaker |
15 |
15 |
16 def __call__(self, wsgienv, start_response): |
16 def __call__(self, wsgienv, start_response): |
17 return _wsgirequest(self.destmaker(), wsgienv, start_response) |
17 return _wsgirequest(self.destmaker(), wsgienv, start_response) |
18 |
18 |
19 class _wsgioutputfile(object): |
|
20 def __init__(self, request): |
|
21 self.request = request |
|
22 |
|
23 def write(self, data): |
|
24 self.request.write(data) |
|
25 def writelines(self, lines): |
|
26 for line in lines: |
|
27 self.write(line) |
|
28 def flush(self): |
|
29 return None |
|
30 def close(self): |
|
31 return None |
|
32 |
|
33 class _wsgirequest(object): |
19 class _wsgirequest(object): |
34 def __init__(self, destination, wsgienv, start_response): |
20 def __init__(self, destination, wsgienv, start_response): |
35 version = wsgienv['wsgi.version'] |
21 version = wsgienv['wsgi.version'] |
36 if (version < (1, 0)) or (version >= (2, 0)): |
22 if (version < (1, 0)) or (version >= (2, 0)): |
37 raise RuntimeError("Unknown and unsupported WSGI version %d.%d" \ |
23 raise RuntimeError("Unknown and unsupported WSGI version %d.%d" \ |
38 % version) |
24 % version) |
39 self.inp = wsgienv['wsgi.input'] |
25 self.inp = wsgienv['wsgi.input'] |
40 self.out = _wsgioutputfile(self) |
|
41 self.server_write = None |
26 self.server_write = None |
42 self.err = wsgienv['wsgi.errors'] |
27 self.err = wsgienv['wsgi.errors'] |
43 self.threaded = wsgienv['wsgi.multithread'] |
28 self.threaded = wsgienv['wsgi.multithread'] |
44 self.multiprocess = wsgienv['wsgi.multiprocess'] |
29 self.multiprocess = wsgienv['wsgi.multiprocess'] |
45 self.run_once = wsgienv['wsgi.run_once'] |
30 self.run_once = wsgienv['wsgi.run_once'] |
46 self.env = wsgienv |
31 self.env = wsgienv |
47 self.form = cgi.parse(self.inp, self.env, keep_blank_values=1) |
32 self.form = cgi.parse(self.inp, self.env, keep_blank_values=1) |
48 self.start_response = start_response |
33 self.start_response = start_response |
49 self.headers = [] |
34 self.headers = [] |
50 destination.run_wsgi(self) |
35 destination.run_wsgi(self) |
|
36 |
|
37 out = property(lambda self: self) |
51 |
38 |
52 def __iter__(self): |
39 def __iter__(self): |
53 return iter([]) |
40 return iter([]) |
54 |
41 |
55 def read(self, count=-1): |
42 def read(self, count=-1): |
73 self.server_write(thing) |
60 self.server_write(thing) |
74 except socket.error, inst: |
61 except socket.error, inst: |
75 if inst[0] != errno.ECONNRESET: |
62 if inst[0] != errno.ECONNRESET: |
76 raise |
63 raise |
77 |
64 |
|
65 def writelines(self, lines): |
|
66 for line in lines: |
|
67 self.write(line) |
|
68 |
|
69 def flush(self): |
|
70 return None |
|
71 |
|
72 def close(self): |
|
73 return None |
|
74 |
78 def header(self, headers=[('Content-type','text/html')]): |
75 def header(self, headers=[('Content-type','text/html')]): |
79 self.headers.extend(headers) |
76 self.headers.extend(headers) |
80 |
77 |
81 def httphdr(self, type, filename=None, length=0, headers={}): |
78 def httphdr(self, type, filename=None, length=0, headers={}): |
82 headers = headers.items() |
79 headers = headers.items() |