module containing bug report helpers import json import platform import ssl import sys import idna import urllib3 from import version as requestsversion try import charsetnormalizer except importerror charsetnormalizer none try import chardet except importerror chardet none try from urllib3 contrib import pyopenssl except importerror pyopenssl none openssl none cryptography none else import cryptography import openssl def implementation implementation platform pythonimplementation if implementation cpython implementationversion platform pythonversion elif implementation pypy implementationversion format sys pypyversioninfo major sys pypyversioninfo minor sys pypyversioninfo micro if sys pypyversioninfo releaselevel final implementationversion join implementationversion sys pypyversioninfo releaselevel elif implementation jython implementationversion platform pythonversion complete guess elif implementation ironpython implementationversion platform pythonversion complete guess else implementationversion unknown return name implementation version implementationversion def info prettyprint the bug information as json printjson dumpsinfo sortkeystrue indent2 if name main main 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 complete guess complete guess generate information for a bug report pretty print the bug information as json
import json
import platform
import ssl
import sys

import idna
import urllib3

from . import __version__ as requests_version

try:
    import charset_normalizer
except ImportError:
    charset_normalizer = None

try:
    import chardet
except ImportError:
    chardet = None

try:
    from urllib3.contrib import pyopenssl
except ImportError:
    pyopenssl = None
    OpenSSL = None
    cryptography = None
else:
    import cryptography
    import OpenSSL


def _implementation():
    
    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()  
    elif implementation == "IronPython":
        implementation_version = platform.python_version()  
    else:
        implementation_version = "Unknown"

    return {"name": implementation, "version": implementation_version}


def info():
    
    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():
    
    print(json.dumps(info(), sort_keys=True, indent=2))


if __name__ == "__main__":
    main()