summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJesse Shapiro <jesse@jesseshapiro.net>2016-09-02 17:29:01 -0400
committerJesse Shapiro <jesse@jesseshapiro.net>2016-09-02 17:55:32 -0400
commit5361875dd4caea1f1e31e4e2d48ffa5e81c9ed89 (patch)
tree906de9115724c187663afd6d2f4a6dbd33b42a88
parente9dd46876ae2e1933b185a9446e5cdec43a585b0 (diff)
downloadurllib3-5361875dd4caea1f1e31e4e2d48ffa5e81c9ed89.tar.gz
Switching to easier method of creating ProxySessionManager
-rw-r--r--test/test_sessionmanager.py42
-rw-r--r--test/with_dummyserver/test_sessionmanager.py4
-rw-r--r--urllib3/sessionmanager.py15
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