Merged revisions 81380 via svnmerge from

svn+ssh://pythondev@svn.python.org/python/trunk

........
  r81380 | brett.cannon | 2010-05-20 13:37:55 -0500 (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.
........
This commit is contained in:
Benjamin Peterson 2010-06-27 22:37:28 +00:00
parent d7c3ed54ef
commit 556d8001df
2 changed files with 13 additions and 1 deletions

View File

@ -468,6 +468,17 @@ class RelativeImportTests(unittest.TestCase):
ns = dict(__package__=object())
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")
class OverridingImportBuiltinTests(unittest.TestCase):
def test_override_builtin(self):

View File

@ -2385,7 +2385,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;