Nick Coghlan wrote: > For example, to handle the commented out case above: > > @imp.imported('decimal') > def register(decimal): > Inexact.register(decimal.Decimal)
I like the syntax assuming that imp.imported(name) expects a method that accepts the module object as argument. > I think a PEP would be needed to decide whether to handle this in a > fashion similar to that of PJE's Importing toolkit [1] (i.e., using lazy > imports where the actual loading of the module code is deferred until > the first access to an attribute of the module), or else to add a new > mechanism directly to the interpreter code, where the registered > callbacks would be called as soon as the specified module was loaded. I find a new mechanism easier to implement. Lazy or deferred imports require frame hacks and you know how Guido thinks about sys._getframe(). :) An implementation based on your suggestion is simple. Add a registry to imp which is a simple dict that maps dotted module names to a list of callables. Upon import the IMP module calls the callables after the module is inserted into sys.modules. That's it. :] Zope's deferredimport [1] package has a nice idea. It supports deprecation warnings when a deprecated attribute is accessed the first time. >>> import somemodule No warning is raised >>> somemodule.deprecated_feature DeprecationWarning ... The package makes use of stack inspection and a proxy package. > Does anyone else think this is an issue worth pursuing? Yes, count me in. I like to help with the PEP and implementation. :) Christian [1] http://svn.zope.org/zope.deferredimport/trunk/src/zope/deferredimport/ _______________________________________________ Python-3000 mailing list Python-3000@python.org http://mail.python.org/mailman/listinfo/python-3000 Unsubscribe: http://mail.python.org/mailman/options/python-3000/archive%40mail-archive.com