diff options
author | Brett Cannon <bcannon@gmail.com> | 2009-02-03 04:58:29 (GMT) |
---|---|---|
committer | Brett Cannon <bcannon@gmail.com> | 2009-02-03 04:58:29 (GMT) |
commit | 94196532c1afc8d2fe6f64c181f7201f7faff8bc (patch) | |
tree | 8efd797fb148a05675c136cfa83fff70bb2c47e3 /Lib/importlib | |
parent | 2c8585b0afb6a39c215a71963e2fadea96f2c6ae (diff) | |
download | cpython-94196532c1afc8d2fe6f64c181f7201f7faff8bc.zip cpython-94196532c1afc8d2fe6f64c181f7201f7faff8bc.tar.gz cpython-94196532c1afc8d2fe6f64c181f7201f7faff8bc.tar.bz2 |
Make importlib a package. This allows using svn:externals in the sandbox to
package up the code for separate distribution.
Diffstat (limited to 'Lib/importlib')
-rw-r--r-- | Lib/importlib/__init__.py | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/Lib/importlib/__init__.py b/Lib/importlib/__init__.py new file mode 100644 index 0000000..89398de --- /dev/null +++ b/Lib/importlib/__init__.py @@ -0,0 +1,38 @@ +"""Backport of importlib.import_module from 3.x.""" +import sys + +def _resolve_name(name, package, level): + """Return the absolute name of the module to be imported.""" + level -= 1 + try: + if package.count('.') < level: + raise ValueError("attempted relative import beyond top-level " + "package") + except AttributeError: + raise ValueError("__package__ not set to a string") + base = package.rsplit('.', level)[0] + if name: + return "{0}.{1}".format(base, name) + else: + return base + + +def import_module(name, package=None): + """Import a module. + + The 'package' argument is required when performing a relative import. It + specifies the package to use as the anchor point from which to resolve the + relative import to an absolute import. + + """ + if name.startswith('.'): + if not package: + raise TypeError("relative imports require the 'package' argument") + level = 0 + for character in name: + if character != '.': + break + level += 1 + name = _resolve_name(name[level:], package, level) + __import__(name) + return sys.modules[name] |