| Viewing file:  help.py (3.72 KB)      -rw-r--r-- Select action/file-type:
 
  (+) |  (+) |  (+) | Code (+) | Session (+) |  (+) | SDB (+) |  (+) |  (+) |  (+) |  (+) |  (+) | 
 
"""Module containing bug report helper(s)."""
 import json
 import platform
 import ssl
 import sys
 
 from pip._vendor import idna
 from pip._vendor import urllib3
 
 from . import __version__ as requests_version
 
 charset_normalizer = None
 chardet = None
 
 try:
 from pip._vendor.urllib3.contrib import pyopenssl
 except ImportError:
 pyopenssl = None
 OpenSSL = None
 cryptography = None
 else:
 import cryptography
 import OpenSSL
 
 
 def _implementation():
 """Return a dict with the Python implementation and version.
 
 Provide both the name and the version of the Python implementation
 currently running. For example, on CPython 3.10.3 it will return
 {'name': 'CPython', 'version': '3.10.3'}.
 
 This function works best on CPython and PyPy: in particular, it probably
 doesn't work for Jython or IronPython. Future investigation should be done
 to work out the correct shape of the code for those platforms.
 """
 implementation = platform.python_implementation()
 
 if implementation == "CPython":
 implementation_version = platform.python_version()
 elif implementation == "PyPy":
 implementation_version = "{}.{}.{}".format(
 sys.pypy_version_info.major,
 sys.pypy_version_info.minor,
 sys.pypy_version_info.micro,
 )
 if sys.pypy_version_info.releaselevel != "final":
 implementation_version = "".join(
 [implementation_version, sys.pypy_version_info.releaselevel]
 )
 elif implementation == "Jython":
 implementation_version = platform.python_version()  # Complete Guess
 elif implementation == "IronPython":
 implementation_version = platform.python_version()  # Complete Guess
 else:
 implementation_version = "Unknown"
 
 return {"name": implementation, "version": implementation_version}
 
 
 def info():
 """Generate information for a bug report."""
 try:
 platform_info = {
 "system": platform.system(),
 "release": platform.release(),
 }
 except OSError:
 platform_info = {
 "system": "Unknown",
 "release": "Unknown",
 }
 
 implementation_info = _implementation()
 urllib3_info = {"version": urllib3.__version__}
 charset_normalizer_info = {"version": None}
 chardet_info = {"version": None}
 if charset_normalizer:
 charset_normalizer_info = {"version": charset_normalizer.__version__}
 if chardet:
 chardet_info = {"version": chardet.__version__}
 
 pyopenssl_info = {
 "version": None,
 "openssl_version": "",
 }
 if OpenSSL:
 pyopenssl_info = {
 "version": OpenSSL.__version__,
 "openssl_version": f"{OpenSSL.SSL.OPENSSL_VERSION_NUMBER:x}",
 }
 cryptography_info = {
 "version": getattr(cryptography, "__version__", ""),
 }
 idna_info = {
 "version": getattr(idna, "__version__", ""),
 }
 
 system_ssl = ssl.OPENSSL_VERSION_NUMBER
 system_ssl_info = {"version": f"{system_ssl:x}" if system_ssl is not None else ""}
 
 return {
 "platform": platform_info,
 "implementation": implementation_info,
 "system_ssl": system_ssl_info,
 "using_pyopenssl": pyopenssl is not None,
 "using_charset_normalizer": chardet is None,
 "pyOpenSSL": pyopenssl_info,
 "urllib3": urllib3_info,
 "chardet": chardet_info,
 "charset_normalizer": charset_normalizer_info,
 "cryptography": cryptography_info,
 "idna": idna_info,
 "requests": {
 "version": requests_version,
 },
 }
 
 
 def main():
 """Pretty-print the bug information as JSON."""
 print(json.dumps(info(), sort_keys=True, indent=2))
 
 
 if __name__ == "__main__":
 main()
 
 |