]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Turned out that if you used explicit relative import syntax
authorBrett Cannon <bcannon@gmail.com>
Thu, 20 May 2010 18:37:55 +0000 (18:37 +0000)
committerBrett Cannon <bcannon@gmail.com>
Thu, 20 May 2010 18:37:55 +0000 (18:37 +0000)
(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.

Lib/test/test_import.py
Misc/NEWS
Python/import.c

index f47c6c9635e0c1581feead4503555a955b8314a2..da4fe3ba73a3dc85a6469dcba6893074628c6596 100644 (file)
@@ -431,6 +431,18 @@ class RelativeImportTests(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(ImportTests, PycRewritingTests, PathsTests, RelativeImportTests)
index b81eb70aa65dc63e2b4a4d76e663002a420e6eef..1c4e174389b772d59f1fde840249beb25e570182 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -12,6 +12,9 @@ What's New in Python 2.7 Release Candidate 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.
 
index 7abe67957251fe946751a6dcd48b2f0e2e74cf20..990ee51311e9cd1949770177442368ef8543ad2e 100644 (file)
@@ -2134,7 +2134,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;