annotate Lib/test/test_pkgutil.py @ 79691:05c8928362ee

Merge __next__ method link fixes with 3.3.
author Ezio Melotti <ezio.melotti@gmail.com>
date Fri, 12 Oct 2012 13:46:37 +0300
parents 16e50e85d684
children c40b50d65a00
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
78107
3987667bf98f Take the first step in resolving the messy pkgutil vs importlib edge cases by basing pkgutil explicitly on importlib, deprecating its internal import emulation and setting __main__.__loader__ correctly so that runpy still works (Affects #15343, #15314, #15357)
Nick Coghlan <ncoghlan@gmail.com>
parents: 78040
diff changeset
1 from test.support import run_unittest, unload, check_warnings
46478
beb7abcd6c01 Merged revisions 62350-62355,62358-62359,62364-62365,62370,62372-62375,62378-62379,62381 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
2 import unittest
beb7abcd6c01 Merged revisions 62350-62355,62358-62359,62364-62365,62370,62372-62375,62378-62379,62381 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
3 import sys
beb7abcd6c01 Merged revisions 62350-62355,62358-62359,62364-62365,62370,62372-62375,62378-62379,62381 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
4 import imp
beb7abcd6c01 Merged revisions 62350-62355,62358-62359,62364-62365,62370,62372-62375,62378-62379,62381 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
5 import pkgutil
beb7abcd6c01 Merged revisions 62350-62355,62358-62359,62364-62365,62370,62372-62375,62378-62379,62381 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
6 import os
beb7abcd6c01 Merged revisions 62350-62355,62358-62359,62364-62365,62370,62372-62375,62378-62379,62381 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
7 import os.path
beb7abcd6c01 Merged revisions 62350-62355,62358-62359,62364-62365,62370,62372-62375,62378-62379,62381 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
8 import tempfile
beb7abcd6c01 Merged revisions 62350-62355,62358-62359,62364-62365,62370,62372-62375,62378-62379,62381 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
9 import shutil
beb7abcd6c01 Merged revisions 62350-62355,62358-62359,62364-62365,62370,62372-62375,62378-62379,62381 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
10 import zipfile
beb7abcd6c01 Merged revisions 62350-62355,62358-62359,62364-62365,62370,62372-62375,62378-62379,62381 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
11
78111
9101eab6178c Issue #15343: Handle importlib.machinery.FileFinder instances in pkgutil.walk_packages (et al)
Nick Coghlan <ncoghlan@gmail.com>
parents: 78107
diff changeset
12 # Note: pkgutil.walk_packages is currently tested in test_runpy. This is
9101eab6178c Issue #15343: Handle importlib.machinery.FileFinder instances in pkgutil.walk_packages (et al)
Nick Coghlan <ncoghlan@gmail.com>
parents: 78107
diff changeset
13 # a hack to get a major issue resolved for 3.3b2. Longer term, it should
9101eab6178c Issue #15343: Handle importlib.machinery.FileFinder instances in pkgutil.walk_packages (et al)
Nick Coghlan <ncoghlan@gmail.com>
parents: 78107
diff changeset
14 # be moved back here, perhaps by factoring out the helper code for
9101eab6178c Issue #15343: Handle importlib.machinery.FileFinder instances in pkgutil.walk_packages (et al)
Nick Coghlan <ncoghlan@gmail.com>
parents: 78107
diff changeset
15 # creating interesting package layouts to a separate module.
9101eab6178c Issue #15343: Handle importlib.machinery.FileFinder instances in pkgutil.walk_packages (et al)
Nick Coghlan <ncoghlan@gmail.com>
parents: 78107
diff changeset
16 # Issue #15348 declares this is indeed a dodgy hack ;)
46478
beb7abcd6c01 Merged revisions 62350-62355,62358-62359,62364-62365,62370,62372-62375,62378-62379,62381 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
17
beb7abcd6c01 Merged revisions 62350-62355,62358-62359,62364-62365,62370,62372-62375,62378-62379,62381 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
18 class PkgutilTests(unittest.TestCase):
beb7abcd6c01 Merged revisions 62350-62355,62358-62359,62364-62365,62370,62372-62375,62378-62379,62381 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
19
beb7abcd6c01 Merged revisions 62350-62355,62358-62359,62364-62365,62370,62372-62375,62378-62379,62381 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
20 def setUp(self):
beb7abcd6c01 Merged revisions 62350-62355,62358-62359,62364-62365,62370,62372-62375,62378-62379,62381 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
21 self.dirname = tempfile.mkdtemp()
72799
ff72f76dcf43 Issue #7367: Ensure test directory always gets removed.
Ned Deily <nad@acm.org>
parents: 72773
diff changeset
22 self.addCleanup(shutil.rmtree, self.dirname)
46478
beb7abcd6c01 Merged revisions 62350-62355,62358-62359,62364-62365,62370,62372-62375,62378-62379,62381 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
23 sys.path.insert(0, self.dirname)
beb7abcd6c01 Merged revisions 62350-62355,62358-62359,62364-62365,62370,62372-62375,62378-62379,62381 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
24
beb7abcd6c01 Merged revisions 62350-62355,62358-62359,62364-62365,62370,62372-62375,62378-62379,62381 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
25 def tearDown(self):
beb7abcd6c01 Merged revisions 62350-62355,62358-62359,62364-62365,62370,62372-62375,62378-62379,62381 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
26 del sys.path[0]
beb7abcd6c01 Merged revisions 62350-62355,62358-62359,62364-62365,62370,62372-62375,62378-62379,62381 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
27
beb7abcd6c01 Merged revisions 62350-62355,62358-62359,62364-62365,62370,62372-62375,62378-62379,62381 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
28 def test_getdata_filesys(self):
beb7abcd6c01 Merged revisions 62350-62355,62358-62359,62364-62365,62370,62372-62375,62378-62379,62381 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
29 pkg = 'test_getdata_filesys'
beb7abcd6c01 Merged revisions 62350-62355,62358-62359,62364-62365,62370,62372-62375,62378-62379,62381 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
30
beb7abcd6c01 Merged revisions 62350-62355,62358-62359,62364-62365,62370,62372-62375,62378-62379,62381 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
31 # Include a LF and a CRLF, to test that binary data is read back
beb7abcd6c01 Merged revisions 62350-62355,62358-62359,62364-62365,62370,62372-62375,62378-62379,62381 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
32 RESOURCE_DATA = b'Hello, world!\nSecond line\r\nThird line'
beb7abcd6c01 Merged revisions 62350-62355,62358-62359,62364-62365,62370,62372-62375,62378-62379,62381 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
33
beb7abcd6c01 Merged revisions 62350-62355,62358-62359,62364-62365,62370,62372-62375,62378-62379,62381 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
34 # Make a package with some resources
beb7abcd6c01 Merged revisions 62350-62355,62358-62359,62364-62365,62370,62372-62375,62378-62379,62381 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
35 package_dir = os.path.join(self.dirname, pkg)
beb7abcd6c01 Merged revisions 62350-62355,62358-62359,62364-62365,62370,62372-62375,62378-62379,62381 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
36 os.mkdir(package_dir)
beb7abcd6c01 Merged revisions 62350-62355,62358-62359,62364-62365,62370,62372-62375,62378-62379,62381 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
37 # Empty init.py
beb7abcd6c01 Merged revisions 62350-62355,62358-62359,62364-62365,62370,62372-62375,62378-62379,62381 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
38 f = open(os.path.join(package_dir, '__init__.py'), "wb")
beb7abcd6c01 Merged revisions 62350-62355,62358-62359,62364-62365,62370,62372-62375,62378-62379,62381 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
39 f.close()
beb7abcd6c01 Merged revisions 62350-62355,62358-62359,62364-62365,62370,62372-62375,62378-62379,62381 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
40 # Resource files, res.txt, sub/res.txt
beb7abcd6c01 Merged revisions 62350-62355,62358-62359,62364-62365,62370,62372-62375,62378-62379,62381 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
41 f = open(os.path.join(package_dir, 'res.txt'), "wb")
beb7abcd6c01 Merged revisions 62350-62355,62358-62359,62364-62365,62370,62372-62375,62378-62379,62381 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
42 f.write(RESOURCE_DATA)
beb7abcd6c01 Merged revisions 62350-62355,62358-62359,62364-62365,62370,62372-62375,62378-62379,62381 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
43 f.close()
beb7abcd6c01 Merged revisions 62350-62355,62358-62359,62364-62365,62370,62372-62375,62378-62379,62381 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
44 os.mkdir(os.path.join(package_dir, 'sub'))
beb7abcd6c01 Merged revisions 62350-62355,62358-62359,62364-62365,62370,62372-62375,62378-62379,62381 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
45 f = open(os.path.join(package_dir, 'sub', 'res.txt'), "wb")
beb7abcd6c01 Merged revisions 62350-62355,62358-62359,62364-62365,62370,62372-62375,62378-62379,62381 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
46 f.write(RESOURCE_DATA)
beb7abcd6c01 Merged revisions 62350-62355,62358-62359,62364-62365,62370,62372-62375,62378-62379,62381 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
47 f.close()
beb7abcd6c01 Merged revisions 62350-62355,62358-62359,62364-62365,62370,62372-62375,62378-62379,62381 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
48
beb7abcd6c01 Merged revisions 62350-62355,62358-62359,62364-62365,62370,62372-62375,62378-62379,62381 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
49 # Check we can read the resources
beb7abcd6c01 Merged revisions 62350-62355,62358-62359,62364-62365,62370,62372-62375,62378-62379,62381 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
50 res1 = pkgutil.get_data(pkg, 'res.txt')
beb7abcd6c01 Merged revisions 62350-62355,62358-62359,62364-62365,62370,62372-62375,62378-62379,62381 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
51 self.assertEqual(res1, RESOURCE_DATA)
beb7abcd6c01 Merged revisions 62350-62355,62358-62359,62364-62365,62370,62372-62375,62378-62379,62381 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
52 res2 = pkgutil.get_data(pkg, 'sub/res.txt')
beb7abcd6c01 Merged revisions 62350-62355,62358-62359,62364-62365,62370,62372-62375,62378-62379,62381 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
53 self.assertEqual(res2, RESOURCE_DATA)
beb7abcd6c01 Merged revisions 62350-62355,62358-62359,62364-62365,62370,62372-62375,62378-62379,62381 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
54
beb7abcd6c01 Merged revisions 62350-62355,62358-62359,62364-62365,62370,62372-62375,62378-62379,62381 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
55 del sys.modules[pkg]
beb7abcd6c01 Merged revisions 62350-62355,62358-62359,62364-62365,62370,62372-62375,62378-62379,62381 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
56
beb7abcd6c01 Merged revisions 62350-62355,62358-62359,62364-62365,62370,62372-62375,62378-62379,62381 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
57 def test_getdata_zipfile(self):
beb7abcd6c01 Merged revisions 62350-62355,62358-62359,62364-62365,62370,62372-62375,62378-62379,62381 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
58 zip = 'test_getdata_zipfile.zip'
beb7abcd6c01 Merged revisions 62350-62355,62358-62359,62364-62365,62370,62372-62375,62378-62379,62381 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
59 pkg = 'test_getdata_zipfile'
beb7abcd6c01 Merged revisions 62350-62355,62358-62359,62364-62365,62370,62372-62375,62378-62379,62381 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
60
beb7abcd6c01 Merged revisions 62350-62355,62358-62359,62364-62365,62370,62372-62375,62378-62379,62381 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
61 # Include a LF and a CRLF, to test that binary data is read back
beb7abcd6c01 Merged revisions 62350-62355,62358-62359,62364-62365,62370,62372-62375,62378-62379,62381 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
62 RESOURCE_DATA = b'Hello, world!\nSecond line\r\nThird line'
beb7abcd6c01 Merged revisions 62350-62355,62358-62359,62364-62365,62370,62372-62375,62378-62379,62381 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
63
beb7abcd6c01 Merged revisions 62350-62355,62358-62359,62364-62365,62370,62372-62375,62378-62379,62381 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
64 # Make a package with some resources
beb7abcd6c01 Merged revisions 62350-62355,62358-62359,62364-62365,62370,62372-62375,62378-62379,62381 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
65 zip_file = os.path.join(self.dirname, zip)
beb7abcd6c01 Merged revisions 62350-62355,62358-62359,62364-62365,62370,62372-62375,62378-62379,62381 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
66 z = zipfile.ZipFile(zip_file, 'w')
beb7abcd6c01 Merged revisions 62350-62355,62358-62359,62364-62365,62370,62372-62375,62378-62379,62381 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
67
beb7abcd6c01 Merged revisions 62350-62355,62358-62359,62364-62365,62370,62372-62375,62378-62379,62381 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
68 # Empty init.py
beb7abcd6c01 Merged revisions 62350-62355,62358-62359,62364-62365,62370,62372-62375,62378-62379,62381 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
69 z.writestr(pkg + '/__init__.py', "")
beb7abcd6c01 Merged revisions 62350-62355,62358-62359,62364-62365,62370,62372-62375,62378-62379,62381 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
70 # Resource files, res.txt, sub/res.txt
beb7abcd6c01 Merged revisions 62350-62355,62358-62359,62364-62365,62370,62372-62375,62378-62379,62381 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
71 z.writestr(pkg + '/res.txt', RESOURCE_DATA)
beb7abcd6c01 Merged revisions 62350-62355,62358-62359,62364-62365,62370,62372-62375,62378-62379,62381 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
72 z.writestr(pkg + '/sub/res.txt', RESOURCE_DATA)
beb7abcd6c01 Merged revisions 62350-62355,62358-62359,62364-62365,62370,62372-62375,62378-62379,62381 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
73 z.close()
beb7abcd6c01 Merged revisions 62350-62355,62358-62359,62364-62365,62370,62372-62375,62378-62379,62381 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
74
beb7abcd6c01 Merged revisions 62350-62355,62358-62359,62364-62365,62370,62372-62375,62378-62379,62381 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
75 # Check we can read the resources
beb7abcd6c01 Merged revisions 62350-62355,62358-62359,62364-62365,62370,62372-62375,62378-62379,62381 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
76 sys.path.insert(0, zip_file)
beb7abcd6c01 Merged revisions 62350-62355,62358-62359,62364-62365,62370,62372-62375,62378-62379,62381 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
77 res1 = pkgutil.get_data(pkg, 'res.txt')
beb7abcd6c01 Merged revisions 62350-62355,62358-62359,62364-62365,62370,62372-62375,62378-62379,62381 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
78 self.assertEqual(res1, RESOURCE_DATA)
beb7abcd6c01 Merged revisions 62350-62355,62358-62359,62364-62365,62370,62372-62375,62378-62379,62381 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
79 res2 = pkgutil.get_data(pkg, 'sub/res.txt')
beb7abcd6c01 Merged revisions 62350-62355,62358-62359,62364-62365,62370,62372-62375,62378-62379,62381 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
80 self.assertEqual(res2, RESOURCE_DATA)
55602
680ad8eed33b Merged revisions 73833,73838,73850-73852,73856-73857 via svnmerge from
Georg Brandl <georg@python.org>
parents: 47201
diff changeset
81
680ad8eed33b Merged revisions 73833,73838,73850-73852,73856-73857 via svnmerge from
Georg Brandl <georg@python.org>
parents: 47201
diff changeset
82 names = []
680ad8eed33b Merged revisions 73833,73838,73850-73852,73856-73857 via svnmerge from
Georg Brandl <georg@python.org>
parents: 47201
diff changeset
83 for loader, name, ispkg in pkgutil.iter_modules([zip_file]):
680ad8eed33b Merged revisions 73833,73838,73850-73852,73856-73857 via svnmerge from
Georg Brandl <georg@python.org>
parents: 47201
diff changeset
84 names.append(name)
680ad8eed33b Merged revisions 73833,73838,73850-73852,73856-73857 via svnmerge from
Georg Brandl <georg@python.org>
parents: 47201
diff changeset
85 self.assertEqual(names, ['test_getdata_zipfile'])
680ad8eed33b Merged revisions 73833,73838,73850-73852,73856-73857 via svnmerge from
Georg Brandl <georg@python.org>
parents: 47201
diff changeset
86
46478
beb7abcd6c01 Merged revisions 62350-62355,62358-62359,62364-62365,62370,62372-62375,62378-62379,62381 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
87 del sys.path[0]
beb7abcd6c01 Merged revisions 62350-62355,62358-62359,62364-62365,62370,62372-62375,62378-62379,62381 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
88
beb7abcd6c01 Merged revisions 62350-62355,62358-62359,62364-62365,62370,62372-62375,62378-62379,62381 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
89 del sys.modules[pkg]
beb7abcd6c01 Merged revisions 62350-62355,62358-62359,62364-62365,62370,62372-62375,62378-62379,62381 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
90
72773
a1e6633ef3f1 Issue #7367: Add test case to test_pkgutil for walking path with
Ned Deily <nad@acm.org>
parents: 55602
diff changeset
91 def test_unreadable_dir_on_syspath(self):
a1e6633ef3f1 Issue #7367: Add test case to test_pkgutil for walking path with
Ned Deily <nad@acm.org>
parents: 55602
diff changeset
92 # issue7367 - walk_packages failed if unreadable dir on sys.path
a1e6633ef3f1 Issue #7367: Add test case to test_pkgutil for walking path with
Ned Deily <nad@acm.org>
parents: 55602
diff changeset
93 package_name = "unreadable_package"
a1e6633ef3f1 Issue #7367: Add test case to test_pkgutil for walking path with
Ned Deily <nad@acm.org>
parents: 55602
diff changeset
94 d = os.path.join(self.dirname, package_name)
a1e6633ef3f1 Issue #7367: Add test case to test_pkgutil for walking path with
Ned Deily <nad@acm.org>
parents: 55602
diff changeset
95 # this does not appear to create an unreadable dir on Windows
a1e6633ef3f1 Issue #7367: Add test case to test_pkgutil for walking path with
Ned Deily <nad@acm.org>
parents: 55602
diff changeset
96 # but the test should not fail anyway
a1e6633ef3f1 Issue #7367: Add test case to test_pkgutil for walking path with
Ned Deily <nad@acm.org>
parents: 55602
diff changeset
97 os.mkdir(d, 0)
72799
ff72f76dcf43 Issue #7367: Ensure test directory always gets removed.
Ned Deily <nad@acm.org>
parents: 72773
diff changeset
98 self.addCleanup(os.rmdir, d)
72773
a1e6633ef3f1 Issue #7367: Add test case to test_pkgutil for walking path with
Ned Deily <nad@acm.org>
parents: 55602
diff changeset
99 for t in pkgutil.walk_packages(path=[self.dirname]):
a1e6633ef3f1 Issue #7367: Add test case to test_pkgutil for walking path with
Ned Deily <nad@acm.org>
parents: 55602
diff changeset
100 self.fail("unexpected package found")
a1e6633ef3f1 Issue #7367: Add test case to test_pkgutil for walking path with
Ned Deily <nad@acm.org>
parents: 55602
diff changeset
101
46478
beb7abcd6c01 Merged revisions 62350-62355,62358-62359,62364-62365,62370,62372-62375,62378-62379,62381 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
102 class PkgutilPEP302Tests(unittest.TestCase):
beb7abcd6c01 Merged revisions 62350-62355,62358-62359,62364-62365,62370,62372-62375,62378-62379,62381 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
103
beb7abcd6c01 Merged revisions 62350-62355,62358-62359,62364-62365,62370,62372-62375,62378-62379,62381 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
104 class MyTestLoader(object):
beb7abcd6c01 Merged revisions 62350-62355,62358-62359,62364-62365,62370,62372-62375,62378-62379,62381 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
105 def load_module(self, fullname):
beb7abcd6c01 Merged revisions 62350-62355,62358-62359,62364-62365,62370,62372-62375,62378-62379,62381 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
106 # Create an empty module
beb7abcd6c01 Merged revisions 62350-62355,62358-62359,62364-62365,62370,62372-62375,62378-62379,62381 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
107 mod = sys.modules.setdefault(fullname, imp.new_module(fullname))
beb7abcd6c01 Merged revisions 62350-62355,62358-62359,62364-62365,62370,62372-62375,62378-62379,62381 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
108 mod.__file__ = "<%s>" % self.__class__.__name__
beb7abcd6c01 Merged revisions 62350-62355,62358-62359,62364-62365,62370,62372-62375,62378-62379,62381 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
109 mod.__loader__ = self
beb7abcd6c01 Merged revisions 62350-62355,62358-62359,62364-62365,62370,62372-62375,62378-62379,62381 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
110 # Make it a package
beb7abcd6c01 Merged revisions 62350-62355,62358-62359,62364-62365,62370,62372-62375,62378-62379,62381 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
111 mod.__path__ = []
beb7abcd6c01 Merged revisions 62350-62355,62358-62359,62364-62365,62370,62372-62375,62378-62379,62381 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
112 # Count how many times the module is reloaded
beb7abcd6c01 Merged revisions 62350-62355,62358-62359,62364-62365,62370,62372-62375,62378-62379,62381 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
113 mod.__dict__['loads'] = mod.__dict__.get('loads',0) + 1
beb7abcd6c01 Merged revisions 62350-62355,62358-62359,62364-62365,62370,62372-62375,62378-62379,62381 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
114 return mod
beb7abcd6c01 Merged revisions 62350-62355,62358-62359,62364-62365,62370,62372-62375,62378-62379,62381 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
115
beb7abcd6c01 Merged revisions 62350-62355,62358-62359,62364-62365,62370,62372-62375,62378-62379,62381 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
116 def get_data(self, path):
beb7abcd6c01 Merged revisions 62350-62355,62358-62359,62364-62365,62370,62372-62375,62378-62379,62381 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
117 return "Hello, world!"
beb7abcd6c01 Merged revisions 62350-62355,62358-62359,62364-62365,62370,62372-62375,62378-62379,62381 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
118
beb7abcd6c01 Merged revisions 62350-62355,62358-62359,62364-62365,62370,62372-62375,62378-62379,62381 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
119 class MyTestImporter(object):
beb7abcd6c01 Merged revisions 62350-62355,62358-62359,62364-62365,62370,62372-62375,62378-62379,62381 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
120 def find_module(self, fullname, path=None):
beb7abcd6c01 Merged revisions 62350-62355,62358-62359,62364-62365,62370,62372-62375,62378-62379,62381 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
121 return PkgutilPEP302Tests.MyTestLoader()
beb7abcd6c01 Merged revisions 62350-62355,62358-62359,62364-62365,62370,62372-62375,62378-62379,62381 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
122
beb7abcd6c01 Merged revisions 62350-62355,62358-62359,62364-62365,62370,62372-62375,62378-62379,62381 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
123 def setUp(self):
beb7abcd6c01 Merged revisions 62350-62355,62358-62359,62364-62365,62370,62372-62375,62378-62379,62381 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
124 sys.meta_path.insert(0, self.MyTestImporter())
beb7abcd6c01 Merged revisions 62350-62355,62358-62359,62364-62365,62370,62372-62375,62378-62379,62381 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
125
beb7abcd6c01 Merged revisions 62350-62355,62358-62359,62364-62365,62370,62372-62375,62378-62379,62381 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
126 def tearDown(self):
beb7abcd6c01 Merged revisions 62350-62355,62358-62359,62364-62365,62370,62372-62375,62378-62379,62381 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
127 del sys.meta_path[0]
beb7abcd6c01 Merged revisions 62350-62355,62358-62359,62364-62365,62370,62372-62375,62378-62379,62381 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
128
beb7abcd6c01 Merged revisions 62350-62355,62358-62359,62364-62365,62370,62372-62375,62378-62379,62381 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
129 def test_getdata_pep302(self):
beb7abcd6c01 Merged revisions 62350-62355,62358-62359,62364-62365,62370,62372-62375,62378-62379,62381 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
130 # Use a dummy importer/loader
beb7abcd6c01 Merged revisions 62350-62355,62358-62359,62364-62365,62370,62372-62375,62378-62379,62381 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
131 self.assertEqual(pkgutil.get_data('foo', 'dummy'), "Hello, world!")
beb7abcd6c01 Merged revisions 62350-62355,62358-62359,62364-62365,62370,62372-62375,62378-62379,62381 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
132 del sys.modules['foo']
beb7abcd6c01 Merged revisions 62350-62355,62358-62359,62364-62365,62370,62372-62375,62378-62379,62381 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
133
beb7abcd6c01 Merged revisions 62350-62355,62358-62359,62364-62365,62370,62372-62375,62378-62379,62381 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
134 def test_alreadyloaded(self):
beb7abcd6c01 Merged revisions 62350-62355,62358-62359,62364-62365,62370,62372-62375,62378-62379,62381 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
135 # Ensure that get_data works without reloading - the "loads" module
beb7abcd6c01 Merged revisions 62350-62355,62358-62359,62364-62365,62370,62372-62375,62378-62379,62381 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
136 # variable in the example loader should count how many times a reload
beb7abcd6c01 Merged revisions 62350-62355,62358-62359,62364-62365,62370,62372-62375,62378-62379,62381 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
137 # occurs.
beb7abcd6c01 Merged revisions 62350-62355,62358-62359,62364-62365,62370,62372-62375,62378-62379,62381 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
138 import foo
beb7abcd6c01 Merged revisions 62350-62355,62358-62359,62364-62365,62370,62372-62375,62378-62379,62381 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
139 self.assertEqual(foo.loads, 1)
beb7abcd6c01 Merged revisions 62350-62355,62358-62359,62364-62365,62370,62372-62375,62378-62379,62381 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
140 self.assertEqual(pkgutil.get_data('foo', 'dummy'), "Hello, world!")
beb7abcd6c01 Merged revisions 62350-62355,62358-62359,62364-62365,62370,62372-62375,62378-62379,62381 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
141 self.assertEqual(foo.loads, 1)
beb7abcd6c01 Merged revisions 62350-62355,62358-62359,62364-62365,62370,62372-62375,62378-62379,62381 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
142 del sys.modules['foo']
beb7abcd6c01 Merged revisions 62350-62355,62358-62359,62364-62365,62370,62372-62375,62378-62379,62381 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
143
76972
48cb6b67d306 Issue #14817: Add rudimentary tests for pkgutil.extend_path.
Eric V. Smith <eric@trueblade.com>
parents: 72799
diff changeset
144
77126
702009f3c0b1 issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents: 76983
diff changeset
145 # These tests, especially the setup and cleanup, are hideous. They
702009f3c0b1 issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents: 76983
diff changeset
146 # need to be cleaned up once issue 14715 is addressed.
76972
48cb6b67d306 Issue #14817: Add rudimentary tests for pkgutil.extend_path.
Eric V. Smith <eric@trueblade.com>
parents: 72799
diff changeset
147 class ExtendPathTests(unittest.TestCase):
48cb6b67d306 Issue #14817: Add rudimentary tests for pkgutil.extend_path.
Eric V. Smith <eric@trueblade.com>
parents: 72799
diff changeset
148 def create_init(self, pkgname):
48cb6b67d306 Issue #14817: Add rudimentary tests for pkgutil.extend_path.
Eric V. Smith <eric@trueblade.com>
parents: 72799
diff changeset
149 dirname = tempfile.mkdtemp()
48cb6b67d306 Issue #14817: Add rudimentary tests for pkgutil.extend_path.
Eric V. Smith <eric@trueblade.com>
parents: 72799
diff changeset
150 sys.path.insert(0, dirname)
48cb6b67d306 Issue #14817: Add rudimentary tests for pkgutil.extend_path.
Eric V. Smith <eric@trueblade.com>
parents: 72799
diff changeset
151
48cb6b67d306 Issue #14817: Add rudimentary tests for pkgutil.extend_path.
Eric V. Smith <eric@trueblade.com>
parents: 72799
diff changeset
152 pkgdir = os.path.join(dirname, pkgname)
48cb6b67d306 Issue #14817: Add rudimentary tests for pkgutil.extend_path.
Eric V. Smith <eric@trueblade.com>
parents: 72799
diff changeset
153 os.mkdir(pkgdir)
48cb6b67d306 Issue #14817: Add rudimentary tests for pkgutil.extend_path.
Eric V. Smith <eric@trueblade.com>
parents: 72799
diff changeset
154 with open(os.path.join(pkgdir, '__init__.py'), 'w') as fl:
48cb6b67d306 Issue #14817: Add rudimentary tests for pkgutil.extend_path.
Eric V. Smith <eric@trueblade.com>
parents: 72799
diff changeset
155 fl.write('from pkgutil import extend_path\n__path__ = extend_path(__path__, __name__)\n')
48cb6b67d306 Issue #14817: Add rudimentary tests for pkgutil.extend_path.
Eric V. Smith <eric@trueblade.com>
parents: 72799
diff changeset
156
48cb6b67d306 Issue #14817: Add rudimentary tests for pkgutil.extend_path.
Eric V. Smith <eric@trueblade.com>
parents: 72799
diff changeset
157 return dirname
48cb6b67d306 Issue #14817: Add rudimentary tests for pkgutil.extend_path.
Eric V. Smith <eric@trueblade.com>
parents: 72799
diff changeset
158
48cb6b67d306 Issue #14817: Add rudimentary tests for pkgutil.extend_path.
Eric V. Smith <eric@trueblade.com>
parents: 72799
diff changeset
159 def create_submodule(self, dirname, pkgname, submodule_name, value):
48cb6b67d306 Issue #14817: Add rudimentary tests for pkgutil.extend_path.
Eric V. Smith <eric@trueblade.com>
parents: 72799
diff changeset
160 module_name = os.path.join(dirname, pkgname, submodule_name + '.py')
48cb6b67d306 Issue #14817: Add rudimentary tests for pkgutil.extend_path.
Eric V. Smith <eric@trueblade.com>
parents: 72799
diff changeset
161 with open(module_name, 'w') as fl:
48cb6b67d306 Issue #14817: Add rudimentary tests for pkgutil.extend_path.
Eric V. Smith <eric@trueblade.com>
parents: 72799
diff changeset
162 print('value={}'.format(value), file=fl)
48cb6b67d306 Issue #14817: Add rudimentary tests for pkgutil.extend_path.
Eric V. Smith <eric@trueblade.com>
parents: 72799
diff changeset
163
48cb6b67d306 Issue #14817: Add rudimentary tests for pkgutil.extend_path.
Eric V. Smith <eric@trueblade.com>
parents: 72799
diff changeset
164 def test_simple(self):
77126
702009f3c0b1 issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents: 76983
diff changeset
165 pkgname = 'foo'
702009f3c0b1 issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents: 76983
diff changeset
166 dirname_0 = self.create_init(pkgname)
702009f3c0b1 issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents: 76983
diff changeset
167 dirname_1 = self.create_init(pkgname)
702009f3c0b1 issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents: 76983
diff changeset
168 self.create_submodule(dirname_0, pkgname, 'bar', 0)
702009f3c0b1 issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents: 76983
diff changeset
169 self.create_submodule(dirname_1, pkgname, 'baz', 1)
76972
48cb6b67d306 Issue #14817: Add rudimentary tests for pkgutil.extend_path.
Eric V. Smith <eric@trueblade.com>
parents: 72799
diff changeset
170 import foo.bar
48cb6b67d306 Issue #14817: Add rudimentary tests for pkgutil.extend_path.
Eric V. Smith <eric@trueblade.com>
parents: 72799
diff changeset
171 import foo.baz
48cb6b67d306 Issue #14817: Add rudimentary tests for pkgutil.extend_path.
Eric V. Smith <eric@trueblade.com>
parents: 72799
diff changeset
172 # Ensure we read the expected values
48cb6b67d306 Issue #14817: Add rudimentary tests for pkgutil.extend_path.
Eric V. Smith <eric@trueblade.com>
parents: 72799
diff changeset
173 self.assertEqual(foo.bar.value, 0)
48cb6b67d306 Issue #14817: Add rudimentary tests for pkgutil.extend_path.
Eric V. Smith <eric@trueblade.com>
parents: 72799
diff changeset
174 self.assertEqual(foo.baz.value, 1)
48cb6b67d306 Issue #14817: Add rudimentary tests for pkgutil.extend_path.
Eric V. Smith <eric@trueblade.com>
parents: 72799
diff changeset
175
48cb6b67d306 Issue #14817: Add rudimentary tests for pkgutil.extend_path.
Eric V. Smith <eric@trueblade.com>
parents: 72799
diff changeset
176 # Ensure the path is set up correctly
48cb6b67d306 Issue #14817: Add rudimentary tests for pkgutil.extend_path.
Eric V. Smith <eric@trueblade.com>
parents: 72799
diff changeset
177 self.assertEqual(sorted(foo.__path__),
77126
702009f3c0b1 issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents: 76983
diff changeset
178 sorted([os.path.join(dirname_0, pkgname),
702009f3c0b1 issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents: 76983
diff changeset
179 os.path.join(dirname_1, pkgname)]))
702009f3c0b1 issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents: 76983
diff changeset
180
702009f3c0b1 issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents: 76983
diff changeset
181 # Cleanup
702009f3c0b1 issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents: 76983
diff changeset
182 shutil.rmtree(dirname_0)
702009f3c0b1 issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents: 76983
diff changeset
183 shutil.rmtree(dirname_1)
702009f3c0b1 issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents: 76983
diff changeset
184 del sys.path[0]
702009f3c0b1 issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents: 76983
diff changeset
185 del sys.path[0]
702009f3c0b1 issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents: 76983
diff changeset
186 del sys.modules['foo']
702009f3c0b1 issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents: 76983
diff changeset
187 del sys.modules['foo.bar']
702009f3c0b1 issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents: 76983
diff changeset
188 del sys.modules['foo.baz']
702009f3c0b1 issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents: 76983
diff changeset
189
702009f3c0b1 issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents: 76983
diff changeset
190 def test_mixed_namespace(self):
702009f3c0b1 issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents: 76983
diff changeset
191 pkgname = 'foo'
702009f3c0b1 issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents: 76983
diff changeset
192 dirname_0 = self.create_init(pkgname)
702009f3c0b1 issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents: 76983
diff changeset
193 dirname_1 = self.create_init(pkgname)
702009f3c0b1 issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents: 76983
diff changeset
194 self.create_submodule(dirname_0, pkgname, 'bar', 0)
702009f3c0b1 issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents: 76983
diff changeset
195 # Turn this into a PEP 420 namespace package
702009f3c0b1 issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents: 76983
diff changeset
196 os.unlink(os.path.join(dirname_0, pkgname, '__init__.py'))
702009f3c0b1 issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents: 76983
diff changeset
197 self.create_submodule(dirname_1, pkgname, 'baz', 1)
702009f3c0b1 issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents: 76983
diff changeset
198 import foo.bar
702009f3c0b1 issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents: 76983
diff changeset
199 import foo.baz
702009f3c0b1 issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents: 76983
diff changeset
200 # Ensure we read the expected values
702009f3c0b1 issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents: 76983
diff changeset
201 self.assertEqual(foo.bar.value, 0)
702009f3c0b1 issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents: 76983
diff changeset
202 self.assertEqual(foo.baz.value, 1)
702009f3c0b1 issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents: 76983
diff changeset
203
702009f3c0b1 issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents: 76983
diff changeset
204 # Ensure the path is set up correctly
702009f3c0b1 issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents: 76983
diff changeset
205 self.assertEqual(sorted(foo.__path__),
702009f3c0b1 issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents: 76983
diff changeset
206 sorted([os.path.join(dirname_0, pkgname),
702009f3c0b1 issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents: 76983
diff changeset
207 os.path.join(dirname_1, pkgname)]))
702009f3c0b1 issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents: 76983
diff changeset
208
702009f3c0b1 issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents: 76983
diff changeset
209 # Cleanup
702009f3c0b1 issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents: 76983
diff changeset
210 shutil.rmtree(dirname_0)
702009f3c0b1 issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents: 76983
diff changeset
211 shutil.rmtree(dirname_1)
702009f3c0b1 issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents: 76983
diff changeset
212 del sys.path[0]
702009f3c0b1 issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents: 76983
diff changeset
213 del sys.path[0]
702009f3c0b1 issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents: 76983
diff changeset
214 del sys.modules['foo']
702009f3c0b1 issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents: 76983
diff changeset
215 del sys.modules['foo.bar']
702009f3c0b1 issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents: 76983
diff changeset
216 del sys.modules['foo.baz']
76972
48cb6b67d306 Issue #14817: Add rudimentary tests for pkgutil.extend_path.
Eric V. Smith <eric@trueblade.com>
parents: 72799
diff changeset
217
48cb6b67d306 Issue #14817: Add rudimentary tests for pkgutil.extend_path.
Eric V. Smith <eric@trueblade.com>
parents: 72799
diff changeset
218 # XXX: test .pkg files
48cb6b67d306 Issue #14817: Add rudimentary tests for pkgutil.extend_path.
Eric V. Smith <eric@trueblade.com>
parents: 72799
diff changeset
219
48cb6b67d306 Issue #14817: Add rudimentary tests for pkgutil.extend_path.
Eric V. Smith <eric@trueblade.com>
parents: 72799
diff changeset
220
78039
f86df559319d Backport test for nested namespace packages.
Antoine Pitrou <solipsis@pitrou.net>
parents: 76983
diff changeset
221 class NestedNamespacePackageTest(unittest.TestCase):
f86df559319d Backport test for nested namespace packages.
Antoine Pitrou <solipsis@pitrou.net>
parents: 76983
diff changeset
222
f86df559319d Backport test for nested namespace packages.
Antoine Pitrou <solipsis@pitrou.net>
parents: 76983
diff changeset
223 def setUp(self):
f86df559319d Backport test for nested namespace packages.
Antoine Pitrou <solipsis@pitrou.net>
parents: 76983
diff changeset
224 self.basedir = tempfile.mkdtemp()
f86df559319d Backport test for nested namespace packages.
Antoine Pitrou <solipsis@pitrou.net>
parents: 76983
diff changeset
225 self.old_path = sys.path[:]
f86df559319d Backport test for nested namespace packages.
Antoine Pitrou <solipsis@pitrou.net>
parents: 76983
diff changeset
226
f86df559319d Backport test for nested namespace packages.
Antoine Pitrou <solipsis@pitrou.net>
parents: 76983
diff changeset
227 def tearDown(self):
f86df559319d Backport test for nested namespace packages.
Antoine Pitrou <solipsis@pitrou.net>
parents: 76983
diff changeset
228 sys.path[:] = self.old_path
f86df559319d Backport test for nested namespace packages.
Antoine Pitrou <solipsis@pitrou.net>
parents: 76983
diff changeset
229 shutil.rmtree(self.basedir)
f86df559319d Backport test for nested namespace packages.
Antoine Pitrou <solipsis@pitrou.net>
parents: 76983
diff changeset
230
f86df559319d Backport test for nested namespace packages.
Antoine Pitrou <solipsis@pitrou.net>
parents: 76983
diff changeset
231 def create_module(self, name, contents):
f86df559319d Backport test for nested namespace packages.
Antoine Pitrou <solipsis@pitrou.net>
parents: 76983
diff changeset
232 base, final = name.rsplit('.', 1)
f86df559319d Backport test for nested namespace packages.
Antoine Pitrou <solipsis@pitrou.net>
parents: 76983
diff changeset
233 base_path = os.path.join(self.basedir, base.replace('.', os.path.sep))
f86df559319d Backport test for nested namespace packages.
Antoine Pitrou <solipsis@pitrou.net>
parents: 76983
diff changeset
234 os.makedirs(base_path, exist_ok=True)
f86df559319d Backport test for nested namespace packages.
Antoine Pitrou <solipsis@pitrou.net>
parents: 76983
diff changeset
235 with open(os.path.join(base_path, final + ".py"), 'w') as f:
f86df559319d Backport test for nested namespace packages.
Antoine Pitrou <solipsis@pitrou.net>
parents: 76983
diff changeset
236 f.write(contents)
f86df559319d Backport test for nested namespace packages.
Antoine Pitrou <solipsis@pitrou.net>
parents: 76983
diff changeset
237
f86df559319d Backport test for nested namespace packages.
Antoine Pitrou <solipsis@pitrou.net>
parents: 76983
diff changeset
238 def test_nested(self):
f86df559319d Backport test for nested namespace packages.
Antoine Pitrou <solipsis@pitrou.net>
parents: 76983
diff changeset
239 pkgutil_boilerplate = (
f86df559319d Backport test for nested namespace packages.
Antoine Pitrou <solipsis@pitrou.net>
parents: 76983
diff changeset
240 'import pkgutil; '
f86df559319d Backport test for nested namespace packages.
Antoine Pitrou <solipsis@pitrou.net>
parents: 76983
diff changeset
241 '__path__ = pkgutil.extend_path(__path__, __name__)')
f86df559319d Backport test for nested namespace packages.
Antoine Pitrou <solipsis@pitrou.net>
parents: 76983
diff changeset
242 self.create_module('a.pkg.__init__', pkgutil_boilerplate)
f86df559319d Backport test for nested namespace packages.
Antoine Pitrou <solipsis@pitrou.net>
parents: 76983
diff changeset
243 self.create_module('b.pkg.__init__', pkgutil_boilerplate)
f86df559319d Backport test for nested namespace packages.
Antoine Pitrou <solipsis@pitrou.net>
parents: 76983
diff changeset
244 self.create_module('a.pkg.subpkg.__init__', pkgutil_boilerplate)
f86df559319d Backport test for nested namespace packages.
Antoine Pitrou <solipsis@pitrou.net>
parents: 76983
diff changeset
245 self.create_module('b.pkg.subpkg.__init__', pkgutil_boilerplate)
f86df559319d Backport test for nested namespace packages.
Antoine Pitrou <solipsis@pitrou.net>
parents: 76983
diff changeset
246 self.create_module('a.pkg.subpkg.c', 'c = 1')
f86df559319d Backport test for nested namespace packages.
Antoine Pitrou <solipsis@pitrou.net>
parents: 76983
diff changeset
247 self.create_module('b.pkg.subpkg.d', 'd = 2')
f86df559319d Backport test for nested namespace packages.
Antoine Pitrou <solipsis@pitrou.net>
parents: 76983
diff changeset
248 sys.path.insert(0, os.path.join(self.basedir, 'a'))
f86df559319d Backport test for nested namespace packages.
Antoine Pitrou <solipsis@pitrou.net>
parents: 76983
diff changeset
249 sys.path.insert(0, os.path.join(self.basedir, 'b'))
f86df559319d Backport test for nested namespace packages.
Antoine Pitrou <solipsis@pitrou.net>
parents: 76983
diff changeset
250 import pkg
f86df559319d Backport test for nested namespace packages.
Antoine Pitrou <solipsis@pitrou.net>
parents: 76983
diff changeset
251 self.addCleanup(unload, 'pkg')
f86df559319d Backport test for nested namespace packages.
Antoine Pitrou <solipsis@pitrou.net>
parents: 76983
diff changeset
252 self.assertEqual(len(pkg.__path__), 2)
f86df559319d Backport test for nested namespace packages.
Antoine Pitrou <solipsis@pitrou.net>
parents: 76983
diff changeset
253 import pkg.subpkg
f86df559319d Backport test for nested namespace packages.
Antoine Pitrou <solipsis@pitrou.net>
parents: 76983
diff changeset
254 self.addCleanup(unload, 'pkg.subpkg')
f86df559319d Backport test for nested namespace packages.
Antoine Pitrou <solipsis@pitrou.net>
parents: 76983
diff changeset
255 self.assertEqual(len(pkg.subpkg.__path__), 2)
f86df559319d Backport test for nested namespace packages.
Antoine Pitrou <solipsis@pitrou.net>
parents: 76983
diff changeset
256 from pkg.subpkg.c import c
f86df559319d Backport test for nested namespace packages.
Antoine Pitrou <solipsis@pitrou.net>
parents: 76983
diff changeset
257 from pkg.subpkg.d import d
f86df559319d Backport test for nested namespace packages.
Antoine Pitrou <solipsis@pitrou.net>
parents: 76983
diff changeset
258 self.assertEqual(c, 1)
f86df559319d Backport test for nested namespace packages.
Antoine Pitrou <solipsis@pitrou.net>
parents: 76983
diff changeset
259 self.assertEqual(d, 2)
f86df559319d Backport test for nested namespace packages.
Antoine Pitrou <solipsis@pitrou.net>
parents: 76983
diff changeset
260
f86df559319d Backport test for nested namespace packages.
Antoine Pitrou <solipsis@pitrou.net>
parents: 76983
diff changeset
261
78107
3987667bf98f Take the first step in resolving the messy pkgutil vs importlib edge cases by basing pkgutil explicitly on importlib, deprecating its internal import emulation and setting __main__.__loader__ correctly so that runpy still works (Affects #15343, #15314, #15357)
Nick Coghlan <ncoghlan@gmail.com>
parents: 78040
diff changeset
262 class ImportlibMigrationTests(unittest.TestCase):
3987667bf98f Take the first step in resolving the messy pkgutil vs importlib edge cases by basing pkgutil explicitly on importlib, deprecating its internal import emulation and setting __main__.__loader__ correctly so that runpy still works (Affects #15343, #15314, #15357)
Nick Coghlan <ncoghlan@gmail.com>
parents: 78040
diff changeset
263 # With full PEP 302 support in the standard import machinery, the
3987667bf98f Take the first step in resolving the messy pkgutil vs importlib edge cases by basing pkgutil explicitly on importlib, deprecating its internal import emulation and setting __main__.__loader__ correctly so that runpy still works (Affects #15343, #15314, #15357)
Nick Coghlan <ncoghlan@gmail.com>
parents: 78040
diff changeset
264 # PEP 302 emulation in this module is in the process of being
3987667bf98f Take the first step in resolving the messy pkgutil vs importlib edge cases by basing pkgutil explicitly on importlib, deprecating its internal import emulation and setting __main__.__loader__ correctly so that runpy still works (Affects #15343, #15314, #15357)
Nick Coghlan <ncoghlan@gmail.com>
parents: 78040
diff changeset
265 # deprecated in favour of importlib proper
3987667bf98f Take the first step in resolving the messy pkgutil vs importlib edge cases by basing pkgutil explicitly on importlib, deprecating its internal import emulation and setting __main__.__loader__ correctly so that runpy still works (Affects #15343, #15314, #15357)
Nick Coghlan <ncoghlan@gmail.com>
parents: 78040
diff changeset
266
3987667bf98f Take the first step in resolving the messy pkgutil vs importlib edge cases by basing pkgutil explicitly on importlib, deprecating its internal import emulation and setting __main__.__loader__ correctly so that runpy still works (Affects #15343, #15314, #15357)
Nick Coghlan <ncoghlan@gmail.com>
parents: 78040
diff changeset
267 def check_deprecated(self):
3987667bf98f Take the first step in resolving the messy pkgutil vs importlib edge cases by basing pkgutil explicitly on importlib, deprecating its internal import emulation and setting __main__.__loader__ correctly so that runpy still works (Affects #15343, #15314, #15357)
Nick Coghlan <ncoghlan@gmail.com>
parents: 78040
diff changeset
268 return check_warnings(
3987667bf98f Take the first step in resolving the messy pkgutil vs importlib edge cases by basing pkgutil explicitly on importlib, deprecating its internal import emulation and setting __main__.__loader__ correctly so that runpy still works (Affects #15343, #15314, #15357)
Nick Coghlan <ncoghlan@gmail.com>
parents: 78040
diff changeset
269 ("This emulation is deprecated, use 'importlib' instead",
3987667bf98f Take the first step in resolving the messy pkgutil vs importlib edge cases by basing pkgutil explicitly on importlib, deprecating its internal import emulation and setting __main__.__loader__ correctly so that runpy still works (Affects #15343, #15314, #15357)
Nick Coghlan <ncoghlan@gmail.com>
parents: 78040
diff changeset
270 DeprecationWarning))
3987667bf98f Take the first step in resolving the messy pkgutil vs importlib edge cases by basing pkgutil explicitly on importlib, deprecating its internal import emulation and setting __main__.__loader__ correctly so that runpy still works (Affects #15343, #15314, #15357)
Nick Coghlan <ncoghlan@gmail.com>
parents: 78040
diff changeset
271
3987667bf98f Take the first step in resolving the messy pkgutil vs importlib edge cases by basing pkgutil explicitly on importlib, deprecating its internal import emulation and setting __main__.__loader__ correctly so that runpy still works (Affects #15343, #15314, #15357)
Nick Coghlan <ncoghlan@gmail.com>
parents: 78040
diff changeset
272 def test_importer_deprecated(self):
3987667bf98f Take the first step in resolving the messy pkgutil vs importlib edge cases by basing pkgutil explicitly on importlib, deprecating its internal import emulation and setting __main__.__loader__ correctly so that runpy still works (Affects #15343, #15314, #15357)
Nick Coghlan <ncoghlan@gmail.com>
parents: 78040
diff changeset
273 with self.check_deprecated():
3987667bf98f Take the first step in resolving the messy pkgutil vs importlib edge cases by basing pkgutil explicitly on importlib, deprecating its internal import emulation and setting __main__.__loader__ correctly so that runpy still works (Affects #15343, #15314, #15357)
Nick Coghlan <ncoghlan@gmail.com>
parents: 78040
diff changeset
274 x = pkgutil.ImpImporter("")
3987667bf98f Take the first step in resolving the messy pkgutil vs importlib edge cases by basing pkgutil explicitly on importlib, deprecating its internal import emulation and setting __main__.__loader__ correctly so that runpy still works (Affects #15343, #15314, #15357)
Nick Coghlan <ncoghlan@gmail.com>
parents: 78040
diff changeset
275
3987667bf98f Take the first step in resolving the messy pkgutil vs importlib edge cases by basing pkgutil explicitly on importlib, deprecating its internal import emulation and setting __main__.__loader__ correctly so that runpy still works (Affects #15343, #15314, #15357)
Nick Coghlan <ncoghlan@gmail.com>
parents: 78040
diff changeset
276 def test_loader_deprecated(self):
3987667bf98f Take the first step in resolving the messy pkgutil vs importlib edge cases by basing pkgutil explicitly on importlib, deprecating its internal import emulation and setting __main__.__loader__ correctly so that runpy still works (Affects #15343, #15314, #15357)
Nick Coghlan <ncoghlan@gmail.com>
parents: 78040
diff changeset
277 with self.check_deprecated():
3987667bf98f Take the first step in resolving the messy pkgutil vs importlib edge cases by basing pkgutil explicitly on importlib, deprecating its internal import emulation and setting __main__.__loader__ correctly so that runpy still works (Affects #15343, #15314, #15357)
Nick Coghlan <ncoghlan@gmail.com>
parents: 78040
diff changeset
278 x = pkgutil.ImpLoader("", "", "", "")
3987667bf98f Take the first step in resolving the messy pkgutil vs importlib edge cases by basing pkgutil explicitly on importlib, deprecating its internal import emulation and setting __main__.__loader__ correctly so that runpy still works (Affects #15343, #15314, #15357)
Nick Coghlan <ncoghlan@gmail.com>
parents: 78040
diff changeset
279
3987667bf98f Take the first step in resolving the messy pkgutil vs importlib edge cases by basing pkgutil explicitly on importlib, deprecating its internal import emulation and setting __main__.__loader__ correctly so that runpy still works (Affects #15343, #15314, #15357)
Nick Coghlan <ncoghlan@gmail.com>
parents: 78040
diff changeset
280 def test_get_loader_avoids_emulation(self):
3987667bf98f Take the first step in resolving the messy pkgutil vs importlib edge cases by basing pkgutil explicitly on importlib, deprecating its internal import emulation and setting __main__.__loader__ correctly so that runpy still works (Affects #15343, #15314, #15357)
Nick Coghlan <ncoghlan@gmail.com>
parents: 78040
diff changeset
281 with check_warnings() as w:
3987667bf98f Take the first step in resolving the messy pkgutil vs importlib edge cases by basing pkgutil explicitly on importlib, deprecating its internal import emulation and setting __main__.__loader__ correctly so that runpy still works (Affects #15343, #15314, #15357)
Nick Coghlan <ncoghlan@gmail.com>
parents: 78040
diff changeset
282 self.assertIsNotNone(pkgutil.get_loader("sys"))
3987667bf98f Take the first step in resolving the messy pkgutil vs importlib edge cases by basing pkgutil explicitly on importlib, deprecating its internal import emulation and setting __main__.__loader__ correctly so that runpy still works (Affects #15343, #15314, #15357)
Nick Coghlan <ncoghlan@gmail.com>
parents: 78040
diff changeset
283 self.assertIsNotNone(pkgutil.get_loader("os"))
3987667bf98f Take the first step in resolving the messy pkgutil vs importlib edge cases by basing pkgutil explicitly on importlib, deprecating its internal import emulation and setting __main__.__loader__ correctly so that runpy still works (Affects #15343, #15314, #15357)
Nick Coghlan <ncoghlan@gmail.com>
parents: 78040
diff changeset
284 self.assertIsNotNone(pkgutil.get_loader("test.support"))
3987667bf98f Take the first step in resolving the messy pkgutil vs importlib edge cases by basing pkgutil explicitly on importlib, deprecating its internal import emulation and setting __main__.__loader__ correctly so that runpy still works (Affects #15343, #15314, #15357)
Nick Coghlan <ncoghlan@gmail.com>
parents: 78040
diff changeset
285 self.assertEqual(len(w.warnings), 0)
3987667bf98f Take the first step in resolving the messy pkgutil vs importlib edge cases by basing pkgutil explicitly on importlib, deprecating its internal import emulation and setting __main__.__loader__ correctly so that runpy still works (Affects #15343, #15314, #15357)
Nick Coghlan <ncoghlan@gmail.com>
parents: 78040
diff changeset
286
3987667bf98f Take the first step in resolving the messy pkgutil vs importlib edge cases by basing pkgutil explicitly on importlib, deprecating its internal import emulation and setting __main__.__loader__ correctly so that runpy still works (Affects #15343, #15314, #15357)
Nick Coghlan <ncoghlan@gmail.com>
parents: 78040
diff changeset
287 def test_get_importer_avoids_emulation(self):
78155
16e50e85d684 Issue #15314: Tweak a pkgutil test to hopefully be more Windows friendly
Nick Coghlan <ncoghlan@gmail.com>
parents: 78111
diff changeset
288 # We use an illegal path so *none* of the path hooks should fire
78107
3987667bf98f Take the first step in resolving the messy pkgutil vs importlib edge cases by basing pkgutil explicitly on importlib, deprecating its internal import emulation and setting __main__.__loader__ correctly so that runpy still works (Affects #15343, #15314, #15357)
Nick Coghlan <ncoghlan@gmail.com>
parents: 78040
diff changeset
289 with check_warnings() as w:
78155
16e50e85d684 Issue #15314: Tweak a pkgutil test to hopefully be more Windows friendly
Nick Coghlan <ncoghlan@gmail.com>
parents: 78111
diff changeset
290 self.assertIsNone(pkgutil.get_importer("*??"))
78107
3987667bf98f Take the first step in resolving the messy pkgutil vs importlib edge cases by basing pkgutil explicitly on importlib, deprecating its internal import emulation and setting __main__.__loader__ correctly so that runpy still works (Affects #15343, #15314, #15357)
Nick Coghlan <ncoghlan@gmail.com>
parents: 78040
diff changeset
291 self.assertEqual(len(w.warnings), 0)
3987667bf98f Take the first step in resolving the messy pkgutil vs importlib edge cases by basing pkgutil explicitly on importlib, deprecating its internal import emulation and setting __main__.__loader__ correctly so that runpy still works (Affects #15343, #15314, #15357)
Nick Coghlan <ncoghlan@gmail.com>
parents: 78040
diff changeset
292
3987667bf98f Take the first step in resolving the messy pkgutil vs importlib edge cases by basing pkgutil explicitly on importlib, deprecating its internal import emulation and setting __main__.__loader__ correctly so that runpy still works (Affects #15343, #15314, #15357)
Nick Coghlan <ncoghlan@gmail.com>
parents: 78040
diff changeset
293 def test_iter_importers_avoids_emulation(self):
3987667bf98f Take the first step in resolving the messy pkgutil vs importlib edge cases by basing pkgutil explicitly on importlib, deprecating its internal import emulation and setting __main__.__loader__ correctly so that runpy still works (Affects #15343, #15314, #15357)
Nick Coghlan <ncoghlan@gmail.com>
parents: 78040
diff changeset
294 with check_warnings() as w:
3987667bf98f Take the first step in resolving the messy pkgutil vs importlib edge cases by basing pkgutil explicitly on importlib, deprecating its internal import emulation and setting __main__.__loader__ correctly so that runpy still works (Affects #15343, #15314, #15357)
Nick Coghlan <ncoghlan@gmail.com>
parents: 78040
diff changeset
295 for importer in pkgutil.iter_importers(): pass
3987667bf98f Take the first step in resolving the messy pkgutil vs importlib edge cases by basing pkgutil explicitly on importlib, deprecating its internal import emulation and setting __main__.__loader__ correctly so that runpy still works (Affects #15343, #15314, #15357)
Nick Coghlan <ncoghlan@gmail.com>
parents: 78040
diff changeset
296 self.assertEqual(len(w.warnings), 0)
3987667bf98f Take the first step in resolving the messy pkgutil vs importlib edge cases by basing pkgutil explicitly on importlib, deprecating its internal import emulation and setting __main__.__loader__ correctly so that runpy still works (Affects #15343, #15314, #15357)
Nick Coghlan <ncoghlan@gmail.com>
parents: 78040
diff changeset
297
3987667bf98f Take the first step in resolving the messy pkgutil vs importlib edge cases by basing pkgutil explicitly on importlib, deprecating its internal import emulation and setting __main__.__loader__ correctly so that runpy still works (Affects #15343, #15314, #15357)
Nick Coghlan <ncoghlan@gmail.com>
parents: 78040
diff changeset
298
46478
beb7abcd6c01 Merged revisions 62350-62355,62358-62359,62364-62365,62370,62372-62375,62378-62379,62381 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
299 def test_main():
78039
f86df559319d Backport test for nested namespace packages.
Antoine Pitrou <solipsis@pitrou.net>
parents: 76983
diff changeset
300 run_unittest(PkgutilTests, PkgutilPEP302Tests, ExtendPathTests,
78107
3987667bf98f Take the first step in resolving the messy pkgutil vs importlib edge cases by basing pkgutil explicitly on importlib, deprecating its internal import emulation and setting __main__.__loader__ correctly so that runpy still works (Affects #15343, #15314, #15357)
Nick Coghlan <ncoghlan@gmail.com>
parents: 78040
diff changeset
301 NestedNamespacePackageTest, ImportlibMigrationTests)
46516
ec48490b969a Merged revisions 62420-62421,62423-62424 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46478
diff changeset
302 # this is necessary if test is run repeated (like when finding leaks)
ec48490b969a Merged revisions 62420-62421,62423-62424 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46478
diff changeset
303 import zipimport
78107
3987667bf98f Take the first step in resolving the messy pkgutil vs importlib edge cases by basing pkgutil explicitly on importlib, deprecating its internal import emulation and setting __main__.__loader__ correctly so that runpy still works (Affects #15343, #15314, #15357)
Nick Coghlan <ncoghlan@gmail.com>
parents: 78040
diff changeset
304 import importlib
46516
ec48490b969a Merged revisions 62420-62421,62423-62424 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46478
diff changeset
305 zipimport._zip_directory_cache.clear()
78107
3987667bf98f Take the first step in resolving the messy pkgutil vs importlib edge cases by basing pkgutil explicitly on importlib, deprecating its internal import emulation and setting __main__.__loader__ correctly so that runpy still works (Affects #15343, #15314, #15357)
Nick Coghlan <ncoghlan@gmail.com>
parents: 78040
diff changeset
306 importlib.invalidate_caches()
3987667bf98f Take the first step in resolving the messy pkgutil vs importlib edge cases by basing pkgutil explicitly on importlib, deprecating its internal import emulation and setting __main__.__loader__ correctly so that runpy still works (Affects #15343, #15314, #15357)
Nick Coghlan <ncoghlan@gmail.com>
parents: 78040
diff changeset
307
46478
beb7abcd6c01 Merged revisions 62350-62355,62358-62359,62364-62365,62370,62372-62375,62378-62379,62381 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
308
beb7abcd6c01 Merged revisions 62350-62355,62358-62359,62364-62365,62370,62372-62375,62378-62379,62381 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
309 if __name__ == '__main__':
beb7abcd6c01 Merged revisions 62350-62355,62358-62359,62364-62365,62370,62372-62375,62378-62379,62381 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
310 test_main()