Merged revisions 70936 via svnmerge from

svn+ssh://pythondev@svn.python.org/python/trunk

........
  r70936 | r.david.murray | 2009-03-31 23:21:43 -0400 (Tue, 31 Mar 2009) | 4 lines

  Fix issue 2522.  locale.format now checks that it is passed
  exactly one pattern, which avoids mysterious errors where it
  had seemed to fail to do localization.
........
This commit is contained in:
R. David Murray 2009-04-01 03:42:00 +00:00
parent 12e533d7bf
commit e59482ec9a
4 changed files with 35 additions and 8 deletions

View file

@ -11,7 +11,11 @@
"""
import sys, encodings, encodings.aliases
import sys
import encodings
import encodings.aliases
import re
import collections
from builtins import str as _builtin_str
import functools
@ -173,6 +177,9 @@ def _strip_padding(s, amount):
amount -= 1
return s[lpos:rpos+1]
_percent_re = re.compile(r'%(?:\((?P<key>.*?)\))?'
r'(?P<modifiers>[-#0-9 +*.hlL]*?)[eEfFgGdiouxXcrs%]')
def format(percent, value, grouping=False, monetary=False, *additional):
"""Returns the locale-aware substitution of a %? specifier
(percent).
@ -180,9 +187,13 @@ def format(percent, value, grouping=False, monetary=False, *additional):
additional is for format strings which contain one or more
'*' modifiers."""
# this is only for one-percent-specifier strings and this should be checked
if percent[0] != '%':
raise ValueError("format() must be given exactly one %char "
"format specifier")
match = _percent_re.match(percent)
if not match or len(match.group())!= len(percent):
raise ValueError(("format() must be given exactly one %%char "
"format specifier, %s not valid") % repr(percent))
return _format(percent, value, grouping, monetary, *additional)
def _format(percent, value, grouping=False, monetary=False, *additional):
if additional:
formatted = percent % ((value,) + additional)
else:
@ -206,10 +217,6 @@ def format(percent, value, grouping=False, monetary=False, *additional):
formatted = _strip_padding(formatted, seps)
return formatted
import re, collections
_percent_re = re.compile(r'%(?:\((?P<key>.*?)\))?'
r'(?P<modifiers>[-#0-9 +*.hlL]*?)[eEfFgGdiouxXcrs%]')
def format_string(f, val, grouping=False):
"""Formats a string in the same way that the % formatting would use,
but takes the current locale into account.