]> granicus.if.org Git - python/commitdiff
Fixed issue #25034: Fix string.Formatter problem with auto-numbering
authorEric V. Smith <eric@trueblade.com>
Tue, 29 Sep 2015 14:27:38 +0000 (10:27 -0400)
committerEric V. Smith <eric@trueblade.com>
Tue, 29 Sep 2015 14:27:38 +0000 (10:27 -0400)
and nested format_specs. Patch by Anthon van der Neut.

Lib/string.py
Lib/test/test_string.py
Misc/ACKS
Misc/NEWS

index a4c48b28375f658799bf88e6db43c9d9a555d303..ef0787f52b141370866f2e8b3a0c5f17bc6e800e 100644 (file)
@@ -185,7 +185,7 @@ class Formatter:
 
     def vformat(self, format_string, args, kwargs):
         used_args = set()
-        result = self._vformat(format_string, args, kwargs, used_args, 2)
+        result, _ = self._vformat(format_string, args, kwargs, used_args, 2)
         self.check_unused_args(used_args, args, kwargs)
         return result
 
@@ -232,14 +232,15 @@ class Formatter:
                 obj = self.convert_field(obj, conversion)
 
                 # expand the format spec, if needed
-                format_spec = self._vformat(format_spec, args, kwargs,
-                                            used_args, recursion_depth-1,
-                                            auto_arg_index=auto_arg_index)
+                format_spec, auto_arg_index = self._vformat(
+                    format_spec, args, kwargs,
+                    used_args, recursion_depth-1,
+                    auto_arg_index=auto_arg_index)
 
                 # format the object and append to the result
                 result.append(self.format_field(obj, format_spec))
 
-        return ''.join(result)
+        return ''.join(result), auto_arg_index
 
 
     def get_value(self, key, args, kwargs):
index 30fe42ab71f8a7c85056d9c6eba610c86a71b2a6..57963bfc6970b2f03824fe7b7bc602ba67b634ba 100644 (file)
@@ -54,6 +54,8 @@ class ModuleTest(unittest.TestCase):
                          'foo{1}{num}{1}'.format(None, 'bar', num=6))
         self.assertEqual(fmt.format('{:^{}}', 'bar', 6),
                          '{:^{}}'.format('bar', 6))
+        self.assertEqual(fmt.format('{:^{}} {}', 'bar', 6, 'X'),
+                         '{:^{}} {}'.format('bar', 6, 'X'))
         self.assertEqual(fmt.format('{:^{pad}}{}', 'foo', 'bar', pad=6),
                          '{:^{pad}}{}'.format('foo', 'bar', pad=6))
 
index 853f29d7fd442ebf30b01b2243b35860fee7ad07..6b4af4439d863b91a16417ae106934a5b9c50a0c 100644 (file)
--- a/Misc/ACKS
+++ b/Misc/ACKS
@@ -984,6 +984,7 @@ Tony Nelson
 Trent Nelson
 Chad Netzer
 Max Neunhöffer
+Anthon van der Neut
 George Neville-Neil
 Hieu Nguyen
 Johannes Nicolai
index b68d702f6940c2fd9e98a0a2cbb4aaf0bf78b291..0a2411da432f3ea92c3a7853825847ee27e51a40 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -78,6 +78,9 @@ Core and Builtins
 Library
 -------
 
+- Issue #25034: Fix string.Formatter problem with auto-numbering and
+  nested format_specs. Patch by Anthon van der Neut.
+
 - Issue #25233: Rewrite the guts of asyncio.Queue to be more understandable and correct.
 
 - Issue #23600: Default implementation of tzinfo.fromutc() was returning