[bug] short flags/arguments does not work with `**kwargs`
- 主要語言
- Python
- 星號
- 28.2k
- 分支
- 1.5k
- PR 合併指標
- 30 天內沒有已合併 PR
描述
# Description:
Short flags/arguments (e.g. `-u` for `--username`) does not work with `**kwargs`
# Example that works OK:
The following example works ok:
```python
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
```sh
❯ python .\example.py -- --help
NAME
example.py - Prints the 2 arguments separated by bar
SYNOPSIS
example.py
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
```sh
❯ 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.
```python
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
```sh
❯ python .\example2.py -- --help
NAME
example2.py - Prints the 2 arguments separated by bar
SYNOPSIS
example2.py
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
```sh
❯ 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`
貢獻指南
研究方向
執行 issue 中的兩個 Python 範例,並比較有無 **kwargs** 時短選項的行為。接著追蹤 Python Fire 對短選項和關鍵字引數的引數解析流程。完成條件是 -f 和 -s 會填入 first_arg 和 second_arg,而不相關的 flag 仍會出現在 kwargs 中,且兩種情況都有回歸測試覆蓋。
由索引模型根據 Issue 內容生成。
評估
- 技術堆疊
- python
- 領域
- cli
- Issue 類型
- 缺陷
- 難度
- 3/5
- 預估耗時
- 1-2 天
- 活躍度
- 停滯
- 描述清晰度
- 基本清楚
- 新手友好度
- 45/100