Merge 3.5, issue #14209

This commit is contained in:
Łukasz Langa 2016-06-11 18:05:42 -07:00
commit 34ad2ef8f9
3 changed files with 81 additions and 4 deletions

View file

@ -375,7 +375,7 @@ try:
if len(fn)==2 and fn[1].startswith('__init__.py'): if len(fn)==2 and fn[1].startswith('__init__.py'):
if fn[0] not in yielded: if fn[0] not in yielded:
yielded[fn[0]] = 1 yielded[fn[0]] = 1
yield fn[0], True yield prefix + fn[0], True
if len(fn)!=1: if len(fn)!=1:
continue continue

View file

@ -7,7 +7,6 @@ import pkgutil
import os import os
import os.path import os.path
import tempfile import tempfile
import types
import shutil import shutil
import zipfile import zipfile
@ -101,6 +100,83 @@ class PkgutilTests(unittest.TestCase):
for t in pkgutil.walk_packages(path=[self.dirname]): for t in pkgutil.walk_packages(path=[self.dirname]):
self.fail("unexpected package found") self.fail("unexpected package found")
def test_walkpackages_filesys(self):
pkg1 = 'test_walkpackages_filesys'
pkg1_dir = os.path.join(self.dirname, pkg1)
os.mkdir(pkg1_dir)
f = open(os.path.join(pkg1_dir, '__init__.py'), "wb")
f.close()
os.mkdir(os.path.join(pkg1_dir, 'sub'))
f = open(os.path.join(pkg1_dir, 'sub', '__init__.py'), "wb")
f.close()
f = open(os.path.join(pkg1_dir, 'sub', 'mod.py'), "wb")
f.close()
# Now, to juice it up, let's add the opposite packages, too.
pkg2 = 'sub'
pkg2_dir = os.path.join(self.dirname, pkg2)
os.mkdir(pkg2_dir)
f = open(os.path.join(pkg2_dir, '__init__.py'), "wb")
f.close()
os.mkdir(os.path.join(pkg2_dir, 'test_walkpackages_filesys'))
f = open(os.path.join(pkg2_dir, 'test_walkpackages_filesys', '__init__.py'), "wb")
f.close()
f = open(os.path.join(pkg2_dir, 'test_walkpackages_filesys', 'mod.py'), "wb")
f.close()
expected = [
'sub',
'sub.test_walkpackages_filesys',
'sub.test_walkpackages_filesys.mod',
'test_walkpackages_filesys',
'test_walkpackages_filesys.sub',
'test_walkpackages_filesys.sub.mod',
]
actual= [e[1] for e in pkgutil.walk_packages([self.dirname])]
self.assertEqual(actual, expected)
for pkg in expected:
if pkg.endswith('mod'):
continue
del sys.modules[pkg]
def test_walkpackages_zipfile(self):
"""Tests the same as test_walkpackages_filesys, only with a zip file."""
zip = 'test_walkpackages_zipfile.zip'
pkg1 = 'test_walkpackages_zipfile'
pkg2 = 'sub'
zip_file = os.path.join(self.dirname, zip)
z = zipfile.ZipFile(zip_file, 'w')
z.writestr(pkg2 + '/__init__.py', "")
z.writestr(pkg2 + '/' + pkg1 + '/__init__.py', "")
z.writestr(pkg2 + '/' + pkg1 + '/mod.py', "")
z.writestr(pkg1 + '/__init__.py', "")
z.writestr(pkg1 + '/' + pkg2 + '/__init__.py', "")
z.writestr(pkg1 + '/' + pkg2 + '/mod.py', "")
z.close()
sys.path.insert(0, zip_file)
expected = [
'sub',
'sub.test_walkpackages_zipfile',
'sub.test_walkpackages_zipfile.mod',
'test_walkpackages_zipfile',
'test_walkpackages_zipfile.sub',
'test_walkpackages_zipfile.sub.mod',
]
actual= [e[1] for e in pkgutil.walk_packages([zip_file])]
self.assertEqual(actual, expected)
del sys.path[0]
for pkg in expected:
if pkg.endswith('mod'):
continue
del sys.modules[pkg]
class PkgutilPEP302Tests(unittest.TestCase): class PkgutilPEP302Tests(unittest.TestCase):
class MyTestLoader(object): class MyTestLoader(object):
@ -324,11 +400,11 @@ class ImportlibMigrationTests(unittest.TestCase):
def test_importer_deprecated(self): def test_importer_deprecated(self):
with self.check_deprecated(): with self.check_deprecated():
x = pkgutil.ImpImporter("") pkgutil.ImpImporter("")
def test_loader_deprecated(self): def test_loader_deprecated(self):
with self.check_deprecated(): with self.check_deprecated():
x = pkgutil.ImpLoader("", "", "", "") pkgutil.ImpLoader("", "", "", "")
def test_get_loader_avoids_emulation(self): def test_get_loader_avoids_emulation(self):
with check_warnings() as w: with check_warnings() as w:

View file

@ -1147,6 +1147,7 @@ Gavrie Philipson
Adrian Phillips Adrian Phillips
Dusty Phillips Dusty Phillips
Christopher J. Phoenix Christopher J. Phoenix
James Pickering
Neale Pickett Neale Pickett
Jim St. Pierre Jim St. Pierre
Dan Pierson Dan Pierson