Skip to content

[bug] short flags/arguments does not work with **kwargs #454

@diogo-rossi

Description

@diogo-rossi

Description:

Short flags/arguments (e.g. -u for --username) does not work with **kwargs

Example that works OK:

The following example works ok:

import fire

def cli(first_arg="left", second_arg="right"):
    """Prints the 2 arguments separated by bar
       
    Parameters
    ----------
    first_arg : str
        the first arg
    second_arg : str
        the second arg
    """
    print(f"{first_arg} | {second_arg}" )

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

Help output

❯ python .\example.py -- --help
NAME
    example.py - Prints the 2 arguments separated by bar

SYNOPSIS
    example.py <flags>

DESCRIPTION
    Prints the 2 arguments separated by bar

FLAGS
    -f, --first_arg=FIRST_ARG
        Default: 'left'
        the first arg
    -s, --second_arg=SECOND_ARG
        Default: 'right'
        the second arg

Usage with short flags

❯ python .\example.py -f="hello" -s="word"
hello | word

Example that does not work:

The following next example does not work with short flags, even when they are showing on the help output.
It is using **kwargs. It seems the short flags are going to the **kwargs dictionary.

import fire

def cli(first_arg="left", second_arg="right", **kwargs):
    """Prints the 2 arguments separated by bar
       
    Parameters
    ----------
    first_arg : str
        the first arg
    second_arg : str
        the second arg
    kwargs : str
        additional args
    """
    print(f"{first_arg} | {second_arg}" )
    print(kwargs)

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

Help output

❯ python .\example2.py -- --help
NAME
    example2.py - Prints the 2 arguments separated by bar

SYNOPSIS
    example2.py <flags>

DESCRIPTION
    Prints the 2 arguments separated by bar

FLAGS
    -f, --first_arg=FIRST_ARG
        Default: 'left'
        the first arg
    -s, --second_arg=SECOND_ARG
        Default: 'right'
        the second arg
    Additional flags are accepted.
        additional args

Usage with short flags

❯ python .\example2.py -f="hello" -s="word"
left | right
{'f': 'hello', 's': 'word'}

In summary: the -f and -s arguments should be parsing to --first_arg and --second_arg but they are parsing to kwargs

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions