diff --git a/scrapy/utils/ssl.py b/scrapy/utils/ssl.py index e54232abd..632827471 100644 --- a/scrapy/utils/ssl.py +++ b/scrapy/utils/ssl.py @@ -1,5 +1,6 @@ # -*- coding: utf-8 -*- +import OpenSSL import OpenSSL._util as pyOpenSSLutil from scrapy.utils.python import to_native_str @@ -48,3 +49,10 @@ def get_temp_key_info(ssl_object): key_info.append(ffi_buf_to_string(pyOpenSSLutil.lib.OBJ_nid2sn(key_type))) key_info.append('%s bits' % pyOpenSSLutil.lib.EVP_PKEY_bits(temp_key)) return ', '.join(key_info) + + +def get_openssl_version(): + system_openssl = OpenSSL.SSL.SSLeay_version( + OpenSSL.SSL.SSLEAY_VERSION + ).decode('ascii', errors='replace') + return '{} ({})'.format(OpenSSL.version.__version__, system_openssl) diff --git a/scrapy/utils/versions.py b/scrapy/utils/versions.py index 58c7aef85..48484b303 100644 --- a/scrapy/utils/versions.py +++ b/scrapy/utils/versions.py @@ -1,6 +1,7 @@ import platform import sys +import cryptography import cssselect import lxml.etree import parsel @@ -8,20 +9,12 @@ import twisted import w3lib import scrapy +from scrapy.utils.ssl import get_openssl_version def scrapy_components_versions(): lxml_version = ".".join(map(str, lxml.etree.LXML_VERSION)) libxml2_version = ".".join(map(str, lxml.etree.LIBXML_VERSION)) - try: - w3lib_version = w3lib.__version__ - except AttributeError: - w3lib_version = "<1.14.3" - try: - import cryptography - cryptography_version = cryptography.__version__ - except ImportError: - cryptography_version = "unknown" return [ ("Scrapy", scrapy.__version__), @@ -29,22 +22,10 @@ def scrapy_components_versions(): ("libxml2", libxml2_version), ("cssselect", cssselect.__version__), ("parsel", parsel.__version__), - ("w3lib", w3lib_version), + ("w3lib", w3lib.__version__), ("Twisted", twisted.version.short()), ("Python", sys.version.replace("\n", "- ")), - ("pyOpenSSL", _get_openssl_version()), - ("cryptography", cryptography_version), + ("pyOpenSSL", get_openssl_version()), + ("cryptography", cryptography.__version__), ("Platform", platform.platform()), ] - - -def _get_openssl_version(): - try: - import OpenSSL - openssl = OpenSSL.SSL.SSLeay_version(OpenSSL.SSL.SSLEAY_VERSION)\ - .decode('ascii', errors='replace') - # pyOpenSSL 0.12 does not expose openssl version - except AttributeError: - openssl = 'Unknown OpenSSL version' - - return '{} ({})'.format(OpenSSL.version.__version__, openssl)