From d4aaef1e9a15a8d37dcaabe89b46f3948329b5a5 Mon Sep 17 00:00:00 2001 From: Chris Lee Date: Wed, 23 Jan 2013 18:14:47 -0800 Subject: [PATCH] Time how long each request takes Stored as attribute Response.time_taken --- requests/adapters.py | 4 ++++ requests/models.py | 3 +++ test_requests.py | 5 +++++ 3 files changed, 12 insertions(+) diff --git a/requests/adapters.py b/requests/adapters.py index c350ae4..55a8726 100644 --- a/requests/adapters.py +++ b/requests/adapters.py @@ -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 diff --git a/requests/models.py b/requests/models.py index d86b80a..b3574b2 100644 --- a/requests/models.py +++ b/requests/models.py @@ -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 '' % (self.status_code) diff --git a/test_requests.py b/test_requests.py index 6a4409b..d18d386 100644 --- a/test_requests.py +++ b/test_requests.py @@ -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() -- 2.7.4