1from typing import List, NewType, Optional, Tuple, Union
2
3
4__all__ = ["Data", "Origin", "ExtensionHeader", "ExtensionParameter", "Subprotocol"]
5
6Data = Union[str, bytes]
7
8Data__doc__ = """
9Types supported in a WebSocket message:
10
11- :class:`str` for text messages
12- :class:`bytes` for binary messages
13
14"""
15# Remove try / except when dropping support for Python < 3.7
16try:
17    Data.__doc__ = Data__doc__  # type: ignore
18except AttributeError:  # pragma: no cover
19    pass
20
21
22Origin = NewType("Origin", str)
23Origin.__doc__ = """Value of a Origin header"""
24
25
26ExtensionName = NewType("ExtensionName", str)
27ExtensionName.__doc__ = """Name of a WebSocket extension"""
28
29
30ExtensionParameter = Tuple[str, Optional[str]]
31
32ExtensionParameter__doc__ = """Parameter of a WebSocket extension"""
33try:
34    ExtensionParameter.__doc__ = ExtensionParameter__doc__  # type: ignore
35except AttributeError:  # pragma: no cover
36    pass
37
38
39ExtensionHeader = Tuple[ExtensionName, List[ExtensionParameter]]
40
41ExtensionHeader__doc__ = """Item parsed in a Sec-WebSocket-Extensions header"""
42try:
43    ExtensionHeader.__doc__ = ExtensionHeader__doc__  # type: ignore
44except AttributeError:  # pragma: no cover
45    pass
46
47
48Subprotocol = NewType("Subprotocol", str)
49Subprotocol.__doc__ = """Items parsed in a Sec-WebSocket-Protocol header"""
50