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

default mode without requiring named arguments

Open chailampoon opened this issue 4 years ago • 1 comments

Surprised if this is not a dup, or documented - but I couldn't find it.

In most of my scripts I have a default behavior, and keyword modifiers, e.g.

# Default behavior is adding numbers
# a)
python script 1 2 
-> 3

# modified behavior is subtracting numbers
# b)
python script subtract 1 2
-> -2

right now I can only get Fire to support keyword behavior, so a) would be

python script add 1 2
-> 3

I tried writing it all in a class, where the default is the __call__ method:

from fire import Fire

@Fire
class script:
    @staticmethod
    def subtract(a: int, b: int) -> int:
        return a - b

    @staticmethod
    def __call__(a: int, b: int) -> int:
        return a + b

but in this case I'm only able to call #a it as

python script --a=1 --b=2

I could of course manually process args, but at that point I might as well just use argparse.

chailampoon avatar Apr 08 '21 19:04 chailampoon

I figured I could use *args in the __call__ method and parse them in the function such that:

from fire import Fire

@Fire
class script:
    @staticmethod
    def subtract(a: int, b: int) -> int:
        return a - b

    @staticmethod
    def __call__(*args) -> int:
        a, b = args
        return a + b

Which seems hacky, and could interfere with some other parsing. Haven't run into issues with this yet.

Happy to hear better suggestions

chailampoon avatar Apr 08 '21 21:04 chailampoon