mirror of
https://github.com/python/cpython.git
synced 2025-08-26 19:55:24 +00:00
Merged revisions 68319 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk ........ r68319 | antoine.pitrou | 2009-01-04 22:29:23 +0100 (dim., 04 janv. 2009) | 3 lines Issue #4272: Add an optional argument to the GzipFile constructor to override the timestamp in the gzip stream. ........
This commit is contained in:
parent
315a20a6f3
commit
42db3efd36
4 changed files with 95 additions and 5 deletions
21
Lib/gzip.py
21
Lib/gzip.py
|
@ -54,7 +54,7 @@ class GzipFile:
|
|||
max_read_chunk = 10 * 1024 * 1024 # 10Mb
|
||||
|
||||
def __init__(self, filename=None, mode=None,
|
||||
compresslevel=9, fileobj=None):
|
||||
compresslevel=9, fileobj=None, mtime=None):
|
||||
"""Constructor for the GzipFile class.
|
||||
|
||||
At least one of fileobj and filename must be given a
|
||||
|
@ -81,6 +81,15 @@ class GzipFile:
|
|||
level of compression; 1 is fastest and produces the least compression,
|
||||
and 9 is slowest and produces the most compression. The default is 9.
|
||||
|
||||
The mtime argument is an optional numeric timestamp to be written
|
||||
to the stream when compressing. All gzip compressed streams
|
||||
are required to contain a timestamp. If omitted or None, the
|
||||
current time is used. This module ignores the timestamp when
|
||||
decompressing; however, some programs, such as gunzip, make use
|
||||
of it. The format of the timestamp is the same as that of the
|
||||
return value of time.time() and of the st_mtime member of the
|
||||
object returned by os.stat().
|
||||
|
||||
"""
|
||||
|
||||
# guarantee the file is opened in binary mode on platforms
|
||||
|
@ -119,6 +128,7 @@ class GzipFile:
|
|||
|
||||
self.fileobj = fileobj
|
||||
self.offset = 0
|
||||
self.mtime = mtime
|
||||
|
||||
if self.mode == WRITE:
|
||||
self._write_gzip_header()
|
||||
|
@ -157,7 +167,10 @@ class GzipFile:
|
|||
if fname:
|
||||
flags = FNAME
|
||||
self.fileobj.write(chr(flags).encode('latin-1'))
|
||||
write32u(self.fileobj, int(time.time()))
|
||||
mtime = self.mtime
|
||||
if mtime is None:
|
||||
mtime = time.time()
|
||||
write32u(self.fileobj, int(mtime))
|
||||
self.fileobj.write(b'\002')
|
||||
self.fileobj.write(b'\377')
|
||||
if fname:
|
||||
|
@ -175,10 +188,10 @@ class GzipFile:
|
|||
if method != 8:
|
||||
raise IOError('Unknown compression method')
|
||||
flag = ord( self.fileobj.read(1) )
|
||||
# modtime = self.fileobj.read(4)
|
||||
self.mtime = read32(self.fileobj)
|
||||
# extraflag = self.fileobj.read(1)
|
||||
# os = self.fileobj.read(1)
|
||||
self.fileobj.read(6)
|
||||
self.fileobj.read(2)
|
||||
|
||||
if flag & FEXTRA:
|
||||
# Read & discard the extra field, if present
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue