"""Module containing the logic for our debugging logic.""" from __future__ import print_function import json import platform import entrypoints 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.name, "version": plugin.version, "is_local": plugin.local, } for plugin in sorted(option_manager.registered_plugins) ] def dependencies(): """Generate the list of dependencies we care about.""" return [{"dependency": "entrypoints", "version": entrypoints.__version__}]