From d569a2d6bca64dad10928ac36b318e9e5bc16414 Mon Sep 17 00:00:00 2001 From: Roman Haritonov Date: Fri, 13 Apr 2012 19:25:10 +0400 Subject: [PATCH] fix #549 Add 'prefetch' to Session.__attrs__ and Requests.__init__ --- requests/models.py | 6 +++++- requests/sessions.py | 3 ++- tests/test_requests.py | 16 ++++++++++++++++ 3 files changed, 23 insertions(+), 2 deletions(-) diff --git a/requests/models.py b/requests/models.py index d4b10c3..26bc518 100644 --- a/requests/models.py +++ b/requests/models.py @@ -61,6 +61,7 @@ class Request(object): proxies=None, hooks=None, config=None, + prefetch=False, _poolmanager=None, verify=None, session=None, @@ -149,6 +150,9 @@ class Request(object): #: SSL Certificate self.cert = cert + #: Prefetch response content + self.prefetch = prefetch + if headers: headers = CaseInsensitiveDict(self.headers) else: @@ -624,7 +628,7 @@ class Request(object): self.__dict__.update(r.__dict__) # If prefetch is True, mark content as consumed. - if prefetch: + if prefetch or self.prefetch: # Save the response. self.response.content diff --git a/requests/sessions.py b/requests/sessions.py index 94c94bf..0e43030 100644 --- a/requests/sessions.py +++ b/requests/sessions.py @@ -52,7 +52,7 @@ class Session(object): __attrs__ = [ 'headers', 'cookies', 'auth', 'timeout', 'proxies', 'hooks', - 'params', 'config', 'verify', 'cert'] + 'params', 'config', 'verify', 'cert', 'prefetch'] def __init__(self, @@ -179,6 +179,7 @@ class Session(object): allow_redirects=allow_redirects, proxies=proxies, config=config, + prefetch=prefetch, verify=verify, cert=cert, _poolmanager=self.poolmanager diff --git a/tests/test_requests.py b/tests/test_requests.py index dca6a9e..db3baad 100755 --- a/tests/test_requests.py +++ b/tests/test_requests.py @@ -708,6 +708,22 @@ class RequestsTestSuite(TestSetup, unittest.TestCase): self.assertEqual(s.cookies, ds.cookies) self.assertEqual(s.auth, ds.auth) + def test_unpickled_session_requests(self): + s = requests.session() + r = get(httpbin('cookies', 'set', 'k', 'v'), allow_redirects=True, session=s) + c = json.loads(r.text).get('cookies') + assert 'k' in c + + ds = pickle.loads(pickle.dumps(s)) + r = get(httpbin('cookies'), session=ds) + c = json.loads(r.text).get('cookies') + assert 'k' in c + + ds1 = pickle.loads(pickle.dumps(requests.session())) + ds2 = pickle.loads(pickle.dumps(requests.session(prefetch=True))) + assert not ds1.prefetch + assert ds2.prefetch + def test_invalid_content(self): # WARNING: if you're using a terrible DNS provider (comcast), # this will fail. -- 2.34.1