Skip to content

The flag_value shadows default in click.option() #2610

@drunkwcodes

Description

@drunkwcodes

There are two problems:

  1. The flag_value shadows default in click.option()
  2. 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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions