diff --git a/flake8/main.py b/flake8/main.py index e1d65c5..297618a 100644 --- a/flake8/main.py +++ b/flake8/main.py @@ -6,7 +6,7 @@ import sys import setuptools from flake8.engine import get_parser, get_style_guide -from flake8.util import is_flag, flag_on +from flake8.util import option_normalizer if sys.platform.startswith('win'): DEFAULT_CONFIG = os.path.expanduser(r'~\.flake8') @@ -104,8 +104,7 @@ class Flake8Command(setuptools.Command): value = getattr(self, option_name) if value is None: continue - if is_flag(value): - value = flag_on(value) + value = option_normalizer(value) # Check if there's any values that need to be fixed. if option_name == "include" and isinstance(value, str): value = re.findall('[^,;\s]+', value) diff --git a/flake8/tests/test_util.py b/flake8/tests/test_util.py new file mode 100644 index 0000000..32a1d44 --- /dev/null +++ b/flake8/tests/test_util.py @@ -0,0 +1,86 @@ +import unittest + +from flake8.util import option_normalizer + + +class TestOptionSerializer(unittest.TestCase): + + def test_1_is_true(self): + option = option_normalizer('1') + self.assertTrue(option) + + def test_T_is_true(self): + option = option_normalizer('T') + self.assertTrue(option) + + def test_TRUE_is_true(self): + option = option_normalizer('TRUE') + self.assertTrue(option, True) + + def test_ON_is_true(self): + option = option_normalizer('ON') + self.assertTrue(option) + + def test_t_is_true(self): + option = option_normalizer('t') + self.assertTrue(option) + + def test_true_is_true(self): + option = option_normalizer('true') + self.assertTrue(option) + + def test_on_is_true(self): + option = option_normalizer('on') + self.assertTrue(option) + + def test_0_is_false(self): + option = option_normalizer('0') + self.assertFalse(option) + + def test_F_is_false(self): + option = option_normalizer('F') + self.assertFalse(option) + + def test_FALSE_is_false(self): + option = option_normalizer('FALSE') + self.assertFalse(option) + + def test_OFF_is_false(self): + option = option_normalizer('OFF') + self.assertFalse(option) + + def test_f_is_false(self): + option = option_normalizer('f') + self.assertFalse(option) + + def test_false_is_false(self): + option = option_normalizer('false') + self.assertFalse(option) + + def test_off_is_false(self): + option = option_normalizer('off') + self.assertFalse(option) + + def test_parses_lists(self): + answer = ['F401', 'F402', 'F403', 'F404'] + + option = option_normalizer('F401,F402,F403,F404') + self.assertEqual(option, answer) + + option = option_normalizer('F401 ,F402 ,F403 ,F404') + self.assertEqual(option, answer) + + option = option_normalizer('F401, F402, F403, F404') + self.assertEqual(option, answer) + + option = option_normalizer('''\ + F401, + F402, + F403, + F404, + ''') + self.assertEqual(option, answer) + + +if __name__ == '__main__': + unittest.main() diff --git a/flake8/util.py b/flake8/util.py index fda6331..da33f42 100644 --- a/flake8/util.py +++ b/flake8/util.py @@ -38,12 +38,6 @@ class OrderedSet(list): self.append(value) -def is_flag(val): - """Guess if the value could be an on/off toggle""" - val = str(val) - return val.upper() in ('1', '0', 'F', 'T', 'TRUE', 'FALSE', 'ON', 'OFF') - - def is_windows(): """Determine if the system is Windows.""" return os.name == 'nt' @@ -63,6 +57,13 @@ def force_disable_jobs(styleguide): return is_windows() or is_using_stdin(styleguide.paths) -def flag_on(val): - """Return true if flag is on""" - return str(val).upper() in ('1', 'T', 'TRUE', 'ON') +def option_normalizer(value): + if str(value).upper() in ('1', 'T', 'TRUE', 'ON'): + value = True + if str(value).upper() in ('0', 'F', 'FALSE', 'OFF'): + value = False + + if isinstance(value, str): + value = [opt.strip() for opt in value.split(',') if opt.strip()] + + return value