summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBrett Cannon <brett@python.org>2012-02-16 22:47:48 (GMT)
committerBrett Cannon <brett@python.org>2012-02-16 22:47:48 (GMT)
commit3b1a06c1eaec92242683b0a3460377e03cb6c214 (patch)
treea71d27d9d427a4061eefff835da8d9ae5890b0ae
parent7fab676e87302bb75a132ba0c1f7220e4702c16d (diff)
downloadcpython-3b1a06c1eaec92242683b0a3460377e03cb6c214.zip
cpython-3b1a06c1eaec92242683b0a3460377e03cb6c214.tar.gz
cpython-3b1a06c1eaec92242683b0a3460377e03cb6c214.tar.bz2
importlib.__import__() now raises ValueError when level < 0.
This is to bring it more in line with what PEP 328 set out to do with removing ambiguous absolute/relative import semantics.
-rw-r--r--Lib/importlib/_bootstrap.py2
-rw-r--r--Lib/importlib/test/import_/test_api.py7
-rw-r--r--Misc/NEWS3
3 files changed, 12 insertions, 0 deletions
diff --git a/Lib/importlib/_bootstrap.py b/Lib/importlib/_bootstrap.py
index ad1561e..44349a8 100644
--- a/Lib/importlib/_bootstrap.py
+++ b/Lib/importlib/_bootstrap.py
@@ -1048,6 +1048,8 @@ def __import__(name, globals={}, locals={}, fromlist=[], level=0):
raise TypeError("module name must be str, not {}".format(type(name)))
if level == 0:
module = _gcd_import(name)
+ elif level < 0:
+ raise ValueError('level must be >= 0')
else:
package = _calc___package__(globals)
module = _gcd_import(name, package, level)
diff --git a/Lib/importlib/test/import_/test_api.py b/Lib/importlib/test/import_/test_api.py
index 9075d42..2fa1f90 100644
--- a/Lib/importlib/test/import_/test_api.py
+++ b/Lib/importlib/test/import_/test_api.py
@@ -12,6 +12,13 @@ class APITest(unittest.TestCase):
with self.assertRaises(TypeError):
util.import_(42)
+ def test_negative_level(self):
+ # Raise ValueError when a negative level is specified.
+ # PEP 328 did away with sys.module None entries and the ambiguity of
+ # absolute/relative imports.
+ with self.assertRaises(ValueError):
+ util.import_('os', globals(), level=-1)
+
def test_main():
from test.support import run_unittest
diff --git a/Misc/NEWS b/Misc/NEWS
index a1810ae..786417f 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -466,6 +466,9 @@ Core and Builtins
Library
-------
+- Do away with ambiguous level values (as suggested by PEP 328) in
+ importlib.__import__() by raising ValueError when level < 0.
+
- Issue #2489: pty.spawn could consume 100% cpu when it encountered an EOF.
- Issue #13014: Fix a possible reference leak in SSLSocket.getpeercert().