diff options
| author | Ian Cordasco <graffatcolmingov@gmail.com> | 2016-08-06 14:16:08 -0500 |
|---|---|---|
| committer | Ian Cordasco <graffatcolmingov@gmail.com> | 2016-08-07 12:31:14 -0500 |
| commit | f67f481beea1f32e503d346e9d4d3f2f2a8b2ebe (patch) | |
| tree | a147072597dfff8d3df7333a744573f29ef95fee /src/flake8/main/debug.py | |
| parent | f768ed6fd0101de656e19d3029952e69a437549e (diff) | |
| download | flake8-f67f481beea1f32e503d346e9d4d3f2f2a8b2ebe.tar.gz | |
Add --bug-report flag to help bug reporters
When invoked it will print out JSON that has all of the debugging
information needed by the maintainers to diagnose or reproduce a bug.
Closes #207
Diffstat (limited to 'src/flake8/main/debug.py')
| -rw-r--r-- | src/flake8/main/debug.py | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/src/flake8/main/debug.py b/src/flake8/main/debug.py new file mode 100644 index 0000000..e6ea141 --- /dev/null +++ b/src/flake8/main/debug.py @@ -0,0 +1,62 @@ +"""Module containing the logic for our debugging logic.""" +from __future__ import print_function + +import json +import platform + +import setuptools + + +def print_information(option, option_string, value, parser, + option_manager=None): + """Print debugging information used in bug reports. + + :param option: + The optparse Option instance. + :type option: + optparse.Option + :param str option_string: + The option name + :param value: + The value passed to the callback parsed from the command-line + :param parser: + The optparse OptionParser instance + :type parser: + optparse.OptionParser + :param option_manager: + The Flake8 OptionManager instance. + :type option_manager: + flake8.options.manager.OptionManager + """ + if not option_manager.registered_plugins: + # NOTE(sigmavirus24): Flake8 parses options twice. The first time, we + # will not have any registered plugins. We can skip this one and only + # take action on the second time we're called. + return + print(json.dumps(information(option_manager), indent=2, sort_keys=True)) + raise SystemExit(False) + + +def information(option_manager): + """Generate the information to be printed for the bug report.""" + return { + 'version': option_manager.version, + 'plugins': plugins_from(option_manager), + 'dependencies': dependencies(), + 'platform': { + 'python_implementation': platform.python_implementation(), + 'python_version': platform.python_version(), + 'system': platform.system(), + }, + } + + +def plugins_from(option_manager): + """Generate the list of plugins installed.""" + return [{'plugin': plugin, 'version': version} + for (plugin, version) in sorted(option_manager.registered_plugins)] + + +def dependencies(): + """Generate the list of dependencies we care about.""" + return [{'dependency': 'setuptools', 'version': setuptools.__version__}] |
