mercurial/hgweb/request.py
changeset 5888 956afc025c0f
parent 5887 41a3fce17625
child 5922 df7f66f290b9
equal deleted inserted replaced
5887:41a3fce17625 5888:956afc025c0f
    22         self.threaded = wsgienv['wsgi.multithread']
    22         self.threaded = wsgienv['wsgi.multithread']
    23         self.multiprocess = wsgienv['wsgi.multiprocess']
    23         self.multiprocess = wsgienv['wsgi.multiprocess']
    24         self.run_once = wsgienv['wsgi.run_once']
    24         self.run_once = wsgienv['wsgi.run_once']
    25         self.env = wsgienv
    25         self.env = wsgienv
    26         self.form = cgi.parse(self.inp, self.env, keep_blank_values=1)
    26         self.form = cgi.parse(self.inp, self.env, keep_blank_values=1)
    27         self.start_response = start_response
    27         self._start_response = start_response
    28         self.headers = []
    28         self.headers = []
    29 
    29 
    30     def __iter__(self):
    30     def __iter__(self):
    31         return iter([])
    31         return iter([])
    32 
    32 
    33     def read(self, count=-1):
    33     def read(self, count=-1):
    34         return self.inp.read(count)
    34         return self.inp.read(count)
    35 
    35 
       
    36     def start_response(self, status):
       
    37         if self._start_response is not None:
       
    38             if not self.headers:
       
    39                 raise RuntimeError("request.write called before headers sent" +
       
    40                 	               " (%s)." % thing)
       
    41 
       
    42             if isinstance(status, ErrorResponse):
       
    43                 status = statusmessage(status.code)
       
    44             elif isinstance(status, int):
       
    45                 status = statusmessage(status)
       
    46 
       
    47             self.server_write = self._start_response(status, self.headers)
       
    48             self._start_response = None
       
    49             self.headers = []
       
    50 
    36     def respond(self, status, *things):
    51     def respond(self, status, *things):
       
    52         if not things:
       
    53             self.start_response(status)
    37         for thing in things:
    54         for thing in things:
    38             if hasattr(thing, "__iter__"):
    55             if hasattr(thing, "__iter__"):
    39                 for part in thing:
    56                 for part in thing:
    40                     self.respond(status, part)
    57                     self.respond(status, part)
    41             else:
    58             else:
    42                 thing = str(thing)
    59                 thing = str(thing)
    43                 if self.server_write is None:
    60                 self.start_response(status)
    44                     if not self.headers:
       
    45                         raise RuntimeError("request.write called before headers sent (%s)." % thing)
       
    46                     if isinstance(status, ErrorResponse):
       
    47                         status = statusmessage(status.code)
       
    48                     elif isinstance(status, int):
       
    49                         status = statusmessage(status)
       
    50                     self.server_write = self.start_response(status,
       
    51                                                             self.headers)
       
    52                     self.start_response = None
       
    53                     self.headers = []
       
    54                 try:
    61                 try:
    55                     self.server_write(thing)
    62                     self.server_write(thing)
    56                 except socket.error, inst:
    63                 except socket.error, inst:
    57                     if inst[0] != errno.ECONNRESET:
    64                     if inst[0] != errno.ECONNRESET:
    58                         raise
    65                         raise