aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorR. David Murray <rdmurray@bitdance.com>2009-04-01 03:42:00 +0000
committerR. David Murray <rdmurray@bitdance.com>2009-04-01 03:42:00 +0000
commite59482ec9a44a9cf8c5e066c340dc9ed78399712 (patch)
tree759f586e67351e2055cfcccf58f4537ace2cff0c /Lib/locale.py
parentRip out a useless method that the superclass implements properly. (diff)
downloadcpython-e59482ec9a44a9cf8c5e066c340dc9ed78399712.tar.gz
cpython-e59482ec9a44a9cf8c5e066c340dc9ed78399712.tar.bz2
cpython-e59482ec9a44a9cf8c5e066c340dc9ed78399712.zip
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. ........
Diffstat (limited to 'Lib/locale.py')
-rw-r--r--Lib/locale.py23
1 files changed, 15 insertions, 8 deletions
diff --git a/Lib/locale.py b/Lib/locale.py
index 17056b9df21..372c955d0ef 100644
--- a/Lib/locale.py
+++ b/Lib/locale.py
@@ -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.