fix #549 Add 'prefetch' to Session.__attrs__ and Requests.__init__
authorRoman Haritonov <reclosedev@gmail.com>
Fri, 13 Apr 2012 15:25:10 +0000 (19:25 +0400)
committerRoman Haritonov <reclosedev@gmail.com>
Fri, 13 Apr 2012 15:25:10 +0000 (19:25 +0400)
requests/models.py
requests/sessions.py
tests/test_requests.py

index d4b10c301cf086fddc4c64d704e278006b9aa315..26bc518d53ca943468cd622beba4dbed4c5123d0 100644 (file)
@@ -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
 
index 94c94bf95d430399d0c7d746b2b1eddbe6c2f021..0e430302c73e989d4e69390038a405312783ead9 100644 (file)
@@ -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
index dca6a9ee2c00d840422b7a48f824ce2c3f7f8c09..db3baad2c0add85a2cdcea37f0425520bd59c83f 100755 (executable)
@@ -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.