Deal with case of when locale time values has characters that can be mistaken

for regex syntax.
Fixes bug #883604 .
This commit is contained in:
Brett Cannon 2004-03-20 23:09:40 +00:00
parent 4f65331483
commit c82208eecb
1 changed files with 14 additions and 2 deletions

View File

@ -28,6 +28,16 @@ def main():
for i in range(25): for i in range(25):
strftest(now + (i + j*100)*23*3603) strftest(now + (i + j*100)*23*3603)
def escapestr(text, ampm):
"""Escape text to deal with possible locale values that have regex
syntax while allowing regex syntax used for the comparison."""
new_text = re.escape(text)
new_text = new_text.replace(re.escape(ampm), ampm)
new_text = new_text.replace("\%", "%")
new_text = new_text.replace("\:", ":")
new_text = new_text.replace("\?", "?")
return new_text
def strftest(now): def strftest(now):
if verbose: if verbose:
print "strftime test for", time.ctime(now) print "strftime test for", time.ctime(now)
@ -50,6 +60,8 @@ def strftest(now):
elif now[3] > 0: clock12 = now[3] elif now[3] > 0: clock12 = now[3]
else: clock12 = 12 else: clock12 = 12
# Make sure any characters that could be taken as regex syntax is
# escaped in escapestr()
expectations = ( expectations = (
('%a', calendar.day_abbr[now[6]], 'abbreviated weekday name'), ('%a', calendar.day_abbr[now[6]], 'abbreviated weekday name'),
('%A', calendar.day_name[now[6]], 'full weekday name'), ('%A', calendar.day_name[now[6]], 'full weekday name'),
@ -110,7 +122,7 @@ def strftest(now):
except ValueError, error: except ValueError, error:
print "Standard '%s' format gave error:" % e[0], error print "Standard '%s' format gave error:" % e[0], error
continue continue
if re.match(e[1], result): continue if re.match(escapestr(e[1], ampm), result): continue
if not result or result[0] == '%': if not result or result[0] == '%':
print "Does not support standard '%s' format (%s)" % (e[0], e[2]) print "Does not support standard '%s' format (%s)" % (e[0], e[2])
else: else:
@ -125,7 +137,7 @@ def strftest(now):
print "Error for nonstandard '%s' format (%s): %s" % \ print "Error for nonstandard '%s' format (%s): %s" % \
(e[0], e[2], str(result)) (e[0], e[2], str(result))
continue continue
if re.match(e[1], result): if re.match(escapestr(e[1], ampm), result):
if verbose: if verbose:
print "Supports nonstandard '%s' format (%s)" % (e[0], e[2]) print "Supports nonstandard '%s' format (%s)" % (e[0], e[2])
elif not result or result[0] == '%': elif not result or result[0] == '%':