Mercurial > cpython-lru_cache-weakref
annotate Lib/test/test_pkgutil.py @ 87690:66c1c9f32567 default tip
Add use_weakref option to functools.lru_cache
The use_weakref option makes lru_cache create weak references to the function
arguments when creating the cache key, which prevents them from staying in the
memory forever even after all other references to them are gone.
This is a proof of concept for http://bugs.python.org/issue19859
| author | Radomir Dopieralski <devel@sheep.art.pl> |
|---|---|
| date | Tue, 03 Dec 2013 16:02:48 +0100 |
| parents | 59f3e50061bd |
| children |
| 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 |
|
83366
c40b50d65a00
Close issue #16163: handle submodules in pkgutil.iter_importers
Nick Coghlan <ncoghlan@gmail.com>
parents:
78155
diff
changeset
|
4 import importlib |
|
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
|
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 |
|
84154
bc18b5d4920e
Issue #17177: Stop using imp in a bunch of tests
Brett Cannon <brett@python.org>
parents:
83366
diff
changeset
|
9 import types |
|
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
|
10 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
|
11 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
|
12 |
|
78111
9101eab6178c
Issue #15343: Handle importlib.machinery.FileFinder instances in pkgutil.walk_packages (et al)
Nick Coghlan <ncoghlan@gmail.com>
parents:
78107
diff
changeset
|
13 # 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
|
14 # 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
|
15 # 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
|
16 # 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
|
17 # 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
|
18 |
|
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 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
|
20 |
|
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 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
|
22 self.dirname = tempfile.mkdtemp() |
|
72799
ff72f76dcf43
Issue #7367: Ensure test directory always gets removed.
Ned Deily <nad@acm.org>
parents:
72773
diff
changeset
|
23 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
|
24 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
|
25 |
|
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 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
|
27 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
|
28 |
|
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 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
|
30 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
|
31 |
|
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 # 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
|
33 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
|
34 |
|
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 # 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
|
36 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
|
37 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
|
38 # 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
|
39 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
|
40 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
|
41 # 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
|
42 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
|
43 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
|
44 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
|
45 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
|
46 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
|
47 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
|
48 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
|
49 |
|
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 # 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
|
51 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
|
52 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
|
53 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
|
54 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
|
55 |
|
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 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
|
57 |
|
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 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
|
59 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
|
60 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
|
61 |
|
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 # 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
|
63 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
|
64 |
|
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 # 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
|
66 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
|
67 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
|
68 |
|
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 # 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
|
70 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
|
71 # 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
|
72 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
|
73 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
|
74 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
|
75 |
|
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 # 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
|
77 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
|
78 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
|
79 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
|
80 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
|
81 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
|
82 |
|
680ad8eed33b
Merged revisions 73833,73838,73850-73852,73856-73857 via svnmerge from
Georg Brandl <georg@python.org>
parents:
47201
diff
changeset
|
83 names = [] |
|
680ad8eed33b
Merged revisions 73833,73838,73850-73852,73856-73857 via svnmerge from
Georg Brandl <georg@python.org>
parents:
47201
diff
changeset
|
84 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
|
85 names.append(name) |
|
680ad8eed33b
Merged revisions 73833,73838,73850-73852,73856-73857 via svnmerge from
Georg Brandl <georg@python.org>
parents:
47201
diff
changeset
|
86 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
|
87 |
|
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
|
88 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
|
89 |
|
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 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
|
91 |
|
72773
a1e6633ef3f1
Issue #7367: Add test case to test_pkgutil for walking path with
Ned Deily <nad@acm.org>
parents:
55602
diff
changeset
|
92 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
|
93 # 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
|
94 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
|
95 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
|
96 # 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
|
97 # 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
|
98 os.mkdir(d, 0) |
|
72799
ff72f76dcf43
Issue #7367: Ensure test directory always gets removed.
Ned Deily <nad@acm.org>
parents:
72773
diff
changeset
|
99 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
|
100 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
|
101 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
|
102 |
|
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
|
103 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
|
104 |
|
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 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
|
106 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
|
107 # Create an empty module |
|
84154
bc18b5d4920e
Issue #17177: Stop using imp in a bunch of tests
Brett Cannon <brett@python.org>
parents:
83366
diff
changeset
|
108 mod = sys.modules.setdefault(fullname, types.ModuleType(fullname)) |
|
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
|
109 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
|
110 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
|
111 # 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
|
112 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
|
113 # 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
|
114 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
|
115 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
|
116 |
|
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 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
|
118 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
|
119 |
|
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 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
|
121 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
|
122 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
|
123 |
|
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 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
|
125 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
|
126 |
|
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 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
|
128 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
|
129 |
|
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 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
|
131 # 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
|
132 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
|
133 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
|
134 |
|
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 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
|
136 # 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
|
137 # 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
|
138 # 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
|
139 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
|
140 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
|
141 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
|
142 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
|
143 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
|
144 |
|
76972
48cb6b67d306
Issue #14817: Add rudimentary tests for pkgutil.extend_path.
Eric V. Smith <eric@trueblade.com>
parents:
72799
diff
changeset
|
145 |
|
77126
702009f3c0b1
issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents:
76983
diff
changeset
|
146 # 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
|
147 # 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
|
148 class ExtendPathTests(unittest.TestCase): |
|
48cb6b67d306
Issue #14817: Add rudimentary tests for pkgutil.extend_path.
Eric V. Smith <eric@trueblade.com>
parents:
72799
diff
changeset
|
149 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
|
150 dirname = tempfile.mkdtemp() |
|
48cb6b67d306
Issue #14817: Add rudimentary tests for pkgutil.extend_path.
Eric V. Smith <eric@trueblade.com>
parents:
72799
diff
changeset
|
151 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
|
152 |
|
48cb6b67d306
Issue #14817: Add rudimentary tests for pkgutil.extend_path.
Eric V. Smith <eric@trueblade.com>
parents:
72799
diff
changeset
|
153 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
|
154 os.mkdir(pkgdir) |
|
48cb6b67d306
Issue #14817: Add rudimentary tests for pkgutil.extend_path.
Eric V. Smith <eric@trueblade.com>
parents:
72799
diff
changeset
|
155 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
|
156 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
|
157 |
|
48cb6b67d306
Issue #14817: Add rudimentary tests for pkgutil.extend_path.
Eric V. Smith <eric@trueblade.com>
parents:
72799
diff
changeset
|
158 return dirname |
|
48cb6b67d306
Issue #14817: Add rudimentary tests for pkgutil.extend_path.
Eric V. Smith <eric@trueblade.com>
parents:
72799
diff
changeset
|
159 |
|
48cb6b67d306
Issue #14817: Add rudimentary tests for pkgutil.extend_path.
Eric V. Smith <eric@trueblade.com>
parents:
72799
diff
changeset
|
160 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
|
161 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
|
162 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
|
163 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
|
164 |
|
48cb6b67d306
Issue #14817: Add rudimentary tests for pkgutil.extend_path.
Eric V. Smith <eric@trueblade.com>
parents:
72799
diff
changeset
|
165 def test_simple(self): |
|
77126
702009f3c0b1
issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents:
76983
diff
changeset
|
166 pkgname = 'foo' |
|
702009f3c0b1
issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents:
76983
diff
changeset
|
167 dirname_0 = self.create_init(pkgname) |
|
702009f3c0b1
issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents:
76983
diff
changeset
|
168 dirname_1 = self.create_init(pkgname) |
|
702009f3c0b1
issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents:
76983
diff
changeset
|
169 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
|
170 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
|
171 import foo.bar |
|
48cb6b67d306
Issue #14817: Add rudimentary tests for pkgutil.extend_path.
Eric V. Smith <eric@trueblade.com>
parents:
72799
diff
changeset
|
172 import foo.baz |
|
48cb6b67d306
Issue #14817: Add rudimentary tests for pkgutil.extend_path.
Eric V. Smith <eric@trueblade.com>
parents:
72799
diff
changeset
|
173 # 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
|
174 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
|
175 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
|
176 |
|
48cb6b67d306
Issue #14817: Add rudimentary tests for pkgutil.extend_path.
Eric V. Smith <eric@trueblade.com>
parents:
72799
diff
changeset
|
177 # 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
|
178 self.assertEqual(sorted(foo.__path__), |
|
77126
702009f3c0b1
issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents:
76983
diff
changeset
|
179 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
|
180 os.path.join(dirname_1, pkgname)])) |
|
702009f3c0b1
issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents:
76983
diff
changeset
|
181 |
|
702009f3c0b1
issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents:
76983
diff
changeset
|
182 # Cleanup |
|
702009f3c0b1
issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents:
76983
diff
changeset
|
183 shutil.rmtree(dirname_0) |
|
702009f3c0b1
issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents:
76983
diff
changeset
|
184 shutil.rmtree(dirname_1) |
|
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.path[0] |
|
702009f3c0b1
issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents:
76983
diff
changeset
|
187 del sys.modules['foo'] |
|
702009f3c0b1
issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents:
76983
diff
changeset
|
188 del sys.modules['foo.bar'] |
|
702009f3c0b1
issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents:
76983
diff
changeset
|
189 del sys.modules['foo.baz'] |
|
702009f3c0b1
issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents:
76983
diff
changeset
|
190 |
|
83366
c40b50d65a00
Close issue #16163: handle submodules in pkgutil.iter_importers
Nick Coghlan <ncoghlan@gmail.com>
parents:
78155
diff
changeset
|
191 |
|
c40b50d65a00
Close issue #16163: handle submodules in pkgutil.iter_importers
Nick Coghlan <ncoghlan@gmail.com>
parents:
78155
diff
changeset
|
192 # Another awful testing hack to be cleaned up once the test_runpy |
|
c40b50d65a00
Close issue #16163: handle submodules in pkgutil.iter_importers
Nick Coghlan <ncoghlan@gmail.com>
parents:
78155
diff
changeset
|
193 # helpers are factored out to a common location |
|
c40b50d65a00
Close issue #16163: handle submodules in pkgutil.iter_importers
Nick Coghlan <ncoghlan@gmail.com>
parents:
78155
diff
changeset
|
194 def test_iter_importers(self): |
|
c40b50d65a00
Close issue #16163: handle submodules in pkgutil.iter_importers
Nick Coghlan <ncoghlan@gmail.com>
parents:
78155
diff
changeset
|
195 iter_importers = pkgutil.iter_importers |
|
c40b50d65a00
Close issue #16163: handle submodules in pkgutil.iter_importers
Nick Coghlan <ncoghlan@gmail.com>
parents:
78155
diff
changeset
|
196 get_importer = pkgutil.get_importer |
|
c40b50d65a00
Close issue #16163: handle submodules in pkgutil.iter_importers
Nick Coghlan <ncoghlan@gmail.com>
parents:
78155
diff
changeset
|
197 |
|
c40b50d65a00
Close issue #16163: handle submodules in pkgutil.iter_importers
Nick Coghlan <ncoghlan@gmail.com>
parents:
78155
diff
changeset
|
198 pkgname = 'spam' |
|
c40b50d65a00
Close issue #16163: handle submodules in pkgutil.iter_importers
Nick Coghlan <ncoghlan@gmail.com>
parents:
78155
diff
changeset
|
199 modname = 'eggs' |
|
c40b50d65a00
Close issue #16163: handle submodules in pkgutil.iter_importers
Nick Coghlan <ncoghlan@gmail.com>
parents:
78155
diff
changeset
|
200 dirname = self.create_init(pkgname) |
|
c40b50d65a00
Close issue #16163: handle submodules in pkgutil.iter_importers
Nick Coghlan <ncoghlan@gmail.com>
parents:
78155
diff
changeset
|
201 pathitem = os.path.join(dirname, pkgname) |
|
c40b50d65a00
Close issue #16163: handle submodules in pkgutil.iter_importers
Nick Coghlan <ncoghlan@gmail.com>
parents:
78155
diff
changeset
|
202 fullname = '{}.{}'.format(pkgname, modname) |
|
87372
59f3e50061bd
Issue #19724: clear out colliding temp module.
Eric Snow <ericsnowcurrently@gmail.com>
parents:
87347
diff
changeset
|
203 sys.modules.pop(fullname, None) |
|
59f3e50061bd
Issue #19724: clear out colliding temp module.
Eric Snow <ericsnowcurrently@gmail.com>
parents:
87347
diff
changeset
|
204 sys.modules.pop(pkgname, None) |
|
83366
c40b50d65a00
Close issue #16163: handle submodules in pkgutil.iter_importers
Nick Coghlan <ncoghlan@gmail.com>
parents:
78155
diff
changeset
|
205 try: |
|
c40b50d65a00
Close issue #16163: handle submodules in pkgutil.iter_importers
Nick Coghlan <ncoghlan@gmail.com>
parents:
78155
diff
changeset
|
206 self.create_submodule(dirname, pkgname, modname, 0) |
|
c40b50d65a00
Close issue #16163: handle submodules in pkgutil.iter_importers
Nick Coghlan <ncoghlan@gmail.com>
parents:
78155
diff
changeset
|
207 |
|
c40b50d65a00
Close issue #16163: handle submodules in pkgutil.iter_importers
Nick Coghlan <ncoghlan@gmail.com>
parents:
78155
diff
changeset
|
208 importlib.import_module(fullname) |
|
c40b50d65a00
Close issue #16163: handle submodules in pkgutil.iter_importers
Nick Coghlan <ncoghlan@gmail.com>
parents:
78155
diff
changeset
|
209 |
|
c40b50d65a00
Close issue #16163: handle submodules in pkgutil.iter_importers
Nick Coghlan <ncoghlan@gmail.com>
parents:
78155
diff
changeset
|
210 importers = list(iter_importers(fullname)) |
|
c40b50d65a00
Close issue #16163: handle submodules in pkgutil.iter_importers
Nick Coghlan <ncoghlan@gmail.com>
parents:
78155
diff
changeset
|
211 expected_importer = get_importer(pathitem) |
|
c40b50d65a00
Close issue #16163: handle submodules in pkgutil.iter_importers
Nick Coghlan <ncoghlan@gmail.com>
parents:
78155
diff
changeset
|
212 for finder in importers: |
|
87347
07229c6104b1
Implement PEP 451 (ModuleSpec).
Eric Snow <ericsnowcurrently@gmail.com>
parents:
84154
diff
changeset
|
213 loader = finder.find_module(fullname) |
|
07229c6104b1
Implement PEP 451 (ModuleSpec).
Eric Snow <ericsnowcurrently@gmail.com>
parents:
84154
diff
changeset
|
214 try: |
|
07229c6104b1
Implement PEP 451 (ModuleSpec).
Eric Snow <ericsnowcurrently@gmail.com>
parents:
84154
diff
changeset
|
215 loader = loader.loader |
|
07229c6104b1
Implement PEP 451 (ModuleSpec).
Eric Snow <ericsnowcurrently@gmail.com>
parents:
84154
diff
changeset
|
216 except AttributeError: |
|
07229c6104b1
Implement PEP 451 (ModuleSpec).
Eric Snow <ericsnowcurrently@gmail.com>
parents:
84154
diff
changeset
|
217 # For now we still allow raw loaders from |
|
07229c6104b1
Implement PEP 451 (ModuleSpec).
Eric Snow <ericsnowcurrently@gmail.com>
parents:
84154
diff
changeset
|
218 # find_module(). |
|
07229c6104b1
Implement PEP 451 (ModuleSpec).
Eric Snow <ericsnowcurrently@gmail.com>
parents:
84154
diff
changeset
|
219 pass |
|
83366
c40b50d65a00
Close issue #16163: handle submodules in pkgutil.iter_importers
Nick Coghlan <ncoghlan@gmail.com>
parents:
78155
diff
changeset
|
220 self.assertIsInstance(finder, importlib.machinery.FileFinder) |
|
c40b50d65a00
Close issue #16163: handle submodules in pkgutil.iter_importers
Nick Coghlan <ncoghlan@gmail.com>
parents:
78155
diff
changeset
|
221 self.assertEqual(finder, expected_importer) |
|
87347
07229c6104b1
Implement PEP 451 (ModuleSpec).
Eric Snow <ericsnowcurrently@gmail.com>
parents:
84154
diff
changeset
|
222 self.assertIsInstance(loader, |
|
83366
c40b50d65a00
Close issue #16163: handle submodules in pkgutil.iter_importers
Nick Coghlan <ncoghlan@gmail.com>
parents:
78155
diff
changeset
|
223 importlib.machinery.SourceFileLoader) |
|
c40b50d65a00
Close issue #16163: handle submodules in pkgutil.iter_importers
Nick Coghlan <ncoghlan@gmail.com>
parents:
78155
diff
changeset
|
224 self.assertIsNone(finder.find_module(pkgname)) |
|
c40b50d65a00
Close issue #16163: handle submodules in pkgutil.iter_importers
Nick Coghlan <ncoghlan@gmail.com>
parents:
78155
diff
changeset
|
225 |
|
c40b50d65a00
Close issue #16163: handle submodules in pkgutil.iter_importers
Nick Coghlan <ncoghlan@gmail.com>
parents:
78155
diff
changeset
|
226 with self.assertRaises(ImportError): |
|
c40b50d65a00
Close issue #16163: handle submodules in pkgutil.iter_importers
Nick Coghlan <ncoghlan@gmail.com>
parents:
78155
diff
changeset
|
227 list(iter_importers('invalid.module')) |
|
c40b50d65a00
Close issue #16163: handle submodules in pkgutil.iter_importers
Nick Coghlan <ncoghlan@gmail.com>
parents:
78155
diff
changeset
|
228 |
|
c40b50d65a00
Close issue #16163: handle submodules in pkgutil.iter_importers
Nick Coghlan <ncoghlan@gmail.com>
parents:
78155
diff
changeset
|
229 with self.assertRaises(ImportError): |
|
c40b50d65a00
Close issue #16163: handle submodules in pkgutil.iter_importers
Nick Coghlan <ncoghlan@gmail.com>
parents:
78155
diff
changeset
|
230 list(iter_importers('.spam')) |
|
c40b50d65a00
Close issue #16163: handle submodules in pkgutil.iter_importers
Nick Coghlan <ncoghlan@gmail.com>
parents:
78155
diff
changeset
|
231 finally: |
|
c40b50d65a00
Close issue #16163: handle submodules in pkgutil.iter_importers
Nick Coghlan <ncoghlan@gmail.com>
parents:
78155
diff
changeset
|
232 shutil.rmtree(dirname) |
|
c40b50d65a00
Close issue #16163: handle submodules in pkgutil.iter_importers
Nick Coghlan <ncoghlan@gmail.com>
parents:
78155
diff
changeset
|
233 del sys.path[0] |
|
87347
07229c6104b1
Implement PEP 451 (ModuleSpec).
Eric Snow <ericsnowcurrently@gmail.com>
parents:
84154
diff
changeset
|
234 try: |
|
07229c6104b1
Implement PEP 451 (ModuleSpec).
Eric Snow <ericsnowcurrently@gmail.com>
parents:
84154
diff
changeset
|
235 del sys.modules['spam'] |
|
07229c6104b1
Implement PEP 451 (ModuleSpec).
Eric Snow <ericsnowcurrently@gmail.com>
parents:
84154
diff
changeset
|
236 del sys.modules['spam.eggs'] |
|
07229c6104b1
Implement PEP 451 (ModuleSpec).
Eric Snow <ericsnowcurrently@gmail.com>
parents:
84154
diff
changeset
|
237 except KeyError: |
|
07229c6104b1
Implement PEP 451 (ModuleSpec).
Eric Snow <ericsnowcurrently@gmail.com>
parents:
84154
diff
changeset
|
238 pass |
|
83366
c40b50d65a00
Close issue #16163: handle submodules in pkgutil.iter_importers
Nick Coghlan <ncoghlan@gmail.com>
parents:
78155
diff
changeset
|
239 |
|
c40b50d65a00
Close issue #16163: handle submodules in pkgutil.iter_importers
Nick Coghlan <ncoghlan@gmail.com>
parents:
78155
diff
changeset
|
240 |
|
77126
702009f3c0b1
issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents:
76983
diff
changeset
|
241 def test_mixed_namespace(self): |
|
702009f3c0b1
issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents:
76983
diff
changeset
|
242 pkgname = 'foo' |
|
702009f3c0b1
issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents:
76983
diff
changeset
|
243 dirname_0 = self.create_init(pkgname) |
|
702009f3c0b1
issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents:
76983
diff
changeset
|
244 dirname_1 = self.create_init(pkgname) |
|
702009f3c0b1
issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents:
76983
diff
changeset
|
245 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
|
246 # 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
|
247 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
|
248 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
|
249 import foo.bar |
|
702009f3c0b1
issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents:
76983
diff
changeset
|
250 import foo.baz |
|
702009f3c0b1
issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents:
76983
diff
changeset
|
251 # Ensure we read the expected values |
|
702009f3c0b1
issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents:
76983
diff
changeset
|
252 self.assertEqual(foo.bar.value, 0) |
|
702009f3c0b1
issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents:
76983
diff
changeset
|
253 self.assertEqual(foo.baz.value, 1) |
|
702009f3c0b1
issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents:
76983
diff
changeset
|
254 |
|
702009f3c0b1
issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents:
76983
diff
changeset
|
255 # 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
|
256 self.assertEqual(sorted(foo.__path__), |
|
702009f3c0b1
issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents:
76983
diff
changeset
|
257 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
|
258 os.path.join(dirname_1, pkgname)])) |
|
702009f3c0b1
issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents:
76983
diff
changeset
|
259 |
|
702009f3c0b1
issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents:
76983
diff
changeset
|
260 # Cleanup |
|
702009f3c0b1
issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents:
76983
diff
changeset
|
261 shutil.rmtree(dirname_0) |
|
702009f3c0b1
issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents:
76983
diff
changeset
|
262 shutil.rmtree(dirname_1) |
|
702009f3c0b1
issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents:
76983
diff
changeset
|
263 del sys.path[0] |
|
702009f3c0b1
issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents:
76983
diff
changeset
|
264 del sys.path[0] |
|
702009f3c0b1
issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents:
76983
diff
changeset
|
265 del sys.modules['foo'] |
|
702009f3c0b1
issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents:
76983
diff
changeset
|
266 del sys.modules['foo.bar'] |
|
702009f3c0b1
issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents:
76983
diff
changeset
|
267 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
|
268 |
|
48cb6b67d306
Issue #14817: Add rudimentary tests for pkgutil.extend_path.
Eric V. Smith <eric@trueblade.com>
parents:
72799
diff
changeset
|
269 # XXX: test .pkg files |
|
48cb6b67d306
Issue #14817: Add rudimentary tests for pkgutil.extend_path.
Eric V. Smith <eric@trueblade.com>
parents:
72799
diff
changeset
|
270 |
|
48cb6b67d306
Issue #14817: Add rudimentary tests for pkgutil.extend_path.
Eric V. Smith <eric@trueblade.com>
parents:
72799
diff
changeset
|
271 |
|
78039
f86df559319d
Backport test for nested namespace packages.
Antoine Pitrou <solipsis@pitrou.net>
parents:
76983
diff
changeset
|
272 class NestedNamespacePackageTest(unittest.TestCase): |
|
f86df559319d
Backport test for nested namespace packages.
Antoine Pitrou <solipsis@pitrou.net>
parents:
76983
diff
changeset
|
273 |
|
f86df559319d
Backport test for nested namespace packages.
Antoine Pitrou <solipsis@pitrou.net>
parents:
76983
diff
changeset
|
274 def setUp(self): |
|
f86df559319d
Backport test for nested namespace packages.
Antoine Pitrou <solipsis@pitrou.net>
parents:
76983
diff
changeset
|
275 self.basedir = tempfile.mkdtemp() |
|
f86df559319d
Backport test for nested namespace packages.
Antoine Pitrou <solipsis@pitrou.net>
parents:
76983
diff
changeset
|
276 self.old_path = sys.path[:] |
|
f86df559319d
Backport test for nested namespace packages.
Antoine Pitrou <solipsis@pitrou.net>
parents:
76983
diff
changeset
|
277 |
|
f86df559319d
Backport test for nested namespace packages.
Antoine Pitrou <solipsis@pitrou.net>
parents:
76983
diff
changeset
|
278 def tearDown(self): |
|
f86df559319d
Backport test for nested namespace packages.
Antoine Pitrou <solipsis@pitrou.net>
parents:
76983
diff
changeset
|
279 sys.path[:] = self.old_path |
|
f86df559319d
Backport test for nested namespace packages.
Antoine Pitrou <solipsis@pitrou.net>
parents:
76983
diff
changeset
|
280 shutil.rmtree(self.basedir) |
|
f86df559319d
Backport test for nested namespace packages.
Antoine Pitrou <solipsis@pitrou.net>
parents:
76983
diff
changeset
|
281 |
|
f86df559319d
Backport test for nested namespace packages.
Antoine Pitrou <solipsis@pitrou.net>
parents:
76983
diff
changeset
|
282 def create_module(self, name, contents): |
|
f86df559319d
Backport test for nested namespace packages.
Antoine Pitrou <solipsis@pitrou.net>
parents:
76983
diff
changeset
|
283 base, final = name.rsplit('.', 1) |
|
f86df559319d
Backport test for nested namespace packages.
Antoine Pitrou <solipsis@pitrou.net>
parents:
76983
diff
changeset
|
284 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
|
285 os.makedirs(base_path, exist_ok=True) |
|
f86df559319d
Backport test for nested namespace packages.
Antoine Pitrou <solipsis@pitrou.net>
parents:
76983
diff
changeset
|
286 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
|
287 f.write(contents) |
|
f86df559319d
Backport test for nested namespace packages.
Antoine Pitrou <solipsis@pitrou.net>
parents:
76983
diff
changeset
|
288 |
|
f86df559319d
Backport test for nested namespace packages.
Antoine Pitrou <solipsis@pitrou.net>
parents:
76983
diff
changeset
|
289 def test_nested(self): |
|
f86df559319d
Backport test for nested namespace packages.
Antoine Pitrou <solipsis@pitrou.net>
parents:
76983
diff
changeset
|
290 pkgutil_boilerplate = ( |
|
f86df559319d
Backport test for nested namespace packages.
Antoine Pitrou <solipsis@pitrou.net>
parents:
76983
diff
changeset
|
291 'import pkgutil; ' |
|
f86df559319d
Backport test for nested namespace packages.
Antoine Pitrou <solipsis@pitrou.net>
parents:
76983
diff
changeset
|
292 '__path__ = pkgutil.extend_path(__path__, __name__)') |
|
f86df559319d
Backport test for nested namespace packages.
Antoine Pitrou <solipsis@pitrou.net>
parents:
76983
diff
changeset
|
293 self.create_module('a.pkg.__init__', pkgutil_boilerplate) |
|
f86df559319d
Backport test for nested namespace packages.
Antoine Pitrou <solipsis@pitrou.net>
parents:
76983
diff
changeset
|
294 self.create_module('b.pkg.__init__', pkgutil_boilerplate) |
|
f86df559319d
Backport test for nested namespace packages.
Antoine Pitrou <solipsis@pitrou.net>
parents:
76983
diff
changeset
|
295 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
|
296 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
|
297 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
|
298 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
|
299 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
|
300 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
|
301 import pkg |
|
f86df559319d
Backport test for nested namespace packages.
Antoine Pitrou <solipsis@pitrou.net>
parents:
76983
diff
changeset
|
302 self.addCleanup(unload, 'pkg') |
|
f86df559319d
Backport test for nested namespace packages.
Antoine Pitrou <solipsis@pitrou.net>
parents:
76983
diff
changeset
|
303 self.assertEqual(len(pkg.__path__), 2) |
|
f86df559319d
Backport test for nested namespace packages.
Antoine Pitrou <solipsis@pitrou.net>
parents:
76983
diff
changeset
|
304 import pkg.subpkg |
|
f86df559319d
Backport test for nested namespace packages.
Antoine Pitrou <solipsis@pitrou.net>
parents:
76983
diff
changeset
|
305 self.addCleanup(unload, 'pkg.subpkg') |
|
f86df559319d
Backport test for nested namespace packages.
Antoine Pitrou <solipsis@pitrou.net>
parents:
76983
diff
changeset
|
306 self.assertEqual(len(pkg.subpkg.__path__), 2) |
|
f86df559319d
Backport test for nested namespace packages.
Antoine Pitrou <solipsis@pitrou.net>
parents:
76983
diff
changeset
|
307 from pkg.subpkg.c import c |
|
f86df559319d
Backport test for nested namespace packages.
Antoine Pitrou <solipsis@pitrou.net>
parents:
76983
diff
changeset
|
308 from pkg.subpkg.d import d |
|
f86df559319d
Backport test for nested namespace packages.
Antoine Pitrou <solipsis@pitrou.net>
parents:
76983
diff
changeset
|
309 self.assertEqual(c, 1) |
|
f86df559319d
Backport test for nested namespace packages.
Antoine Pitrou <solipsis@pitrou.net>
parents:
76983
diff
changeset
|
310 self.assertEqual(d, 2) |
|
f86df559319d
Backport test for nested namespace packages.
Antoine Pitrou <solipsis@pitrou.net>
parents:
76983
diff
changeset
|
311 |
|
f86df559319d
Backport test for nested namespace packages.
Antoine Pitrou <solipsis@pitrou.net>
parents:
76983
diff
changeset
|
312 |
|
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
|
313 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
|
314 # 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
|
315 # 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
|
316 # 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
|
317 |
|
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
|
318 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
|
319 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
|
320 ("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
|
321 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
|
322 |
|
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
|
323 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
|
324 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
|
325 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
|
326 |
|
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
|
327 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
|
328 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
|
329 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
|
330 |
|
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
|
331 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
|
332 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
|
333 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
|
334 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
|
335 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
|
336 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
|
337 |
|
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
|
338 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
|
339 # 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
|
340 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
|
341 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
|
342 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
|
343 |
|
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
|
344 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
|
345 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
|
346 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
|
347 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
|
348 |
|
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
|
349 |
|
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
|
350 def test_main(): |
|
78039
f86df559319d
Backport test for nested namespace packages.
Antoine Pitrou <solipsis@pitrou.net>
parents:
76983
diff
changeset
|
351 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
|
352 NestedNamespacePackageTest, ImportlibMigrationTests) |
|
46516
ec48490b969a
Merged revisions 62420-62421,62423-62424 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46478
diff
changeset
|
353 # 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
|
354 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
|
355 import importlib |
|
46516
ec48490b969a
Merged revisions 62420-62421,62423-62424 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46478
diff
changeset
|
356 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
|
357 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
|
358 |
|
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
|
359 |
|
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
|
360 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
|
361 test_main() |
