There are two problems:
- The
flag_value shadows default in click.option()
- The default type is omitted, the option converts to
str anyway.
About 2., The click docs says in the option section: "If no type is provided, the type of the default value is used."
But it is not True. I have to use type=frozenset to make the option's value not be "frozenset()", which breaks my function iterating it.
And the 1. is the big deal.
I provide my option code below and a minimal reproducer script.
I'm making a venv for Mojo language, and looking at new venv code on cpython.
If click can not fix this, it can not do things like Brett Cannon does in venv cli design. That's not good.
I want scm_ignore_files to be frozenset() if the flag is provided, else it is default to frozenset(["git"]).
Why is default not useful and the flag_value is always used?
@click.option(
"--without-scm-ignore-files",
"scm_ignore_files",
is_flag=True,
type=frozenset,
flag_value=frozenset(),
default=frozenset(["git"]),
help="Skips adding SCM ignore files to the environment "
"directory (Git is supported by default).",
)
Thanks for watching!
Environment:
- Python version: Python 3.10.12
- Click version: 8.1.7
There are two problems:
flag_valueshadowsdefaultinclick.option()stranyway.About 2., The click docs says in the option section: "If no type is provided, the type of the default value is used."
But it is not True. I have to use type=frozenset to make the option's value not be "frozenset()", which breaks my function iterating it.
And the 1. is the big deal.
I provide my option code below and a minimal reproducer script.
I'm making a venv for Mojo language, and looking at new venv code on cpython.
If click can not fix this, it can not do things like Brett Cannon does in venv cli design. That's not good.
I want
scm_ignore_filesto befrozenset()if the flag is provided, else it is default tofrozenset(["git"]).Why is default not useful and the flag_value is always used?
Thanks for watching!
Environment: