summaryrefslogtreecommitdiff
path: root/Lib/gzip.py
diff options
context:
space:
mode:
authorStéphane Wirtel <stephane@wirtel.be>2018-11-03 16:24:23 +0100
committerJulien Palard <julien@palard.fr>2018-11-03 16:24:23 +0100
commit3e28eed9ec2249bb11ad0db4629271b7ce9b7918 (patch)
tree3d55ce3fda51af044cb3ac6e667fbfb09123d231 /Lib/gzip.py
parentfe62d877e300e1ee4145fff8f2bdba498b685f91 (diff)
downloadcpython-git-3e28eed9ec2249bb11ad0db4629271b7ce9b7918.tar.gz
bpo-34969: Add --fast, --best on the gzip CLI (GH-9833)
Diffstat (limited to 'Lib/gzip.py')
-rw-r--r--Lib/gzip.py27
1 files changed, 22 insertions, 5 deletions
diff --git a/Lib/gzip.py b/Lib/gzip.py
index a34d01ae36..151ff1405b 100644
--- a/Lib/gzip.py
+++ b/Lib/gzip.py
@@ -17,7 +17,12 @@ FTEXT, FHCRC, FEXTRA, FNAME, FCOMMENT = 1, 2, 4, 8, 16
READ, WRITE = 1, 2
-def open(filename, mode="rb", compresslevel=9,
+_COMPRESS_LEVEL_FAST = 1
+_COMPRESS_LEVEL_TRADEOFF = 6
+_COMPRESS_LEVEL_BEST = 9
+
+
+def open(filename, mode="rb", compresslevel=_COMPRESS_LEVEL_BEST,
encoding=None, errors=None, newline=None):
"""Open a gzip-compressed file in binary or text mode.
@@ -121,7 +126,7 @@ class GzipFile(_compression.BaseStream):
myfileobj = None
def __init__(self, filename=None, mode=None,
- compresslevel=9, fileobj=None, mtime=None):
+ compresslevel=_COMPRESS_LEVEL_BEST, fileobj=None, mtime=None):
"""Constructor for the GzipFile class.
At least one of fileobj and filename must be given a
@@ -515,7 +520,7 @@ class _GzipReader(_compression.DecompressReader):
super()._rewind()
self._new_member = True
-def compress(data, compresslevel=9):
+def compress(data, compresslevel=_COMPRESS_LEVEL_BEST):
"""Compress data in one shot and return the compressed string.
Optional argument is the compression level, in range of 0-9.
"""
@@ -537,10 +542,21 @@ def main():
parser = ArgumentParser(description=
"A simple command line interface for the gzip module: act like gzip, "
"but do not delete the input file.")
- parser.add_argument("-d", "--decompress", action="store_true",
+ group = parser.add_mutually_exclusive_group()
+ group.add_argument('--fast', action='store_true', help='compress faster')
+ group.add_argument('--best', action='store_true', help='compress better')
+ group.add_argument("-d", "--decompress", action="store_true",
help="act like gunzip instead of gzip")
+
parser.add_argument("args", nargs="*", default=["-"], metavar='file')
args = parser.parse_args()
+
+ compresslevel = _COMPRESS_LEVEL_TRADEOFF
+ if args.fast:
+ compresslevel = _COMPRESS_LEVEL_FAST
+ elif args.best:
+ compresslevel = _COMPRESS_LEVEL_BEST
+
for arg in args.args:
if args.decompress:
if arg == "-":
@@ -555,7 +571,8 @@ def main():
else:
if arg == "-":
f = sys.stdin.buffer
- g = GzipFile(filename="", mode="wb", fileobj=sys.stdout.buffer)
+ g = GzipFile(filename="", mode="wb", fileobj=sys.stdout.buffer,
+ compresslevel=compresslevel)
else:
f = builtins.open(arg, "rb")
g = open(arg + ".gz", "wb")