Mercurial > public > mercurial-scm > hg
comparison mercurial/hgweb/common.py @ 5993:948a41e77902
hgweb: explicit response status
author | Dirkjan Ochtman <dirkjan@ochtman.nl> |
---|---|
date | Fri, 01 Feb 2008 10:31:13 +0100 |
parents | c301f15c965a |
children | f7f25f58693a |
comparison
equal
deleted
inserted
replaced
5992:30c40ba10963 | 5993:948a41e77902 |
---|---|
5 # | 5 # |
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 errno, mimetypes, os | 9 import errno, mimetypes, os |
10 | |
11 HTTP_OK = 200 | |
12 HTTP_BAD_REQUEST = 400 | |
13 HTTP_NOT_FOUND = 404 | |
14 HTTP_SERVER_ERROR = 500 | |
10 | 15 |
11 class ErrorResponse(Exception): | 16 class ErrorResponse(Exception): |
12 def __init__(self, code, message=None): | 17 def __init__(self, code, message=None): |
13 Exception.__init__(self) | 18 Exception.__init__(self) |
14 self.code = code | 19 self.code = code |
52 return "" | 57 return "" |
53 path = os.path.join(path, part) | 58 path = os.path.join(path, part) |
54 try: | 59 try: |
55 os.stat(path) | 60 os.stat(path) |
56 ct = mimetypes.guess_type(path)[0] or "text/plain" | 61 ct = mimetypes.guess_type(path)[0] or "text/plain" |
57 req.header([ | 62 req.respond(HTTP_OK, ct, length = os.path.getsize(path)) |
58 ('Content-Type', ct), | |
59 ('Content-Length', str(os.path.getsize(path))) | |
60 ]) | |
61 return file(path, 'rb').read() | 63 return file(path, 'rb').read() |
62 except TypeError: | 64 except TypeError: |
63 raise ErrorResponse(500, 'illegal file name') | 65 raise ErrorResponse(HTTP_SERVER_ERROR, 'illegal file name') |
64 except OSError, err: | 66 except OSError, err: |
65 if err.errno == errno.ENOENT: | 67 if err.errno == errno.ENOENT: |
66 raise ErrorResponse(404) | 68 raise ErrorResponse(HTTP_NOT_FOUND) |
67 else: | 69 else: |
68 raise ErrorResponse(500, err.strerror) | 70 raise ErrorResponse(HTTP_SERVER_ERROR, err.strerror) |
69 | 71 |
70 def style_map(templatepath, style): | 72 def style_map(templatepath, style): |
71 """Return path to mapfile for a given style. | 73 """Return path to mapfile for a given style. |
72 | 74 |
73 Searches mapfile in the following locations: | 75 Searches mapfile in the following locations: |