cubicweb/etwist/http.py
changeset 11877 32a3860c799d
parent 11767 432f87a63057
equal deleted inserted replaced
11876:b35e21fc1f9b 11877:32a3860c799d
     3 :organization: Logilab
     3 :organization: Logilab
     4 :copyright: 2001-2011 LOGILAB S.A. (Paris, FRANCE), license is LGPL v2.
     4 :copyright: 2001-2011 LOGILAB S.A. (Paris, FRANCE), license is LGPL v2.
     5 :contact: http://www.logilab.fr/ -- mailto:contact@logilab.fr
     5 :contact: http://www.logilab.fr/ -- mailto:contact@logilab.fr
     6 :license: GNU Lesser General Public License, v2.1 - http://www.gnu.org/licenses
     6 :license: GNU Lesser General Public License, v2.1 - http://www.gnu.org/licenses
     7 """
     7 """
       
     8 
     8 
     9 
     9 
    10 
    10 
    11 
    11 class HTTPResponse(object):
    12 class HTTPResponse(object):
    12     """An object representing an HTTP Response to be sent to the client.
    13     """An object representing an HTTP Response to be sent to the client.
    27         for k, values in self._headers_out.getAllRawHeaders():
    28         for k, values in self._headers_out.getAllRawHeaders():
    28             self._twreq.responseHeaders.setRawHeaders(k, values)
    29             self._twreq.responseHeaders.setRawHeaders(k, values)
    29         # add content-length if not present
    30         # add content-length if not present
    30         if (self._headers_out.getHeader('content-length') is None
    31         if (self._headers_out.getHeader('content-length') is None
    31             and self._stream is not None):
    32             and self._stream is not None):
    32            self._twreq.setHeader('content-length', len(self._stream))
    33             self._twreq.setHeader('content-length', len(self._stream))
    33 
    34 
    34     def _finalize(self):
    35     def _finalize(self):
       
    36         # cw_failed is set on errors such as "connection aborted by client". In
       
    37         # such cases, req.finish() was already called and calling it a twice
       
    38         # would crash
       
    39         if getattr(self._twreq, 'cw_failed', False):
       
    40             return
    35         # we must set code before writing anything, else it's too late
    41         # we must set code before writing anything, else it's too late
    36         if self._code is not None:
    42         if self._code is not None:
    37             self._twreq.setResponseCode(self._code)
    43             self._twreq.setResponseCode(self._code)
    38         if self._stream is not None:
    44         if self._stream is not None:
    39             self._twreq.write(str(self._stream))
    45             self._twreq.write(str(self._stream))