From: Ben Darnell Date: Tue, 9 Apr 2013 01:47:35 +0000 (-0400) Subject: HTTPResponse.request should always be an HTTPRequest, never a _RequestProxy. X-Git-Tag: v3.0.1~6 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=6e63b238c7ed7c307f1e22232afa7df7fb5901a9;p=thirdparty%2Ftornado.git HTTPResponse.request should always be an HTTPRequest, never a _RequestProxy. Closes #718. --- diff --git a/tornado/httpclient.py b/tornado/httpclient.py index 2a6f4467b..bfdc71363 100644 --- a/tornado/httpclient.py +++ b/tornado/httpclient.py @@ -373,7 +373,10 @@ class HTTPResponse(object): def __init__(self, request, code, headers=None, buffer=None, effective_url=None, error=None, request_time=None, time_info=None, reason=None): - self.request = request + if isinstance(request, _RequestProxy): + self.request = request.request + else: + self.request = request self.code = code self.reason = reason or httputil.responses.get(code, "Unknown") if headers is not None: diff --git a/tornado/test/httpclient_test.py b/tornado/test/httpclient_test.py index 36f312d72..254c9c09b 100644 --- a/tornado/test/httpclient_test.py +++ b/tornado/test/httpclient_test.py @@ -334,6 +334,19 @@ Transfer-Encoding: chunked self.assertEqual(e.code, 404) self.assertEqual(e.response.code, 404) + @gen_test + def test_reuse_request_from_response(self): + # The response.request attribute should be an HTTPRequest, not + # a _RequestProxy. + # This test uses self.http_client.fetch because self.fetch calls + # self.get_url on the input unconditionally. + url = self.get_url('/hello') + response = yield self.http_client.fetch(url) + self.assertEqual(response.request.url, url) + self.assertTrue(isinstance(response.request, HTTPRequest)) + response2 = yield self.http_client.fetch(response.request) + self.assertEqual(response2.body, b'Hello world!') + class RequestProxyTest(unittest.TestCase): def test_request_set(self):