Mercurial > cpython-lru_cache-weakref
diff Lib/importlib/_bootstrap.py @ 52115:afd7118c8ccf
Implement importlib.util.set_loader: a decorator to automatically set
__loader__ on modules.
| author | Brett Cannon <bcannon@gmail.com> |
|---|---|
| date | Tue, 10 Mar 2009 05:17:37 +0000 |
| parents | 03080fa08dfe |
| children | 2e8e897a1244 |
line wrap: on
line diff
--- a/Lib/importlib/_bootstrap.py Tue Mar 10 03:29:23 2009 +0000 +++ b/Lib/importlib/_bootstrap.py Tue Mar 10 05:17:37 2009 +0000 @@ -110,6 +110,17 @@ return wrapper +def set_loader(fxn): + """Set __loader__ on the returned module.""" + def wrapper(self, *args, **kwargs): + module = fxn(self, *args, **kwargs) + if not hasattr(module, '__loader__'): + module.__loader__ = self + return module + wrap(wrapper, fxn) + return wrapper + + class BuiltinImporter: """Meta path loader for built-in modules. @@ -132,6 +143,7 @@ @classmethod @set_package + @set_loader def load_module(cls, fullname): """Load a built-in module.""" if fullname not in sys.builtin_module_names: @@ -161,6 +173,7 @@ @classmethod @set_package + @set_loader def load_module(cls, fullname): """Load a frozen module.""" if cls.find_module(fullname) is None: @@ -249,13 +262,12 @@ @check_name @set_package + @set_loader def load_module(self, fullname): """Load an extension module.""" is_reload = fullname in sys.modules try: - module = imp.load_dynamic(fullname, self._path) - module.__loader__ = self - return module + return imp.load_dynamic(fullname, self._path) except: if not is_reload and fullname in sys.modules: del sys.modules[fullname]
