Source code for PyOpenWorm.import_contextualizer


[docs]class ImportContextualizer(object): """ Interface for classes that 'contextualize' an import. Contextualizing an import means that if an object is defined with the name X in some context, and an import statement is written like this:: import X.a X will be invoked like this:: a = X(__import__('a')) On the other hand, for an import statement of this form:: from X.a import A will cause X to be invoked as:: _temp = X(__import__('a', globals(), locals(), ('A',)), ('A',)) A = _temp.A and the import statement:: from X.a import A as AA will cause X to be invoked as:: _temp = X(__import__('a', globals(), locals(), ('A',)), ('A',)) AA = _temp.A meaning that the contextualizer won't know what the 'as' name is. For the astute reader, you may notice parallels between the protocol for ImportContextualizer and the __import__ function itself. You may also be wondering why the contextualizer isn't merely a proxy for __import__. The first reason is that I want the true import to always happen, regardless of what the contextualizer does, so that the semantics of the contextualizer are very clear. The second reason is that requiring a real proxy would require more complexity in the contextualizers to ensure that they are properly handling exceptions, module attributes and the return value of __import__, ensuring that the *right* __import__ is used, as well as handling the 'fromlist' correctly. """ def __call__(self, module): raise NotImplementedError()