summaryrefslogtreecommitdiffstats
path: root/Lib/importlib
diff options
context:
space:
mode:
authorEric V. Smith <eric@trueblade.com>2012-06-24 23:13:55 (GMT)
committerEric V. Smith <eric@trueblade.com>2012-06-24 23:13:55 (GMT)
commite51a36922ffcce8c5e45cc88dc95a9d33ead0f11 (patch)
tree77a4d11d13469e4aed6530c841252d98819ef198 /Lib/importlib
parente6bdc8f2dd0d8cb495e61d08f1db9e0e19c03b1d (diff)
downloadcpython-e51a36922ffcce8c5e45cc88dc95a9d33ead0f11.zip
cpython-e51a36922ffcce8c5e45cc88dc95a9d33ead0f11.tar.gz
cpython-e51a36922ffcce8c5e45cc88dc95a9d33ead0f11.tar.bz2
Fixes issue 15039: namespace packages are no longer imported in preference to modules of the same name.
Diffstat (limited to 'Lib/importlib')
-rw-r--r--Lib/importlib/_bootstrap.py8
-rw-r--r--Lib/importlib/test/source/test_finder.py2
2 files changed, 7 insertions, 3 deletions
diff --git a/Lib/importlib/_bootstrap.py b/Lib/importlib/_bootstrap.py
index 40d500a..36c0e88 100644
--- a/Lib/importlib/_bootstrap.py
+++ b/Lib/importlib/_bootstrap.py
@@ -1090,6 +1090,7 @@ class FileFinder:
def find_loader(self, fullname):
"""Try to find a loader for the specified module, or the namespace
package portions. Returns (loader, list-of-portions)."""
+ is_namespace = False
tail_module = fullname.rpartition('.')[2]
try:
mtime = _os.stat(self.path).st_mtime
@@ -1115,14 +1116,17 @@ class FileFinder:
if _path_isfile(full_path):
return (loader(fullname, full_path), [base_path])
else:
- # A namespace package, return the path
- return (None, [base_path])
+ # A namespace package, return the path if we don't also
+ # find a module in the next section.
+ is_namespace = True
# Check for a file w/ a proper suffix exists.
for suffix, loader in self.modules:
if cache_module + suffix in cache:
full_path = _path_join(self.path, tail_module + suffix)
if _path_isfile(full_path):
return (loader(fullname, full_path), [])
+ if is_namespace:
+ return (None, [base_path])
return (None, [])
def _fill_cache(self):
diff --git a/Lib/importlib/test/source/test_finder.py b/Lib/importlib/test/source/test_finder.py
index a3fa21d..b22c103 100644
--- a/Lib/importlib/test/source/test_finder.py
+++ b/Lib/importlib/test/source/test_finder.py
@@ -110,7 +110,7 @@ class FinderTests(abc.FinderTests):
def test_package_over_module(self):
name = '_temp'
loader = self.run_test(name, {'{0}.__init__'.format(name), name})
- self.assertTrue('__init__' in loader.get_filename(name))
+ self.assertIn('__init__', loader.get_filename(name))
def test_failure(self):
with source_util.create_modules('blah') as mapping: