-
-
Notifications
You must be signed in to change notification settings - Fork 32.7k
bpo-34969: Add --fast, --best on the gzip CLI #9833
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
I'm not for implementing |
good catch, I have removed |
Lib/gzip.py
Outdated
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 bester') |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Minor nit, I am not sure bester is a valid word. "Best compression" maybe?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
If you change the default compression from the CLI you may want to tell it in the NEWS file.
Doc/library/gzip.rst
Outdated
@@ -234,6 +236,23 @@ Command line options | |||
|
|||
If *file* is not specified, read from :attr:`sys.stdin`. | |||
|
|||
.. cmdoption:: --fast | |||
|
|||
Indicates the fastest compression method (less compression) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Missing dot at end of sentence.
Doc/library/gzip.rst
Outdated
.. code-block:: shell-session | ||
|
||
$ python -m gzip --best file | ||
|
||
.. cmdoption:: -d, --decompress | ||
|
||
Decompress the given file |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Same missing dot.
A Python core developer has requested some changes be made to your pull request before we can consider merging it. If you could please address their requests along with any other requests in other reviews from core developers that would be appreciated. Once you have made the requested changes, please leave a comment on this pull request containing the phrase |
Doc/library/gzip.rst
Outdated
.. cmdoption:: --best | ||
|
||
Indicates the slowest compression method (best compression). | ||
This is the default method if you do not specify any flag. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Out of date?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@vadmium sure, if we use the level 6, it's not the --best
flag.
thanks
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
sure, thanks
Doc/library/gzip.rst
Outdated
|
||
.. code-block:: shell-session | ||
|
||
$ python -m gzip --fast file |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
"unversionned" python must not be used: please write python3 (and change the existing documentation for "file").
I'm not sure that it's useful to add an example of a command for each command line option.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actually, most examples in the current Doc do use an unversioned python for -m
examples. Only a few currently use python3 -m
. We should probably decide on which is better and fix them all. But that should be a separate issue and PR.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think it's better to use python
instead of python3
since that will add the extra work of replacing all python3
with python4
when we have a release in future :) Many examples will be compatible with both versions and also might cause issues in backporting doc fixes between two major versions . The URL and drop-down at the top already indicates python3.X version. I might be missing a use case here.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I remove the example with the command line and in this way, just avoid the "un.versioned" python.
Lib/gzip.py
Outdated
def open(filename, mode="rb", compresslevel=9, | ||
COMPRESS_LEVEL_FAST = 1 | ||
COMPRESS_LEVEL_TRADEOFF = 6 | ||
COMPRESS_LEVEL_BEST = 9 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Please make these constants private. If you really want to make them public, you should document them.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
maybe with a new PR/bpo
A Python core developer has requested some changes be made to your pull request before we can consider merging it. If you could please address their requests along with any other requests in other reviews from core developers that would be appreciated. Once you have made the requested changes, please leave a comment on this pull request containing the phrase |
Lib/test/test_gzip.py
Outdated
rc, out, err = assert_python_ok('-m', 'gzip', compress_level, local_testgzip) | ||
|
||
self.assertTrue(os.path.exists(gzipname)) | ||
self.assertEqual(rc, 0) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
this test is redundant, assert_python_ok() ensures thta it's 0.
Lib/test/test_gzip.py
Outdated
@@ -687,6 +687,19 @@ def wrapper(*args, **kwargs): | |||
return decorator | |||
|
|||
|
|||
def add_compress_level_flag(*compress_levels): |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
11 lines just to pass a flag? IMHO it's too much, it can be done with less code: see below.
@@ -0,0 +1,3 @@ | |||
Add --fast, --best on the gzip CLI, these parameters will be used for the |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
"gzip: Add --fast and --best options on the gzip CLI ..."
Doc/library/gzip.rst
Outdated
@@ -222,25 +222,27 @@ Once executed the :mod:`gzip` module keeps the input file(s). | |||
.. versionchanged:: 3.8 | |||
|
|||
Add a new command line interface with a usage. | |||
By default, when you will execute the CLI, the default compression level is 6, | |||
it's a good tradeoff between the best and fast compression methods. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I suggest to remove "it's a good tradeoff between the best and fast compression methods". I wouldn't promise that it's a good tradeoff. Compression is full of bad surprises.
Just one example from gzip manual page:
"In some rare cases, the --best option gives worse compression than the default compression level (-6). On some highly redundant files, compress compresses better than gzip."
Lib/test/test_gzip.py
Outdated
def test_compress_fast_best_are_exclusive(self): | ||
rc, out, err = assert_python_failure('-m', 'gzip', '--fast', '--best') | ||
self.assertIn(b"error: argument --best: not allowed with argument --fast", err) | ||
self.assertGreater(rc, 0) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Can't we expect a specific exit code? Same question for following test.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
+1
--fast and --best are the new parameters. They indicate to Gzip if we want to have a fast compression method or a slow method (best compression).
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM.
@JulienPalard: Can you please double please? You can merge it if it looks good to you.
@JulienPalard are you interested by a merge of this PR? |
LGTM too :) thanks @matrixise for this PR! |
https://bugs.python.org/issue34969