mirror of
https://github.com/python/cpython.git
synced 2025-09-25 09:50:37 +00:00
Merge 3.2 fix updates and tests for issue #15906.
This commit is contained in:
commit
d89774e158
2 changed files with 28 additions and 5 deletions
|
@ -1961,7 +1961,7 @@ class ArgumentParser(_AttributeHolder, _ActionsContainer):
|
||||||
# twice (which may fail) if the argument was given, but
|
# twice (which may fail) if the argument was given, but
|
||||||
# only if it was defined already in the namespace
|
# only if it was defined already in the namespace
|
||||||
if (action.default is not None and
|
if (action.default is not None and
|
||||||
isinstance(action, _StoreAction) and
|
isinstance(action.default, str) and
|
||||||
hasattr(namespace, action.dest) and
|
hasattr(namespace, action.dest) and
|
||||||
action.default is getattr(namespace, action.dest)):
|
action.default is getattr(namespace, action.dest)):
|
||||||
setattr(namespace, action.dest,
|
setattr(namespace, action.dest,
|
||||||
|
|
|
@ -4591,11 +4591,11 @@ class TestTypeFunctionCallOnlyOnce(TestCase):
|
||||||
args = parser.parse_args('--foo spam!'.split())
|
args = parser.parse_args('--foo spam!'.split())
|
||||||
self.assertEqual(NS(foo='foo_converted'), args)
|
self.assertEqual(NS(foo='foo_converted'), args)
|
||||||
|
|
||||||
# ================================================================
|
# ==================================================================
|
||||||
# Check that the type function is called with a non-string default
|
# Check semantics regarding the default argument and type conversion
|
||||||
# ================================================================
|
# ==================================================================
|
||||||
|
|
||||||
class TestTypeFunctionCallWithNonStringDefault(TestCase):
|
class TestTypeFunctionCalledOnDefault(TestCase):
|
||||||
|
|
||||||
def test_type_function_call_with_non_string_default(self):
|
def test_type_function_call_with_non_string_default(self):
|
||||||
def spam(int_to_convert):
|
def spam(int_to_convert):
|
||||||
|
@ -4605,8 +4605,31 @@ class TestTypeFunctionCallWithNonStringDefault(TestCase):
|
||||||
parser = argparse.ArgumentParser()
|
parser = argparse.ArgumentParser()
|
||||||
parser.add_argument('--foo', type=spam, default=0)
|
parser.add_argument('--foo', type=spam, default=0)
|
||||||
args = parser.parse_args([])
|
args = parser.parse_args([])
|
||||||
|
# foo should *not* be converted because its default is not a string.
|
||||||
|
self.assertEqual(NS(foo=0), args)
|
||||||
|
|
||||||
|
def test_type_function_call_with_string_default(self):
|
||||||
|
def spam(int_to_convert):
|
||||||
|
return 'foo_converted'
|
||||||
|
|
||||||
|
parser = argparse.ArgumentParser()
|
||||||
|
parser.add_argument('--foo', type=spam, default='0')
|
||||||
|
args = parser.parse_args([])
|
||||||
|
# foo is converted because its default is a string.
|
||||||
self.assertEqual(NS(foo='foo_converted'), args)
|
self.assertEqual(NS(foo='foo_converted'), args)
|
||||||
|
|
||||||
|
def test_no_double_type_conversion_of_default(self):
|
||||||
|
def extend(str_to_convert):
|
||||||
|
return str_to_convert + '*'
|
||||||
|
|
||||||
|
parser = argparse.ArgumentParser()
|
||||||
|
parser.add_argument('--test', type=extend, default='*')
|
||||||
|
args = parser.parse_args([])
|
||||||
|
# The test argument will be two stars, one coming from the default
|
||||||
|
# value and one coming from the type conversion being called exactly
|
||||||
|
# once.
|
||||||
|
self.assertEqual(NS(test='**'), args)
|
||||||
|
|
||||||
def test_issue_15906(self):
|
def test_issue_15906(self):
|
||||||
# Issue #15906: When action='append', type=str, default=[] are
|
# Issue #15906: When action='append', type=str, default=[] are
|
||||||
# providing, the dest value was the string representation "[]" when it
|
# providing, the dest value was the string representation "[]" when it
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue