[pypy-svn] r61373 - in pypy/trunk/pypy: config module/zipimport/test rlib
afa at codespeak.net
afa at codespeak.net
Mon Jan 26 18:22:31 CET 2009
Author: afa
Date: Mon Jan 26 18:22:30 2009
New Revision: 61373
Modified:
pypy/trunk/pypy/config/pypyoption.py
pypy/trunk/pypy/module/zipimport/test/test_undocumented.py
pypy/trunk/pypy/module/zipimport/test/test_zipimport.py
pypy/trunk/pypy/rlib/rzipfile.py
Log:
Allow zipfile and zipimport to work without zlib:
as long as files are simply stored and not deflated, a zip archive does not need this external library.
Automatically disable the zlib module if zlib.h cannot be found.
Now we can translate pypy on Windows without any option and without installing any external library.
Modified: pypy/trunk/pypy/config/pypyoption.py
==============================================================================
--- pypy/trunk/pypy/config/pypyoption.py (original)
+++ pypy/trunk/pypy/config/pypyoption.py Mon Jan 26 18:22:30 2009
@@ -67,7 +67,9 @@
module_import_dependencies = {
# no _rawffi if importing pypy.rlib.libffi raises ImportError
# or CompilationError
- "_rawffi": ["pypy.rlib.libffi"],
+ "_rawffi" : ["pypy.rlib.libffi"],
+
+ "zlib" : ["pypy.rlib.rzlib"],
}
def get_module_validator(modname):
Modified: pypy/trunk/pypy/module/zipimport/test/test_undocumented.py
==============================================================================
--- pypy/trunk/pypy/module/zipimport/test/test_undocumented.py (original)
+++ pypy/trunk/pypy/module/zipimport/test/test_undocumented.py Mon Jan 26 18:22:30 2009
@@ -66,7 +66,7 @@
class AppTestZipImport:
def setup_class(cls):
- space = gettestobjspace(usemodules=['zipimport', 'zlib', 'rctime'])
+ space = gettestobjspace(usemodules=['zipimport', 'rctime'])
cls.space = space
source = "():\n" + str(py.code.Source(temp_zipfile).indent()) + "\n return temp_zipfile"
cls.w_temp_zipfile = space.appexec([], source)
Modified: pypy/trunk/pypy/module/zipimport/test/test_zipimport.py
==============================================================================
--- pypy/trunk/pypy/module/zipimport/test/test_zipimport.py (original)
+++ pypy/trunk/pypy/module/zipimport/test/test_zipimport.py Mon Jan 26 18:22:30 2009
@@ -40,7 +40,12 @@
def get_file():
return __file__
""").compile()
- space = gettestobjspace(usemodules=['zipimport', 'zlib', 'rctime'])
+
+ if cls.compression == ZIP_DEFLATED:
+ space = gettestobjspace(usemodules=['zipimport', 'zlib', 'rctime'])
+ else:
+ space = gettestobjspace(usemodules=['zipimport', 'rctime'])
+
cls.space = space
tmpdir = udir.ensure('zipimport_%s' % cls.__name__, dir=1)
now = time.time()
@@ -190,8 +195,8 @@
def test_package(self):
import os, sys
- self.writefile(self, "xxuuu"+os.sep+"__init__.py", "")
- self.writefile(self, "xxuuu"+os.sep+"yy.py", "def f(x): return x")
+ self.writefile(self, "xxuuu/__init__.py", "")
+ self.writefile(self, "xxuuu/yy.py", "def f(x): return x")
mod = __import__("xxuuu", globals(), locals(), ['yy'])
assert mod.__path__
assert mod.yy.f(3) == 3
@@ -249,3 +254,11 @@
class AppTestZipimportDeflated(AppTestZipimport):
compression = ZIP_DEFLATED
+
+ def setup_class(cls):
+ try:
+ import pypy.rlib.rzlib
+ except ImportError:
+ py.test.skip("zlib not available, cannot test compressed zipfiles")
+ AppTestZipimport.setup_class(cls)
+
Modified: pypy/trunk/pypy/rlib/rzipfile.py
==============================================================================
--- pypy/trunk/pypy/rlib/rzipfile.py (original)
+++ pypy/trunk/pypy/rlib/rzipfile.py Mon Jan 26 18:22:30 2009
@@ -2,9 +2,14 @@
from zipfile import ZIP_STORED, ZIP_DEFLATED
from pypy.rlib.streamio import open_file_as_stream
from pypy.rlib.rstruct.runpack import runpack
-import os
-from pypy.rlib import rzlib
from pypy.rlib.rarithmetic import r_uint, intmask
+from pypy.rpython.tool.rffi_platform import CompilationError
+import os
+
+try:
+ from pypy.rlib import rzlib
+except (ImportError, CompilationError):
+ rzlib = None
# XXX hack to get crc32 to work
from pypy.lib.binascii import crc_32_tab
@@ -229,7 +234,7 @@
self.fp.seek(filepos, 0)
if zinfo.compress_type == ZIP_STORED:
pass
- elif zinfo.compress_type == ZIP_DEFLATED:
+ elif zinfo.compress_type == ZIP_DEFLATED and rzlib is not None:
stream = rzlib.inflateInit(wbits=-15)
try:
bytes, _, _ = rzlib.decompress(stream, bytes)
@@ -239,6 +244,9 @@
bytes = bytes + ex
finally:
rzlib.inflateEnd(stream)
+ elif zinfo.compress_type == ZIP_DEFLATED:
+ raise BadZipfile, \
+ "Cannot decompress file, zlib not installed"
else:
raise BadZipfile, \
"Unsupported compression method %d for file %s" % \
More information about the Pypy-commit
mailing list