Abstract base class for import loaders.
| 4 | |
| 5 | |
| 6 | class Loader(metaclass=abc.ABCMeta): |
| 7 | |
| 8 | """Abstract base class for import loaders.""" |
| 9 | |
| 10 | def create_module(self, spec): |
| 11 | """Return a module to initialize and into which to load. |
| 12 | |
| 13 | This method should raise ImportError if anything prevents it |
| 14 | from creating a new module. It may return None to indicate |
| 15 | that the spec should create the new module. |
| 16 | """ |
| 17 | # By default, defer to default semantics for the new module. |
| 18 | return None |
| 19 | |
| 20 | # We don't define exec_module() here since that would break |
| 21 | # hasattr checks we do to support backward compatibility. |
| 22 | |
| 23 | def load_module(self, fullname): |
| 24 | """Return the loaded module. |
| 25 | |
| 26 | The module must be added to sys.modules and have import-related |
| 27 | attributes set properly. The fullname is a str. |
| 28 | |
| 29 | ImportError is raised on failure. |
| 30 | |
| 31 | This method is deprecated in favor of loader.exec_module(). If |
| 32 | exec_module() exists then it is used to provide a backwards-compatible |
| 33 | functionality for this method. |
| 34 | |
| 35 | """ |
| 36 | if not hasattr(self, 'exec_module'): |
| 37 | raise ImportError |
| 38 | # Warning implemented in _load_module_shim(). |
| 39 | return _bootstrap._load_module_shim(self, fullname) |