[Python-Dev] Dynamic module namspaces (original) (raw)
Johan Dahlin jdahlin at async.com.br
Mon Jul 17 15:29:22 CEST 2006
- Previous message: [Python-Dev] Dynamic module namspaces
- Next message: [Python-Dev] Dynamic module namspaces
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Phillip J. Eby wrote:
Just as a point of reference, the Importing package does something very similar, to support "weak" and "lazy" imports:
Interesting, I was not aware of that, thanks for the pointer. Another reason for including this feature in the standard library ;-)
The things most likely to be problems are tools like pydoc or other inspect-using code that expects modules to be exactly ModuleType and don't use isinstance(). Apart from that, I've been using the technique since the early days of Python 2.2 without encountering any problems until the PEP 302 "reload()" bug came along, but that was fixed in 2.3.5. I haven't seen any other problems since.
I'd argue that pydoc & friends are broken if they assume that a module will always be of ModuleType and not a subclass of it.
On the other hand, the Importing package takes a much more conservative approach than you are doing; it simply runs reload() on a module when getattribute is called (after restoring the old version of getattribute). So, as soon as you touch a lazily loaded module, it ceases to be particularly special, and it has a real dict. It's possible that what you're doing could have more side-effects than what I'm doing.
This is an interesting approach, I thought of using that but I didn't quite manage to find the time to implement it properly.
However, for the gtk namespace this won't be enough, since I want to avoid creating all the types when the first one is accessed; when gtk.Button is accessed it, gtk.Window will still not be created.
What I want to ask, is it possible to have a sanctioned way to implement a dynamic module/namespace in python? That would be nice, but I think that what you and I are doing are probably the One Obvious Ways to do the respective things we're doing.
I consider getattribute a hack, being able to override dict is less hackish, IMHO.
-- Johan Dahlin <jdahlin at async.com.br> Async Open Source
- Previous message: [Python-Dev] Dynamic module namspaces
- Next message: [Python-Dev] Dynamic module namspaces
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]