diff env/lib/python3.7/site-packages/requests_toolbelt/adapters/ssl.py @ 2:6af9afd405e9 draft

"planemo upload commit 0a63dd5f4d38a1f6944587f52a8cd79874177fc1"
author shellac
date Thu, 14 May 2020 14:56:58 -0400
parents 26e78fe6e8c4
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/env/lib/python3.7/site-packages/requests_toolbelt/adapters/ssl.py	Thu May 14 14:56:58 2020 -0400
@@ -0,0 +1,66 @@
+# -*- coding: utf-8 -*-
+"""
+
+requests_toolbelt.ssl_adapter
+=============================
+
+This file contains an implementation of the SSLAdapter originally demonstrated
+in this blog post:
+https://lukasa.co.uk/2013/01/Choosing_SSL_Version_In_Requests/
+
+"""
+import requests
+
+from requests.adapters import HTTPAdapter
+
+from .._compat import poolmanager
+
+
+class SSLAdapter(HTTPAdapter):
+    """
+    A HTTPS Adapter for Python Requests that allows the choice of the SSL/TLS
+    version negotiated by Requests. This can be used either to enforce the
+    choice of high-security TLS versions (where supported), or to work around
+    misbehaving servers that fail to correctly negotiate the default TLS
+    version being offered.
+
+    Example usage:
+
+        >>> import requests
+        >>> import ssl
+        >>> from requests_toolbelt import SSLAdapter
+        >>> s = requests.Session()
+        >>> s.mount('https://', SSLAdapter(ssl.PROTOCOL_TLSv1))
+
+    You can replace the chosen protocol with any that are available in the
+    default Python SSL module. All subsequent requests that match the adapter
+    prefix will use the chosen SSL version instead of the default.
+
+    This adapter will also attempt to change the SSL/TLS version negotiated by
+    Requests when using a proxy. However, this may not always be possible:
+    prior to Requests v2.4.0 the adapter did not have access to the proxy setup
+    code. In earlier versions of Requests, this adapter will not function
+    properly when used with proxies.
+    """
+
+    __attrs__ = HTTPAdapter.__attrs__ + ['ssl_version']
+
+    def __init__(self, ssl_version=None, **kwargs):
+        self.ssl_version = ssl_version
+
+        super(SSLAdapter, self).__init__(**kwargs)
+
+    def init_poolmanager(self, connections, maxsize, block=False):
+        self.poolmanager = poolmanager.PoolManager(
+            num_pools=connections,
+            maxsize=maxsize,
+            block=block,
+            ssl_version=self.ssl_version)
+
+    if requests.__build__ >= 0x020400:
+        # Earlier versions of requests either don't have this method or, worse,
+        # don't allow passing arbitrary keyword arguments. As a result, only
+        # conditionally define this method.
+        def proxy_manager_for(self, *args, **kwargs):
+            kwargs['ssl_version'] = self.ssl_version
+            return super(SSLAdapter, self).proxy_manager_for(*args, **kwargs)