2008-05-20 18:35:26 -03:00
|
|
|
from test.support import run_unittest
|
Merged revisions 62350-62355,62358-62359,62364-62365,62370,62372-62375,62378-62379,62381 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
r62350 | nick.coghlan | 2008-04-15 12:25:31 +0200 (Tue, 15 Apr 2008) | 1 line
Issue 2439: add pkgutils.get_data() as a convenience wrapper for the PEP 302 get_data() API (contributed by Paul Moore)
........
r62351 | nick.coghlan | 2008-04-15 12:28:14 +0200 (Tue, 15 Apr 2008) | 1 line
Add test file missing from rev 62350
........
r62352 | benjamin.peterson | 2008-04-15 13:58:46 +0200 (Tue, 15 Apr 2008) | 2 lines
Add myself to Doc/ACKS.txt
........
r62353 | andrew.kuchling | 2008-04-15 15:10:07 +0200 (Tue, 15 Apr 2008) | 6 lines
Add *,**,@ to index, as suggested by
http://farmdev.com/thoughts/24/what-does-the-def-star-variable-or-def-asterisk-parameter-syntax-do-in-python-/
The right entry type to use isn't clear; operator seems wrong, because *,**,@
aren't being used in expressions here. I put them as 'statement'; 'syntax'
might be better.
........
r62354 | andrew.kuchling | 2008-04-15 15:10:41 +0200 (Tue, 15 Apr 2008) | 1 line
Typo fix
........
r62355 | mark.dickinson | 2008-04-15 22:51:18 +0200 (Tue, 15 Apr 2008) | 3 lines
Fix for possible signed overflow: the behaviour of -LONG_MIN is
undefined in ANSI C.
........
r62358 | jeroen.ruigrok | 2008-04-16 14:47:01 +0200 (Wed, 16 Apr 2008) | 2 lines
Reformat to 80 columns prior to adding documentation.
........
r62359 | jeroen.ruigrok | 2008-04-16 14:57:43 +0200 (Wed, 16 Apr 2008) | 2 lines
Add details about the return value for mmap.flush().
........
r62364 | raymond.hettinger | 2008-04-17 12:48:31 +0200 (Thu, 17 Apr 2008) | 1 line
Issue 2648: Add leading zero to money format recipe in the docs.
........
r62365 | jeroen.ruigrok | 2008-04-17 14:39:45 +0200 (Thu, 17 Apr 2008) | 2 lines
Be consistent in the use of read-only.
........
r62370 | andrew.kuchling | 2008-04-17 22:44:06 +0200 (Thu, 17 Apr 2008) | 1 line
Typo fixes
........
r62372 | andrew.kuchling | 2008-04-18 04:40:47 +0200 (Fri, 18 Apr 2008) | 1 line
Use correct parameter name
........
r62373 | andrew.kuchling | 2008-04-18 18:53:09 +0200 (Fri, 18 Apr 2008) | 1 line
#2654: fix typo
........
r62374 | andrew.kuchling | 2008-04-18 20:28:23 +0200 (Fri, 18 Apr 2008) | 4 lines
Remove personal note from Jim Roskind; it no longer applies, and the
e-mail address is for a previous employer.
Can we move the big long copyright statement into a sidebar or something?
........
r62375 | andrew.kuchling | 2008-04-18 20:39:55 +0200 (Fri, 18 Apr 2008) | 1 line
Rewrite introductory section, and remove old section. (It was already commented-out, but why keep it?)
........
r62378 | skip.montanaro | 2008-04-18 22:35:46 +0200 (Fri, 18 Apr 2008) | 1 line
resolve issue 2014
........
r62379 | benjamin.peterson | 2008-04-18 22:45:33 +0200 (Fri, 18 Apr 2008) | 2 lines
Fix indentation in sysmodule.c
........
r62381 | amaury.forgeotdarc | 2008-04-19 01:31:33 +0200 (Sat, 19 Apr 2008) | 3 lines
Some tests did not pass on repeated calls (regrtest -R::)
Perform additional cleanup, mostly deleting from sys.modules, or clearing the warnings registry.
........
2008-04-18 21:55:37 -03:00
|
|
|
import unittest
|
|
|
|
import sys
|
|
|
|
import imp
|
|
|
|
import pkgutil
|
|
|
|
import os
|
|
|
|
import os.path
|
|
|
|
import tempfile
|
|
|
|
import shutil
|
|
|
|
import zipfile
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class PkgutilTests(unittest.TestCase):
|
|
|
|
|
|
|
|
def setUp(self):
|
|
|
|
self.dirname = tempfile.mkdtemp()
|
|
|
|
sys.path.insert(0, self.dirname)
|
|
|
|
|
|
|
|
def tearDown(self):
|
|
|
|
del sys.path[0]
|
|
|
|
shutil.rmtree(self.dirname)
|
|
|
|
|
|
|
|
def test_getdata_filesys(self):
|
|
|
|
pkg = 'test_getdata_filesys'
|
|
|
|
|
|
|
|
# Include a LF and a CRLF, to test that binary data is read back
|
|
|
|
RESOURCE_DATA = b'Hello, world!\nSecond line\r\nThird line'
|
|
|
|
|
|
|
|
# Make a package with some resources
|
|
|
|
package_dir = os.path.join(self.dirname, pkg)
|
|
|
|
os.mkdir(package_dir)
|
|
|
|
# Empty init.py
|
|
|
|
f = open(os.path.join(package_dir, '__init__.py'), "wb")
|
|
|
|
f.close()
|
|
|
|
# Resource files, res.txt, sub/res.txt
|
|
|
|
f = open(os.path.join(package_dir, 'res.txt'), "wb")
|
|
|
|
f.write(RESOURCE_DATA)
|
|
|
|
f.close()
|
|
|
|
os.mkdir(os.path.join(package_dir, 'sub'))
|
|
|
|
f = open(os.path.join(package_dir, 'sub', 'res.txt'), "wb")
|
|
|
|
f.write(RESOURCE_DATA)
|
|
|
|
f.close()
|
|
|
|
|
|
|
|
# Check we can read the resources
|
|
|
|
res1 = pkgutil.get_data(pkg, 'res.txt')
|
|
|
|
self.assertEqual(res1, RESOURCE_DATA)
|
|
|
|
res2 = pkgutil.get_data(pkg, 'sub/res.txt')
|
|
|
|
self.assertEqual(res2, RESOURCE_DATA)
|
|
|
|
|
|
|
|
del sys.modules[pkg]
|
|
|
|
|
|
|
|
def test_getdata_zipfile(self):
|
|
|
|
zip = 'test_getdata_zipfile.zip'
|
|
|
|
pkg = 'test_getdata_zipfile'
|
|
|
|
|
|
|
|
# Include a LF and a CRLF, to test that binary data is read back
|
|
|
|
RESOURCE_DATA = b'Hello, world!\nSecond line\r\nThird line'
|
|
|
|
|
|
|
|
# Make a package with some resources
|
|
|
|
zip_file = os.path.join(self.dirname, zip)
|
|
|
|
z = zipfile.ZipFile(zip_file, 'w')
|
|
|
|
|
|
|
|
# Empty init.py
|
|
|
|
z.writestr(pkg + '/__init__.py', "")
|
|
|
|
# Resource files, res.txt, sub/res.txt
|
|
|
|
z.writestr(pkg + '/res.txt', RESOURCE_DATA)
|
|
|
|
z.writestr(pkg + '/sub/res.txt', RESOURCE_DATA)
|
|
|
|
z.close()
|
|
|
|
|
|
|
|
# Check we can read the resources
|
|
|
|
sys.path.insert(0, zip_file)
|
|
|
|
res1 = pkgutil.get_data(pkg, 'res.txt')
|
|
|
|
self.assertEqual(res1, RESOURCE_DATA)
|
|
|
|
res2 = pkgutil.get_data(pkg, 'sub/res.txt')
|
|
|
|
self.assertEqual(res2, RESOURCE_DATA)
|
Merged revisions 73833,73838,73850-73852,73856-73857 via svnmerge from
svn+ssh://svn.python.org/python/branches/py3k
................
r73833 | gregory.p.smith | 2009-07-04 04:46:54 +0200 (Sa, 04 Jul 2009) | 20 lines
Merged revisions 73825-73826 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
r73825 | gregory.p.smith | 2009-07-03 18:49:29 -0700 (Fri, 03 Jul 2009) | 9 lines
Use select.poll() in subprocess, when available, rather than select() so that
it does not fail when file descriptors are large. Fixes issue3392.
Patch largely contributed by Frank Chu (fpmc) with some improvements by me.
See http://bugs.python.org/issue3392.
........
r73826 | gregory.p.smith | 2009-07-03 18:55:11 -0700 (Fri, 03 Jul 2009) | 2 lines
news entry for r73825
........
Candidate for backporting to release31-maint as it is a bug fix and changes no
public API.
................
r73838 | gregory.p.smith | 2009-07-04 10:32:15 +0200 (Sa, 04 Jul 2009) | 2 lines
change deprecated unittest method calls into their proper names.
................
r73850 | alexandre.vassalotti | 2009-07-05 07:38:18 +0200 (So, 05 Jul 2009) | 3 lines
Issue 4509: Do not modify an array if we know the change would result
in a failure due to exported buffers.
................
r73851 | alexandre.vassalotti | 2009-07-05 07:47:28 +0200 (So, 05 Jul 2009) | 2 lines
Add more test cases to BaseTest.test_memoryview_no_resize.
................
r73852 | alexandre.vassalotti | 2009-07-05 08:25:14 +0200 (So, 05 Jul 2009) | 5 lines
Fix array.extend and array.__iadd__ to handle the case where an array
is extended with itself.
This bug is specific the py3k version of arraymodule.c
................
r73856 | alexandre.vassalotti | 2009-07-05 08:42:44 +0200 (So, 05 Jul 2009) | 6 lines
Issue 4005: Remove .sort() call on dict_keys object.
This caused pydoc to fail when there was a zip file in sys.path.
Patch contributed by Amaury Forgeot d'Arc.
................
r73857 | alexandre.vassalotti | 2009-07-05 08:50:08 +0200 (So, 05 Jul 2009) | 2 lines
Add NEWS entries for the changes I made recently.
................
2009-08-13 06:04:31 -03:00
|
|
|
|
|
|
|
names = []
|
|
|
|
for loader, name, ispkg in pkgutil.iter_modules([zip_file]):
|
|
|
|
names.append(name)
|
|
|
|
self.assertEqual(names, ['test_getdata_zipfile'])
|
|
|
|
|
Merged revisions 62350-62355,62358-62359,62364-62365,62370,62372-62375,62378-62379,62381 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
r62350 | nick.coghlan | 2008-04-15 12:25:31 +0200 (Tue, 15 Apr 2008) | 1 line
Issue 2439: add pkgutils.get_data() as a convenience wrapper for the PEP 302 get_data() API (contributed by Paul Moore)
........
r62351 | nick.coghlan | 2008-04-15 12:28:14 +0200 (Tue, 15 Apr 2008) | 1 line
Add test file missing from rev 62350
........
r62352 | benjamin.peterson | 2008-04-15 13:58:46 +0200 (Tue, 15 Apr 2008) | 2 lines
Add myself to Doc/ACKS.txt
........
r62353 | andrew.kuchling | 2008-04-15 15:10:07 +0200 (Tue, 15 Apr 2008) | 6 lines
Add *,**,@ to index, as suggested by
http://farmdev.com/thoughts/24/what-does-the-def-star-variable-or-def-asterisk-parameter-syntax-do-in-python-/
The right entry type to use isn't clear; operator seems wrong, because *,**,@
aren't being used in expressions here. I put them as 'statement'; 'syntax'
might be better.
........
r62354 | andrew.kuchling | 2008-04-15 15:10:41 +0200 (Tue, 15 Apr 2008) | 1 line
Typo fix
........
r62355 | mark.dickinson | 2008-04-15 22:51:18 +0200 (Tue, 15 Apr 2008) | 3 lines
Fix for possible signed overflow: the behaviour of -LONG_MIN is
undefined in ANSI C.
........
r62358 | jeroen.ruigrok | 2008-04-16 14:47:01 +0200 (Wed, 16 Apr 2008) | 2 lines
Reformat to 80 columns prior to adding documentation.
........
r62359 | jeroen.ruigrok | 2008-04-16 14:57:43 +0200 (Wed, 16 Apr 2008) | 2 lines
Add details about the return value for mmap.flush().
........
r62364 | raymond.hettinger | 2008-04-17 12:48:31 +0200 (Thu, 17 Apr 2008) | 1 line
Issue 2648: Add leading zero to money format recipe in the docs.
........
r62365 | jeroen.ruigrok | 2008-04-17 14:39:45 +0200 (Thu, 17 Apr 2008) | 2 lines
Be consistent in the use of read-only.
........
r62370 | andrew.kuchling | 2008-04-17 22:44:06 +0200 (Thu, 17 Apr 2008) | 1 line
Typo fixes
........
r62372 | andrew.kuchling | 2008-04-18 04:40:47 +0200 (Fri, 18 Apr 2008) | 1 line
Use correct parameter name
........
r62373 | andrew.kuchling | 2008-04-18 18:53:09 +0200 (Fri, 18 Apr 2008) | 1 line
#2654: fix typo
........
r62374 | andrew.kuchling | 2008-04-18 20:28:23 +0200 (Fri, 18 Apr 2008) | 4 lines
Remove personal note from Jim Roskind; it no longer applies, and the
e-mail address is for a previous employer.
Can we move the big long copyright statement into a sidebar or something?
........
r62375 | andrew.kuchling | 2008-04-18 20:39:55 +0200 (Fri, 18 Apr 2008) | 1 line
Rewrite introductory section, and remove old section. (It was already commented-out, but why keep it?)
........
r62378 | skip.montanaro | 2008-04-18 22:35:46 +0200 (Fri, 18 Apr 2008) | 1 line
resolve issue 2014
........
r62379 | benjamin.peterson | 2008-04-18 22:45:33 +0200 (Fri, 18 Apr 2008) | 2 lines
Fix indentation in sysmodule.c
........
r62381 | amaury.forgeotdarc | 2008-04-19 01:31:33 +0200 (Sat, 19 Apr 2008) | 3 lines
Some tests did not pass on repeated calls (regrtest -R::)
Perform additional cleanup, mostly deleting from sys.modules, or clearing the warnings registry.
........
2008-04-18 21:55:37 -03:00
|
|
|
del sys.path[0]
|
|
|
|
|
|
|
|
del sys.modules[pkg]
|
|
|
|
|
|
|
|
class PkgutilPEP302Tests(unittest.TestCase):
|
|
|
|
|
|
|
|
class MyTestLoader(object):
|
|
|
|
def load_module(self, fullname):
|
|
|
|
# Create an empty module
|
|
|
|
mod = sys.modules.setdefault(fullname, imp.new_module(fullname))
|
|
|
|
mod.__file__ = "<%s>" % self.__class__.__name__
|
|
|
|
mod.__loader__ = self
|
|
|
|
# Make it a package
|
|
|
|
mod.__path__ = []
|
|
|
|
# Count how many times the module is reloaded
|
|
|
|
mod.__dict__['loads'] = mod.__dict__.get('loads',0) + 1
|
|
|
|
return mod
|
|
|
|
|
|
|
|
def get_data(self, path):
|
|
|
|
return "Hello, world!"
|
|
|
|
|
|
|
|
class MyTestImporter(object):
|
|
|
|
def find_module(self, fullname, path=None):
|
|
|
|
return PkgutilPEP302Tests.MyTestLoader()
|
|
|
|
|
|
|
|
def setUp(self):
|
|
|
|
sys.meta_path.insert(0, self.MyTestImporter())
|
|
|
|
|
|
|
|
def tearDown(self):
|
|
|
|
del sys.meta_path[0]
|
|
|
|
|
|
|
|
def test_getdata_pep302(self):
|
|
|
|
# Use a dummy importer/loader
|
|
|
|
self.assertEqual(pkgutil.get_data('foo', 'dummy'), "Hello, world!")
|
|
|
|
del sys.modules['foo']
|
|
|
|
|
|
|
|
def test_alreadyloaded(self):
|
|
|
|
# Ensure that get_data works without reloading - the "loads" module
|
|
|
|
# variable in the example loader should count how many times a reload
|
|
|
|
# occurs.
|
|
|
|
import foo
|
|
|
|
self.assertEqual(foo.loads, 1)
|
|
|
|
self.assertEqual(pkgutil.get_data('foo', 'dummy'), "Hello, world!")
|
|
|
|
self.assertEqual(foo.loads, 1)
|
|
|
|
del sys.modules['foo']
|
|
|
|
|
|
|
|
def test_main():
|
|
|
|
run_unittest(PkgutilTests, PkgutilPEP302Tests)
|
2008-04-21 10:08:03 -03:00
|
|
|
# this is necessary if test is run repeated (like when finding leaks)
|
|
|
|
import zipimport
|
|
|
|
zipimport._zip_directory_cache.clear()
|
Merged revisions 62350-62355,62358-62359,62364-62365,62370,62372-62375,62378-62379,62381 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
r62350 | nick.coghlan | 2008-04-15 12:25:31 +0200 (Tue, 15 Apr 2008) | 1 line
Issue 2439: add pkgutils.get_data() as a convenience wrapper for the PEP 302 get_data() API (contributed by Paul Moore)
........
r62351 | nick.coghlan | 2008-04-15 12:28:14 +0200 (Tue, 15 Apr 2008) | 1 line
Add test file missing from rev 62350
........
r62352 | benjamin.peterson | 2008-04-15 13:58:46 +0200 (Tue, 15 Apr 2008) | 2 lines
Add myself to Doc/ACKS.txt
........
r62353 | andrew.kuchling | 2008-04-15 15:10:07 +0200 (Tue, 15 Apr 2008) | 6 lines
Add *,**,@ to index, as suggested by
http://farmdev.com/thoughts/24/what-does-the-def-star-variable-or-def-asterisk-parameter-syntax-do-in-python-/
The right entry type to use isn't clear; operator seems wrong, because *,**,@
aren't being used in expressions here. I put them as 'statement'; 'syntax'
might be better.
........
r62354 | andrew.kuchling | 2008-04-15 15:10:41 +0200 (Tue, 15 Apr 2008) | 1 line
Typo fix
........
r62355 | mark.dickinson | 2008-04-15 22:51:18 +0200 (Tue, 15 Apr 2008) | 3 lines
Fix for possible signed overflow: the behaviour of -LONG_MIN is
undefined in ANSI C.
........
r62358 | jeroen.ruigrok | 2008-04-16 14:47:01 +0200 (Wed, 16 Apr 2008) | 2 lines
Reformat to 80 columns prior to adding documentation.
........
r62359 | jeroen.ruigrok | 2008-04-16 14:57:43 +0200 (Wed, 16 Apr 2008) | 2 lines
Add details about the return value for mmap.flush().
........
r62364 | raymond.hettinger | 2008-04-17 12:48:31 +0200 (Thu, 17 Apr 2008) | 1 line
Issue 2648: Add leading zero to money format recipe in the docs.
........
r62365 | jeroen.ruigrok | 2008-04-17 14:39:45 +0200 (Thu, 17 Apr 2008) | 2 lines
Be consistent in the use of read-only.
........
r62370 | andrew.kuchling | 2008-04-17 22:44:06 +0200 (Thu, 17 Apr 2008) | 1 line
Typo fixes
........
r62372 | andrew.kuchling | 2008-04-18 04:40:47 +0200 (Fri, 18 Apr 2008) | 1 line
Use correct parameter name
........
r62373 | andrew.kuchling | 2008-04-18 18:53:09 +0200 (Fri, 18 Apr 2008) | 1 line
#2654: fix typo
........
r62374 | andrew.kuchling | 2008-04-18 20:28:23 +0200 (Fri, 18 Apr 2008) | 4 lines
Remove personal note from Jim Roskind; it no longer applies, and the
e-mail address is for a previous employer.
Can we move the big long copyright statement into a sidebar or something?
........
r62375 | andrew.kuchling | 2008-04-18 20:39:55 +0200 (Fri, 18 Apr 2008) | 1 line
Rewrite introductory section, and remove old section. (It was already commented-out, but why keep it?)
........
r62378 | skip.montanaro | 2008-04-18 22:35:46 +0200 (Fri, 18 Apr 2008) | 1 line
resolve issue 2014
........
r62379 | benjamin.peterson | 2008-04-18 22:45:33 +0200 (Fri, 18 Apr 2008) | 2 lines
Fix indentation in sysmodule.c
........
r62381 | amaury.forgeotdarc | 2008-04-19 01:31:33 +0200 (Sat, 19 Apr 2008) | 3 lines
Some tests did not pass on repeated calls (regrtest -R::)
Perform additional cleanup, mostly deleting from sys.modules, or clearing the warnings registry.
........
2008-04-18 21:55:37 -03:00
|
|
|
|
|
|
|
if __name__ == '__main__':
|
|
|
|
test_main()
|