]> git.ipfire.org Git - thirdparty/tornado.git/commitdiff
HTTPResponse.request should always be an HTTPRequest, never a _RequestProxy.
authorBen Darnell <ben@bendarnell.com>
Tue, 9 Apr 2013 01:47:35 +0000 (21:47 -0400)
committerBen Darnell <ben@bendarnell.com>
Tue, 9 Apr 2013 01:47:35 +0000 (21:47 -0400)
Closes #718.

tornado/httpclient.py
tornado/test/httpclient_test.py

index 2a6f4467ba11542730ba89e5625e4fd42f6bc910..bfdc71363d1268f52b5ac7b84db6c5b0563029d4 100644 (file)
@@ -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:
index 36f312d72f06c5c4b1506527a7073171c58fd192..254c9c09b5a6c89d20d7e6d9642033223af8ed71 100644 (file)
@@ -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):