diff options
author | Brett Cannon <bcannon@gmail.com> | 2009-02-03 21:13:05 (GMT) |
---|---|---|
committer | Brett Cannon <bcannon@gmail.com> | 2009-02-03 21:13:05 (GMT) |
commit | 8bdd3b3dcf38ba1b5bd460b3c309fb6a8ea1127c (patch) | |
tree | 1c5c6fa02df8da06d4eb2c4e50f1453471f5168c /Lib | |
parent | 7757d7bb510f820b49b085293e8bf8b244723853 (diff) | |
download | cpython-8bdd3b3dcf38ba1b5bd460b3c309fb6a8ea1127c.zip cpython-8bdd3b3dcf38ba1b5bd460b3c309fb6a8ea1127c.tar.gz cpython-8bdd3b3dcf38ba1b5bd460b3c309fb6a8ea1127c.tar.bz2 |
Make importlib backwards-compatible to Python 2.2 (but this is not promised to
last; just doing it to be nice).
Also fix a message for an exception.
Diffstat (limited to 'Lib')
-rw-r--r-- | Lib/importlib/__init__.py | 19 |
1 files changed, 16 insertions, 3 deletions
diff --git a/Lib/importlib/__init__.py b/Lib/importlib/__init__.py index 65f0a83..e046bc0 100644 --- a/Lib/importlib/__init__.py +++ b/Lib/importlib/__init__.py @@ -1,4 +1,6 @@ """Backport of importlib.import_module from 3.x.""" +# While not critical (and in no way guaranteed!), it would be nice to keep this +# code compatible with Python 2.3. import sys def _resolve_name(name, package, level): @@ -9,8 +11,14 @@ def _resolve_name(name, package, 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] + raise ValueError("'package' not set to a string") + try: + # rpartition is more "correct" and rfind is just as easy to use, but + # neither are in Python 2.3. + dot_rindex = package.rindex('.', level)[0] + base = package[:dot_rindex] + except ValueError: + base = package if name: return "%s.%s" % (base, name) else: @@ -34,5 +42,10 @@ def import_module(name, package=None): break level += 1 name = _resolve_name(name[level:], package, level) - __import__(name) + # Try to import specifying the level to be as accurate as possible, but + # realize that keyword arguments are not found in Python 2.3. + try: + __import__(name, level=0) + except TypeError: + __import__(name) return sys.modules[name] |