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)