comparison planemo/lib/python3.7/site-packages/requests/help.py @ 1:56ad4e20f292 draft

"planemo upload commit 6eee67778febed82ddd413c3ca40b3183a3898f1"
author guerler
date Fri, 31 Jul 2020 00:32:28 -0400
parents
children
comparison
equal deleted inserted replaced
0:d30785e31577 1:56ad4e20f292
1 """Module containing bug report helper(s)."""
2 from __future__ import print_function
3
4 import json
5 import platform
6 import sys
7 import ssl
8
9 import idna
10 import urllib3
11 import chardet
12
13 from . import __version__ as requests_version
14
15 try:
16 from urllib3.contrib import pyopenssl
17 except ImportError:
18 pyopenssl = None
19 OpenSSL = None
20 cryptography = None
21 else:
22 import OpenSSL
23 import cryptography
24
25
26 def _implementation():
27 """Return a dict with the Python implementation and version.
28
29 Provide both the name and the version of the Python implementation
30 currently running. For example, on CPython 2.7.5 it will return
31 {'name': 'CPython', 'version': '2.7.5'}.
32
33 This function works best on CPython and PyPy: in particular, it probably
34 doesn't work for Jython or IronPython. Future investigation should be done
35 to work out the correct shape of the code for those platforms.
36 """
37 implementation = platform.python_implementation()
38
39 if implementation == 'CPython':
40 implementation_version = platform.python_version()
41 elif implementation == 'PyPy':
42 implementation_version = '%s.%s.%s' % (sys.pypy_version_info.major,
43 sys.pypy_version_info.minor,
44 sys.pypy_version_info.micro)
45 if sys.pypy_version_info.releaselevel != 'final':
46 implementation_version = ''.join([
47 implementation_version, sys.pypy_version_info.releaselevel
48 ])
49 elif implementation == 'Jython':
50 implementation_version = platform.python_version() # Complete Guess
51 elif implementation == 'IronPython':
52 implementation_version = platform.python_version() # Complete Guess
53 else:
54 implementation_version = 'Unknown'
55
56 return {'name': implementation, 'version': implementation_version}
57
58
59 def info():
60 """Generate information for a bug report."""
61 try:
62 platform_info = {
63 'system': platform.system(),
64 'release': platform.release(),
65 }
66 except IOError:
67 platform_info = {
68 'system': 'Unknown',
69 'release': 'Unknown',
70 }
71
72 implementation_info = _implementation()
73 urllib3_info = {'version': urllib3.__version__}
74 chardet_info = {'version': chardet.__version__}
75
76 pyopenssl_info = {
77 'version': None,
78 'openssl_version': '',
79 }
80 if OpenSSL:
81 pyopenssl_info = {
82 'version': OpenSSL.__version__,
83 'openssl_version': '%x' % OpenSSL.SSL.OPENSSL_VERSION_NUMBER,
84 }
85 cryptography_info = {
86 'version': getattr(cryptography, '__version__', ''),
87 }
88 idna_info = {
89 'version': getattr(idna, '__version__', ''),
90 }
91
92 system_ssl = ssl.OPENSSL_VERSION_NUMBER
93 system_ssl_info = {
94 'version': '%x' % system_ssl if system_ssl is not None else ''
95 }
96
97 return {
98 'platform': platform_info,
99 'implementation': implementation_info,
100 'system_ssl': system_ssl_info,
101 'using_pyopenssl': pyopenssl is not None,
102 'pyOpenSSL': pyopenssl_info,
103 'urllib3': urllib3_info,
104 'chardet': chardet_info,
105 'cryptography': cryptography_info,
106 'idna': idna_info,
107 'requests': {
108 'version': requests_version,
109 },
110 }
111
112
113 def main():
114 """Pretty-print the bug information as JSON."""
115 print(json.dumps(info(), sort_keys=True, indent=2))
116
117
118 if __name__ == '__main__':
119 main()