python-fire icon indicating copy to clipboard operation
python-fire copied to clipboard

Optional type args are mistyped in help

Open impredicative opened this issue 1 year ago • 5 comments
trafficstars

Type annotations that use typing.Optional are incorrectly documented when showing help.

Example 1

from typing import Optional

import fire

def main(arg: Optional[str] = 'something'):
    """Do something with arg."""


if __name__ == '__main__':
    fire.Fire(main)

The corresponding help output is:

INFO: Showing help with the command 'firetest.py -- --help'.

NAME
    firetest.py - Do something with arg.

SYNOPSIS
    firetest.py <flags>

DESCRIPTION
    Do something with arg.

FLAGS
    -a, --arg=ARG
        Type: Optional
        Default: 'something'

Here, Type: Optional is totally incorrect. It should be Optional[str]. My use of str is just an example and it can be anything.

Example 2

from typing import Optional

import fire


def main(arg: Optional[str] = None):
    """Do something with arg."""


if __name__ == '__main__':
    fire.Fire(main)

The corresponding help output is:

INFO: Showing help with the command 'firetest.py -- --help'.

NAME
    firetest.py - Do something with arg.

SYNOPSIS
    firetest.py <flags>

DESCRIPTION
    Do something with arg.

FLAGS
    -a, --arg=ARG
        Type: Optional[Optional]
        Default: None

Here, Type: Optional[Optional] is even more incorrect. It should be Optional[str]. My use of str is just an example and it can be anything.

impredicative avatar Apr 19 '24 13:04 impredicative

Thanks for reporting this. Looks like a bug to me. Next steps are to add a test case and identify and resolve the issue.

dbieber avatar Apr 30 '24 15:04 dbieber

Hi @dbieber,

I submitted pr #513 to solve this bug and added tests, please let me know your opinion.

Jemeljanov avatar May 22 '24 21:05 Jemeljanov

Hi @dbieber,

Updated pr #513 to work with the typing package, waiting for your review on the last commit.

Jemeljanov avatar May 28 '24 20:05 Jemeljanov

Given that fire is seemingly dead and this bug really harms the displayed help, I figure it's wise to move away from fire. Any decent LLM, e.g. gpt-4o, can replace the use of fire in a module with a different package, e.g. click.

impredicative avatar Jul 24 '24 17:07 impredicative