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