Note that I'm on Win98SE now (previous email today was on Win2K). Under current CVS, but with regrtest hacked not to do sys.exit(): C:\Code\python\PCbuild>python -i ../lib/test/regrtest.py test_strptime test_logging test_time test_strptime test_logging test_time All 3 tests OK.
import forbrett time.strftime("%c") '07/22/03 19:11:50'
_strptime.TimeRE()['c'] '(?P<m>1[0-2]|0[1-9]|[1-9])/(?P<d>3[0-1]|[1-2]\\d|0[1-9]| [1-9]| [1-9])/(?P<y>\\d\\d)\\s*(?P<H>2[0-3]|[0-1]\\d|\\d) :(?P<M>[0-5]\\d|\\d):(?P<S>6[0-1]|[0-5]\\d|\\d)' locale.getdefaultlocale() ('en_US', 'cp1252') locale.getlocale(locale.LC_TIME) (None, None)
Again, but reverting Jeremy's test_logging locale fiddling: C:\Code\python\PCbuild>python -i ../lib/test/regrtest.py test_strptime test_logging test_time test_strptime test_logging test_time test test_time failed -- Traceback (most recent call last): File "C:\CODE\PYTHON\lib\test\test_time.py", line 49, in test_strptime self.fail('conversion specifier: %r failed.' % format) File "C:\CODE\PYTHON\lib\unittest.py", line 260, in fail raise self.failureException, msg AssertionError: conversion specifier: ' %c' failed. 2 tests OK. 1 test failed: test_time
import forbrett time.strftime("%c") '07/22/2003 07:14:31 PM'
_strptime.TimeRE()['c'] '(?P<m>1[0-2]|0[1-9]|[1-9])/(?P<d>3[0-1]|[1-2]\\d|0[1-9]| [1-9]| [1-9])/(?P<y>\\d\\d)\\s*(?P<H>2[0-3]|[0-1]\\d|\\d) :(?P<M>[0-5]\\d|\\d):(?P<S>6[0-1]|[0-5]\\d|\\d)' locale.getdefaultlocale() ('en_US', 'cp1252') locale.getlocale(locale.LC_TIME) ['English_United States', '1252']
This is forbrett.py: """ def dump(tag, value): import pprint print tag pprint.pprint(value) print import time dump('time.strftime("%c")', time.strftime("%c")) import _strptime dump("_strptime.TimeRE()['c']", _strptime.TimeRE()['c']) import locale dump("locale.getdefaultlocale()", locale.getdefaultlocale()) dump("locale.getlocale(locale.LC_TIME)", locale.getlocale(locale.LC_TIME)) """ [Brett C.]
OK, the only thing I can think of is that the locale info has changed ever so subtly and the checking of locale.getlocale(locale.LC_TIME)[0] or locale.getdefaultlocale()[0] is not cutting it. Next thing to try is to see what values locale.getlocale(locale.LC_TIME) and locale.getdefaultlocale() have (notice I am asking for the full value and not just the 0 item) after each test is run. It is possible the cache in _strptime is not being cleared because it is not picking up the change in locale by only checking the 0 item.
If there is not some obvious difference in values then the cache will have to be deleted and strptime performance will drop but the problem will go away.
Barry agrees <wink>.