diff options
| author | Brett Cannon <bcannon@gmail.com> | 2009-03-10 05:17:37 (GMT) | 
|---|---|---|
| committer | Brett Cannon <bcannon@gmail.com> | 2009-03-10 05:17:37 (GMT) | 
| commit | 2cf03a820483babd243a48de47865585fa697235 (patch) | |
| tree | 8f568016f9c3bdc2c6be744ce65057b48c100e91 /Lib/importlib/_bootstrap.py | |
| parent | d43b30b046ea151612494ed6d44aed3df71b480a (diff) | |
| download | cpython-2cf03a820483babd243a48de47865585fa697235.zip cpython-2cf03a820483babd243a48de47865585fa697235.tar.gz cpython-2cf03a820483babd243a48de47865585fa697235.tar.bz2  | |
Implement importlib.util.set_loader: a decorator to automatically set
__loader__ on modules.
Diffstat (limited to 'Lib/importlib/_bootstrap.py')
| -rw-r--r-- | Lib/importlib/_bootstrap.py | 18 | 
1 files changed, 15 insertions, 3 deletions
diff --git a/Lib/importlib/_bootstrap.py b/Lib/importlib/_bootstrap.py index 73f6513..1b46006 100644 --- a/Lib/importlib/_bootstrap.py +++ b/Lib/importlib/_bootstrap.py @@ -110,6 +110,17 @@ def set_package(fxn):      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 @@ class BuiltinImporter:      @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 @@ class FrozenImporter:      @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 @@ class _ExtensionFileLoader:      @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]  | 
