google / python-fire

Python Fire is a library for automatically generating command line interfaces (CLIs) from absolutely any Python object.
Other
26.86k stars 1.44k forks source link

Inconsistent behaviour between --help and no arguments #438

Open jeanCarloMachado opened 1 year ago

jeanCarloMachado commented 1 year ago

I'm a big fan of Python Fire, it's been a huge help in building my projects. I have a small improvement request: I noticed that when I don't pass any arguments to my Fire program, I get an overview of all options of my class. However, when I pass --help, it only describes the class-level functions and misses out the instance-level ones.

I would love to see consistent behavior between the two approaches, ideally it should print all options of the class in both cases.

Thank you for your time!

Example of a personal project.

$ python_search
NAME
    python_search - Welcome to PythonSearch, An open-source assistant that helps you collect, retrieve and refactor information (and programs) efficiently using Python

SYNOPSIS
    python_search - GROUP | COMMAND

DESCRIPTION
    Welcome to PythonSearch, An open-source assistant that helps you collect, retrieve and refactor information (and programs) efficiently using Python

GROUPS
    GROUP is one of the following:

     configuration
       The main _configuration of Python Search Everything to customize about the application is configurable via code through this class

COMMANDS
    COMMAND is one of the following:

     configure_shortcuts
       Generate shortcuts for the current configuration

     install_missing_dependencies
       Install all missing dependencies that cannot be provided through the default installer

     new_project
       Create a new project in the current directory with the given name

     register_new_ui
       Starts the UI for collecting a new entry into python search

     run_key
       Runs an entry given its name or its partial name.

     search
       Opens the Search UI. Main entrypoint of the application

     set_project_location
       If you have a python search project already you can specify its location with this command

And with the --help with less content

$ python_search --help
NAME
    python_search - Welcome to PythonSearch, An open-source assistant that helps you collect, retrieve and refactor information (and programs) efficiently using Python

SYNOPSIS
    python_search COMMAND | <flags>

DESCRIPTION
    Welcome to PythonSearch, An open-source assistant that helps you collect, retrieve and refactor information (and programs) efficiently using Python

FLAGS
    --configuration=CONFIGURATION
        Type: Optional[Optional]
        Default: None

COMMANDS
    COMMAND is one of the following:

     install_missing_dependencies
       Install all missing dependencies that cannot be provided through the default installer

     new_project
       Create a new project in the current directory with the given name

     set_project_location
       If you have a python search project already you can specify its location with this command
ESPR3SS0 commented 5 months ago

Hello, I know this was made awhile ago, however I think the consistency would be nice!

The issue that causes this is that when the script is run without any flags and the class that is passed to fire has no arguments passed to it's init function, an object initialized so we get the better help message!

Specifically it would be nice to see the verbose help message when I use the --help flag. Currently, the more verbose help message being shown when no flag is passed is a little counterintuitive

PR at: https://github.com/google/python-fire/pull/504.