diff options
author | Brett Cannon <brett@python.org> | 2012-04-16 00:25:23 (GMT) |
---|---|---|
committer | Brett Cannon <brett@python.org> | 2012-04-16 00:25:23 (GMT) |
commit | 01a76171a0fd890fabcdfe8963d26d218caf08d1 (patch) | |
tree | 164dac9ef6414aef7e6dff4e2aa6462b19c867fd /Lib/imp.py | |
parent | 7c3e150d06e613571cd7f9ab4cc681f55e766279 (diff) | |
download | cpython-01a76171a0fd890fabcdfe8963d26d218caf08d1.zip cpython-01a76171a0fd890fabcdfe8963d26d218caf08d1.tar.gz cpython-01a76171a0fd890fabcdfe8963d26d218caf08d1.tar.bz2 |
Issue #13959: Re-implement imp.load_module() in imp.py.
Diffstat (limited to 'Lib/imp.py')
-rw-r--r-- | Lib/imp.py | 29 |
1 files changed, 28 insertions, 1 deletions
@@ -14,10 +14,37 @@ from _imp import (lock_held, acquire_lock, release_lock, reload, from _imp import (get_magic, get_tag, get_suffixes, cache_from_source, source_from_cache) # Should be re-implemented here (and mostly deprecated) -from _imp import (find_module, load_module, load_compiled, +from _imp import (find_module, load_compiled, load_package, load_source, NullImporter, SEARCH_ERROR, PY_SOURCE, PY_COMPILED, C_EXTENSION, PY_RESOURCE, PKG_DIRECTORY, C_BUILTIN, PY_FROZEN, PY_CODERESOURCE, IMP_HOOK) from importlib._bootstrap import _new_module as new_module + + +def load_module(name, file, filename, details): + """Load a module, given information returned by find_module(). + + The module name must include the full package name, if any. + + """ + suffix, mode, type_ = details + if mode and (not mode.startswith(('r', 'U'))) or '+' in mode: + raise ValueError('invalid file open mode {!r}'.format(mode)) + elif file is None and type_ in {PY_SOURCE, PY_COMPILED}: + msg = 'file object required for import (type code {})'.format(type_) + raise ValueError(msg) + elif type_ == PY_SOURCE: + return load_source(name, filename, file) + elif type_ == PY_COMPILED: + return load_compiled(name, filename, file) + elif type_ == PKG_DIRECTORY: + return load_package(name, filename) + elif type_ == C_BUILTIN: + return init_builtin(name) + elif type_ == PY_FROZEN: + return init_frozen(name) + else: + msg = "Don't know how to import {} (type code {}".format(name, type_) + raise ImportError(msg, name=name) |