Mercurial > public > mercurial-scm > hg
comparison mercurial/hgweb/request.py @ 5561:22713dce19f6
hgweb: return meaningful HTTP status codes instead of nonsense
author | Bryan O'Sullivan <bos@serpentine.com> |
---|---|
date | Wed, 28 Nov 2007 08:38:42 -0800 |
parents | ff7253a0d1da |
children | d61fea133f2d |
comparison
equal
deleted
inserted
replaced
5560:e78c24011001 | 5561:22713dce19f6 |
---|---|
6 # This software may be used and distributed according to the terms | 6 # This software may be used and distributed according to the terms |
7 # of the GNU General Public License, incorporated herein by reference. | 7 # of the GNU General Public License, incorporated herein by reference. |
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 | |
11 | 12 |
12 class wsgiapplication(object): | 13 class wsgiapplication(object): |
13 def __init__(self, destmaker): | 14 def __init__(self, destmaker): |
14 self.destmaker = destmaker | 15 self.destmaker = destmaker |
15 | 16 |
40 return iter([]) | 41 return iter([]) |
41 | 42 |
42 def read(self, count=-1): | 43 def read(self, count=-1): |
43 return self.inp.read(count) | 44 return self.inp.read(count) |
44 | 45 |
45 def write(self, *things): | 46 def respond(self, status, *things): |
46 for thing in things: | 47 for thing in things: |
47 if hasattr(thing, "__iter__"): | 48 if hasattr(thing, "__iter__"): |
48 for part in thing: | 49 for part in thing: |
49 self.write(part) | 50 self.respond(status, part) |
50 else: | 51 else: |
51 thing = str(thing) | 52 thing = str(thing) |
52 if self.server_write is None: | 53 if self.server_write is None: |
53 if not self.headers: | 54 if not self.headers: |
54 raise RuntimeError("request.write called before headers sent (%s)." % thing) | 55 raise RuntimeError("request.write called before headers sent (%s)." % thing) |
55 self.server_write = self.start_response('200 Script output follows', | 56 code = None |
57 if isinstance(status, ErrorResponse): | |
58 code = status.code | |
59 elif isinstance(status, int): | |
60 code = status | |
61 if code: | |
62 from httplib import responses | |
63 status = '%d %s' % ( | |
64 code, responses.get(code, 'Error')) | |
65 self.server_write = self.start_response(status, | |
56 self.headers) | 66 self.headers) |
57 self.start_response = None | 67 self.start_response = None |
58 self.headers = None | 68 self.headers = [] |
59 try: | 69 try: |
60 self.server_write(thing) | 70 self.server_write(thing) |
61 except socket.error, inst: | 71 except socket.error, inst: |
62 if inst[0] != errno.ECONNRESET: | 72 if inst[0] != errno.ECONNRESET: |
63 raise | 73 raise |
74 | |
75 def write(self, *things): | |
76 self.respond('200 Script output follows', *things) | |
64 | 77 |
65 def writelines(self, lines): | 78 def writelines(self, lines): |
66 for line in lines: | 79 for line in lines: |
67 self.write(line) | 80 self.write(line) |
68 | 81 |