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