summaryrefslogtreecommitdiffstats
path: root/Lib/importlib
diff options
context:
space:
mode:
authorBrett Cannon <bcannon@gmail.com>2009-02-03 21:13:05 (GMT)
committerBrett Cannon <bcannon@gmail.com>2009-02-03 21:13:05 (GMT)
commit8bdd3b3dcf38ba1b5bd460b3c309fb6a8ea1127c (patch)
tree1c5c6fa02df8da06d4eb2c4e50f1453471f5168c /Lib/importlib
parent7757d7bb510f820b49b085293e8bf8b244723853 (diff)
downloadcpython-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/importlib')
-rw-r--r--Lib/importlib/__init__.py19
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]