Issue #24360: Improve __repr__ of argparse.Namespace() for invalid identifiers.
Patch by Matthias Bussonnier.
This commit is contained in:
parent
ada5578f95
commit
76b1714be8
|
@ -118,10 +118,16 @@ class _AttributeHolder(object):
|
||||||
def __repr__(self):
|
def __repr__(self):
|
||||||
type_name = type(self).__name__
|
type_name = type(self).__name__
|
||||||
arg_strings = []
|
arg_strings = []
|
||||||
|
star_args = {}
|
||||||
for arg in self._get_args():
|
for arg in self._get_args():
|
||||||
arg_strings.append(repr(arg))
|
arg_strings.append(repr(arg))
|
||||||
for name, value in self._get_kwargs():
|
for name, value in self._get_kwargs():
|
||||||
arg_strings.append('%s=%r' % (name, value))
|
if name.isidentifier():
|
||||||
|
arg_strings.append('%s=%r' % (name, value))
|
||||||
|
else:
|
||||||
|
star_args[name] = value
|
||||||
|
if star_args:
|
||||||
|
arg_strings.append('**%s' % repr(star_args))
|
||||||
return '%s(%s)' % (type_name, ', '.join(arg_strings))
|
return '%s(%s)' % (type_name, ', '.join(arg_strings))
|
||||||
|
|
||||||
def _get_kwargs(self):
|
def _get_kwargs(self):
|
||||||
|
|
|
@ -4512,6 +4512,21 @@ class TestStrings(TestCase):
|
||||||
string = "Namespace(bar='spam', foo=42)"
|
string = "Namespace(bar='spam', foo=42)"
|
||||||
self.assertStringEqual(ns, string)
|
self.assertStringEqual(ns, string)
|
||||||
|
|
||||||
|
def test_namespace_starkwargs_notidentifier(self):
|
||||||
|
ns = argparse.Namespace(**{'"': 'quote'})
|
||||||
|
string = """Namespace(**{'"': 'quote'})"""
|
||||||
|
self.assertStringEqual(ns, string)
|
||||||
|
|
||||||
|
def test_namespace_kwargs_and_starkwargs_notidentifier(self):
|
||||||
|
ns = argparse.Namespace(a=1, **{'"': 'quote'})
|
||||||
|
string = """Namespace(a=1, **{'"': 'quote'})"""
|
||||||
|
self.assertStringEqual(ns, string)
|
||||||
|
|
||||||
|
def test_namespace_starkwargs_identifier(self):
|
||||||
|
ns = argparse.Namespace(**{'valid': True})
|
||||||
|
string = "Namespace(valid=True)"
|
||||||
|
self.assertStringEqual(ns, string)
|
||||||
|
|
||||||
def test_parser(self):
|
def test_parser(self):
|
||||||
parser = argparse.ArgumentParser(prog='PROG')
|
parser = argparse.ArgumentParser(prog='PROG')
|
||||||
string = (
|
string = (
|
||||||
|
|
|
@ -13,6 +13,9 @@ Core and Builtins
|
||||||
Library
|
Library
|
||||||
-------
|
-------
|
||||||
|
|
||||||
|
- Issue #24360: Improve __repr__ of argparse.Namespace() for invalid
|
||||||
|
identifiers. Patch by Matthias Bussonnier.
|
||||||
|
|
||||||
- Issue #23319: Fix ctypes.BigEndianStructure, swap correctly bytes. Patch
|
- Issue #23319: Fix ctypes.BigEndianStructure, swap correctly bytes. Patch
|
||||||
written by Matthieu Gautier.
|
written by Matthieu Gautier.
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue