google / google/python-fire

mis-assigned keyword arguments when two function parameters have the same name

Abierto
#379 6 comentarios 0 reacciones 0 asignados Ver en GitHub
help wanted
Lenguaje dominante
Python
Estrellas
28.2k
Forks
1.5k
Métricas de merge de PR
Sin PR fusionados en 30 d

Descripción

### Environment
Python 3.9.2
`fire==0.4.0`

### Example Script
I have the following example `script.py`:

```python
import fire

class Foo:
def __init__(self):
print("__init__")

def bar(self, param=0):
print(f"bar (param={param})")
return self

def baz(self, param=0):
print(f"baz (param={param})")
return self

def end(self):
return "end"

if __name__ == "__main__":
fire.Fire(Foo)
```

### Example Usages (which demonstrate a problem)

When I use the script and provide the arguments by *position*, it works fine:

```
$ python script.py bar 3 baz 5 end
__init__
bar (param=3)
baz (param=5)
end
```

But when I provide the arguments by *keyword*, the output is different and the program brings up the command-line help text for `Foo`:

```
$ python script.py bar --param=3 baz --param=5 end
__init__
bar (param=5)
baz (param=end)
```

More examples:

```
$ python script.py bar --param=3 baz 5 end
__init__
bar (param=3)
baz (param=5)
end
```

```
$ python script.py bar 3 baz --param=5 end
__init__
bar (param=5)
ERROR: Could not consume arg: 3
Usage: fire_issue_eg.py bar 3
available commands: bar | baz | end

For detailed information on this command, run:
fire_issue_eg.py bar 3 --help
```

### Thoughts

It looks like there is a problem:
- when Fire is running through two (or more) callable objects, and each object has an identically-named parameter (in the above example, `param`)
- when that parameter is provided on the command line via keyword on the 2nd(+) function called (in this example, `baz`)

Guía de contribución

Abrir la guía de contribución

Evaluación

Este issue todavía no se ha evaluado.

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.