mercurial/hgweb/request.py
changeset 4250 ca639faa38a2
parent 3963 ba45041827a2
parent 4248 cc81c512a531
child 4633 ff7253a0d1da
equal deleted inserted replaced
4244:7663780b55a7 4250:ca639faa38a2
    14         self.destmaker = destmaker
    14         self.destmaker = destmaker
    15 
    15 
    16     def __call__(self, wsgienv, start_response):
    16     def __call__(self, wsgienv, start_response):
    17         return _wsgirequest(self.destmaker(), wsgienv, start_response)
    17         return _wsgirequest(self.destmaker(), wsgienv, start_response)
    18 
    18 
    19 class _wsgioutputfile(object):
       
    20     def __init__(self, request):
       
    21         self.request = request
       
    22 
       
    23     def write(self, data):
       
    24         self.request.write(data)
       
    25     def writelines(self, lines):
       
    26         for line in lines:
       
    27             self.write(line)
       
    28     def flush(self):
       
    29         return None
       
    30     def close(self):
       
    31         return None
       
    32 
       
    33 class _wsgirequest(object):
    19 class _wsgirequest(object):
    34     def __init__(self, destination, wsgienv, start_response):
    20     def __init__(self, destination, wsgienv, start_response):
    35         version = wsgienv['wsgi.version']
    21         version = wsgienv['wsgi.version']
    36         if (version < (1, 0)) or (version >= (2, 0)):
    22         if (version < (1, 0)) or (version >= (2, 0)):
    37             raise RuntimeError("Unknown and unsupported WSGI version %d.%d" \
    23             raise RuntimeError("Unknown and unsupported WSGI version %d.%d" \
    38                                % version)
    24                                % version)
    39         self.inp = wsgienv['wsgi.input']
    25         self.inp = wsgienv['wsgi.input']
    40         self.out = _wsgioutputfile(self)
       
    41         self.server_write = None
    26         self.server_write = None
    42         self.err = wsgienv['wsgi.errors']
    27         self.err = wsgienv['wsgi.errors']
    43         self.threaded = wsgienv['wsgi.multithread']
    28         self.threaded = wsgienv['wsgi.multithread']
    44         self.multiprocess = wsgienv['wsgi.multiprocess']
    29         self.multiprocess = wsgienv['wsgi.multiprocess']
    45         self.run_once = wsgienv['wsgi.run_once']
    30         self.run_once = wsgienv['wsgi.run_once']
    46         self.env = wsgienv
    31         self.env = wsgienv
    47         self.form = cgi.parse(self.inp, self.env, keep_blank_values=1)
    32         self.form = cgi.parse(self.inp, self.env, keep_blank_values=1)
    48         self.start_response = start_response
    33         self.start_response = start_response
    49         self.headers = []
    34         self.headers = []
    50         destination.run_wsgi(self)
    35         destination.run_wsgi(self)
       
    36 
       
    37     out = property(lambda self: self)
    51 
    38 
    52     def __iter__(self):
    39     def __iter__(self):
    53         return iter([])
    40         return iter([])
    54 
    41 
    55     def read(self, count=-1):
    42     def read(self, count=-1):
    73                     self.server_write(thing)
    60                     self.server_write(thing)
    74                 except socket.error, inst:
    61                 except socket.error, inst:
    75                     if inst[0] != errno.ECONNRESET:
    62                     if inst[0] != errno.ECONNRESET:
    76                         raise
    63                         raise
    77 
    64 
       
    65     def writelines(self, lines):
       
    66         for line in lines:
       
    67             self.write(line)
       
    68 
       
    69     def flush(self):
       
    70         return None
       
    71 
       
    72     def close(self):
       
    73         return None
       
    74 
    78     def header(self, headers=[('Content-type','text/html')]):
    75     def header(self, headers=[('Content-type','text/html')]):
    79         self.headers.extend(headers)
    76         self.headers.extend(headers)
    80 
    77 
    81     def httphdr(self, type, filename=None, length=0, headers={}):
    78     def httphdr(self, type, filename=None, length=0, headers={}):
    82         headers = headers.items()
    79         headers = headers.items()