[Python-3000] Interest in PEP for callbacks on module import
Phillip J. Eby
pje at telecommunity.com
Sun Dec 9 00:35:08 CET 2007
At 10:49 PM 12/8/2007 +0100, Christian Heimes wrote:
>Phillip J. Eby wrote:
> > Note that in my implementation, an entry is added to sys.modules
> > immediately, so this scenario can't happen without *replacing* the
> > sys.modules entry.
>
>I like to separate the implementation of the post import hook from lazy
>modules. I think that the hook and lazy modules can be implemented
>independently.
Thinking that they can, and actually producing a tested
implementation of one that does not, in fact, conflict with the
implementation of the other, are two different things.
My concern is that I doubt that you can implement the post-import
hook without in the process making it difficult for anyone else to
implement a lazy module system that works with it.
To put it another way, the only way a post-import callback can know
that a lazy module has been loaded, is if in some respect the lazy
module system *lets* it know.
Conversely, if a lazy module system puts a module into sys.modules, a
callback system that isn't based on module *objects* (as opposed to
module names), will incorrectly believe that the module is already
imported and fire the callback... causing the lazy module to be
imported, thereby breaking the laziness.
And this is only the problem that I'm aware of for *my* concept of
lazy modules. There are, I believe, at least two other lazy module
libraries out there.
So, if you propose to separate the mechanism, I think the burden is
on the proposer to show *how* this separation can be achieved.
>What should happen if a post import hook fails? Should the error be
>catch and reported or should the chain stop?
The "Importing" package just lets the chain stop, and the remaining
callbacks are never called. My thought is that hooks should be
responsible for their own error logging or whatnot. Letting the
failure pass through ensures that the programmers who wrote the hooks
clean up their code. :)
More information about the Python-3000
mailing list