Mercurial > public > mercurial-scm > hg
comparison mercurial/hgweb/request.py @ 2355:eb08fb4d41e1
Splitting up hgweb so it's easier to change.
author | Eric Hopper <hopper@omnifarious.org> |
---|---|
date | Wed, 31 May 2006 08:03:29 -0700 |
parents | mercurial/hgweb/__init__.py@f789602ba840 |
children | d351a3be3371 |
comparison
equal
deleted
inserted
replaced
2352:61909dfb316d | 2355:eb08fb4d41e1 |
---|---|
1 # hgweb.py - web interface to a mercurial repository | |
2 # | |
3 # Copyright 21 May 2005 - (c) 2005 Jake Edge <jake@edge2.net> | |
4 # Copyright 2005 Matt Mackall <mpm@selenic.com> | |
5 # | |
6 # This software may be used and distributed according to the terms | |
7 # of the GNU General Public License, incorporated herein by reference. | |
8 | |
9 from mercurial.demandload import demandload | |
10 demandload(globals(), "socket sys cgi os") | |
11 from mercurial.i18n import gettext as _ | |
12 | |
13 class hgrequest(object): | |
14 def __init__(self, inp=None, out=None, env=None): | |
15 self.inp = inp or sys.stdin | |
16 self.out = out or sys.stdout | |
17 self.env = env or os.environ | |
18 self.form = cgi.parse(self.inp, self.env, keep_blank_values=1) | |
19 | |
20 def write(self, *things): | |
21 for thing in things: | |
22 if hasattr(thing, "__iter__"): | |
23 for part in thing: | |
24 self.write(part) | |
25 else: | |
26 try: | |
27 self.out.write(str(thing)) | |
28 except socket.error, inst: | |
29 if inst[0] != errno.ECONNRESET: | |
30 raise | |
31 | |
32 def header(self, headers=[('Content-type','text/html')]): | |
33 for header in headers: | |
34 self.out.write("%s: %s\r\n" % header) | |
35 self.out.write("\r\n") | |
36 | |
37 def httphdr(self, type, file="", size=0): | |
38 | |
39 headers = [('Content-type', type)] | |
40 if file: | |
41 headers.append(('Content-disposition', 'attachment; filename=%s' % file)) | |
42 if size > 0: | |
43 headers.append(('Content-length', str(size))) | |
44 self.header(headers) |