Upgrading websockets 12 to 13
Review needed12.0 → 13.1Changed1
Review neededUpgrade verdict
1 changed default.
In plain terms
- Nothing in this range needs changes to your code. It adds features and fixes.
Must act Nothing to change
No breaking, platform, security or deprecated items in this range.
Nothing in this upgrade needs a code or configuration change.
API changes
Generated by DepDelta from published Python source. Not mixed with prose notes.
- added:
export ConcurrencyError
- added:
class Timeout - added:
constructor Timeout(deadline: Optional[float], loop: asyncio.AbstractEventLoop) -> None - added:
function timeout(delay: Optional[float]) -> Timeout - added:
function timeout_at(deadline: Optional[float]) -> Timeout - added:
method Timeout.reject() -> None - added:
method Timeout.shift(delay: float) -> None - added:
method Timeout.update(deadline: float) -> None - added:
property Timeout.deadline -> Optional[float] - added:
property Timeout.expired -> bool
- added:
async method ClientConnection.handshake(additional_headers: HeadersLike | None=…, user_agent_header: str | None=…) -> None - added:
async method connect.create_connection() -> ClientConnection - added:
class ClientConnection(Connection) - added:
class connect - added:
constructor ClientConnection(protocol: ClientProtocol, *, ping_interval: float | None=…, ping_timeout: float | None=…, close_timeout: float | None=…, max_queue: int | tuple[int, int | None]=…, write_limit: int | tuple[int, int | None]=…) -> None - added:
constructor connect(uri: str, *, origin: Origin | None=…, extensions: Sequence[ClientExtensionFactory] | None=…, subprotocols: Sequence[Subprotocol] | None=…, additional_headers: HeadersLike | None=…, user_agent_header: str | None=…, compression: str | None=…, process_exception: Callable[[Exception], Exception | None]=…, open_timeout: float | None=…, ping_interval: float | None=…, ping_timeout: f… - added:
function unix_connect(path: str | None=…, uri: str | None=…, **kwargs: Any) -> connect - added:
method ClientConnection.process_event(event: Event) -> None - added:
method connect.process_redirect(exc: Exception) -> Exception | str
- added:
async function anext(async_iterator) - added:
export TimeoutError - added:
export asyncio_timeout - added:
export asyncio_timeout_at - added:
function aiter(async_iterable) - added:
variable TimeoutError - added:
variable aiter - added:
variable anext
- added:
async method Connection.close(code: int=…, reason: str=…) -> None - added:
async method Connection.drain() -> None - added:
async method Connection.keepalive() -> None - added:
async method Connection.ping(data: Data | None=…) -> Awaitable[float] - added:
async method Connection.pong(data: Data=…) -> None - added:
async method Connection.recv(decode: bool | None=…) -> Data - added:
async method Connection.recv_streaming(decode: bool | None=…) -> AsyncIterator[Data] - added:
async method Connection.send(message: Data | Iterable[Data] | AsyncIterable[Data]) -> None - added:
async method Connection.send_context(*, expected_state: State=…) -> AsyncIterator[None] - added:
async method Connection.wait_closed() -> None - added:
class Connection(asyncio.Protocol) - added:
constructor Connection(protocol: Protocol, *, ping_interval: float | None=…, ping_timeout: float | None=…, close_timeout: float | None=…, max_queue: int | tuple[int, int | None]=…, write_limit: int | tuple[int, int | None]=…) -> None - added:
method Connection.abort_pings() -> None - added:
method Connection.acknowledge_pings(data: bytes) -> None - added:
method Connection.close_transport() -> None - added:
method Connection.connection_lost(exc: Exception | None) -> None - added:
method Connection.connection_made(transport: asyncio.BaseTransport) -> None - added:
method Connection.data_received(data: bytes) -> None - added:
method Connection.eof_received() -> None - added:
method Connection.pause_writing() -> None - added:
method Connection.process_event(event: Event) -> None - added:
method Connection.resume_writing() -> None - added:
method Connection.send_data() -> None - added:
method Connection.set_recv_exc(exc: BaseException | None) -> None - added:
method Connection.start_keepalive() -> None - added:
property Connection.local_address -> Any - added:
property Connection.remote_address -> Any - added:
property Connection.state -> State - added:
property Connection.subprotocol -> Subprotocol | None
- added:
async method Assembler.get(decode: bool | None=…) -> Data - added:
async method Assembler.get_iter(decode: bool | None=…) -> AsyncIterator[Data] - added:
class Assembler - added:
constructor Assembler(high: int=…, low: int | None=…, pause: Callable[[], Any]=…, resume: Callable[[], Any]=…) -> None - added:
method Assembler.close() -> None - added:
method Assembler.maybe_pause() -> None - added:
method Assembler.maybe_resume() -> None - added:
method Assembler.put(frame: Frame) -> None
- added:
async method Server.conn_handler(connection: ServerConnection) -> None - added:
async method Server.serve_forever() -> None - added:
async method Server.start_serving() -> None - added:
async method Server.wait_closed() -> None - added:
async method ServerConnection.handshake(process_request: Callable[[ServerConnection, Request], Awaitable[Response | None] | Response | None] | None=…, process_response: Callable[[ServerConnection, Request, Response], Awaitable[Response | None] | Response | None] | None=…, server_header: str | None=…) -> None - added:
class Server - added:
class ServerConnection(Connection) - added:
class serve - added:
constructor Server(handler: Callable[[ServerConnection], Awaitable[None]], *, process_request: Callable[[ServerConnection, Request], Awaitable[Response | None] | Response | None] | None=…, process_response: Callable[[ServerConnection, Request, Response], Awaitable[Response | None] | Response | None] | None=…, server_header: str | None=…, open_timeout: float | None=…, logger: LoggerLike | None=…)… - added:
constructor ServerConnection(protocol: ServerProtocol, server: Server, *, ping_interval: float | None=…, ping_timeout: float | None=…, close_timeout: float | None=…, max_queue: int | tuple[int, int | None]=…, write_limit: int | tuple[int, int | None]=…) -> None - added:
constructor serve(handler: Callable[[ServerConnection], Awaitable[None]], host: str | None=…, port: int | None=…, *, origins: Sequence[Origin | None] | None=…, extensions: Sequence[ServerExtensionFactory] | None=…, subprotocols: Sequence[Subprotocol] | None=…, select_subprotocol: Callable[[ServerConnection, Sequence[Subprotocol]], Subprotocol | None] | None=…, process_request: Callable[[ServerCon… - added:
export broadcast - added:
function basic_auth(realm: str=…, credentials: tuple[str, str] | Iterable[tuple[str, str]] | None=…, check_credentials: Callable[[str, str], Awaitable[bool] | bool] | None=…) -> Callable[[ServerConnection, Request], Awaitable[Response | None]] - added:
function unix_serve(handler: Callable[[ServerConnection], Awaitable[None]], path: str | None=…, **kwargs: Any) -> Awaitable[Server] - added:
method Server.close(close_connections: bool=…) -> None - added:
method Server.get_loop() -> asyncio.AbstractEventLoop - added:
method Server.is_serving() -> bool - added:
method Server.start_connection_handler(connection: ServerConnection) -> None - added:
method Server.wrap(server: asyncio.Server) -> None - added:
method ServerConnection.connection_made(transport: asyncio.BaseTransport) -> None - added:
method ServerConnection.process_event(event: Event) -> None - added:
method ServerConnection.respond(status: StatusLike, text: str) -> Response - added:
property Server.connections -> set[ServerConnection] - added:
property Server.sockets -> Iterable[socket.socket]
- changed:
constructor ClientProtocol(wsuri: WebSocketURI, *, origin: Optional[Origin]=…, extensions: Optional[Sequence[ClientExtensionFactory]]=…, subprotocols: Optional[Sequence[Subprotocol]]=…, state: State=…, max_size: Optional[int]=…, logger: Optional[LoggerLike]=…) → constructor ClientProtocol(wsuri: WebSocketURI, *, origin: Origin | None=…, extensions: Sequence[ClientExtensionFactory] | None=…, subprotocols: Sequence[Subprotocol] | None=…, state: State=…, max_size: int | None=…, logger: LoggerLike | None=…) -> None - changed:
method ClientProtocol.process_extensions(headers: Headers) -> List[Extension] → method ClientProtocol.process_extensions(headers: Headers) -> list[Extension] - changed:
method ClientProtocol.process_subprotocol(headers: Headers) -> Optional[Subprotocol] → method ClientProtocol.process_subprotocol(headers: Headers) -> Subprotocol | None - added:
function backoff(initial_delay: float=…, min_delay: float=…, max_delay: float=…, factor: float=…) -> Generator[float, None, None] - added:
variable BACKOFF_FACTOR - added:
variable BACKOFF_INITIAL_DELAY - added:
variable BACKOFF_MAX_DELAY - added:
variable BACKOFF_MIN_DELAY
- changed:
method Headers.get_all(key: str) -> List[str] → method Headers.get_all(key: str) -> list[str] - changed:
method Headers.raw_items() -> Iterator[Tuple[str, str]] → method Headers.raw_items() -> Iterator[tuple[str, str]]
- removed:
class AbortHandshake(InvalidHandshake) - removed:
class InvalidMessage(InvalidHandshake) - removed:
class InvalidStatusCode(InvalidHandshake) - removed:
class RedirectHandshake(InvalidHandshake) - removed:
constructor AbortHandshake(status: StatusLike, headers: datastructures.HeadersLike, body: bytes=…) -> None - removed:
constructor InvalidStatusCode(status_code: int, headers: datastructures.Headers) -> None - removed:
constructor RedirectHandshake(uri: str) -> None - changed:
constructor ConnectionClosed(rcvd: Optional[frames.Close], sent: Optional[frames.Close], rcvd_then_sent: Optional[bool]=…) -> None → constructor ConnectionClosed(rcvd: frames.Close | None, sent: frames.Close | None, rcvd_then_sent: bool | None=…) -> None - changed:
constructor InvalidHeader(name: str, value: Optional[str]=…) -> None → constructor InvalidHeader(name: str, value: str | None=…) -> None - changed:
constructor InvalidOrigin(origin: Optional[str]) -> None → constructor InvalidOrigin(origin: str | None) -> None - changed:
constructor InvalidParameterValue(name: str, value: Optional[str]) -> None → constructor InvalidParameterValue(name: str, value: str | None) -> None - added:
class ConcurrencyError(WebSocketException, RuntimeError) - added:
export AbortHandshake - added:
export InvalidMessage - added:
export InvalidStatusCode - added:
export RedirectHandshake
- changed:
method ClientExtensionFactory.get_request_params() -> List[ExtensionParameter] → method ClientExtensionFactory.get_request_params() -> list[ExtensionParameter] - changed:
method Extension.decode(frame: frames.Frame, *, max_size: Optional[int]=…) -> frames.Frame → method Extension.decode(frame: Frame, *, max_size: int | None=…) -> Frame - changed:
method Extension.encode(frame: frames.Frame) -> frames.Frame → method Extension.encode(frame: Frame) -> Frame - changed:
method ServerExtensionFactory.process_request_params(params: Sequence[ExtensionParameter], accepted_extensions: Sequence[Extension]) -> Tuple[List[ExtensionParameter], Extension] → method ServerExtensionFactory.process_request_params(params: Sequence[ExtensionParameter], accepted_extensions: Sequence[Extension]) -> tuple[list[ExtensionParameter], Extension]
- changed:
constructor ClientPerMessageDeflateFactory(server_no_context_takeover: bool=…, client_no_context_takeover: bool=…, server_max_window_bits: Optional[int]=…, client_max_window_bits: Optional[Union[int, bool]]=…, compress_settings: Optional[Dict[str, Any]]=…) -> None → constructor ClientPerMessageDeflateFactory(server_no_context_takeover: bool=…, client_no_context_takeover: bool=…, server_max_window_bits: int | None=…, client_max_window_bits: int | bool | None=…, compress_settings: dict[str, Any] | None=…) -> None - changed:
constructor PerMessageDeflate(remote_no_context_takeover: bool, local_no_context_takeover: bool, remote_max_window_bits: int, local_max_window_bits: int, compress_settings: Optional[Dict[Any, Any]]=…) -> None → constructor PerMessageDeflate(remote_no_context_takeover: bool, local_no_context_takeover: bool, remote_max_window_bits: int, local_max_window_bits: int, compress_settings: dict[Any, Any] | None=…) -> None - changed:
constructor ServerPerMessageDeflateFactory(server_no_context_takeover: bool=…, client_no_context_takeover: bool=…, server_max_window_bits: Optional[int]=…, client_max_window_bits: Optional[int]=…, compress_settings: Optional[Dict[str, Any]]=…, require_client_max_window_bits: bool=…) -> None → constructor ServerPerMessageDeflateFactory(server_no_context_takeover: bool=…, client_no_context_takeover: bool=…, server_max_window_bits: int | None=…, client_max_window_bits: int | None=…, compress_settings: dict[str, Any] | None=…, require_client_max_window_bits: bool=…) -> None - changed:
function enable_client_permessage_deflate(extensions: Optional[Sequence[ClientExtensionFactory]]) -> Sequence[ClientExtensionFactory] → function enable_client_permessage_deflate(extensions: Sequence[ClientExtensionFactory] | None) -> Sequence[ClientExtensionFactory] - changed:
function enable_server_permessage_deflate(extensions: Optional[Sequence[ServerExtensionFactory]]) -> Sequence[ServerExtensionFactory] → function enable_server_permessage_deflate(extensions: Sequence[ServerExtensionFactory] | None) -> Sequence[ServerExtensionFactory] - changed:
method ClientPerMessageDeflateFactory.get_request_params() -> List[ExtensionParameter] → method ClientPerMessageDeflateFactory.get_request_params() -> list[ExtensionParameter] - changed:
method PerMessageDeflate.decode(frame: frames.Frame, *, max_size: Optional[int]=…) -> frames.Frame → method PerMessageDeflate.decode(frame: frames.Frame, *, max_size: int | None=…) -> frames.Frame - changed:
method ServerPerMessageDeflateFactory.process_request_params(params: Sequence[ExtensionParameter], accepted_extensions: Sequence[Extension]) -> Tuple[List[ExtensionParameter], PerMessageDeflate] → method ServerPerMessageDeflateFactory.process_request_params(params: Sequence[ExtensionParameter], accepted_extensions: Sequence[Extension]) -> tuple[list[ExtensionParameter], PerMessageDeflate]
- removed:
function prepare_ctrl(data: Data) -> bytes - removed:
function prepare_data(data: Data) -> Tuple[int, bytes] - changed:
method Frame.serialize(*, mask: bool, extensions: Optional[Sequence[extensions.Extension]]=…) -> bytes → method Frame.serialize(*, mask: bool, extensions: Sequence[extensions.Extension] | None=…) -> bytes - changed:
static method Frame.parse(read_exact: Callable[[int], Generator[None, None, bytes]], *, mask: bool, max_size: Optional[int]=…, extensions: Optional[Sequence[extensions.Extension]]=…) -> Generator[None, None, Frame] → static method Frame.parse(read_exact: Callable[[int], Generator[None, None, bytes]], *, mask: bool, max_size: int | None=…, extensions: Sequence[extensions.Extension] | None=…) -> Generator[None, None, Frame] - added:
field Frame.MAX_LOG_SIZE
- changed:
function parse_authorization_basic(header: str) -> Tuple[str, str] → function parse_authorization_basic(header: str) -> tuple[str, str] - changed:
function parse_connection(header: str) -> List[ConnectionOption] → function parse_connection(header: str) -> list[ConnectionOption] - changed:
function parse_extension(header: str) -> List[ExtensionHeader] → function parse_extension(header: str) -> list[ExtensionHeader] - changed:
function parse_subprotocol(header: str) -> List[Subprotocol] → function parse_subprotocol(header: str) -> list[Subprotocol] - changed:
function parse_upgrade(header: str) -> List[UpgradeProtocol] → function parse_upgrade(header: str) -> list[UpgradeProtocol]
- removed:
variable USER_AGENT
- removed:
function d(value: bytes) -> str - removed:
function parse_headers(read_line: Callable[[int], Generator[None, None, bytes]]) -> Generator[None, None, datastructures.Headers] - removed:
function parse_line(read_line: Callable[[int], Generator[None, None, bytes]]) -> Generator[None, None, bytes] - removed:
property Request.exception -> Optional[Exception] - removed:
property Response.exception -> Optional[Exception] - removed:
variable MAX_BODY - removed:
variable MAX_HEADERS - removed:
variable MAX_LINE - changed:
field Request.headers: datastructures.Headers → field Request.headers: Headers - changed:
field Response.body: Optional[bytes] → field Response.body: bytes | None - changed:
field Response.headers: datastructures.Headers → field Response.headers: Headers - added:
property Request.exception -> Exception | None - added:
property Response.exception -> Exception | None - added:
variable SERVER - added:
variable USER_AGENT
- changed:
function lazy_import(namespace: Dict[str, Any], aliases: Optional[Dict[str, str]]=…, deprecated_aliases: Optional[Dict[str, str]]=…) -> None → function lazy_import(namespace: dict[str, Any], aliases: dict[str, str] | None=…, deprecated_aliases: dict[str, str] | None=…) -> None
- removed:
class Timeout - removed:
constructor Timeout(deadline: Optional[float], loop: asyncio.AbstractEventLoop) -> None - removed:
function timeout(delay: Optional[float]) -> Timeout - removed:
function timeout_at(deadline: Optional[float]) -> Timeout - removed:
method Timeout.reject() -> None - removed:
method Timeout.shift(delay: float) -> None - removed:
method Timeout.update(deadline: float) -> None - removed:
property Timeout.deadline -> Optional[float] - removed:
property Timeout.expired -> bool
- changed:
async method BasicAuthWebSocketServerProtocol.process_request(path: str, request_headers: Headers) -> Optional[HTTPResponse] → async method BasicAuthWebSocketServerProtocol.process_request(path: str, request_headers: Headers) -> HTTPResponse | None - changed:
constructor BasicAuthWebSocketServerProtocol(*args: Any, realm: Optional[str]=…, check_credentials: Optional[Callable[[str, str], Awaitable[bool]]]=…, **kwargs: Any) -> None → constructor BasicAuthWebSocketServerProtocol(*args: Any, realm: str | None=…, check_credentials: Callable[[str, str], Awaitable[bool]] | None=…, **kwargs: Any) -> None - changed:
field BasicAuthWebSocketServerProtocol.username: Optional[str] → field BasicAuthWebSocketServerProtocol.username: str | None - changed:
function basic_auth_protocol_factory(realm: Optional[str]=…, credentials: Optional[Union[Credentials, Iterable[Credentials]]]=…, check_credentials: Optional[Callable[[str, str], Awaitable[bool]]]=…, create_protocol: Optional[Callable[..., BasicAuthWebSocketServerProtocol]]=…) -> Callable[..., BasicAuthWebSocketServerProtocol] → function basic_auth_protocol_factory(realm: str | None=…, credentials: Credentials | Iterable[Credentials] | None=…, check_credentials: Callable[[str, str], Awaitable[bool]] | None=…, create_protocol: Callable[..., BasicAuthWebSocketServerProtocol] | None=…) -> Callable[..., BasicAuthWebSocketServerProtocol]
- changed:
async method WebSocketClientProtocol.handshake(wsuri: WebSocketURI, origin: Optional[Origin]=…, available_extensions: Optional[Sequence[ClientExtensionFactory]]=…, available_subprotocols: Optional[Sequence[Subprotocol]]=…, extra_headers: Optional[HeadersLike]=…) -> None → async method WebSocketClientProtocol.handshake(wsuri: WebSocketURI, origin: Origin | None=…, available_extensions: Sequence[ClientExtensionFactory] | None=…, available_subprotocols: Sequence[Subprotocol] | None=…, extra_headers: HeadersLike | None=…) -> None - changed:
async method WebSocketClientProtocol.read_http_response() -> Tuple[int, Headers] → async method WebSocketClientProtocol.read_http_response() -> tuple[int, Headers] - changed:
constructor WebSocketClientProtocol(*, logger: Optional[LoggerLike]=…, origin: Optional[Origin]=…, extensions: Optional[Sequence[ClientExtensionFactory]]=…, subprotocols: Optional[Sequence[Subprotocol]]=…, extra_headers: Optional[HeadersLike]=…, user_agent_header: Optional[str]=…, **kwargs: Any) -> None → constructor WebSocketClientProtocol(*, logger: LoggerLike | None=…, origin: Origin | None=…, extensions: Sequence[ClientExtensionFactory] | None=…, subprotocols: Sequence[Subprotocol] | None=…, extra_headers: HeadersLike | None=…, user_agent_header: str | None=…, **kwargs: Any) -> None - changed:
function unix_connect(path: Optional[str]=…, uri: str=…, **kwargs: Any) -> Connect → function unix_connect(path: str | None=…, uri: str=…, **kwargs: Any) -> Connect - changed:
static method WebSocketClientProtocol.process_extensions(headers: Headers, available_extensions: Optional[Sequence[ClientExtensionFactory]]) -> List[Extension] → static method WebSocketClientProtocol.process_extensions(headers: Headers, available_extensions: Sequence[ClientExtensionFactory] | None) -> list[Extension] - changed:
static method WebSocketClientProtocol.process_subprotocol(headers: Headers, available_subprotocols: Optional[Sequence[Subprotocol]]) -> Optional[Subprotocol] → static method WebSocketClientProtocol.process_subprotocol(headers: Headers, available_subprotocols: Sequence[Subprotocol] | None) -> Subprotocol | None
- removed:
export asyncio_timeout
- added:
class AbortHandshake(InvalidHandshake) - added:
class InvalidMessage(InvalidHandshake) - added:
class InvalidStatusCode(InvalidHandshake) - added:
class RedirectHandshake(InvalidHandshake) - added:
constructor AbortHandshake(status: StatusLike, headers: datastructures.HeadersLike, body: bytes=…) -> None - added:
constructor InvalidStatusCode(status_code: int, headers: datastructures.Headers) -> None - added:
constructor RedirectHandshake(uri: str) -> None
- changed:
async static method Frame.read(reader: Callable[[int], Awaitable[bytes]], *, mask: bool, max_size: Optional[int]=…, extensions: Optional[Sequence[extensions.Extension]]=…) -> Frame → async static method Frame.read(reader: Callable[[int], Awaitable[bytes]], *, mask: bool, max_size: int | None=…, extensions: Sequence[extensions.Extension] | None=…) -> Frame - changed:
function parse_close(data: bytes) -> Tuple[int, str] → function parse_close(data: bytes) -> tuple[int, str] - changed:
method Frame.write(write: Callable[[bytes], Any], *, mask: bool, extensions: Optional[Sequence[extensions.Extension]]=…) -> None → method Frame.write(write: Callable[[bytes], Any], *, mask: bool, extensions: Sequence[extensions.Extension] | None=…) -> None - added:
function prepare_ctrl(data: Data) -> bytes - added:
function prepare_data(data: Data) -> tuple[int, bytes] - added:
variable encode_data
- changed:
async function read_request(stream: asyncio.StreamReader) -> Tuple[str, Headers] → async function read_request(stream: asyncio.StreamReader) -> tuple[str, Headers] - changed:
async function read_response(stream: asyncio.StreamReader) -> Tuple[int, str, Headers] → async function read_response(stream: asyncio.StreamReader) -> tuple[int, str, Headers]
- removed:
function broadcast(websockets: Iterable[WebSocketCommonProtocol], message: Data, raise_exceptions: bool=…) -> None - removed:
property WebSocketCommonProtocol.close_code -> Optional[int] - removed:
property WebSocketCommonProtocol.close_reason -> Optional[str] - removed:
property WebSocketCommonProtocol.host -> Optional[str] - removed:
property WebSocketCommonProtocol.port -> Optional[int] - removed:
property WebSocketCommonProtocol.secure -> Optional[bool] - changed:
async method WebSocketCommonProtocol.ping(data: Optional[Data]=…) -> Awaitable[None] → async method WebSocketCommonProtocol.ping(data: Data | None=…) -> Awaitable[float] - changed:
async method WebSocketCommonProtocol.read_data_frame(max_size: Optional[int]) -> Optional[Frame] → async method WebSocketCommonProtocol.read_data_frame(max_size: int | None) -> Frame | None - changed:
async method WebSocketCommonProtocol.read_frame(max_size: Optional[int]) -> Frame → async method WebSocketCommonProtocol.read_frame(max_size: int | None) -> Frame - changed:
async method WebSocketCommonProtocol.read_message() -> Optional[Data] → async method WebSocketCommonProtocol.read_message() -> Data | None - changed:
async method WebSocketCommonProtocol.send(message: Union[Data, Iterable[Data], AsyncIterable[Data]]) -> None → async method WebSocketCommonProtocol.send(message: Data | Iterable[Data] | AsyncIterable[Data]) -> None - changed:
async method WebSocketCommonProtocol.write_close_frame(close: Close, data: Optional[bytes]=…) -> None → async method WebSocketCommonProtocol.write_close_frame(close: Close, data: bytes | None=…) -> None - changed:
constructor WebSocketCommonProtocol(*, logger: Optional[LoggerLike]=…, ping_interval: Optional[float]=…, ping_timeout: Optional[float]=…, close_timeout: Optional[float]=…, max_size: Optional[int]=…, max_queue: Optional[int]=…, read_limit: int=…, write_limit: int=…, host: Optional[str]=…, port: Optional[int]=…, secure: Optional[bool]=…, legacy_recv: bool=…, loop: Optional[asyncio.AbstractEventLoop… → constructor WebSocketCommonProtocol(*, logger: LoggerLike | None=…, ping_interval: float | None=…, ping_timeout: float | None=…, close_timeout: float | None=…, max_size: int | None=…, max_queue: int | None=…, read_limit: int=…, write_limit: int=…, host: str | None=…, port: int | None=…, secure: bool | None=…, legacy_recv: bool=…, loop: asyncio.AbstractEventLoop | None=…, timeout: float | None=…)… - changed:
method WebSocketCommonProtocol.connection_lost(exc: Optional[Exception]) -> None → method WebSocketCommonProtocol.connection_lost(exc: Exception | None) -> None - added:
property WebSocketCommonProtocol.close_code -> int | None - added:
property WebSocketCommonProtocol.close_reason -> str | None - added:
property WebSocketCommonProtocol.host -> str | None - added:
property WebSocketCommonProtocol.port -> int | None - added:
property WebSocketCommonProtocol.secure -> bool | None
- changed:
async method WebSocketServerProtocol.handshake(origins: Optional[Sequence[Optional[Origin]]]=…, available_extensions: Optional[Sequence[ServerExtensionFactory]]=…, available_subprotocols: Optional[Sequence[Subprotocol]]=…, extra_headers: Optional[HeadersLikeOrCallable]=…) -> str → async method WebSocketServerProtocol.handshake(origins: Sequence[Origin | None] | None=…, available_extensions: Sequence[ServerExtensionFactory] | None=…, available_subprotocols: Sequence[Subprotocol] | None=…, extra_headers: HeadersLikeOrCallable | None=…) -> str - changed:
async method WebSocketServerProtocol.process_request(path: str, request_headers: Headers) -> Optional[HTTPResponse] → async method WebSocketServerProtocol.process_request(path: str, request_headers: Headers) -> HTTPResponse | None - changed:
async method WebSocketServerProtocol.read_http_request() -> Tuple[str, Headers] → async method WebSocketServerProtocol.read_http_request() -> tuple[str, Headers] - changed:
constructor WebSocketServer(logger: Optional[LoggerLike]=…) → constructor WebSocketServer(logger: LoggerLike | None=…) -> None - changed:
constructor WebSocketServerProtocol(ws_handler: Union[Callable[[WebSocketServerProtocol], Awaitable[Any]], Callable[[WebSocketServerProtocol, str], Awaitable[Any]]], ws_server: WebSocketServer, *, logger: Optional[LoggerLike]=…, origins: Optional[Sequence[Optional[Origin]]]=…, extensions: Optional[Sequence[ServerExtensionFactory]]=…, subprotocols: Optional[Sequence[Subprotocol]]=…, extra_headers:… → constructor WebSocketServerProtocol(ws_handler: Callable[[WebSocketServerProtocol], Awaitable[Any]] | Callable[[WebSocketServerProtocol, str], Awaitable[Any]], ws_server: WebSocketServer, *, logger: LoggerLike | None=…, origins: Sequence[Origin | None] | None=…, extensions: Sequence[ServerExtensionFactory] | None=…, subprotocols: Sequence[Subprotocol] | None=…, extra_headers: HeadersLikeOrCallabl… - changed:
function unix_serve(ws_handler: Union[Callable[[WebSocketServerProtocol], Awaitable[Any]], Callable[[WebSocketServerProtocol, str], Awaitable[Any]]], path: Optional[str]=…, **kwargs: Any) -> Serve → function unix_serve(ws_handler: Callable[[WebSocketServerProtocol], Awaitable[Any]] | Callable[[WebSocketServerProtocol, str], Awaitable[Any]], path: str | None=…, **kwargs: Any) -> Serve - changed:
method WebSocketServerProtocol.process_subprotocol(headers: Headers, available_subprotocols: Optional[Sequence[Subprotocol]]) -> Optional[Subprotocol] → method WebSocketServerProtocol.process_subprotocol(headers: Headers, available_subprotocols: Sequence[Subprotocol] | None) -> Subprotocol | None - changed:
method WebSocketServerProtocol.select_subprotocol(client_subprotocols: Sequence[Subprotocol], server_subprotocols: Sequence[Subprotocol]) -> Optional[Subprotocol] → method WebSocketServerProtocol.select_subprotocol(client_subprotocols: Sequence[Subprotocol], server_subprotocols: Sequence[Subprotocol]) -> Subprotocol | None - changed:
method WebSocketServerProtocol.write_http_response(status: http.HTTPStatus, headers: Headers, body: Optional[bytes]=…) -> None → method WebSocketServerProtocol.write_http_response(status: http.HTTPStatus, headers: Headers, body: bytes | None=…) -> None - changed:
static method WebSocketServerProtocol.process_extensions(headers: Headers, available_extensions: Optional[Sequence[ServerExtensionFactory]]) -> Tuple[Optional[str], List[Extension]] → static method WebSocketServerProtocol.process_extensions(headers: Headers, available_extensions: Sequence[ServerExtensionFactory] | None) -> tuple[str | None, list[Extension]] - changed:
static method WebSocketServerProtocol.process_origin(headers: Headers, origins: Optional[Sequence[Optional[Origin]]]=…) -> Optional[Origin] → static method WebSocketServerProtocol.process_origin(headers: Headers, origins: Sequence[Origin | None] | None=…) -> Origin | None - added:
export broadcast
- removed:
property Protocol.close_code -> Optional[int] - removed:
property Protocol.close_reason -> Optional[str] - changed:
constructor Protocol(side: Side, *, state: State=…, max_size: Optional[int]=…, logger: Optional[LoggerLike]=…) -> None → constructor Protocol(side: Side, *, state: State=…, max_size: int | None=…, logger: LoggerLike | None=…) -> None - changed:
method Protocol.data_to_send() -> List[bytes] → method Protocol.data_to_send() -> list[bytes] - changed:
method Protocol.events_received() -> List[Event] → method Protocol.events_received() -> list[Event] - changed:
method Protocol.send_close(code: Optional[int]=…, reason: str=…) -> None → method Protocol.send_close(code: int | None=…, reason: str=…) -> None - added:
property Protocol.close_code -> int | None - added:
property Protocol.close_reason -> str | None
- changed:
constructor ServerProtocol(*, origins: Optional[Sequence[Optional[Origin]]]=…, extensions: Optional[Sequence[ServerExtensionFactory]]=…, subprotocols: Optional[Sequence[Subprotocol]]=…, select_subprotocol: Optional[Callable[[ServerProtocol, Sequence[Subprotocol]], Optional[Subprotocol]]]=…, state: State=…, max_size: Optional[int]=…, logger: Optional[LoggerLike]=…) → constructor ServerProtocol(*, origins: Sequence[Origin | None] | None=…, extensions: Sequence[ServerExtensionFactory] | None=…, subprotocols: Sequence[Subprotocol] | None=…, select_subprotocol: Callable[[ServerProtocol, Sequence[Subprotocol]], Subprotocol | None] | None=…, state: State=…, max_size: int | None=…, logger: LoggerLike | None=…) -> None - changed:
method ServerProtocol.process_extensions(headers: Headers) -> Tuple[Optional[str], List[Extension]] → method ServerProtocol.process_extensions(headers: Headers) -> tuple[str | None, list[Extension]] - changed:
method ServerProtocol.process_origin(headers: Headers) -> Optional[Origin] → method ServerProtocol.process_origin(headers: Headers) -> Origin | None - changed:
method ServerProtocol.process_request(request: Request) -> Tuple[str, Optional[str], Optional[str]] → method ServerProtocol.process_request(request: Request) -> tuple[str, str | None, str | None] - changed:
method ServerProtocol.process_subprotocol(headers: Headers) -> Optional[Subprotocol] → method ServerProtocol.process_subprotocol(headers: Headers) -> Subprotocol | None - changed:
method ServerProtocol.select_subprotocol(subprotocols: Sequence[Subprotocol]) -> Optional[Subprotocol] → method ServerProtocol.select_subprotocol(subprotocols: Sequence[Subprotocol]) -> Subprotocol | None
- added:
function apply_mask(data: bytes, mask: bytes) -> bytes
- changed:
constructor ClientConnection(socket: socket.socket, protocol: ClientProtocol, *, close_timeout: Optional[float]=…) -> None → constructor ClientConnection(socket: socket.socket, protocol: ClientProtocol, *, close_timeout: float | None=…) -> None - changed:
function connect(uri: str, *, sock: Optional[socket.socket]=…, ssl_context: Optional[ssl.SSLContext]=…, server_hostname: Optional[str]=…, unix: bool=…, path: Optional[str]=…, origin: Optional[Origin]=…, extensions: Optional[Sequence[ClientExtensionFactory]]=…, subprotocols: Optional[Sequence[Subprotocol]]=…, additional_headers: Optional[HeadersLike]=…, user_agent_header: Optional[str]=…, compress… → function connect(uri: str, *, sock: socket.socket | None=…, ssl: ssl_module.SSLContext | None=…, server_hostname: str | None=…, origin: Origin | None=…, extensions: Sequence[ClientExtensionFactory] | None=…, subprotocols: Sequence[Subprotocol] | None=…, additional_headers: HeadersLike | None=…, user_agent_header: str | None=…, compression: str | None=…, open_timeout: float | None=…, close_timeout… - changed:
function unix_connect(path: Optional[str]=…, uri: Optional[str]=…, **kwargs: Any) -> ClientConnection → function unix_connect(path: str | None=…, uri: str | None=…, **kwargs: Any) -> ClientConnection - changed:
method ClientConnection.handshake(additional_headers: Optional[HeadersLike]=…, user_agent_header: Optional[str]=…, timeout: Optional[float]=…) -> None → method ClientConnection.handshake(additional_headers: HeadersLike | None=…, user_agent_header: str | None=…, timeout: float | None=…) -> None
- removed:
method Connection.set_recv_events_exc(exc: Optional[BaseException]) -> None - removed:
property Connection.subprotocol -> Optional[Subprotocol] - changed:
constructor Connection(socket: socket.socket, protocol: Protocol, *, close_timeout: Optional[float]=…) -> None → constructor Connection(socket: socket.socket, protocol: Protocol, *, close_timeout: float | None=…) -> None - changed:
method Connection.ping(data: Optional[Data]=…) -> threading.Event → method Connection.ping(data: Data | None=…) -> threading.Event - changed:
method Connection.recv(timeout: Optional[float]=…) -> Data → method Connection.recv(timeout: float | None=…) -> Data - changed:
method Connection.send(message: Union[Data, Iterable[Data]]) -> None → method Connection.send(message: Data | Iterable[Data]) -> None - added:
method Connection.set_recv_exc(exc: BaseException | None) -> None - added:
property Connection.subprotocol -> Subprotocol | None
- changed:
method Assembler.get(timeout: Optional[float]=…) -> Data → method Assembler.get(timeout: float | None=…) -> Data
- removed:
class WebSocketServer - removed:
constructor WebSocketServer(socket: socket.socket, handler: Callable[[socket.socket, Any], None], logger: Optional[LoggerLike]=…) - removed:
method WebSocketServer.fileno() -> int - removed:
method WebSocketServer.serve_forever() -> None - removed:
method WebSocketServer.shutdown() -> None - changed:
constructor ServerConnection(socket: socket.socket, protocol: ServerProtocol, *, close_timeout: Optional[float]=…) -> None → constructor ServerConnection(socket: socket.socket, protocol: ServerProtocol, *, close_timeout: float | None=…) -> None - changed:
function serve(handler: Callable[[ServerConnection], None], host: Optional[str]=…, port: Optional[int]=…, *, sock: Optional[socket.socket]=…, ssl_context: Optional[ssl.SSLContext]=…, unix: bool=…, path: Optional[str]=…, origins: Optional[Sequence[Optional[Origin]]]=…, extensions: Optional[Sequence[ServerExtensionFactory]]=…, subprotocols: Optional[Sequence[Subprotocol]]=…, select_subprotocol: Opt… → function serve(handler: Callable[[ServerConnection], None], host: str | None=…, port: int | None=…, *, sock: socket.socket | None=…, ssl: ssl_module.SSLContext | None=…, origins: Sequence[Origin | None] | None=…, extensions: Sequence[ServerExtensionFactory] | None=…, subprotocols: Sequence[Subprotocol] | None=…, select_subprotocol: Callable[[ServerConnection, Sequence[Subprotocol]], Subprotocol |… - changed:
function unix_serve(handler: Callable[[ServerConnection], Any], path: Optional[str]=…, **kwargs: Any) -> WebSocketServer → function unix_serve(handler: Callable[[ServerConnection], None], path: str | None=…, **kwargs: Any) -> Server - changed:
method ServerConnection.handshake(process_request: Optional[Callable[[ServerConnection, Request], Optional[Response]]]=…, process_response: Optional[Callable[[ServerConnection, Request, Response], Optional[Response]]]=…, server_header: Optional[str]=…, timeout: Optional[float]=…) -> None → method ServerConnection.handshake(process_request: Callable[[ServerConnection, Request], Response | None] | None=…, process_response: Callable[[ServerConnection, Request, Response], Response | None] | None=…, server_header: str | None=…, timeout: float | None=…) -> None - added:
class Server - added:
constructor Server(socket: socket.socket, handler: Callable[[socket.socket, Any], None], logger: LoggerLike | None=…) -> None - added:
function basic_auth(realm: str=…, credentials: tuple[str, str] | Iterable[tuple[str, str]] | None=…, check_credentials: Callable[[str, str], bool] | None=…) -> Callable[[ServerConnection, Request], Response | None] - added:
method Server.fileno() -> int - added:
method Server.serve_forever() -> None - added:
method Server.shutdown() -> None - added:
method ServerConnection.respond(status: StatusLike, text: str) -> Response
- changed:
constructor Deadline(timeout: Optional[float]) -> None → constructor Deadline(timeout: float | None) -> None - changed:
method Deadline.timeout(*, raise_if_elapsed: bool=…) -> Optional[float] → method Deadline.timeout(*, raise_if_elapsed: bool=…) -> float | None
- removed:
property WebSocketURI.user_info -> Optional[Tuple[str, str]] - changed:
field WebSocketURI.password: Optional[str] → field WebSocketURI.password: str | None - changed:
field WebSocketURI.username: Optional[str] → field WebSocketURI.username: str | None - added:
property WebSocketURI.user_info -> tuple[str, str] | None