Mercurial > public > mercurial-scm > hg
comparison mercurial/hgweb/request.py @ 5566:d74fc8dec2b4
Less indirection in the WSGI web interface. This simplifies some code, and makes it more compliant with WSGI.
author | Dirkjan Ochtman <dirkjan@ochtman.nl> |
---|---|
date | Fri, 30 Nov 2007 18:23:18 +0100 |
parents | d61fea133f2d |
children | 0145f9afb0e7 |
comparison
equal
deleted
inserted
replaced
5565:feac5b0bf9ba | 5566:d74fc8dec2b4 |
---|---|
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 |