Time how long each request takes
authorChris Lee <clee@mg8.org>
Thu, 24 Jan 2013 02:14:47 +0000 (18:14 -0800)
committerChris Lee <clee@mg8.org>
Mon, 28 Jan 2013 03:06:50 +0000 (19:06 -0800)
Stored as attribute Response.time_taken

requests/adapters.py
requests/models.py
test_requests.py

index c350ae4..55a8726 100644 (file)
@@ -9,6 +9,7 @@ and maintain connections.
 """
 
 import socket
+import time
 
 from .models import Response
 from .packages.urllib3.poolmanager import PoolManager, ProxyManager
@@ -155,6 +156,7 @@ class HTTPAdapter(BaseAdapter):
         url = self.request_url(request, proxies)
 
         chunked = not (request.body is None or 'Content-Length' in request.headers)
+        start = time.time()
 
         try:
             if not chunked:
@@ -198,6 +200,7 @@ class HTTPAdapter(BaseAdapter):
                     preload_content=False,
                     decode_content=False
                 )
+            finish = time.time()
 
         except socket.error as sockerr:
             raise ConnectionError(sockerr)
@@ -214,6 +217,7 @@ class HTTPAdapter(BaseAdapter):
                 raise Timeout('Request timed out.')
 
         r = self.build_response(request, resp)
+        r.time_taken = finish - start
 
         if not stream:
             r.content
index d86b80a..b3574b2 100644 (file)
@@ -471,6 +471,9 @@ class Response(object):
         #: A CookieJar of Cookies the server sent back.
         self.cookies = cookiejar_from_dict({})
 
+        #: The amount of time taken for the response to arrive (in seconds).
+        self.time_taken = 0.0
+
     def __repr__(self):
         return '<Response [%s]>' % (self.status_code)
 
index 6a4409b..d18d386 100644 (file)
@@ -323,5 +323,10 @@ class RequestsTestCase(unittest.TestCase):
         self.assertEqual(cookie.domain, domain)
         self.assertEqual(cookie._rest['HttpOnly'], rest['HttpOnly'])
 
+    def test_time_taken_blank(self):
+        r = requests.get(httpbin('get'))
+        self.assertTrue(r.time_taken > 0.0)
+
+
 if __name__ == '__main__':
     unittest.main()