From f97e78726e7efe64b9a3db27707ec579e859ef06 Mon Sep 17 00:00:00 2001 From: Ben Bass Date: Sat, 17 May 2014 23:15:51 +0100 Subject: [PATCH 1/5] Factor out HTTPAdapter.proxy_manager_for for #2048 --- requests/adapters.py | 31 ++++++++++++++++++++----------- 1 file changed, 20 insertions(+), 11 deletions(-) diff --git a/requests/adapters.py b/requests/adapters.py index eb7a2d28..6b8f4d3b 100644 --- a/requests/adapters.py +++ b/requests/adapters.py @@ -118,6 +118,24 @@ class HTTPAdapter(BaseAdapter): self.poolmanager = PoolManager(num_pools=connections, maxsize=maxsize, block=block) + def proxy_manager_for(self, proxy): + """Return urllib3 ProxyManager for the given proxy. This method should + not be called from user code, and is only exposed for use when + subclassing the :class:`HTTPAdapter `. + + :param proxy: The proxy to return a urllib3 ProxyManager for. + """ + if not proxy in self.proxy_manager: + proxy_headers = self.proxy_headers(proxy) + self.proxy_manager[proxy] = proxy_from_url( + proxy, + proxy_headers=proxy_headers, + num_pools=self._pool_connections, + maxsize=self._pool_maxsize, + block=self._pool_block) + + return self.proxy_manager[proxy] + def cert_verify(self, conn, url, verify, cert): """Verify a SSL certificate. This method should not be called from user code, and is only exposed for use when subclassing the @@ -204,17 +222,8 @@ class HTTPAdapter(BaseAdapter): if proxy: proxy = prepend_scheme_if_needed(proxy, 'http') - proxy_headers = self.proxy_headers(proxy) - - if not proxy in self.proxy_manager: - self.proxy_manager[proxy] = proxy_from_url( - proxy, - proxy_headers=proxy_headers, - num_pools=self._pool_connections, - maxsize=self._pool_maxsize, - block=self._pool_block) - - conn = self.proxy_manager[proxy].connection_from_url(url) + proxy_manager = self.proxy_manager_for(proxy) + conn = proxy_manager.connection_from_url(url) else: # Only scheme should be lower case parsed = urlparse(url) From e3d0ac7c9dae7468dc98ebe19052148256cc0757 Mon Sep 17 00:00:00 2001 From: Ben Bass Date: Sat, 17 May 2014 23:22:15 +0100 Subject: [PATCH 2/5] update AUTHORS.rst --- AUTHORS.rst | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/AUTHORS.rst b/AUTHORS.rst index ab82930b..52bfc350 100644 --- a/AUTHORS.rst +++ b/AUTHORS.rst @@ -151,4 +151,5 @@ Patches and Suggestions - Kamil Madac - Michael Becker @beckerfuffle - Erik Wickstrom @erikwickstrom -- Константин Подшумок @podshumok \ No newline at end of file +- Константин Подшумок @podshumok +- Ben Bass @codedstructure From 02618c8df5071d608a8c8341e4a44e26f58215d5 Mon Sep 17 00:00:00 2001 From: Ben Bass Date: Sun, 18 May 2014 20:10:35 +0100 Subject: [PATCH 3/5] improve `proxy_manager_for` re-usability by subclass --- requests/adapters.py | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/requests/adapters.py b/requests/adapters.py index 6b8f4d3b..995d8f80 100644 --- a/requests/adapters.py +++ b/requests/adapters.py @@ -118,12 +118,16 @@ class HTTPAdapter(BaseAdapter): self.poolmanager = PoolManager(num_pools=connections, maxsize=maxsize, block=block) - def proxy_manager_for(self, proxy): - """Return urllib3 ProxyManager for the given proxy. This method should - not be called from user code, and is only exposed for use when - subclassing the :class:`HTTPAdapter `. + def proxy_manager_for(self, proxy, **proxy_kwargs): + """Return urllib3 ProxyManager for the given proxy. + + This method should not be called from user code, and is only + exposed for use when subclassing the + :class:`HTTPAdapter `. :param proxy: The proxy to return a urllib3 ProxyManager for. + :param proxy_kwargs: Extra keyword arguments used to configure the Proxy Manager. + :returns: ProxyManager """ if not proxy in self.proxy_manager: proxy_headers = self.proxy_headers(proxy) @@ -132,7 +136,8 @@ class HTTPAdapter(BaseAdapter): proxy_headers=proxy_headers, num_pools=self._pool_connections, maxsize=self._pool_maxsize, - block=self._pool_block) + block=self._pool_block, + **proxy_kwargs) return self.proxy_manager[proxy] From 54e96b40b7c36deb547339e5d3d4ccac75b53b51 Mon Sep 17 00:00:00 2001 From: Ben Bass Date: Sun, 18 May 2014 20:24:35 +0100 Subject: [PATCH 4/5] allow pool_kwargs to be specified in init_poolmanager --- requests/adapters.py | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/requests/adapters.py b/requests/adapters.py index 995d8f80..da7d7b11 100644 --- a/requests/adapters.py +++ b/requests/adapters.py @@ -101,14 +101,17 @@ class HTTPAdapter(BaseAdapter): self.init_poolmanager(self._pool_connections, self._pool_maxsize, block=self._pool_block) - def init_poolmanager(self, connections, maxsize, block=DEFAULT_POOLBLOCK): - """Initializes a urllib3 PoolManager. This method should not be called - from user code, and is only exposed for use when subclassing the + def init_poolmanager(self, connections, maxsize, block=DEFAULT_POOLBLOCK, **pool_kwargs): + """Initializes a urllib3 PoolManager. + + This method should not be called from user code, and is only + exposed for use when subclassing the :class:`HTTPAdapter `. :param connections: The number of urllib3 connection pools to cache. :param maxsize: The maximum number of connections to save in the pool. :param block: Block when no free connections are available. + :param pool_kwargs: Extra keyword arguments used to initialize the Pool Manager. """ # save these values for pickling self._pool_connections = connections @@ -116,7 +119,7 @@ class HTTPAdapter(BaseAdapter): self._pool_block = block self.poolmanager = PoolManager(num_pools=connections, maxsize=maxsize, - block=block) + block=block, **pool_kwargs) def proxy_manager_for(self, proxy, **proxy_kwargs): """Return urllib3 ProxyManager for the given proxy. From 046302c0cbe94588cdaf6460dfc49219b49db389 Mon Sep 17 00:00:00 2001 From: Ben Bass Date: Sun, 8 Jun 2014 15:23:37 +0100 Subject: [PATCH 5/5] indentation change for code review --- requests/adapters.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/requests/adapters.py b/requests/adapters.py index da7d7b11..0e20bd1c 100644 --- a/requests/adapters.py +++ b/requests/adapters.py @@ -135,12 +135,12 @@ class HTTPAdapter(BaseAdapter): if not proxy in self.proxy_manager: proxy_headers = self.proxy_headers(proxy) self.proxy_manager[proxy] = proxy_from_url( - proxy, - proxy_headers=proxy_headers, - num_pools=self._pool_connections, - maxsize=self._pool_maxsize, - block=self._pool_block, - **proxy_kwargs) + proxy, + proxy_headers=proxy_headers, + num_pools=self._pool_connections, + maxsize=self._pool_maxsize, + block=self._pool_block, + **proxy_kwargs) return self.proxy_manager[proxy]