"""Module containing bug report helper(s).""" from __future__ import print_function import json import platform import sys import ssl from pip._vendor import idna from pip._vendor import urllib3 from pip._vendor import chardet from . import __version__ as requests_version try: from pip._vendor.urllib3.contrib import pyopenssl except ImportError: pyopenssl = None OpenSSL = None cryptography = None else: import OpenSSL import cryptography 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 2.7.5 it will return {'name': 'CPython', 'version': '2.7.5'}. 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 = '%s.%s.%s' % (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 IOError: platform_info = { 'system': 'Unknown', 'release': 'Unknown', } implementation_info = _implementation() urllib3_info = {'version': urllib3.__version__} chardet_info = {'version': chardet.__version__} pyopenssl_info = { 'version': None, 'openssl_version': '', } if OpenSSL: pyopenssl_info = { 'version': OpenSSL.__version__, 'openssl_version': '%x' % OpenSSL.SSL.OPENSSL_VERSION_NUMBER, } cryptography_info = { 'version': getattr(cryptography, '__version__', ''), } idna_info = { 'version': getattr(idna, '__version__', ''), } system_ssl = ssl.OPENSSL_VERSION_NUMBER system_ssl_info = { 'version': '%x' % system_ssl 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, 'pyOpenSSL': pyopenssl_info, 'urllib3': urllib3_info, 'chardet': chardet_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()
Name | Type | Size | Permission | Actions |
---|---|---|---|---|
__pycache__ | Folder | 0755 |
|
|
.__version__.pyo.40009 | File | 605 B | 0644 |
|
.adapters.pyo.40009 | File | 19.22 KB | 0644 |
|
.api.pyo.40009 | File | 7.26 KB | 0644 |
|
.auth.pyo.40009 | File | 10.61 KB | 0644 |
|
.certs.pyo.40009 | File | 631 B | 0644 |
|
.compat.pyo.40009 | File | 1.92 KB | 0644 |
|
.cookies.pyo.40009 | File | 22.85 KB | 0644 |
|
.exceptions.pyo.40009 | File | 7.32 KB | 0644 |
|
.help.pyo.40009 | File | 3.36 KB | 0644 |
|
.hooks.pyo.40009 | File | 1.23 KB | 0644 |
|
.models.pyo.40009 | File | 29.39 KB | 0644 |
|
.packages.pyo.40009 | File | 591 B | 0644 |
|
.sessions.pyo.40009 | File | 22.74 KB | 0644 |
|
.status_codes.pyo.40009 | File | 6.04 KB | 0644 |
|
.structures.pyo.40009 | File | 5.54 KB | 0644 |
|
.utils.pyo.40009 | File | 27.41 KB | 0644 |
|
__init__.py | File | 4.36 KB | 0644 |
|
__init__.pyc | File | 4.33 KB | 0644 |
|
__init__.pyo | File | 4.16 KB | 0644 |
|
__version__.py | File | 441 B | 0644 |
|
__version__.pyc | File | 605 B | 0644 |
|
__version__.pyo | File | 605 B | 0644 |
|
_internal_utils.py | File | 1.07 KB | 0644 |
|
_internal_utils.pyc | File | 1.54 KB | 0644 |
|
_internal_utils.pyo | File | 1.49 KB | 0644 |
|
adapters.py | File | 21.04 KB | 0644 |
|
adapters.pyc | File | 19.22 KB | 0644 |
|
adapters.pyo | File | 19.22 KB | 0644 |
|
api.py | File | 6.34 KB | 0644 |
|
api.pyc | File | 7.26 KB | 0644 |
|
api.pyo | File | 7.26 KB | 0644 |
|
auth.py | File | 9.97 KB | 0644 |
|
auth.pyc | File | 10.61 KB | 0644 |
|
auth.pyo | File | 10.61 KB | 0644 |
|
certs.py | File | 465 B | 0644 |
|
certs.pyc | File | 631 B | 0644 |
|
certs.pyo | File | 631 B | 0644 |
|
compat.py | File | 2 KB | 0644 |
|
compat.pyc | File | 1.92 KB | 0644 |
|
compat.pyo | File | 1.92 KB | 0644 |
|
cookies.py | File | 18 KB | 0644 |
|
cookies.pyc | File | 22.85 KB | 0644 |
|
cookies.pyo | File | 22.85 KB | 0644 |
|
exceptions.py | File | 3.1 KB | 0644 |
|
exceptions.pyc | File | 7.32 KB | 0644 |
|
exceptions.pyo | File | 7.32 KB | 0644 |
|
help.py | File | 3.49 KB | 0644 |
|
help.pyc | File | 3.36 KB | 0644 |
|
help.pyo | File | 3.36 KB | 0644 |
|
hooks.py | File | 757 B | 0644 |
|
hooks.pyc | File | 1.23 KB | 0644 |
|
hooks.pyo | File | 1.23 KB | 0644 |
|
models.py | File | 33.48 KB | 0644 |
|
models.pyc | File | 29.39 KB | 0644 |
|
models.pyo | File | 29.39 KB | 0644 |
|
packages.py | File | 695 B | 0644 |
|
packages.pyc | File | 591 B | 0644 |
|
packages.pyo | File | 591 B | 0644 |
|
sessions.py | File | 28.63 KB | 0644 |
|
sessions.pyc | File | 22.74 KB | 0644 |
|
sessions.pyo | File | 22.74 KB | 0644 |
|
status_codes.py | File | 4.09 KB | 0644 |
|
status_codes.pyc | File | 6.04 KB | 0644 |
|
status_codes.pyo | File | 6.04 KB | 0644 |
|
structures.py | File | 2.93 KB | 0644 |
|
structures.pyc | File | 5.54 KB | 0644 |
|
structures.pyo | File | 5.54 KB | 0644 |
|
utils.py | File | 29.47 KB | 0644 |
|
utils.pyc | File | 27.41 KB | 0644 |
|
utils.pyo | File | 27.41 KB | 0644 |
|