From 6e63b238c7ed7c307f1e22232afa7df7fb5901a9 Mon Sep 17 00:00:00 2001 From: Ben Darnell Date: Mon, 8 Apr 2013 21:47:35 -0400 Subject: [PATCH] HTTPResponse.request should always be an HTTPRequest, never a _RequestProxy. Closes #718. --- tornado/httpclient.py | 5 ++++- tornado/test/httpclient_test.py | 13 +++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) 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): -- 2.47.2