[Python-3000-checkins] r57560 - in python/branches/py3k/Lib: test/test_zipimport.py zipfile.py
guido.van.rossum
python-3000-checkins at python.org
Mon Aug 27 19:03:28 CEST 2007
Author: guido.van.rossum
Date: Mon Aug 27 19:03:28 2007
New Revision: 57560
Modified:
python/branches/py3k/Lib/test/test_zipimport.py
python/branches/py3k/Lib/zipfile.py
Log:
Changes preparing for stricter enforcement of bytes vs. str.
Modified: python/branches/py3k/Lib/test/test_zipimport.py
==============================================================================
--- python/branches/py3k/Lib/test/test_zipimport.py (original)
+++ python/branches/py3k/Lib/test/test_zipimport.py Mon Aug 27 19:03:28 2007
@@ -255,7 +255,7 @@
# stuff at the beginning of the file
files = {TESTMOD + ".py": (NOW, test_src)}
self.doTest(".py", files, TESTMOD,
- stuff="Some Stuff"*31)
+ stuff=b"Some Stuff"*31)
def assertModuleSource(self, module):
self.assertEqual(inspect.getsource(module), test_src)
Modified: python/branches/py3k/Lib/zipfile.py
==============================================================================
--- python/branches/py3k/Lib/zipfile.py (original)
+++ python/branches/py3k/Lib/zipfile.py Mon Aug 27 19:03:28 2007
@@ -909,10 +909,14 @@
self.filelist.append(zinfo)
self.NameToInfo[zinfo.filename] = zinfo
- def writestr(self, zinfo_or_arcname, bytes):
- """Write a file into the archive. The contents is the string
- 'bytes'. 'zinfo_or_arcname' is either a ZipInfo instance or
+ def writestr(self, zinfo_or_arcname, data):
+ """Write a file into the archive. The contents is 'data', which
+ may be either a 'str' or a 'bytes' instance; if it is a 'str',
+ it is encoded as UTF-8 first.
+ 'zinfo_or_arcname' is either a ZipInfo instance or
the name of the file in the archive."""
+ if isinstance(data, str):
+ data = data.encode("utf-8")
if not isinstance(zinfo_or_arcname, ZipInfo):
zinfo = ZipInfo(filename=zinfo_or_arcname,
date_time=time.localtime(time.time()))
@@ -924,21 +928,21 @@
raise RuntimeError(
"Attempt to write to ZIP archive that was already closed")
- zinfo.file_size = len(bytes) # Uncompressed size
- zinfo.header_offset = self.fp.tell() # Start of header bytes
+ zinfo.file_size = len(data) # Uncompressed size
+ zinfo.header_offset = self.fp.tell() # Start of header data
self._writecheck(zinfo)
self._didModify = True
- zinfo.CRC = binascii.crc32(bytes) # CRC-32 checksum
+ zinfo.CRC = binascii.crc32(data) # CRC-32 checksum
if zinfo.compress_type == ZIP_DEFLATED:
co = zlib.compressobj(zlib.Z_DEFAULT_COMPRESSION,
zlib.DEFLATED, -15)
- bytes = co.compress(bytes) + co.flush()
- zinfo.compress_size = len(bytes) # Compressed size
+ data = co.compress(data) + co.flush()
+ zinfo.compress_size = len(data) # Compressed size
else:
zinfo.compress_size = zinfo.file_size
- zinfo.header_offset = self.fp.tell() # Start of header bytes
+ zinfo.header_offset = self.fp.tell() # Start of header data
self.fp.write(zinfo.FileHeader())
- self.fp.write(bytes)
+ self.fp.write(data)
self.fp.flush()
if zinfo.flag_bits & 0x08:
# Write CRC and file sizes after the file data
More information about the Python-3000-checkins
mailing list