From bad51fc70140efc0d9fdf5de632ca4798b995752 Mon Sep 17 00:00:00 2001 From: Ilya Kulakov Date: Fri, 13 Jan 2017 18:20:28 -0800 Subject: Fix certifi fallback is not used on Windows. --- setuptools/ssl_support.py | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) (limited to 'setuptools/ssl_support.py') diff --git a/setuptools/ssl_support.py b/setuptools/ssl_support.py index 82f8870a..661b6b52 100644 --- a/setuptools/ssl_support.py +++ b/setuptools/ssl_support.py @@ -237,14 +237,21 @@ def get_win_certfile(): def find_ca_bundle(): """Return an existing CA bundle path, or None""" + ca_bundle_path = None + if os.name == 'nt': - return get_win_certfile() + ca_bundle_path = get_win_certfile() else: for cert_path in cert_paths: if os.path.isfile(cert_path): - return cert_path - try: - import certifi - return certifi.where() - except (ImportError, ResolutionError, ExtractionError): - return None + ca_bundle_path = cert_path + break + + if ca_bundle_path is None: + try: + import certifi + ca_bundle_path = certifi.where() + except (ImportError, ResolutionError, ExtractionError): + pass + + return ca_bundle_path -- cgit v1.2.1 From 827c4c365fccad37907688b3518e7d351d3bfc5b Mon Sep 17 00:00:00 2001 From: "Jason R. Coombs" Date: Mon, 16 Jan 2017 14:20:39 -0500 Subject: Refactor find_ca_bundle to simplify branching logic. --- setuptools/ssl_support.py | 29 ++++++++++++----------------- 1 file changed, 12 insertions(+), 17 deletions(-) (limited to 'setuptools/ssl_support.py') diff --git a/setuptools/ssl_support.py b/setuptools/ssl_support.py index 661b6b52..2313651f 100644 --- a/setuptools/ssl_support.py +++ b/setuptools/ssl_support.py @@ -3,7 +3,7 @@ import socket import atexit import re -from setuptools.extern.six.moves import urllib, http_client, map +from setuptools.extern.six.moves import urllib, http_client, map, filter import pkg_resources from pkg_resources import ResolutionError, ExtractionError @@ -237,21 +237,16 @@ def get_win_certfile(): def find_ca_bundle(): """Return an existing CA bundle path, or None""" - ca_bundle_path = None + extant_cert_paths = filter(os.path.isfile, cert_paths) + return ( + get_win_certfile() + or next(extant_cert_paths, None) + or _certifi_where() + ) - if os.name == 'nt': - ca_bundle_path = get_win_certfile() - else: - for cert_path in cert_paths: - if os.path.isfile(cert_path): - ca_bundle_path = cert_path - break - if ca_bundle_path is None: - try: - import certifi - ca_bundle_path = certifi.where() - except (ImportError, ResolutionError, ExtractionError): - pass - - return ca_bundle_path +def _certifi_where(): + try: + return __import__('certifi').where() + except (ImportError, ResolutionError, ExtractionError): + pass -- cgit v1.2.1 From 88c77110867997d171cdee17e4b52e4011e00911 Mon Sep 17 00:00:00 2001 From: "Jason R. Coombs" Date: Mon, 16 Jan 2017 14:25:32 -0500 Subject: Replace global variable serving as an implicit cache with an explicit 'once' decorator. --- setuptools/ssl_support.py | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) (limited to 'setuptools/ssl_support.py') diff --git a/setuptools/ssl_support.py b/setuptools/ssl_support.py index 2313651f..0635c43d 100644 --- a/setuptools/ssl_support.py +++ b/setuptools/ssl_support.py @@ -2,6 +2,7 @@ import os import socket import atexit import re +import functools from setuptools.extern.six.moves import urllib, http_client, map, filter @@ -204,14 +205,18 @@ def opener_for(ca_bundle=None): ).open -_wincerts = None +# from jaraco.functools +def once(func): + @functools.wraps(func) + def wrapper(*args, **kwargs): + if not hasattr(func, 'always_returns'): + func.always_returns = func(*args, **kwargs) + return func.always_returns + return wrapper +@once def get_win_certfile(): - global _wincerts - if _wincerts is not None: - return _wincerts.name - try: from wincertstore import CertFile except ImportError: -- cgit v1.2.1 From f024bd4e0ade92953f5dff85364bd12dd06e1e8f Mon Sep 17 00:00:00 2001 From: "Jason R. Coombs" Date: Mon, 16 Jan 2017 14:25:46 -0500 Subject: Remove unused import --- setuptools/ssl_support.py | 1 - 1 file changed, 1 deletion(-) (limited to 'setuptools/ssl_support.py') diff --git a/setuptools/ssl_support.py b/setuptools/ssl_support.py index 0635c43d..d827d11b 100644 --- a/setuptools/ssl_support.py +++ b/setuptools/ssl_support.py @@ -6,7 +6,6 @@ import functools from setuptools.extern.six.moves import urllib, http_client, map, filter -import pkg_resources from pkg_resources import ResolutionError, ExtractionError try: -- cgit v1.2.1 From 89cbd6c2c6355f0fa99e86394a6d86e1b624950d Mon Sep 17 00:00:00 2001 From: "Jason R. Coombs" Date: Mon, 16 Jan 2017 14:29:59 -0500 Subject: Remove unused parameter --- setuptools/ssl_support.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'setuptools/ssl_support.py') diff --git a/setuptools/ssl_support.py b/setuptools/ssl_support.py index d827d11b..efd22d5f 100644 --- a/setuptools/ssl_support.py +++ b/setuptools/ssl_support.py @@ -222,11 +222,10 @@ def get_win_certfile(): return None class MyCertFile(CertFile): - def __init__(self, stores=(), certs=()): + def __init__(self, stores=()): CertFile.__init__(self) for store in stores: self.addstore(store) - self.addcerts(certs) atexit.register(self.close) def close(self): -- cgit v1.2.1 From 7b322451271218e3e8f5a207958928268c34e916 Mon Sep 17 00:00:00 2001 From: "Jason R. Coombs" Date: Mon, 16 Jan 2017 14:31:41 -0500 Subject: Rely on namespacing to discriminate between novel class and parent. --- setuptools/ssl_support.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'setuptools/ssl_support.py') diff --git a/setuptools/ssl_support.py b/setuptools/ssl_support.py index efd22d5f..af28ca2f 100644 --- a/setuptools/ssl_support.py +++ b/setuptools/ssl_support.py @@ -217,24 +217,24 @@ def once(func): @once def get_win_certfile(): try: - from wincertstore import CertFile + import wincertstore except ImportError: return None - class MyCertFile(CertFile): + class CertFile(wincertstore.CertFile): def __init__(self, stores=()): - CertFile.__init__(self) + super(CertFile, self).__init__() for store in stores: self.addstore(store) atexit.register(self.close) def close(self): try: - super(MyCertFile, self).close() + super(CertFile, self).close() except OSError: pass - _wincerts = MyCertFile(stores=['CA', 'ROOT']) + _wincerts = CertFile(stores=['CA', 'ROOT']) return _wincerts.name -- cgit v1.2.1 From e316a702071feecc059102e032439e8ca0551c1a Mon Sep 17 00:00:00 2001 From: "Jason R. Coombs" Date: Mon, 16 Jan 2017 14:35:33 -0500 Subject: Simply invoke addstore twice, rather than looping. --- setuptools/ssl_support.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'setuptools/ssl_support.py') diff --git a/setuptools/ssl_support.py b/setuptools/ssl_support.py index af28ca2f..72b18ef2 100644 --- a/setuptools/ssl_support.py +++ b/setuptools/ssl_support.py @@ -222,10 +222,8 @@ def get_win_certfile(): return None class CertFile(wincertstore.CertFile): - def __init__(self, stores=()): + def __init__(self): super(CertFile, self).__init__() - for store in stores: - self.addstore(store) atexit.register(self.close) def close(self): @@ -234,7 +232,9 @@ def get_win_certfile(): except OSError: pass - _wincerts = CertFile(stores=['CA', 'ROOT']) + _wincerts = CertFile() + _wincerts.addstore('CA') + _wincerts.addstore('ROOT') return _wincerts.name -- cgit v1.2.1