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)) |