-
-
Notifications
You must be signed in to change notification settings - Fork 31.8k
gh-132983: Add compression.zstd
and Python tests
#133365
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
Also as requested, pinging @Rogdham to review the Python code. |
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.
Review of Lib/compression/zstd/__init__.py
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 |
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 review is focused on changes from pyzstd
.
My main issue is decompress(compress(b"xxx") + b"yyy")
not raising an exception.
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.
These extra comments are due to options
being passed as positional arguments, but they are passed to level
parameter instead of options
.
I hope I did not miss any 😅
I am working on addressing some of the issues which will include the test failures |
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.
Some nits, nothing major
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.
Comments on Lib/compression/zstd/_zstdfile.py
I have made the requested changes; please review again |
Thanks for making the requested changes! @AA-Turner: please review the changes made to this pull request. |
FWIW I believe I responded to all reviews, so I will add the buildbots to test this. |
🤖 New build scheduled with the buildbot fleet by @emmatyping for commit a12a031 🤖 Results will be shown at: https://buildbot.python.org/all/#/grid?branch=refs%2Fpull%2F133365%2Fmerge If you want to schedule another build, you need to add the 🔨 test-with-buildbots label again. |
Python, in general, works on protocols rather than nominal or specific types. I think this check is overly restrictive, with only minor benefit. Users wanting validation can use static type checkers.
I've pushed a series of commits. Most are explanatory and fairly minor (docstring wording, etc). The one of most note is removing the exact type checks on I've pushed this for speed, given time, but if you feel strongly I'm happy for you to revert. A |
@AA-Turner The commits look fine other than the last one. It is very important to check the type of a CompressionParameter vs DecompressionParameter because the C enum variants have overlapping values ( You can see in the tests this could lead to confusing errors:
I think I will revert the last commit but keep the others. |
This reverts commit bf4b07d. Checking the type of parameters is important to avoid confusing error messages.
Yes, but I think the risk of this actually hitting users is low? For example, the examplar test failure you provided is very clear: I think it's fine to keep for now as we can discuss further and change this during the betas -- this particular item isn't impacted by feature freeze as it's entirely private. A |
I think we view the clarify of the error differently! To me I would expect users to not understand why they are getting an error about a decompression parameter when passing a compression parameter. I think perhaps a compromise would be to check the type if it is a (De)CompressionParameter, but otherwise just allow ints without checking. If you're passing an int, you're on your own! |
After writing this:
I just checked and we only check if it is >>> from compression.zstd import *
>>> compress(b'testtesttest', options={100:5})
b'(\xb5/\xfd \x0ca\x00\x00testtesttest' |
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 is mergeable, we can tweak the few remaining items (eg. tarfile, parameter type checks, perhaps tests) after 3.14 beta 1.
Thanks everyone, and especially thank you @Rogdham for the valuable feedback & context from pyzstd
.
A
Hear, hear! And thank you @AA-Turner for your suggestions and contributions! Thank you to all of the reviewers! |
The next step to merging the PEP 784 implementation, this PR introduces
compression.zstd
and tests for the code (which I have been using to test the C code so far).Since test can be modified post-beta1, I'd like to focus on reviewing the API and Python implementation code. Obviously if there are important tests to add or change, that review would be valuable as well.