From 567e12bfb8d0f4e2a4f6fddf0fab9ffbcbf6d49f Mon Sep 17 00:00:00 2001 From: Ian Cordasco Date: Thu, 23 Mar 2017 07:22:55 -0500 Subject: [PATCH 1/4] Add debugging submodule for bug reporters The suggested usage in a bug report would be python -c 'from requests import _bug; _bug.print_information()' This should generate most of the information we tend to ask for repeatedly from bug reporters. --- requests/_bug.py | 99 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 99 insertions(+) create mode 100644 requests/_bug.py diff --git a/requests/_bug.py b/requests/_bug.py new file mode 100644 index 00000000..d447fe86 --- /dev/null +++ b/requests/_bug.py @@ -0,0 +1,99 @@ +"""Module containing bug report helper(s).""" +from __future__ import print_function + +import json +import platform +import sys +import ssl + +from . import __version__ as requests_version + +try: + from .packages.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 verison. + + 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 information(): + """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() + 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__', ''), + } + + return { + 'platform': platform_info, + 'implementation': implementation_info, + 'system_ssl': { + 'version': '%x' % ssl.OPENSSL_VERSION_NUMBER, + }, + 'using_pyopenssl': pyopenssl is not None, + 'pyOpenSSL': pyopenssl_info, + 'cryptography': cryptography_info, + 'requests': { + 'version': requests_version, + }, + } + + +def print_information(): + """Pretty-print the bug information as JSON.""" + print(json.dumps(information(), sort_keys=True, indent=2)) From 6d082ea9724a6dc75d14c08ebe3d4f4ac7b6610f Mon Sep 17 00:00:00 2001 From: Kenneth Reitz Date: Sat, 27 May 2017 16:49:48 -0400 Subject: [PATCH 2/4] add info about chardet and urllib3 --- requests/{_bug.py => help.py} | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) rename requests/{_bug.py => help.py} (93%) diff --git a/requests/_bug.py b/requests/help.py similarity index 93% rename from requests/_bug.py rename to requests/help.py index d447fe86..779c7ddc 100644 --- a/requests/_bug.py +++ b/requests/help.py @@ -6,6 +6,9 @@ import platform import sys import ssl +import urllib3 +import chardet + from . import __version__ as requests_version try: @@ -66,6 +69,9 @@ def information(): } implementation_info = _implementation() + urllib3_info = urllib3.__version__ + chardet_info = chardet.__version__ + pyopenssl_info = { 'version': None, 'openssl_version': '', @@ -87,13 +93,18 @@ def information(): }, 'using_pyopenssl': pyopenssl is not None, 'pyOpenSSL': pyopenssl_info, + 'urllib3': urllib3_info, + 'chardet': chardet_info, 'cryptography': cryptography_info, 'requests': { 'version': requests_version, }, } - -def print_information(): +def main(): """Pretty-print the bug information as JSON.""" print(json.dumps(information(), sort_keys=True, indent=2)) + +if __name__ == '__main__': + main() + From bf4a813304cc17b4ed4c4e4178024303c530fb0d Mon Sep 17 00:00:00 2001 From: Kenneth Reitz Date: Sat, 27 May 2017 16:50:51 -0400 Subject: [PATCH 3/4] rename information/info --- requests/help.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/requests/help.py b/requests/help.py index 779c7ddc..0412a94b 100644 --- a/requests/help.py +++ b/requests/help.py @@ -55,7 +55,7 @@ def _implementation(): return {'name': implementation, 'version': implementation_version} -def information(): +def info(): """Generate information for a bug report.""" try: platform_info = { @@ -103,7 +103,7 @@ def information(): def main(): """Pretty-print the bug information as JSON.""" - print(json.dumps(information(), sort_keys=True, indent=2)) + print(json.dumps(info(), sort_keys=True, indent=2)) if __name__ == '__main__': main() From 0ae8524e3b2765a0d1f6a32eef47dfc58f156845 Mon Sep 17 00:00:00 2001 From: Kenneth Reitz Date: Sat, 27 May 2017 16:57:50 -0400 Subject: [PATCH 4/4] v2.16.4 --- HISTORY.rst | 5 +++++ requests/__version__.py | 4 ++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/HISTORY.rst b/HISTORY.rst index 25cd5096..3190bc4a 100644 --- a/HISTORY.rst +++ b/HISTORY.rst @@ -3,6 +3,11 @@ Release History --------------- +2.16.4 (2017-05-27) ++++++++++++++++++++ + +- Introduction of the ``$ python -m requests.help`` command, for debugging with maintainers! + 2.16.3 (2017-05-27) +++++++++++++++++++ diff --git a/requests/__version__.py b/requests/__version__.py index 7eec1959..b15cda03 100644 --- a/requests/__version__.py +++ b/requests/__version__.py @@ -5,8 +5,8 @@ __title__ = 'requests' __description__ = 'Python HTTP for Humans.' __url__ = 'http://python-requests.org' -__version__ = '2.16.3' -__build__ = 0x021603 +__version__ = '2.16.4' +__build__ = 0x021604 __author__ = 'Kenneth Reitz' __author_email__ = 'me@kennethreitz.org' __license__ = 'Apache 2.0'