From: Richard Si <63936253+ichard26@users.noreply.github.com> Date: Mon, 1 Jun 2020 18:00:00 +0000 (-0400) Subject: Convert (most of the) configuration values from pyproject.toml to strings (#1466) X-Git-Url: https://git.madduck.net/etc/vim.git/commitdiff_plain/d10f85738ddc663fcc1ad72868d89df750956b4b?ds=sidebyside Convert (most of the) configuration values from pyproject.toml to strings (#1466) * Convert config values to string We need to convert all configuration values from the pyproject.toml file because Click already does value processing and conversion and it only expects the exact Python type or string. Click doesn't like the integer 1 as a boolean for example. This also means other unsupported types like datetime.time will be rejected by Click as a unvalid value instead of throwing an exception. We only skip converting objects that are an instance of collections.abc.Iterable because it's almost impossible to get back the original iterable of a stringified iterable. * Move where the conversion happens Instead of converting the values in the merged 'default_map', I should convert the values that were read from the 'pyproject.toml' file. * Change collections.abc.Iterable to (list, dict) I also moved where the conversion happens... again. I am rather indecisive if you haven't noticed. It should be better as it takes place in the parse_pyproject_toml logic where configuration modification already takes place. Actually when this PR was first created I had the conversion happen in that return statement, but the target_version check was complaining about it being a string. So I moved the conversion after that check, but then Click didn't like the stringifed list, which led me to check whether the value was an instance of an Iterable before turning it into a string. And... I forgot that type checking before conversion would allow it to work before the target_version check anyway. --- diff --git a/src/black/__init__.py b/src/black/__init__.py index a7e89cc..886d9c2 100644 --- a/src/black/__init__.py +++ b/src/black/__init__.py @@ -281,7 +281,12 @@ def parse_pyproject_toml(path_config: str) -> Dict[str, Any]: """ pyproject_toml = toml.load(path_config) config = pyproject_toml.get("tool", {}).get("black", {}) - return {k.replace("--", "").replace("-", "_"): v for k, v in config.items()} + return { + k.replace("--", "").replace("-", "_"): str(v) + if not isinstance(v, (list, dict)) + else v + for k, v in config.items() + } def read_pyproject_toml(