API Changes (Backward Incompatible)
- Support for Python 3.6 has been removed.
- Support for Python 3.7 has been removed.
- Support for Python 3.8 has been removed.
API Changes (Backward Compatible)
- Support for Python 3.10 has been added.
- Support for Python 3.11 has been added.
- Support for Python 3.12 has been added.
- Support for Python 3.13 has been added.
- Improved type hints.
- Updated packaging and testing infrastructure.
API Changes (Backward Compatible)
- Added support for Python 3.9.
- Added type hints.
API Changes (Backward Incompatible)
- Introduce
HyperframeError
base exception class for all errors raised within hyperframe. - Change exception base class of
UnknownFrameError
toHyperframeError
- Change exception base class of
InvalidPaddingError
toHyperframeError
- Change exception base class of
InvalidFrameError
toHyperframeError
- Invalid frames with wrong stream id (zero vs. non-zero) now raise
InvalidDataError
. - Invalid SETTINGS frames (non-empty but ACK) now raise
InvalidDataError
. - Invalid ALTSVC frames with non-bytestring field or origin now raise
InvalidDataError
.
API Changes (Backward Compatible)
- Deprecate
total_padding
- use pad_length instead. - Improve repr() output for all frame classes.
- Introduce Frame.explain(data) for quick introspection of raw data.
Bugfixes
- Fixed padding parsing for
PushPromiseFrame
. - Fixed unchecked frame length for
PriorityFrame
. It now correctly raisesInvalidFrameError
. - Fixed promised stream id validation for
PushPromiseFrame
. It now raisesInvalidDataError
. - Fixed unchecked frame length for
WindowUpdateFrame
. It now correctly raisesInvalidFrameError
. - Fixed window increment value range validation. It now raises
InvalidDataError
. - Fixed parsing of
SettingsFrame
with mutual exclusion of ACK flag and payload.
Other Changes
- Removed support for Python 2.7, 3.4, 3.5, pypy.
- Added support for Python 3.8.
API Changes (Backward Compatible)
- Add a new ENABLE_CONNECT_PROTOCOL settings parameter.
Other Changes
- Fix collections.abc deprecation.
- Drop support for Python 3.3 and support 3.7.
API Changes (Backward Compatible)
- Added support for
DataFrame.data
being amemoryview
object.
Backwards Incompatible API Changes
- Added support for unknown extension frames. These will be returned in the new
ExtensionFrame
object. The flag information for these frames is persisted inflag_byte
if needed.
Bugfixes
- Fixed AltSvc stream association, which was incorrectly set to
'both'
: should have been'either'
. - Fixed a bug where stream IDs on received frames were allowed to be 32-bit, instead of 31-bit.
- Fixed a bug with frames that had the
PADDING
flag set but zero-length padding, whose flow-controlled length was calculated wrongly. - Miscellaneous performance improvements to serialization and parsing logic.
Bugfixes
- Fixed bug with the repr of
AltSvcFrame
, where building it could throw exceptions if the frame had been received from the network.
Backwards Incompatible API Changes
- Updated old ALTSVC frame definition to match the newly specified RFC 7838.
- Remove BLOCKED frame, which was never actually specified.
- Removed previously deprecated
SettingsFrame.SETTINGS_MAX_FRAME_SIZE
andSettingsFrame.SETTINGS_MAX_HEADER_LIST_SIZE
.
API Changes (Backward Compatible)
- Invalid PING frame bodies now raise
InvalidFrameError
, notValueError
. Note thatInvalidFrameError
is aValueError
subclass. - Invalid RST_STREAM frame bodies now raise
InvalidFramError
, notValueError
. Note thatInvalidFrameError
is aValueError
subclass. - Canonicalized the names of
SettingsFrame.SETTINGS_MAX_FRAME_SIZE
andSettingsFrame.SETTINGS_MAX_HEADER_LIST_SIZE
to match their peers, by adding new propertiesSettingsFrame.MAX_FRAME_SIZE
andSettingsFrame.SETTINGS_MAX_HEADER_LIST_SIZE
. The old names are still present, but will be deprecated in 4.0.0.
Bugfixes
- The change in
3.1.0
that ensured thatInvalidFrameError
would be thrown did not affect certain invalid values in ALT_SVC frames. This has been fixed:ValueError
will no longer be thrown from invalid ALT_SVC bodies.
Bugfixes
- Correctly error when receiving Ping frames that have insufficient data.
API Changes
- Added new
InvalidFrameError
that is thrown instead ofstruct.error
when parsing a frame.
Bugfixes
- Fixed error when trying to serialize frames that use Priority information with the defaults for that information.
- Fixed errors when displaying the repr of frames with non-printable bodies.
Bugfixes
- Fix issue where unpadded DATA, PUSH_PROMISE and HEADERS frames that had empty
bodies would raise
InvalidPaddingError
exceptions when parsed.
Backwards Incompatible API Changes
- Parsing padded frames that have invalid padding sizes now throws an
InvalidPaddingError
.
API Changes
- When an unknown frame is encountered,
parse_frame_header
now throws aValueError
subclass:UnknownFrameError
. This subclass contains the frame type and the length of the frame body.
API Changes
- Frames parsed from binary data now carry a
body_len
attribute that matches the frame length (minus the frame header).
API Changes
- Attempting to parse unrecognised frames now throws
ValueError
instead ofKeyError
. Thanks to @Kriechi! - Flags are now validated for correctness, preventing setting flags that
hyperframe
does not recognise and that would not serialize. Thanks to @mhils! - Frame properties can now be initialized in the constructors. Thanks to @mhils and @Kriechi!
- Frames that cannot be sent on a stream now have their stream ID defaulted
to
0
. Thanks to @Kriechi!
Other Changes
- Frames have a more useful repr. Thanks to @mhils!
- Fix a bug where
FRAME_MAX_LEN
was one byte too small.
- Add
body_len
property to frames to enable introspection of the actual frame length. Thanks to @jdecuyper!
- Fix bug where the frame header would have an incorrect length added to it.
- Initial extraction from hyper.