Kaydet (Commit) 76b1714b authored tarafından Berker Peksag's avatar Berker Peksag

Issue #24360: Improve __repr__ of argparse.Namespace() for invalid identifiers.

Patch by Matthias Bussonnier.
üst ada5578f
...@@ -118,10 +118,16 @@ class _AttributeHolder(object): ...@@ -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): ...@@ -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 ...@@ -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.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment