From 8d7f03dac8739afed890af0c0921965786c5e83c Mon Sep 17 00:00:00 2001 From: David Lord Date: Mon, 28 Mar 2022 10:20:42 -0700 Subject: [PATCH] treat empty auto_envvar as None --- CHANGES.rst | 3 +++ src/click/core.py | 5 ++++- tests/test_options.py | 7 ++++--- 3 files changed, 11 insertions(+), 4 deletions(-) diff --git a/CHANGES.rst b/CHANGES.rst index 191937d94..55fa41a0b 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -52,6 +52,9 @@ Version 8.1.0 ``name``. :issue:`2168` - Shell completion prioritizes option values with option prefixes over new options. :issue:`2040` +- Options that get an environment variable value using + ``autoenvvar_prefix`` treat an empty value as ``None``, consistent + with a direct ``envvar``. :issue:`2146` Version 8.0.4 diff --git a/src/click/core.py b/src/click/core.py index 939ad817a..18431cd1d 100644 --- a/src/click/core.py +++ b/src/click/core.py @@ -2834,7 +2834,10 @@ def resolve_envvar_value(self, ctx: Context) -> t.Optional[str]: envvar = f"{ctx.auto_envvar_prefix}_{self.name.upper()}" rv = os.environ.get(envvar) - return rv + if rv: + return rv + + return None def value_from_envvar(self, ctx: Context) -> t.Optional[t.Any]: rv: t.Optional[t.Any] = self.resolve_envvar_value(ctx) diff --git a/tests/test_options.py b/tests/test_options.py index 3beff11ba..2e1f29106 100644 --- a/tests/test_options.py +++ b/tests/test_options.py @@ -153,14 +153,15 @@ def test_init_bad_default_list(runner, multiple, nargs, default): click.Option(["-a"], type=type, multiple=multiple, nargs=nargs, default=default) -def test_empty_envvar(runner): +@pytest.mark.parametrize("env_key", ["MYPATH", "AUTO_MYPATH"]) +def test_empty_envvar(runner, env_key): @click.command() @click.option("--mypath", type=click.Path(exists=True), envvar="MYPATH") def cli(mypath): click.echo(f"mypath: {mypath}") - result = runner.invoke(cli, [], env={"MYPATH": ""}) - assert result.exit_code == 0 + result = runner.invoke(cli, env={env_key: ""}, auto_envvar_prefix="AUTO") + assert result.exception is None assert result.output == "mypath: None\n"