Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
C
cpython
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
cpython
Commits
edbe4c52
Commit
edbe4c52
authored
Mar 26, 2011
by
Steven Bethard
Browse files
Options
Browse Files
Download
Plain Diff
Issue #9348: Raise an early error if argparse nargs and metavar don't match. (Merge from 3.2.)
parents
0331e906
8d9a4628
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
180 additions
and
0 deletions
+180
-0
Lib/argparse.py
Lib/argparse.py
+7
-0
Lib/test/test_argparse.py
Lib/test/test_argparse.py
+171
-0
Misc/NEWS
Misc/NEWS
+2
-0
No files found.
Lib/argparse.py
View file @
edbe4c52
...
@@ -1319,6 +1319,13 @@ class _ActionsContainer(object):
...
@@ -1319,6 +1319,13 @@ class _ActionsContainer(object):
if
not
_callable
(
type_func
):
if
not
_callable
(
type_func
):
raise
ValueError
(
'%r is not callable'
%
type_func
)
raise
ValueError
(
'%r is not callable'
%
type_func
)
# raise an error if the metavar does not match the type
if
hasattr
(
self
,
"_get_formatter"
):
try
:
self
.
_get_formatter
().
_format_args
(
action
,
None
)
except
TypeError
:
raise
ValueError
(
"length of metavar tuple does not match nargs"
)
return
self
.
_add_action
(
action
)
return
self
.
_add_action
(
action
)
def
add_argument_group
(
self
,
*
args
,
**
kwargs
):
def
add_argument_group
(
self
,
*
args
,
**
kwargs
):
...
...
Lib/test/test_argparse.py
View file @
edbe4c52
...
@@ -4425,6 +4425,177 @@ class TestParseKnownArgs(TestCase):
...
@@ -4425,6 +4425,177 @@ class TestParseKnownArgs(TestCase):
self
.
assertEqual
(
NS
(
v
=
3
,
spam
=
True
,
badger
=
"B"
),
args
)
self
.
assertEqual
(
NS
(
v
=
3
,
spam
=
True
,
badger
=
"B"
),
args
)
self
.
assertEqual
([
"C"
,
"--foo"
,
"4"
],
extras
)
self
.
assertEqual
([
"C"
,
"--foo"
,
"4"
],
extras
)
# ==========================
# add_argument metavar tests
# ==========================
class
TestAddArgumentMetavar
(
TestCase
):
EXPECTED_MESSAGE
=
"length of metavar tuple does not match nargs"
def
do_test_no_exception
(
self
,
nargs
,
metavar
):
parser
=
argparse
.
ArgumentParser
()
parser
.
add_argument
(
"--foo"
,
nargs
=
nargs
,
metavar
=
metavar
)
def
do_test_exception
(
self
,
nargs
,
metavar
):
parser
=
argparse
.
ArgumentParser
()
with
self
.
assertRaises
(
ValueError
)
as
cm
:
parser
.
add_argument
(
"--foo"
,
nargs
=
nargs
,
metavar
=
metavar
)
self
.
assertEqual
(
cm
.
exception
.
args
[
0
],
self
.
EXPECTED_MESSAGE
)
# Unit tests for different values of metavar when nargs=None
def
test_nargs_None_metavar_string
(
self
):
self
.
do_test_no_exception
(
nargs
=
None
,
metavar
=
"1"
)
def
test_nargs_None_metavar_length0
(
self
):
self
.
do_test_exception
(
nargs
=
None
,
metavar
=
tuple
())
def
test_nargs_None_metavar_length1
(
self
):
self
.
do_test_no_exception
(
nargs
=
None
,
metavar
=
(
"1"
))
def
test_nargs_None_metavar_length2
(
self
):
self
.
do_test_exception
(
nargs
=
None
,
metavar
=
(
"1"
,
"2"
))
def
test_nargs_None_metavar_length3
(
self
):
self
.
do_test_exception
(
nargs
=
None
,
metavar
=
(
"1"
,
"2"
,
"3"
))
# Unit tests for different values of metavar when nargs=?
def
test_nargs_optional_metavar_string
(
self
):
self
.
do_test_no_exception
(
nargs
=
"?"
,
metavar
=
"1"
)
def
test_nargs_optional_metavar_length0
(
self
):
self
.
do_test_exception
(
nargs
=
"?"
,
metavar
=
tuple
())
def
test_nargs_optional_metavar_length1
(
self
):
self
.
do_test_no_exception
(
nargs
=
"?"
,
metavar
=
(
"1"
))
def
test_nargs_optional_metavar_length2
(
self
):
self
.
do_test_exception
(
nargs
=
"?"
,
metavar
=
(
"1"
,
"2"
))
def
test_nargs_optional_metavar_length3
(
self
):
self
.
do_test_exception
(
nargs
=
"?"
,
metavar
=
(
"1"
,
"2"
,
"3"
))
# Unit tests for different values of metavar when nargs=*
def
test_nargs_zeroormore_metavar_string
(
self
):
self
.
do_test_no_exception
(
nargs
=
"*"
,
metavar
=
"1"
)
def
test_nargs_zeroormore_metavar_length0
(
self
):
self
.
do_test_exception
(
nargs
=
"*"
,
metavar
=
tuple
())
def
test_nargs_zeroormore_metavar_length1
(
self
):
self
.
do_test_no_exception
(
nargs
=
"*"
,
metavar
=
(
"1"
))
def
test_nargs_zeroormore_metavar_length2
(
self
):
self
.
do_test_no_exception
(
nargs
=
"*"
,
metavar
=
(
"1"
,
"2"
))
def
test_nargs_zeroormore_metavar_length3
(
self
):
self
.
do_test_exception
(
nargs
=
"*"
,
metavar
=
(
"1"
,
"2"
,
"3"
))
# Unit tests for different values of metavar when nargs=+
def
test_nargs_oneormore_metavar_string
(
self
):
self
.
do_test_no_exception
(
nargs
=
"+"
,
metavar
=
"1"
)
def
test_nargs_oneormore_metavar_length0
(
self
):
self
.
do_test_exception
(
nargs
=
"+"
,
metavar
=
tuple
())
def
test_nargs_oneormore_metavar_length1
(
self
):
self
.
do_test_no_exception
(
nargs
=
"+"
,
metavar
=
(
"1"
))
def
test_nargs_oneormore_metavar_length2
(
self
):
self
.
do_test_no_exception
(
nargs
=
"+"
,
metavar
=
(
"1"
,
"2"
))
def
test_nargs_oneormore_metavar_length3
(
self
):
self
.
do_test_exception
(
nargs
=
"+"
,
metavar
=
(
"1"
,
"2"
,
"3"
))
# Unit tests for different values of metavar when nargs=...
def
test_nargs_remainder_metavar_string
(
self
):
self
.
do_test_no_exception
(
nargs
=
"..."
,
metavar
=
"1"
)
def
test_nargs_remainder_metavar_length0
(
self
):
self
.
do_test_no_exception
(
nargs
=
"..."
,
metavar
=
tuple
())
def
test_nargs_remainder_metavar_length1
(
self
):
self
.
do_test_no_exception
(
nargs
=
"..."
,
metavar
=
(
"1"
))
def
test_nargs_remainder_metavar_length2
(
self
):
self
.
do_test_no_exception
(
nargs
=
"..."
,
metavar
=
(
"1"
,
"2"
))
def
test_nargs_remainder_metavar_length3
(
self
):
self
.
do_test_no_exception
(
nargs
=
"..."
,
metavar
=
(
"1"
,
"2"
,
"3"
))
# Unit tests for different values of metavar when nargs=A...
def
test_nargs_parser_metavar_string
(
self
):
self
.
do_test_no_exception
(
nargs
=
"A..."
,
metavar
=
"1"
)
def
test_nargs_parser_metavar_length0
(
self
):
self
.
do_test_exception
(
nargs
=
"A..."
,
metavar
=
tuple
())
def
test_nargs_parser_metavar_length1
(
self
):
self
.
do_test_no_exception
(
nargs
=
"A..."
,
metavar
=
(
"1"
))
def
test_nargs_parser_metavar_length2
(
self
):
self
.
do_test_exception
(
nargs
=
"A..."
,
metavar
=
(
"1"
,
"2"
))
def
test_nargs_parser_metavar_length3
(
self
):
self
.
do_test_exception
(
nargs
=
"A..."
,
metavar
=
(
"1"
,
"2"
,
"3"
))
# Unit tests for different values of metavar when nargs=1
def
test_nargs_1_metavar_string
(
self
):
self
.
do_test_no_exception
(
nargs
=
1
,
metavar
=
"1"
)
def
test_nargs_1_metavar_length0
(
self
):
self
.
do_test_exception
(
nargs
=
1
,
metavar
=
tuple
())
def
test_nargs_1_metavar_length1
(
self
):
self
.
do_test_no_exception
(
nargs
=
1
,
metavar
=
(
"1"
))
def
test_nargs_1_metavar_length2
(
self
):
self
.
do_test_exception
(
nargs
=
1
,
metavar
=
(
"1"
,
"2"
))
def
test_nargs_1_metavar_length3
(
self
):
self
.
do_test_exception
(
nargs
=
1
,
metavar
=
(
"1"
,
"2"
,
"3"
))
# Unit tests for different values of metavar when nargs=2
def
test_nargs_2_metavar_string
(
self
):
self
.
do_test_no_exception
(
nargs
=
2
,
metavar
=
"1"
)
def
test_nargs_2_metavar_length0
(
self
):
self
.
do_test_exception
(
nargs
=
2
,
metavar
=
tuple
())
def
test_nargs_2_metavar_length1
(
self
):
self
.
do_test_no_exception
(
nargs
=
2
,
metavar
=
(
"1"
))
def
test_nargs_2_metavar_length2
(
self
):
self
.
do_test_no_exception
(
nargs
=
2
,
metavar
=
(
"1"
,
"2"
))
def
test_nargs_2_metavar_length3
(
self
):
self
.
do_test_exception
(
nargs
=
2
,
metavar
=
(
"1"
,
"2"
,
"3"
))
# Unit tests for different values of metavar when nargs=3
def
test_nargs_3_metavar_string
(
self
):
self
.
do_test_no_exception
(
nargs
=
3
,
metavar
=
"1"
)
def
test_nargs_3_metavar_length0
(
self
):
self
.
do_test_exception
(
nargs
=
3
,
metavar
=
tuple
())
def
test_nargs_3_metavar_length1
(
self
):
self
.
do_test_no_exception
(
nargs
=
3
,
metavar
=
(
"1"
))
def
test_nargs_3_metavar_length2
(
self
):
self
.
do_test_exception
(
nargs
=
3
,
metavar
=
(
"1"
,
"2"
))
def
test_nargs_3_metavar_length3
(
self
):
self
.
do_test_no_exception
(
nargs
=
3
,
metavar
=
(
"1"
,
"2"
,
"3"
))
# ============================
# ============================
# from argparse import * tests
# from argparse import * tests
# ============================
# ============================
...
...
Misc/NEWS
View file @
edbe4c52
...
@@ -1530,6 +1530,8 @@ Library
...
@@ -1530,6 +1530,8 @@ Library
- Issue #9948: Fixed problem of losing filename case information.
- Issue #9948: Fixed problem of losing filename case information.
- Issue #9348: Raise an early error if argparse nargs and metavar don'
t
match
.
Extension
Modules
Extension
Modules
-----------------
-----------------
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment