summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrett Cannon <bcannon@gmail.com>2010-05-20 18:41:08 +0000
committerBrett Cannon <bcannon@gmail.com>2010-05-20 18:41:08 +0000
commit7d006260a55944cef2a7ea9ba40be4de36c394f7 (patch)
treed941f505b15fb88aad49974c82b4923b0b945a30
parent51f93d99aa4b6a04eb273c22b8c78eccf5bf2e3e (diff)
downloadcpython-git-7d006260a55944cef2a7ea9ba40be4de36c394f7.tar.gz
Merged revisions 81380 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk ........ r81380 | brett.cannon | 2010-05-20 11:37:55 -0700 (Thu, 20 May 2010) | 8 lines Turned out that if you used explicit relative import syntax (e.g. from .os import sep) and it failed, import would still try the implicit relative import semantics of an absolute import (from os import sep). That's not right, so when level is negative, only do explicit relative import semantics. Fixes issue #7902. Thanks to Meador Inge for the patch. ........
-rw-r--r--Lib/test/test_import.py13
-rw-r--r--Misc/NEWS3
-rw-r--r--Python/import.c3
3 files changed, 18 insertions, 1 deletions
diff --git a/Lib/test/test_import.py b/Lib/test/test_import.py
index 8ed6b8f795..5d23b290d1 100644
--- a/Lib/test/test_import.py
+++ b/Lib/test/test_import.py
@@ -417,6 +417,19 @@ class RelativeImport(unittest.TestCase):
self.assertRaises(ValueError, check_absolute)
self.assertRaises(ValueError, check_relative)
+ def test_absolute_import_without_future(self):
+ # If absolute import syntax is used, then do not try to perform
+ # a relative import in the face of failure.
+ # Issue #7902.
+ try:
+ from .os import sep
+ except ImportError:
+ pass
+ else:
+ self.fail("explicit relative import triggered an "
+ "implicit relative import")
+
+
def test_main(verbose=None):
run_unittest(ImportTest, TestPycRewriting, PathsTests, RelativeImport)
diff --git a/Misc/NEWS b/Misc/NEWS
index ee4bf2b787..6a9c0f3a58 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -12,6 +12,9 @@ What's New in Python 2.6.6 alpha 1?
Core and Builtins
-----------------
+- Issue #7902: When using explicit relative import syntax, don't try
+ implicit relative import semantics.
+
- Issue #7079: Fix a possible crash when closing a file object while using
it from another thread. Patch by Daniel Stutzbach.
diff --git a/Python/import.c b/Python/import.c
index da660cff7a..07f572000f 100644
--- a/Python/import.c
+++ b/Python/import.c
@@ -2130,7 +2130,8 @@ import_module_level(char *name, PyObject *globals, PyObject *locals,
if (parent == NULL)
return NULL;
- head = load_next(parent, Py_None, &name, buf, &buflen);
+ head = load_next(parent, level < 0 ? Py_None : parent, &name, buf,
+ &buflen);
if (head == NULL)
return NULL;