Skip to content

Unexpected behavior of no_args_is_help with 0 or 1 commands #450

@jacob-bush-shopify

Description

@jacob-bush-shopify

First Check

  • I added a very descriptive title to this issue.
  • I used the GitHub search to find a similar issue and didn't find it.
  • I searched the Typer documentation, with the integrated search.
  • I already searched in Google "How to X in Typer" and didn't find any information.
  • I already read and followed all the tutorial in the docs and didn't find an answer.
  • I already checked if it is not related to Typer but to Click.

Example Code

Example 1

I expect help when invoked with no args

import typer

cli = typer.Typer(no_args_is_help=True)

if __name__ == "__main__":
    cli()

Actually raises an exception

$ python cli.py
AssertionError: Could not get a command for this Typer instance

Example 2

I expect help when invoked with no args

import typer

cli = typer.Typer(no_args_is_help=True)

@cli.command("1") 
def _1():
    print(1)

if __name__ == "__main__":
    cli()

Actually prints "1"

$ python cli.py
1

Example 3

I expect help when invoked with no args

import typer

cli = typer.Typer(no_args_is_help=True)

@cli.command("1") 
def _1():
    print(1)

@cli.command("2") 
def _2():
    print(2)

if __name__ == "__main__":
    cli()

Works as expected (though this breaks code relying on the behaviour of the 1-command typer app)

$ python cli.py
Usage: cli.py [OPTIONS] COMMAND [ARGS]...

Options:
  --install-completion [bash|zsh|fish|powershell|pwsh]
                                  Install completion for the specified shell.
  --show-completion [bash|zsh|fish|powershell|pwsh]
                                  Show completion for the specified shell, to
                                  copy it or customize the installation.
  --help                          Show this message and exit.

Commands:
  1
  2

Description

When no_args_is_help=True is set on my Typer application, I expect that the application will print the help text when it is called with no arguments.

When 2+ commands are registered, no_args_is_help works as expected.

However, there are two cases where this does not hold:

  • When there are 0 commands registered on the application, an exception is raised
  • When there is 1 command registered on the application, the command is called in lieu of printing the help text.

Operating System

macOS

Typer Version

0.6.1

Python Version

3.9.12

Metadata

Metadata

Assignees

No one assigned

    Labels

    questionQuestion or problem

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions