Upgrading websockets 14 to 15
Review needed14.2 → 15.0.1Changed1
Review neededUpgrade verdict
1 behavior change.
In plain terms
- See https://websockets.readthedocs.io/en/stable/project/changelog.html for details.
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 InvalidProxy - added:
export InvalidProxyMessage - added:
export InvalidProxyStatus - added:
export ProxyError - added:
export Router - added:
export route - added:
export unix_route
- changed:
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… → constructor connect(uri: str, *, origin: Origin | None=…, extensions: Sequence[ClientExtensionFactory] | None=…, subprotocols: Sequence[Subprotocol] | None=…, compression: str | None=…, additional_headers: HeadersLike | None=…, user_agent_header: str | None=…, proxy: str | Literal[True] | None=…, process_exception: Callable[[Exception], Exception | None]=…, open_timeout: float | None=…, ping_inte…
- changed:
async method Connection.recv(decode: bool | None=…) -> Data → async method Connection.recv(decode: Literal[True]) -> str | (decode: Literal[False]) -> bytes | (decode: bool | None=…) -> Data - changed:
async method Connection.recv_streaming(decode: bool | None=…) -> AsyncIterator[Data] → method Connection.recv_streaming(decode: Literal[True]) -> AsyncIterator[str] | (decode: Literal[False]) -> AsyncIterator[bytes] | (decode: bool | None=…) -> AsyncIterator[Data]
- changed:
async method Assembler.get(decode: bool | None=…) -> Data → async method Assembler.get(decode: Literal[True]) -> str | (decode: Literal[False]) -> bytes | (decode: bool | None=…) -> Data - changed:
async method Assembler.get_iter(decode: bool | None=…) -> AsyncIterator[Data] → method Assembler.get_iter(decode: Literal[True]) -> AsyncIterator[str] | (decode: Literal[False]) -> AsyncIterator[bytes] | (decode: bool | None=…) -> AsyncIterator[Data]
- added:
async method Router.handler(connection: ServerConnection) -> None - added:
class Router - added:
constructor Router(url_map: Map, server_name: str | None=…, url_scheme: str=…) -> None - added:
function route(url_map: Map, *args: Any, server_name: str | None=…, ssl: ssl_module.SSLContext | Literal[True] | None=…, create_router: type[Router] | None=…, **kwargs: Any) -> Awaitable[Server] - added:
function unix_route(url_map: Map, path: str | None=…, **kwargs: Any) -> Awaitable[Server] - added:
method Router.get_server_name(connection: ServerConnection, request: Request) -> str - added:
method Router.not_found(connection: ServerConnection) -> Response - added:
method Router.redirect(connection: ServerConnection, url: str) -> Response - added:
method Router.route_request(connection: ServerConnection, request: Request) -> Response | None
- changed:
constructor serve(handler: Callable[[ServerConnection], Awaitable[None]], host: str | None=…, port: int | None=…, *, origins: Sequence[Origin | re.Pattern[str] | None] | None=…, extensions: Sequence[ServerExtensionFactory] | None=…, subprotocols: Sequence[Subprotocol] | None=…, select_subprotocol: Callable[[ServerConnection, Sequence[Subprotocol]], Subprotocol | None] | None=…, process_request: C… → constructor serve(handler: Callable[[ServerConnection], Awaitable[None]], host: str | None=…, port: int | None=…, *, origins: Sequence[Origin | re.Pattern[str] | None] | None=…, extensions: Sequence[ServerExtensionFactory] | None=…, subprotocols: Sequence[Subprotocol] | None=…, select_subprotocol: Callable[[ServerConnection, Sequence[Subprotocol]], Subprotocol | None] | None=…, compression: str |…
- added:
function main(argv: list[str] | None=…) -> None
- changed:
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 → constructor ClientProtocol(uri: WebSocketURI, *, origin: Origin | None=…, extensions: Sequence[ClientExtensionFactory] | None=…, subprotocols: Sequence[Subprotocol] | None=…, state: State=…, max_size: int | None=…, logger: LoggerLike | None=…) -> None
- added:
class InvalidProxy(WebSocketException) - added:
class InvalidProxyMessage(ProxyError) - added:
class InvalidProxyStatus(ProxyError) - added:
class ProxyError(InvalidHandshake) - added:
constructor InvalidProxy(proxy: str, msg: str) -> None - added:
constructor InvalidProxyStatus(response: http11.Response) -> None
- changed:
method ClientExtensionFactory.get_request_params() -> list[ExtensionParameter] → method ClientExtensionFactory.get_request_params() -> Sequence[ExtensionParameter]
- changed:
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 → constructor ClientPerMessageDeflateFactory(server_no_context_takeover: bool=…, client_no_context_takeover: bool=…, server_max_window_bits: int | None=…, client_max_window_bits: int | Literal[True] | None=…, compress_settings: dict[str, Any] | None=…) -> None - changed:
method ClientPerMessageDeflateFactory.get_request_params() -> list[ExtensionParameter] → method ClientPerMessageDeflateFactory.get_request_params() -> Sequence[ExtensionParameter]
- changed:
function build_host(host: str, port: int, secure: bool) -> str → function build_host(host: str, port: int, secure: bool, *, always_include_port: bool=…) -> str
- changed:
static method Response.parse(read_line: Callable[[int], Generator[None, None, bytes]], read_exact: Callable[[int], Generator[None, None, bytes]], read_to_eof: Callable[[int], Generator[None, None, bytes]]) -> Generator[None, None, Response] → static method Response.parse(read_line: Callable[[int], Generator[None, None, bytes]], read_exact: Callable[[int], Generator[None, None, bytes]], read_to_eof: Callable[[int], Generator[None, None, bytes]], include_body: bool=…) -> Generator[None, None, Response]
- changed:
constructor ClientConnection(socket: socket.socket, protocol: ClientProtocol, *, close_timeout: float | None=…, max_queue: int | None | tuple[int | None, int | None]=…) -> None → constructor ClientConnection(socket: socket.socket, protocol: ClientProtocol, *, ping_interval: float | None=…, ping_timeout: float | None=…, close_timeout: float | None=…, max_queue: int | None | tuple[int | None, int | None]=…) -> None - changed:
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… → 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=…, compression: str | None=…, additional_headers: HeadersLike | None=…, user_agent_header: str | None=…, proxy: str | Literal[True] | None=…, proxy_…
- changed:
constructor Connection(socket: socket.socket, protocol: Protocol, *, close_timeout: float | None=…, max_queue: int | None | tuple[int | None, int | None]=…) -> None → constructor Connection(socket: socket.socket, protocol: Protocol, *, ping_interval: float | None=…, ping_timeout: float | None=…, close_timeout: float | None=…, max_queue: int | None | tuple[int | None, int | None]=…) -> None - changed:
method Connection.ping(data: Data | None=…) -> threading.Event → method Connection.ping(data: Data | None=…, ack_on_close: bool=…) -> threading.Event - changed:
method Connection.recv(timeout: float | None=…, decode: bool | None=…) -> Data → method Connection.recv(timeout: float | None, decode: Literal[True]) -> str | (timeout: float | None, decode: Literal[False]) -> bytes | (timeout: float | None=…, *, decode: Literal[True]) -> str | (timeout: float | None=…, *, decode: Literal[False]) -> bytes | (timeout: float | None=…, decode: bool | None=…) -> Data - changed:
method Connection.recv_streaming(decode: bool | None=…) -> Iterator[Data] → method Connection.recv_streaming(decode: Literal[True]) -> Iterator[str] | (decode: Literal[False]) -> Iterator[bytes] | (decode: bool | None=…) -> Iterator[Data] - added:
method Connection.acknowledge_pending_pings() -> None - added:
method Connection.keepalive() -> None - added:
method Connection.start_keepalive() -> None
- changed:
method Assembler.get(timeout: float | None=…, decode: bool | None=…) -> Data → method Assembler.get(timeout: float | None, decode: Literal[True]) -> str | (timeout: float | None, decode: Literal[False]) -> bytes | (timeout: float | None=…, *, decode: Literal[True]) -> str | (timeout: float | None=…, *, decode: Literal[False]) -> bytes | (timeout: float | None=…, decode: bool | None=…) -> Data - changed:
method Assembler.get_iter(decode: bool | None=…) -> Iterator[Data] → method Assembler.get_iter(decode: Literal[True]) -> Iterator[str] | (decode: Literal[False]) -> Iterator[bytes] | (decode: bool | None=…) -> Iterator[Data]
- added:
class Router - added:
constructor Router(url_map: Map, server_name: str | None=…, url_scheme: str=…) -> None - added:
function route(url_map: Map, *args: Any, server_name: str | None=…, ssl: ssl_module.SSLContext | Literal[True] | None=…, create_router: type[Router] | None=…, **kwargs: Any) -> Server - added:
function unix_route(url_map: Map, path: str | None=…, **kwargs: Any) -> Server - added:
method Router.get_server_name(connection: ServerConnection, request: Request) -> str - added:
method Router.handler(connection: ServerConnection) -> None - added:
method Router.not_found(connection: ServerConnection) -> Response - added:
method Router.redirect(connection: ServerConnection, url: str) -> Response - added:
method Router.route_request(connection: ServerConnection, request: Request) -> Response | None
- changed:
constructor ServerConnection(socket: socket.socket, protocol: ServerProtocol, *, close_timeout: float | None=…, max_queue: int | None | tuple[int | None, int | None]=…) -> None → constructor ServerConnection(socket: socket.socket, protocol: ServerProtocol, *, ping_interval: float | None=…, ping_timeout: float | None=…, close_timeout: float | None=…, max_queue: int | None | tuple[int | None, int | None]=…) -> None