From ae794fb46a177c754071c7a36811893c8dedc710 Mon Sep 17 00:00:00 2001 From: Ian Cordasco Date: Sat, 9 Jul 2016 07:02:27 -0500 Subject: [PATCH] Update setuptools integration for setup.cfg When flake8's config is in setup.cfg, setuptools attempts to set those options on the command instance. If they don't exist, it fails early complaining that a specific option does not exist. This adds this back and does it better than the Flake8 2.x version. Closes #163 --- src/flake8/main/setuptools_command.py | 25 ++++++++++++++++++++----- src/flake8/options/manager.py | 13 +++++++++++++ 2 files changed, 33 insertions(+), 5 deletions(-) diff --git a/src/flake8/main/setuptools_command.py b/src/flake8/main/setuptools_command.py index 1c27bf69..4978c9a4 100644 --- a/src/flake8/main/setuptools_command.py +++ b/src/flake8/main/setuptools_command.py @@ -5,6 +5,8 @@ from flake8.main import application as app +UNSET = object() + class Flake8(setuptools.Command): """Run Flake8 via setuptools/distutils for registered modules.""" @@ -21,11 +23,25 @@ class Flake8(setuptools.Command): def initialize_options(self): """Override this method to initialize our application.""" - pass + self.flake8 = app.Application() + self.flake8.initialize([]) + options = self.flake8.option_manager.options + for option in options: + if option.parse_from_config: + setattr(self, option.config_name, UNSET) def finalize_options(self): """Override this to parse the parameters.""" - pass + options = self.flake8.option_manager.options + for option in options: + if option.parse_from_config: + name = option.config_name + value = getattr(self, name, UNSET) + if value is UNSET: + continue + setattr(self.flake8.options, + name, + option.normalize_from_setuptools(value)) def package_files(self): """Collect the files/dirs included in the registered modules.""" @@ -72,6 +88,5 @@ def distribution_files(self): def run(self): """Run the Flake8 application.""" - flake8 = app.Application() - flake8.run(list(self.distribution_files())) - flake8.exit() + self.flake8.run_checks(list(self.distribution_files())) + self.flake8.exit() diff --git a/src/flake8/options/manager.py b/src/flake8/options/manager.py index c6a3fcba..f9d9e261 100644 --- a/src/flake8/options/manager.py +++ b/src/flake8/options/manager.py @@ -133,6 +133,19 @@ def normalize(self, value): return utils.parse_comma_separated_list(value) return value + def normalize_from_setuptools(self, value): + """Normalize the value received from setuptools.""" + value = self.normalize(value) + if self.type == 'int' or self.action == 'count': + return int(value) + if self.action in ('store_true', 'store_false'): + value = str(value).upper() + if value in ('1', 'T', 'TRUE', 'ON'): + return True + if value in ('0', 'F', 'FALSE', 'OFF'): + return False + return value + def to_optparse(self): """Convert a Flake8 Option to an optparse Option.""" if self._opt is None: