From: Peter Amstutz Date: Tue, 3 Mar 2015 22:03:49 +0000 (-0500) Subject: 5246: Add urllib3 workaround, along with a note why it is necessary. X-Git-Tag: 1.1.0~1771^2~1 X-Git-Url: https://git.arvados.org/arvados.git/commitdiff_plain/0b4ad564482929d3f8eaefe8324df54bb276b74b?ds=inline 5246: Add urllib3 workaround, along with a note why it is necessary. --- diff --git a/sdk/python/arvados/keep.py b/sdk/python/arvados/keep.py index 62c6709bb6..cbc51aa00f 100644 --- a/sdk/python/arvados/keep.py +++ b/sdk/python/arvados/keep.py @@ -27,6 +27,28 @@ import arvados.errors import arvados.retry as retry import arvados.util +try: + # Workaround for urllib3 bug. + # The 'requests' library enables urllib3's SNI support by default, which uses pyopenssl. + # However, urllib3 prior to version 1.10 has a major bug in this feature + # (OpenSSL WantWriteError, https://github.com/shazow/urllib3/issues/412) + # Unfortunately a certain major Linux distribution is stablizing on urllib3 + # 1.9.1 which means the following workaround is necessary to be able to use + # the arvados python sdk with the distribution-provided packages. + + import urllib3 + urllib3_ok = False + urllib3version = re.match(r'(\d+)\.(\d+)\.(\d+)', urllib3.__version__) + if (urllib3version and + int(urllib3version.group(1)) == 1 and + int(urllib3version.group(2)) >= 10): + urllib3_ok = True + if not urllib3_ok: + from urllib3.contrib import pyopenssl + pyopenssl.extract_from_urllib3() +except ImportError: + pass + _logger = logging.getLogger('arvados.keep') global_client_object = None