- <ToDo: add new entries here>
- Bugfix: When a close frame with status NO_STATUS_RCVD is sent, send and empty payload.
- Bugfix: Changing both encoding and decoding of the Host, from ascii to idna.
- Bugfix: Support multiple Sec-WebSocket-Extensions and Sec-WebSocket-Protocol headers.
- Accept bytes alongside string as path argument in initiate_upgrade_connection.
- Check the state when sending events, raising if the event cannot be sent in the current state.
- Added support for Python 3.10.
- Drop support for Python 3.6, meaning the minimum supported version is Python 3.7.0.
- Various type checking and code linting improvements.
- Added support for Python 3.8 and 3.9.
- Prevent invalid window bit sizes.
- Various docs, type checking, tooling and testing improvements.
This contains all the Bugfixes in the 0.14 branch.
- Drop support for Python 2. Please pin to ~= 0.14.0 if you support Python 2.
- Drop support for Python 3.5, meaning the minimum supported version is Python 3.6.1.
- Switch events to be dataclass based, otherwise the API is consistent.
- Add type hints throughout and support PEP 561 via a py.typed file. This should allow projects that use wsproto to type check their usage of wsproto.
- Bugfix prevent the test folder being installed as a package called test.
- Explicitly require Host header in handshake.
- Drop wsaccel support and utilise the aiohttp/@willmcgugan masking method. wsaccel is unmaintained and this new masking method is almost as quick.
- Loosen the h11 requirement to >= 0.8.1 as wsproto is compatible with 0.9 onwards.
- Stop installing a "test" package on installation.
- Bugfix clarify subprotocol type as str not bytes.
- Support HTTP/2 WebSockets. This requires a HTTP/2 parser (not
included), with hyper-h2 recommended. It renames
handshake_extensions
and hence is a breaking change. - Bugfix badly formatted type hints.
- Bugfix minor issues identified by type checking.
Introduce a send method on the connection which accepts the new events. This requires the following usage changes,
connection.accept(subprotocol=subprotocol) -> connection.send(AcceptConnection(subprotocol=subprotocol)) connection.send_data(data) -> connection.send(Message(payload=payload)) connection.close(code) -> connection.send(CloseConnection(code=code)) connection.ping() -> connection.send(Ping()) connection.pong() -> connection.send(Pong())
The Event structure is altered to allow for events to be sent and received, this requires the following name changes in existing code,
ConnectionRequested -> Request ConnectionEstablished -> AcceptConnection ConnectionClosed -> CloseConnection DataReceived -> Message TextReceived -> TextMessage BytesReceived -> BytesMessage PingReceived -> Ping PongReceived -> Pong
Introduce RejectConnection and RejectData events to be used by a server connection to reject rather than accept a connection or by a client connection to emit the rejection response. The RejectData event represents the rejection response body, if present.
Add an extra_headers field to the AcceptConnection event in order to customise the acceptance response in server mode or to emit this information in client mode.
Switch from Fail events being returned to raising
RemoteProtocolError
.Switch from ValueError`s to LocalProtocolError`s being raised when an action is taken that is incompatible with the connection state or websocket standard.
Enforce version checking in SERVER mode, only 13 is supported.
Add an event_hint to RemoteProtocolErrors to hint at how to respond to issues.
Switch from a
bytes_to_send
method to thesend
method returning the bytes to send directly. Responses to Ping and Close messages must now be sent (viasend
), with thePing
andCloseConnection
events gaining aresponse
method. This allowsif isinstance(event, Ping): bytes_to_send = connection.send(event.response())
Separate the handshake from the active connection handling. This allows the handshake and connection to be seperately used. By default though WSConnection does both.
receive_bytes
is renamed toreceive_data
andWSConnection
should be imported fromwsproto
rather thanwsproto.connection
.
- Support h11 ~0.8.1.
- Support Python 3.7.
- Make the close-handshake more explicit, by sending a close frame on reciept of a close frame.
- Bugfix fix deflate after a non-compressable message.
- Bugfix connection header acceptance, by accepting Connection header values that are comma separated lists.
- Separate extension handling into its own method.
- Add events for PING and PONG frames.
- Stop supporting Python 3.4.
- Large increase in tests and test coverage.
- Bugfix extension accept for empty strings.
- Bugfix raise if default arguments are invalid.
- General improvements.
- (unreleased on PyPI)
- First release on PyPI.