[Python-Dev] More joy with test_strptime

Brett C. bac at OCF.Berkeley.EDU
Mon Jul 12 20:30:08 CEST 2004


Tim Peters wrote:

> [Tim]
> ...
> 
>> So now I'm suspecting that the tricks in PthFile are managing to
>>create a second instance of the time module not related to the
>>instance of the time module test_strptime is monkey-patching with its
>>
>>           time.tzname = (tz_name, tz_name)
>>           time.daylight = 1
>>
>>tricks.
> 
> 
> Using the attached patch yields output
> 
> test___all__
> test_site
> test_strptime
> in strptime ('Eastern Standard Time', 'Eastern Daylight Time') 1
> in test_bad_timezone ('Eastern Standard Time', 'Eastern Standard Time') 1
> in strptime ('Eastern Standard Time', 'Eastern Daylight Time') 1
> ...
> 
> so test_strptime's attempt to monkey-patch the time module indeed has
> no effect on the time module _strptime.py is using.
> 

Nuts.  Some code somewhere must be importing strptime through time and 
that is holding a reference to the original copy of 'time' that was 
imported and then when test_site deletes sys.modules["time"] 
test_strptime imports 'time' again since it can't find a reference and 
uses that to monkey-patch which _strptime itself never sees since it 
holds the reference to the original imported 'time'.

And I just re-read your previous email and you came to essentially the 
same conclusion as above.

This just figures; only I could break my own test with another of my own 
tests.

> The problem can be fixed by using this as the first line of test_bad_timezone:
> 
>         from _strptime import time
> 
> But, of course, that's insane.
> 
> 
>> But if so, I'm at a loss to explain why this would only
>>happen on Windows.
> 
> 
> Still so.
> 

Stop wondering; it happens on OS X as well.

OK, so the question becomes how can I have test_site (which I will fix 
with your suggestions for the removal of existing files and directories; 
when I rewrote that chunk of code I had EAFP on the brain) test to make 
sure that a module is imported?  Is there any other way than to just try 
out another module that I think no one else is going mess with that has 
no importation side-effects?  I guess I could have test_site just import 
site again in the .pth file.  Could possibly use _strptime since I know 
I don't mess with that in any way.  But is there some other way to check 
that I am not thinking of?

-Brett


More information about the Python-Dev mailing list