google / google/python-fire

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

Aberta
#379 6 comentários 0 reações 0 responsáveis Ver no GitHub
help wanted
Linguagem predominante
Python
Estrelas
28.2k
Forks
1.5k
Métricas de merge de PRs
Nenhum PR com merge em 30d

Descrição

### 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`)

Guia de contribuição

Abrir o guia de contribuição

Direção de pesquisa

Start by running the provided script.py examples through the fire.Fire(Foo) entry point and compare positional with repeated keyword arguments. Trace how chained callable invocations consume arguments; done means each --param value is assigned to its corresponding method, while the existing positional behavior and command completion remain intact.

Escrita pelo modelo de indexação a partir do texto da issue.

Avaliação

Stack de tecnologia
python
Domínio
cli
Tipo de issue
Bug
Dificuldade
3/5
Tempo estimado
1-2 dias
Status de atividade
Estagnada
Clareza
Razoavelmente clara
Facilidade para iniciantes
48/100

Receba novas issues na sua caixa de entrada

Um resumo curto de issues do GitHub para quem está começando.