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
This commit is contained in:
Ian Cordasco 2016-07-09 07:02:27 -05:00
parent 45a57df542
commit ae794fb46a
No known key found for this signature in database
GPG key ID: 656D3395E4A9791A
2 changed files with 33 additions and 5 deletions

View file

@ -5,6 +5,8 @@ import setuptools
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 @@ class Flake8(setuptools.Command):
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()

View file

@ -133,6 +133,19 @@ class Option(object):
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: