mirror of https://github.com/python/cpython
Have namedtuple's field renamer assign names that
are consistent with the corresponding tuple index.
This commit is contained in:
parent
c26d43966d
commit
5614524293
|
@ -174,7 +174,7 @@ def namedtuple(typename, field_names, verbose=False, rename=False):
|
||||||
if (not all(c.isalnum() or c=='_' for c in name) or _iskeyword(name)
|
if (not all(c.isalnum() or c=='_' for c in name) or _iskeyword(name)
|
||||||
or not name or name[0].isdigit() or name.startswith('_')
|
or not name or name[0].isdigit() or name.startswith('_')
|
||||||
or name in seen):
|
or name in seen):
|
||||||
names[i] = '_%d' % (i+1)
|
names[i] = '_%d' % i
|
||||||
seen.add(name)
|
seen.add(name)
|
||||||
field_names = tuple(names)
|
field_names = tuple(names)
|
||||||
for name in (typename,) + field_names:
|
for name in (typename,) + field_names:
|
||||||
|
|
|
@ -51,12 +51,12 @@ class TestNamedTuple(unittest.TestCase):
|
||||||
|
|
||||||
def test_name_fixer(self):
|
def test_name_fixer(self):
|
||||||
for spec, renamed in [
|
for spec, renamed in [
|
||||||
[('efg', 'g%hi'), ('efg', '_2')], # field with non-alpha char
|
[('efg', 'g%hi'), ('efg', '_1')], # field with non-alpha char
|
||||||
[('abc', 'class'), ('abc', '_2')], # field has keyword
|
[('abc', 'class'), ('abc', '_1')], # field has keyword
|
||||||
[('8efg', '9ghi'), ('_1', '_2')], # field starts with digit
|
[('8efg', '9ghi'), ('_0', '_1')], # field starts with digit
|
||||||
[('abc', '_efg'), ('abc', '_2')], # field with leading underscore
|
[('abc', '_efg'), ('abc', '_1')], # field with leading underscore
|
||||||
[('abc', 'efg', 'efg', 'ghi'), ('abc', 'efg', '_3', 'ghi')], # duplicate field
|
[('abc', 'efg', 'efg', 'ghi'), ('abc', 'efg', '_2', 'ghi')], # duplicate field
|
||||||
[('abc', '', 'x'), ('abc', '_2', 'x')], # fieldname is a space
|
[('abc', '', 'x'), ('abc', '_1', 'x')], # fieldname is a space
|
||||||
]:
|
]:
|
||||||
self.assertEqual(namedtuple('NT', spec, rename=True)._fields, renamed)
|
self.assertEqual(namedtuple('NT', spec, rename=True)._fields, renamed)
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue