[PEAK] Strange behaviour
Phillip J. Eby
pje at telecommunity.com
Wed Jul 20 12:48:44 EDT 2005
At 09:00 PM 7/19/2005 +0000, Tiago Cogumbreiro wrote:
>While doing a very small example the strangest thing happened. I am
>registring my models in the [Component Factories] entry of the INI
>file, just as the bulletins example. The problem is, when I try to use
>the DM _the first_ an error about not being able to import the module
>appears. I am using this in a test case and as you can see the second
>time it's run the problem silently goes away.
>Can someone help me spot what am I doing wrong?
Your helpdesk/__init__.py imports 'storage' from peak.api, and importString
picks this up as being 'helpdesk.storage'. It then tries to retrieve
'ClientDM' from peak.storage.api as a result. When this fails, it falls
back to attempting to import 'helpdesk.storage.ClientDM' as a module. This
fails, but it causes the correct 'helpdesk.storage' module to be loaded as
a side effect, such that subsequent checks work.
So, in helpdesk/__init__.py you shouldn't use 'from peak.api import *';
it's generally not a great idea to put much in __init__.py files anyway.
I could probably also change importString() to try importing *before* doing
getattr(), and maybe display better error information, but I'm not sure
when I'll have time to do that and figure out some tests for it.
More information about the PEAK