-
Notifications
You must be signed in to change notification settings - Fork 157
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
Comparison between bytes and string in defining a frozenset throws exception #1236
Comments
I agree this should be fixed, especially this module is used in many other stacks. Sets with mixed string types seem totally broken to me. Maybe a custom set-class instead of frozenset? |
I tried to fix this but I give up for now due to lack of time. This seems really seriously broken! This whole module package serves as a good example why you should have typing. IMO the devs have to decide where in the call-stack to decode the lower protocol data and refactor everything else above that. Especially remove the really strange kludges like |
Even without
These warnings should at least be less noisy. Perhaps using |
This also affects urllib3 who runs tests with |
So I want to fix this with a PR. It seems like this is done for efficiency reasons that said I also looked at hyper/hpack and it looks like we already need to convert everything to Does that sound plausible? If yes, PR incoming; if no, please help me understand why :) |
Pinging @Kriechi to get attention as I think otherwise this will just be missed. |
@BYK I'm not familiar enough with this part of the code base to recommend such a larger refactoring. I think there is an implicit API expectation to the users of the h2 library that they can pass in both To focus on the issue itself: would separating the bytes vs. str checks solve the exception throwing? First check which class the header key and value are, and then compare them against the frozenset for its correct type? I could also see a custom |
@Kriechi sorry for the delay and not being clear enough. My intention is keeping the
Hope I did a better job explaining here but if not I'll be following up with the PR tomorrow anyway. |
Fixes python-hyper#1236. This patch makes all header operations operate on `bytes` and converts all headers and values to bytes before operation. With a follow up patch to `hpack` it should also increase efficiency as currently, `hpack` casts everything to a `str` first before converting back to bytes: https://github.com/python-hyper/hpack/blob/02afcab28ca56eb5259904fd414baa89e9f50266/src/hpack/hpack.py#L150-L151
@Kriechi okay the PR is up -- please see my note regarding formatting. Happy to work on that part if review turns out to be daunting. Btw. I had to go the other way around and use |
Fixes python-hyper#1236. This patch makes all header operations operate on `bytes` and converts all headers and values to bytes before operation. With a follow up patch to `hpack` it should also increase efficiency as currently, `hpack` casts everything to a `str` first before converting back to bytes: https://github.com/python-hyper/hpack/blob/02afcab28ca56eb5259904fd414baa89e9f50266/src/hpack/hpack.py#L150-L151
https://github.com/python-hyper/hyper-h2/blob/3b0b241d79f5a9ff9382bbc038f84862e0d80abf/src/h2/utilities.py#L20-L26.
Hi, when a python process runs with a flag
-bb
, the above part of code will throw exception and makeh2
not work. May I ask why we define both bytes and string in the frozenset? Is it possible to use only bytes or string? Frozenset will compare keys for deduplication.The text was updated successfully, but these errors were encountered: