4-line Usage: when using Literal type
#1362
-
First Check
Commit to Help
Example Codeimport typer
from typing import Literal, get_args
# Does not work:
# type ALL_PRODUCT_TYPES_T = Literal[
ALL_PRODUCT_TYPES_T = Literal[
"Longlonglongname1:more_long_things_here",
"Longname2:NUM1ABC",
"Longname2:NUM1ABC_delete",
"Longname2:NUM2ABC",
"Longname2:NUM2ABC_delete",
"Longname3:NU_3_ABC___",
"Longname3:NU_2_CDE___",
"Longname3:NU_2_CDE____delete",
]
ALL_PRODUCT_TYPES: tuple[ALL_PRODUCT_TYPES_T, ...] = get_args(ALL_PRODUCT_TYPES_T)
app = typer.Typer()
@app.command()
def main(
product_type: ALL_PRODUCT_TYPES_T = typer.Argument(...),
# Type should really be list[ALL_PRODUCT_TYPES_T].
more_products: list[str] = typer.Argument(..., help=" ".join(ALL_PRODUCT_TYPES))
) -> None:
pass
if __name__ == "__main__":
app()DescriptionI find the help text from the new I think the 4 line Is there some toggle to avoid making a multi-line Usage-line or similar? I also get a failure in Typer if I use Operating SystemLinux Operating System DetailsNo response Typer Version0.19.2 Python Version3.12 Additional ContextNo response |
Beta Was this translation helpful? Give feedback.
Replies: 1 comment
-
|
You can configure import typer
from typing import Literal, get_args
ALL_PRODUCT_TYPES_T = Literal[
"Longlonglongname1:more_long_things_here",
"Longname2:NUM1ABC",
"Longname2:NUM1ABC_delete",
"Longname2:NUM2ABC",
"Longname2:NUM2ABC_delete",
"Longname3:NU_3_ABC___",
"Longname3:NU_2_CDE___",
"Longname3:NU_2_CDE____delete",
]
app = typer.Typer()
def get_help_for_literal(literal_type: type) -> str:
values = get_args(literal_type)
return "\n\n".join(f"'{value}'" for value in values)
@app.command()
def main(
product_type: ALL_PRODUCT_TYPES_T = typer.Argument(
..., metavar="PRODUCT_TYPE", help=get_help_for_literal(ALL_PRODUCT_TYPES_T)
),
) -> None:
pass
if __name__ == "__main__":
app()Result: As for |
Beta Was this translation helpful? Give feedback.
You can configure
Usageusingmetavarparameter: