h2
h2 copied to clipboard
Comparison between bytes and string in defining a frozenset throws exception
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 make h2
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.
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 h2.utility._custom_startswith()
.
Even without -bb
, this throws noisy warnings:
[BytesWarning] Comparison between bytes and string (.../h2/utilities.py:20)
[BytesWarning] Comparison between bytes and string (.../h2/utilities.py:29)
[BytesWarning] Comparison between bytes and string (.../h2/utilities.py:39)
[BytesWarning] Comparison between bytes and string (.../h2/utilities.py:46)
[BytesWarning] Comparison between bytes and string (.../h2/utilities.py:55)
[BytesWarning] Comparison between bytes and string (.../h2/utilities.py:60)
These warnings should at least be less noisy. Perhaps using warnings.simplefilter
? reference
This also affects urllib3 who runs tests with -bb
to catch issues, but will have to stop to adopt h2.