argparse: fix inconsistency in `add_argument()` API when using positional argument with `dest=` parameter
オープン
まだ誰も着手していません。
type-feature
- 主要言語
- Python
- スター
- 77.2k
- フォーク
- 35.9k
- PR マージ指標
- PR 指標を取得中
説明
Feature or enhancement
Proposal:
Current behaviour is ugly and inconsistent between options and positional arguments:
parser.add_argument("--option-foo", dest="my_foo_option_var")
parser.add_argument(metavar="BAR_ARG", dest="my_bar_arg_var")
# or even worse
parser.add_argument("my_bar_arg_var", metavar="BAR_ARG")
Proposed change streamlines the library API
parser.add_argument("--option-foo", dest="my_foo_option_var")
parser.add_argument("BAR_ARG", dest="my_bar_arg_var")
I think a small patch could fix this without breaking any existing code.
--- a/Lib/argparse.py
+++ b/Lib/argparse.py
@@ -1423,7 +1423,7 @@
# =======================
def add_argument(self, *args, **kwargs):
"""
- add_argument(dest, ..., name=value, ...)
+ add_argument(arg, ..., name=value, ...)
add_argument(option_string, option_string, ..., name=value, ...)
"""
@@ -1433,7 +1433,11 @@
chars = self.prefix_chars
if not args or len(args) == 1 and args[0][0] not in chars:
if args and 'dest' in kwargs:
- raise ValueError('dest supplied twice for positional argument')
+ if 'metavar' not in kwargs:
+ kwargs['metavar'] = args[0]
+ else:
+ raise ValueError('`arg` supplied with both `dest` and `metavar` for positional argument')
+ args = (kwargs.pop('dest'), )
kwargs = self._get_positional_kwargs(*args, **kwargs)
# otherwise, we're adding an optional argument
Has this already been discussed elsewhere?
This is a minor feature, which does not need previous discussion elsewhere
Links to previous discussion of this feature:
No response
コントリビューションガイド
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
調査の方向性
Lib/argparse.py の add_argument エントリポイントから始め、提案に照らして現在の位置引数の処理を確認してください。既存の argparse テストを確認し、新しい位置引数の dest と metavar の動作が機能し、既存の形式との互換性が維持されることを確認してください。
索引モデルが issue の本文から書いたものです。
評価
- 技術スタック
- python
- 領域
- cli
- issue の種類
- 機能追加
- 難易度
- 3/5
- 見積もり時間
- 1〜2日
- 活発さ
- 停滞
- 明瞭さ
- おおむね明確
- 初心者へのやさしさ
- 35/100