mercurial/hgweb/request.py
changeset 2355 eb08fb4d41e1
parent 2328 f789602ba840
child 2391 d351a3be3371
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)