-
-
Notifications
You must be signed in to change notification settings - Fork 1.6k
click.Choice prompt with StrEnum displays enum values but requires enum names #3028
Copy link
Copy link
Closed
Description
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
Reactions are currently unavailable