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: