8 |
8 |
9 import socket, cgi, errno |
9 import socket, cgi, errno |
10 from mercurial.i18n import gettext as _ |
10 from mercurial.i18n import gettext as _ |
11 from common import ErrorResponse, statusmessage |
11 from common import ErrorResponse, statusmessage |
12 |
12 |
13 class wsgiapplication(object): |
13 class wsgirequest(object): |
14 def __init__(self, destmaker): |
14 def __init__(self, wsgienv, start_response): |
15 self.destmaker = destmaker |
|
16 |
|
17 def __call__(self, wsgienv, start_response): |
|
18 return _wsgirequest(self.destmaker(), wsgienv, start_response) |
|
19 |
|
20 class _wsgirequest(object): |
|
21 def __init__(self, destination, wsgienv, start_response): |
|
22 version = wsgienv['wsgi.version'] |
15 version = wsgienv['wsgi.version'] |
23 if (version < (1, 0)) or (version >= (2, 0)): |
16 if (version < (1, 0)) or (version >= (2, 0)): |
24 raise RuntimeError("Unknown and unsupported WSGI version %d.%d" |
17 raise RuntimeError("Unknown and unsupported WSGI version %d.%d" |
25 % version) |
18 % version) |
26 self.inp = wsgienv['wsgi.input'] |
19 self.inp = wsgienv['wsgi.input'] |
31 self.run_once = wsgienv['wsgi.run_once'] |
24 self.run_once = wsgienv['wsgi.run_once'] |
32 self.env = wsgienv |
25 self.env = wsgienv |
33 self.form = cgi.parse(self.inp, self.env, keep_blank_values=1) |
26 self.form = cgi.parse(self.inp, self.env, keep_blank_values=1) |
34 self.start_response = start_response |
27 self.start_response = start_response |
35 self.headers = [] |
28 self.headers = [] |
36 destination.run_wsgi(self) |
|
37 |
29 |
38 out = property(lambda self: self) |
30 out = property(lambda self: self) |
39 |
31 |
40 def __iter__(self): |
32 def __iter__(self): |
41 return iter([]) |
33 return iter([]) |
90 headers.append(('Content-disposition', 'attachment; filename=%s' % |
82 headers.append(('Content-disposition', 'attachment; filename=%s' % |
91 filename)) |
83 filename)) |
92 if length: |
84 if length: |
93 headers.append(('Content-length', str(length))) |
85 headers.append(('Content-length', str(length))) |
94 self.header(headers) |
86 self.header(headers) |
|
87 |
|
88 def wsgiapplication(app_maker): |
|
89 application = app_maker() |
|
90 def run_wsgi(env, respond): |
|
91 application(env, respond) |
|
92 return run_wsgi |