summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKenneth Reitz <me@kennethreitz.org>2014-11-30 14:12:43 -0500
committerKenneth Reitz <me@kennethreitz.org>2014-11-30 14:12:43 -0500
commit53d02381e22436b6d0757eb305eb1a960f82d361 (patch)
treee2963e5c106dbd361041ccd948114c376297a2fa
parent8ae4d02d73dc3506f77a0b139c974097729dffa8 (diff)
parentc8baf881257ff3194879ad79bef81c27007b4dcf (diff)
downloadpython-requests-53d02381e22436b6d0757eb305eb1a960f82d361.tar.gz
Merge pull request #2349 from sigmavirus24/fix-pickling
Properly serialize RecentlyUsedContainers for cache
-rw-r--r--requests/sessions.py15
1 files changed, 12 insertions, 3 deletions
diff --git a/requests/sessions.py b/requests/sessions.py
index 4eb374fd..4f306963 100644
--- a/requests/sessions.py
+++ b/requests/sessions.py
@@ -36,6 +36,8 @@ from .status_codes import codes
# formerly defined here, reexposed here for backward compatibility
from .models import REDIRECT_STATI
+REDIRECT_CACHE_SIZE = 1000
+
def merge_setting(request_setting, session_setting, dict_class=OrderedDict):
"""
@@ -274,7 +276,7 @@ class Session(SessionRedirectMixin):
__attrs__ = [
'headers', 'cookies', 'auth', 'proxies', 'hooks', 'params', 'verify',
'cert', 'prefetch', 'adapters', 'stream', 'trust_env',
- 'max_redirects', 'redirect_cache'
+ 'max_redirects',
]
def __init__(self):
@@ -329,7 +331,7 @@ class Session(SessionRedirectMixin):
self.mount('http://', HTTPAdapter())
# Only store 1000 redirects to prevent using infinite memory
- self.redirect_cache = RecentlyUsedContainer(1000)
+ self.redirect_cache = RecentlyUsedContainer(REDIRECT_CACHE_SIZE)
def __enter__(self):
return self
@@ -660,12 +662,19 @@ class Session(SessionRedirectMixin):
self.adapters[key] = self.adapters.pop(key)
def __getstate__(self):
- return dict((attr, getattr(self, attr, None)) for attr in self.__attrs__)
+ state = dict((attr, getattr(self, attr, None)) for attr in self.__attrs__)
+ state['redirect_cache'] = dict(self.redirect_cache)
+ return state
def __setstate__(self, state):
+ redirect_cache = state.pop('redirect_cache', {})
for attr, value in state.items():
setattr(self, attr, value)
+ self.redirect_cache = RecentlyUsedContainer(REDIRECT_CACHE_SIZE)
+ for redirect, to in redirect_cache.items():
+ self.redirect_cache[redirect] = to
+
def session():
"""Returns a :class:`Session` for context-management."""