summaryrefslogtreecommitdiff
path: root/Lib
diff options
context:
space:
mode:
authorguoci <zguoci@gmail.com>2018-11-07 04:50:23 -0500
committerSerhiy Storchaka <storchaka@gmail.com>2018-11-07 11:50:23 +0200
commit0e7497cb469b003a45a4abe4105b81ef6d0c4002 (patch)
tree6c14770bf03a79d5e2ce008432309cfbddab858e /Lib
parentd2b11af91560eaaeb499f702f4b0f244ec756280 (diff)
downloadcpython-git-0e7497cb469b003a45a4abe4105b81ef6d0c4002.tar.gz
bpo-34898: Add mtime parameter to gzip.compress(). (GH-9704)
Without setting mtime, time.time() will be used as the timestamp which will end up in the compressed data and each invocation of the compress() function will vary over time.
Diffstat (limited to 'Lib')
-rw-r--r--Lib/gzip.py4
-rw-r--r--Lib/test/test_gzip.py11
2 files changed, 13 insertions, 2 deletions
diff --git a/Lib/gzip.py b/Lib/gzip.py
index 151ff1405b..948fec293e 100644
--- a/Lib/gzip.py
+++ b/Lib/gzip.py
@@ -520,12 +520,12 @@ class _GzipReader(_compression.DecompressReader):
super()._rewind()
self._new_member = True
-def compress(data, compresslevel=_COMPRESS_LEVEL_BEST):
+def compress(data, compresslevel=_COMPRESS_LEVEL_BEST, *, mtime=None):
"""Compress data in one shot and return the compressed string.
Optional argument is the compression level, in range of 0-9.
"""
buf = io.BytesIO()
- with GzipFile(fileobj=buf, mode='wb', compresslevel=compresslevel) as f:
+ with GzipFile(fileobj=buf, mode='wb', compresslevel=compresslevel, mtime=mtime) as f:
f.write(data)
return buf.getvalue()
diff --git a/Lib/test/test_gzip.py b/Lib/test/test_gzip.py
index 1e8b41f07b..2c8f854c64 100644
--- a/Lib/test/test_gzip.py
+++ b/Lib/test/test_gzip.py
@@ -499,6 +499,17 @@ class TestGzip(BaseTest):
with gzip.GzipFile(fileobj=io.BytesIO(datac), mode="rb") as f:
self.assertEqual(f.read(), data)
+ def test_compress_mtime(self):
+ mtime = 123456789
+ for data in [data1, data2]:
+ for args in [(), (1,), (6,), (9,)]:
+ with self.subTest(data=data, args=args):
+ datac = gzip.compress(data, *args, mtime=mtime)
+ self.assertEqual(type(datac), bytes)
+ with gzip.GzipFile(fileobj=io.BytesIO(datac), mode="rb") as f:
+ f.read(1) # to set mtime attribute
+ self.assertEqual(f.mtime, mtime)
+
def test_decompress(self):
for data in (data1, data2):
buf = io.BytesIO()