config: Change ConfigFileFinder._read_config() to accept variadic args

This simplifies `._read_config()` by removing a conditional branch in
the situation where it is called with one file to process.  Now the
contract accepts any number of arguments of the same type.

Where callers invoke `._read_config()` with a `Sequence`, the call site
has been changed to unpack arguments (i.e., `*`).

The tests in `test_merged_config_parser.py` needed to return a string
for the user configuration path instead of an empty list since
`ConfigFileFinder.user_config_file()` returns a string.
This commit is contained in:
Eric N. Vander Weele 2020-01-01 23:38:51 -05:00
parent 20906d4304
commit 1a4060cd5f
3 changed files with 9 additions and 9 deletions

View file

@ -4,7 +4,7 @@ import configparser
import logging import logging
import os.path import os.path
import sys import sys
from typing import Dict, List, Sequence, Tuple, Union from typing import Dict, List, Tuple
from flake8 import utils from flake8 import utils
@ -55,11 +55,9 @@ class ConfigFileFinder(object):
# fmt: on # fmt: on
@staticmethod @staticmethod
def _read_config(files): def _read_config(*files):
# type: (Union[Sequence[str], str]) -> Tuple[configparser.RawConfigParser, List[str]] # noqa: E501 # type: (*str) -> Tuple[configparser.RawConfigParser, List[str]]
config = configparser.RawConfigParser() config = configparser.RawConfigParser()
if isinstance(files, (str, type(u""))):
files = [files]
found_files = [] found_files = []
for filename in files: for filename in files:
@ -129,7 +127,9 @@ class ConfigFileFinder(object):
Return (config, found_config_files) tuple. Return (config, found_config_files) tuple.
""" """
if self._local_configs is None: if self._local_configs is None:
config, found_files = self._read_config(self.local_config_files()) config, found_files = self._read_config(
*self.local_config_files()
)
if found_files: if found_files:
LOG.debug("Found local configuration files: %s", found_files) LOG.debug("Found local configuration files: %s", found_files)
self._local_configs = config self._local_configs = config

View file

@ -113,7 +113,7 @@ def test_local_configs_double_read():
]) ])
def test_read_config_catches_broken_config_files(files): def test_read_config_catches_broken_config_files(files):
"""Verify that we do not allow the exception to bubble up.""" """Verify that we do not allow the exception to bubble up."""
_, parsed = config.ConfigFileFinder._read_config(files) _, parsed = config.ConfigFileFinder._read_config(*files)
assert BROKEN_CONFIG_PATH not in parsed assert BROKEN_CONFIG_PATH not in parsed

View file

@ -183,7 +183,7 @@ def test_parsed_configs_are_equivalent(
localcfs.return_value = [config_fixture_path] localcfs.return_value = [config_fixture_path]
with mock.patch.object(config_finder, with mock.patch.object(config_finder,
'user_config_file') as usercf: 'user_config_file') as usercf:
usercf.return_value = [] usercf.return_value = ''
parsed_config = parser.merge_user_and_local_config() parsed_config = parser.merge_user_and_local_config()
assert parsed_config['ignore'] == ['E123', 'W234', 'E111'] assert parsed_config['ignore'] == ['E123', 'W234', 'E111']
@ -215,7 +215,7 @@ def test_parsed_hyphenated_and_underscored_names(
localcfs.return_value = [config_file] localcfs.return_value = [config_file]
with mock.patch.object(config_finder, with mock.patch.object(config_finder,
'user_config_file') as usercf: 'user_config_file') as usercf:
usercf.return_value = [] usercf.return_value = ''
parsed_config = parser.merge_user_and_local_config() parsed_config = parser.merge_user_and_local_config()
assert parsed_config['max_line_length'] == 110 assert parsed_config['max_line_length'] == 110