wsproto icon indicating copy to clipboard operation
wsproto copied to clipboard

Type compatibility with `h11._headers.Header`

Open vxgmichel opened this issue 3 years ago • 1 comments

At the moment, the wsproto.typing.Header type is not compatible with h11._headers.Header which is defined as the following, starting with version 0.13.0:

class Headers(Sequence[Tuple[bytes, bytes]]):
    [...]

The following patch might provide this compatibility:

diff --git a/src/wsproto/typing.py b/src/wsproto/typing.py
index a44b27e..1786501 100644
--- a/src/wsproto/typing.py
+++ b/src/wsproto/typing.py
@@ -1,3 +1,3 @@
-from typing import List, Tuple
+from typing import Sequence, Tuple
 
-Headers = List[Tuple[bytes, bytes]]
+Headers = Sequence[Tuple[bytes, bytes]]

This would fix mypy errors such as:

error: Argument "headers" to "initiate_upgrade_connection" of "WSConnection" has incompatible type "Headers"; expected "List[Tuple[bytes, bytes]]"  [arg-type]

Would that make sense? I can make a PR if necessary.

vxgmichel avatar Jul 08 '22 15:07 vxgmichel

I think the issue here is that wsproto doesn't accept (by typing) a h11.Headers instance as an argument to initiate_upgrade_connection. I think this is correct as I don't think h11.Headers should be used in other libraries. It is also possible to convert a h11.Headers to a list for wsproto via something like list(headers).

pgjones avatar Aug 23 '22 12:08 pgjones