[Python-checkins] r63067 - in python/trunk: Doc/library/zipimport.rst Lib/test/test_zipimport.py Modules/zipimport.c
georg.brandl
python-checkins at python.org
Sun May 11 17:05:14 CEST 2008
Author: georg.brandl
Date: Sun May 11 17:05:13 2008
New Revision: 63067
Log:
#1326: document and test zipimporter.archive and zipimporter.prefix.
Modified:
python/trunk/Doc/library/zipimport.rst
python/trunk/Lib/test/test_zipimport.py
python/trunk/Modules/zipimport.c
Modified: python/trunk/Doc/library/zipimport.rst
==============================================================================
--- python/trunk/Doc/library/zipimport.rst (original)
+++ python/trunk/Doc/library/zipimport.rst Sun May 11 17:05:13 2008
@@ -65,17 +65,14 @@
.. class:: zipimporter(archivepath)
- Create a new zipimporter instance. *archivepath* must be a path to a ZIP file.
+ Create a new zipimporter instance. *archivepath* must be a path to a ZIP
+ file, or to a specific path within a ZIP file. For example, an *archivepath*
+ of :file:`foo/bar.zip/lib` will look for modules in the :file:`lib` directory
+ inside the ZIP file :file:`foo/bar.zip` (provided that it exists).
+
:exc:`ZipImportError` is raised if *archivepath* doesn't point to a valid ZIP
archive.
- *archivepath* can also contain a path within the ZIP file -- the importer
- object will then look under that path instead of the ZIP file root. For
- example, an *archivepath* of :file:`foo/bar.zip/lib` will look for modules
- in the :file:`lib` directory inside the ZIP file :file:`foo/bar.zip`
- (provided that it exists).
-
-
.. method:: find_module(fullname[, path])
Search for a module specified by *fullname*. *fullname* must be the fully
@@ -120,13 +117,19 @@
.. attribute:: archive
- The file name of the importer's associated ZIP file.
+ The file name of the importer's associated ZIP file, without a possible
+ subpath.
.. attribute:: prefix
- The path within the ZIP file where modules are searched; see
- :class:`zipimporter` for details.
+ The subpath within the ZIP file where modules are searched. This is the
+ empty string for zipimporter objects which point to the root of the ZIP
+ file.
+
+ The :attr:`archive` and :attr:`prefix` attributes, when combined with a
+ slash, equal the original *archivepath* argument given to the
+ :class:`zipimporter` constructor.
.. _zipimport-examples:
Modified: python/trunk/Lib/test/test_zipimport.py
==============================================================================
--- python/trunk/Lib/test/test_zipimport.py (original)
+++ python/trunk/Lib/test/test_zipimport.py Sun May 11 17:05:13 2008
@@ -212,6 +212,7 @@
z.close()
zi = zipimport.zipimporter(TEMP_ZIP)
+ self.assertEquals(zi.archive, TEMP_ZIP)
self.assertEquals(zi.is_package(TESTPACK), True)
zi.load_module(TESTPACK)
@@ -232,6 +233,37 @@
z.close()
os.remove(TEMP_ZIP)
+ def testZipImporterMethodsInSubDirectory(self):
+ packdir = TESTPACK + os.sep
+ packdir2 = packdir + TESTPACK2 + os.sep
+ files = {packdir2 + "__init__" + pyc_ext: (NOW, test_pyc),
+ packdir2 + TESTMOD + pyc_ext: (NOW, test_pyc)}
+
+ z = ZipFile(TEMP_ZIP, "w")
+ try:
+ for name, (mtime, data) in files.items():
+ zinfo = ZipInfo(name, time.localtime(mtime))
+ zinfo.compress_type = self.compression
+ z.writestr(zinfo, data)
+ z.close()
+
+ zi = zipimport.zipimporter(TEMP_ZIP + os.sep + packdir)
+ self.assertEquals(zi.archive, TEMP_ZIP)
+ self.assertEquals(zi.prefix, packdir)
+ self.assertEquals(zi.is_package(TESTPACK2), True)
+ zi.load_module(TESTPACK2)
+
+ self.assertEquals(zi.is_package(TESTPACK2 + os.sep + '__init__'), False)
+ self.assertEquals(zi.is_package(TESTPACK2 + os.sep + TESTMOD), False)
+
+ mod_name = TESTPACK2 + os.sep + TESTMOD
+ mod = __import__(module_path_to_dotted_name(mod_name))
+ self.assertEquals(zi.get_source(TESTPACK2), None)
+ self.assertEquals(zi.get_source(mod_name), None)
+ finally:
+ z.close()
+ os.remove(TEMP_ZIP)
+
def testGetData(self):
z = ZipFile(TEMP_ZIP, "w")
z.compression = self.compression
Modified: python/trunk/Modules/zipimport.c
==============================================================================
--- python/trunk/Modules/zipimport.c (original)
+++ python/trunk/Modules/zipimport.c Sun May 11 17:05:13 2008
@@ -555,8 +555,15 @@
"zipimporter(archivepath) -> zipimporter object\n\
\n\
Create a new zipimporter instance. 'archivepath' must be a path to\n\
-a zipfile. ZipImportError is raised if 'archivepath' doesn't point to\n\
-a valid Zip archive.");
+a zipfile, or to a specific path inside a zipfile. For example, it can be\n\
+'/tmp/myimport.zip', or '/tmp/myimport.zip/mydirectory', if mydirectory is a\n\
+valid directory inside the archive.\n\
+\n\
+'ZipImportError is raised if 'archivepath' doesn't point to a valid Zip\n\
+archive.\n\
+\n\
+The 'archive' attribute of zipimporter objects contains the name of the\n\
+zipfile targeted.");
#define DEFERRED_ADDRESS(ADDR) 0
More information about the Python-checkins
mailing list