mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 13:41:24 +00:00 
			
		
		
		
	Fix bug in passing tuples to string.Template. All other values (with working
str() or repr()) would work, just not multi-value tuples. Probably not a
backport candidate, since it changes the behaviour of passing a
single-element tuple:
>>> string.Template("$foo").substitute(dict(foo=(1,)))
'(1,)'
versus
'1'
			
			
This commit is contained in:
		
							parent
							
								
									9ba7ca8229
								
							
						
					
					
						commit
						add191118f
					
				
					 3 changed files with 14 additions and 3 deletions
				
			
		|  | @ -161,7 +161,7 @@ def convert(mo): | |||
|                 val = mapping[named] | ||||
|                 # We use this idiom instead of str() because the latter will | ||||
|                 # fail if val is a Unicode containing non-ASCII characters. | ||||
|                 return '%s' % val | ||||
|                 return '%s' % (val,) | ||||
|             if mo.group('escaped') is not None: | ||||
|                 return self.delimiter | ||||
|             if mo.group('invalid') is not None: | ||||
|  | @ -186,13 +186,13 @@ def convert(mo): | |||
|                 try: | ||||
|                     # We use this idiom instead of str() because the latter | ||||
|                     # will fail if val is a Unicode containing non-ASCII | ||||
|                     return '%s' % mapping[named] | ||||
|                     return '%s' % (mapping[named],) | ||||
|                 except KeyError: | ||||
|                     return self.delimiter + named | ||||
|             braced = mo.group('braced') | ||||
|             if braced is not None: | ||||
|                 try: | ||||
|                     return '%s' % mapping[braced] | ||||
|                     return '%s' % (mapping[braced],) | ||||
|                 except KeyError: | ||||
|                     return self.delimiter + '{' + braced + '}' | ||||
|             if mo.group('escaped') is not None: | ||||
|  |  | |||
|  | @ -58,6 +58,13 @@ def test_stringification(self): | |||
|         s = Template('tim has eaten ${count} bags of ham today') | ||||
|         eq(s.substitute(d), 'tim has eaten 7 bags of ham today') | ||||
| 
 | ||||
|     def test_tupleargs(self): | ||||
|         eq = self.assertEqual | ||||
|         s = Template('$who ate ${meal}') | ||||
|         d = dict(who=('tim', 'fred'), meal=('ham', 'kung pao')) | ||||
|         eq(s.substitute(d), "('tim', 'fred') ate ('ham', 'kung pao')") | ||||
|         eq(s.safe_substitute(d), "('tim', 'fred') ate ('ham', 'kung pao')") | ||||
| 
 | ||||
|     def test_SafeTemplate(self): | ||||
|         eq = self.assertEqual | ||||
|         s = Template('$who likes ${what} for ${meal}') | ||||
|  |  | |||
|  | @ -25,6 +25,10 @@ Core and builtins | |||
| Library | ||||
| ------- | ||||
| 
 | ||||
| - string.Template() now correctly handles tuple-values. Previously, | ||||
|   multi-value tuples would raise an exception and single-value tuples would | ||||
|   be treated as the value they contain, instead. | ||||
| 
 | ||||
| - Bug #822974: Honor timeout in telnetlib.{expect,read_until} | ||||
|   even if some data are received. | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Thomas Wouters
						Thomas Wouters