]> granicus.if.org Git - python/commitdiff
Merged revisions 81380 via svnmerge from
authorBrett Cannon <bcannon@gmail.com>
Thu, 20 May 2010 18:41:08 +0000 (18:41 +0000)
committerBrett Cannon <bcannon@gmail.com>
Thu, 20 May 2010 18:41:08 +0000 (18:41 +0000)
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.
........

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

index 8ed6b8f7951694bb6550662cb06c2e97dcb9c8d0..5d23b290d1f05355e32d055da6eb748554845c7d 100644 (file)
@@ -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)
 
index ee4bf2b787541d0bd3eab5dbc7e912d930a964b1..6a9c0f3a5897928c739c0297f3765a44183cf3a5 100644 (file)
--- 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.
 
index da660cff7a92910e290be29315e90ad24852d238..07f572000fe6a8f2e939eece5040d3ba21e4f653 100644 (file)
@@ -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;