diff options
| author | Jesse Shapiro <jesse@jesseshapiro.net> | 2016-09-02 17:29:01 -0400 |
|---|---|---|
| committer | Jesse Shapiro <jesse@jesseshapiro.net> | 2016-09-02 17:55:32 -0400 |
| commit | 5361875dd4caea1f1e31e4e2d48ffa5e81c9ed89 (patch) | |
| tree | 906de9115724c187663afd6d2f4a6dbd33b42a88 | |
| parent | e9dd46876ae2e1933b185a9446e5cdec43a585b0 (diff) | |
| download | urllib3-5361875dd4caea1f1e31e4e2d48ffa5e81c9ed89.tar.gz | |
Switching to easier method of creating ProxySessionManager
| -rw-r--r-- | test/test_sessionmanager.py | 42 | ||||
| -rw-r--r-- | test/with_dummyserver/test_sessionmanager.py | 4 | ||||
| -rw-r--r-- | urllib3/sessionmanager.py | 15 |
3 files changed, 45 insertions, 16 deletions
diff --git a/test/test_sessionmanager.py b/test/test_sessionmanager.py index e76f5400..ae6893c1 100644 --- a/test/test_sessionmanager.py +++ b/test/test_sessionmanager.py @@ -1,6 +1,6 @@ import unittest -from urllib3.sessionmanager import SessionManager +from urllib3.sessionmanager import SessionManager, ProxySessionManager from urllib3.poolmanager import ProxyManager, PoolManager from urllib3.util.sessioncontext import DefaultCookiePolicy, CookieJar, SessionContext from urllib3.packages import six @@ -13,7 +13,7 @@ cookielib = six.moves.http_cookiejar class TestSessionManager(unittest.TestCase): def setUp(self): - self.manager = SessionManager(PoolManager()) + self.manager = SessionManager() def test_set_cookie_policy(self): """ @@ -26,19 +26,19 @@ class TestSessionManager(unittest.TestCase): def test_create_proxy_manager(self): """ - Make sure that when we pass a ProxyManager in, we use it. + Make sure that the ProxySessionManager has its `manager` attribute + set correctly """ - pm = ProxyManager(proxy_url='http://none') - manager = SessionManager(pm) - self.assertTrue(manager.manager is pm) + manager = ProxySessionManager(proxy_url='http://none') + self.assertTrue(isinstance(manager.manager, ProxyManager)) def test_creates_pool_manager(self): """ - Make sure that when we pass a PoolManager in, we use it. + Make sure that when we just create a SessionManager, the embedded manager + is of the PoolManager type. """ - pm = PoolManager() - manager = SessionManager(pm) - self.assertTrue(manager.manager is pm) + manager = SessionManager() + self.assertTrue(isinstance(manager.manager, PoolManager)) def test_with_external_jar(self): """ @@ -47,9 +47,29 @@ class TestSessionManager(unittest.TestCase): this_policy = cookielib.DefaultCookiePolicy() jar = CookieJar(policy=this_policy) context = SessionContext(cookie_jar=jar) - manager = SessionManager(PoolManager(), context=context) + manager = SessionManager(manager=PoolManager(), context=context) self.assertTrue(manager.context.cookie_jar is jar) + def test_with_own_manager(self): + """ + Make sure that when we pass our own manager instance in, + it gets used. + """ + manager = 18743 + sm = SessionManager(manager=manager) + self.assertEqual(manager, sm.manager) + + def test_with_own_manager_class(self): + """ + If we subclass SessionManager and give it a new manager class, + check that we instantiate that class on creation of a new instance. + """ + class PointlessSessionManager(SessionManager): + + manager_class = int + + psm = PointlessSessionManager() + self.assertEqual(psm.manager, 0) class TestSessionContext(unittest.TestCase): diff --git a/test/with_dummyserver/test_sessionmanager.py b/test/with_dummyserver/test_sessionmanager.py index 8550c2db..165953da 100644 --- a/test/with_dummyserver/test_sessionmanager.py +++ b/test/with_dummyserver/test_sessionmanager.py @@ -17,7 +17,7 @@ class TestSessionManager(HTTPDummyServerTestCase): return 'http://' + self.host_alt + ':' + str(self.port) + route def setUp(self): - self.manager = SessionManager(PoolManager()) + self.manager = SessionManager() def test_cookie_handler(self): """ @@ -61,7 +61,7 @@ class TestSessionManager(HTTPDummyServerTestCase): successfully merged, rather than skipped """ headers = {'Cookie': 'testing_cookie=test_cookie_value'} - manager = SessionManager(PoolManager(), headers=headers) + manager = SessionManager(headers=headers) route = self.create_url('/verify_cookie') r = manager.request('GET', route) self.assertEqual(r.data, b'Received cookie') diff --git a/urllib3/sessionmanager.py b/urllib3/sessionmanager.py index 97899a49..3df71e6d 100644 --- a/urllib3/sessionmanager.py +++ b/urllib3/sessionmanager.py @@ -1,4 +1,5 @@ from .util.retry import Retry +from .poolmanager import PoolManager, ProxyManager from .request import RequestMethods, Request from .util.sessioncontext import SessionContext @@ -35,14 +36,17 @@ class SessionManager(RequestMethods): 2 """ - def __init__(self, manager, context=None, headers=None): + + manager_class = PoolManager + + def __init__(self, context=None, headers=None, manager=None, **manager_kw): super(SessionManager, self).__init__(headers=headers) - self.manager = manager + self.manager = self.manager_class(**manager_kw) if manager is None else manager self.context = context or SessionContext() def urlopen(self, method, url, redirect=True, retries=None, **kw): """ - Same as :meth:`urllib2.poolmanager.PoolManager.urlopen` with added + Same as :meth:`urllib3.poolmanager.PoolManager.urlopen` with added request-context-managing special sauce. The received ``url`` param must be an absolute path. @@ -75,3 +79,8 @@ class SessionManager(RequestMethods): return self.redirect(response=response, method=method, retries=retries, url=url, **kw) return response + + +class ProxySessionManager(SessionManager): + + manager_class = ProxyManager |
