Do not execute anything if command line is invalid, and make it the default behavior
- 主要語言
- Python
- 星號
- 28.2k
- 分支
- 1.5k
- PR 合併指標
- 30 天內沒有已合併 PR
描述
I know a similar issue has been mentioned in #222 (which should have been labelled as Duplicated rather than a misleadingly Closed) , #226, and its root cause was well-explained in #168.
It is still worth to point out that, this issue can be much more easier to hit, thus much more severe than those somewhat contrived scenarios described in #222 and #168 (which was triggered by mismatching default parameters and/or typo).
```python
# This is part of an CRUD app
def add(name):
print("Record %s has been added into database" % name)
if __name__ == "__main__":
fire.Fire()
```
My end user (or me) could easily run it with `$python my_app.py add John Doe` (forgot to add quotation marks) and then a record `"John"` would have been added into database while the end user saw a command-line error. At that point, it is not just about issuing the right command, the end user need to clean up the messed-up database.
Although a decorator workaround was mentioned in #168, do you think it is better to do it the other way around, i.e. make such "strict mode" (#226) the default behavior, and let developer to chain commands if they really want to? I bet not many developer know and anticipate the command chaining behavior.
貢獻指南
研究方向
The issue names no source file or test; start at the fire.Fire() command-line entry point and reproduce the unquoted-argument example with the provided CRUD function. Done means an invalid command-line invocation performs no application action by default, while the intended command-chaining behavior remains an explicit choice.
由索引模型根據 Issue 內容生成。
評估
- 技術堆疊
- python
- 領域
- cli
- Issue 類型
- 缺陷
- 難度
- 4/5
- 預估耗時
- 3-5 天
- 活躍度
- 停滯
- 描述清晰度
- 基本清楚
- 新手友好度
- 35/100