Skip to content

click.Choice prompt with StrEnum displays enum values but requires enum names #3028

Description

@lodo1995

How to replicate:

main.py:

import click
from enum import StrEnum

class MyOpt(StrEnum):
    NAME_1 = "value-1"
    NAME_2 = "value-2"
    NAME_3 = "value-3"

@click.command()
@click.option("--my-opt", type=click.Choice(MyOpt), prompt = True)
def main(my_opt):
    pass

if __name__ == "__main__":
    main()

executed with:

> uv init click-strenum-bug
> cd click-strenum-bug
> uv add click
> uv run main.py
My opt (value-1, value-2, value-3): value-1
Error: 'value-1' is not one of 'NAME_1', 'NAME_2', 'NAME_3'.

The prompt suggests the StrEnum values, but the validation requires the StrEnum names.

Expected output

Either of the following would be acceptable.

StrEnum values used consistently:

> uv run main.py
My opt (value-1, value-2, value-3): asdf
Error: 'asdf' is not one of 'value-1', 'value-2', 'value-3'.

StrEnum names used consistently:

> uv run main.py
My opt (NAME_1, NAME_2, NAME_3): asdf
Error: 'asdf' is not one of 'NAME_1', 'NAME_2', 'NAME_3'.

Environment

  • Python version: 3.13
  • Click version: 8.2.1

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    promptInteractive input and confirmation

    Type

    No type

    Projects

    No projects

      Milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions