Repository navigation
Releases: eandersson/amqpstorm
Releases · eandersson/amqpstorm
Release list
Version 3.1.4
Channel.build_inbound_messagesnow raisesAMQPInvalidArgument
whenempty_timeoutis neitherNonenor a non-negative number
(follow-up to #155).- Fixed a
KeyErrorescapingConnection.closewith thepoll
poller;select.pollraisesKeyError, notOSError, when the
file descriptor is already unregistered. IOnow captures the poller reference once during teardown, so a
concurrentclosecan no longer raiseAttributeErroror record
a spuriousAMQPConnectionError.
What's Changed
Full Changelog: 3.1.3...3.1.4
Version 3.1.3
Channel.build_inbound_messagesgained anempty_timeout
parameter that controls how long thebreak_on_emptyloop waits
for the inbound queue to stay continuously empty before exiting
while a consumer is active (default1.0seconds, matching the
previous behaviour). A falsy value (Noneor0) exits as soon
as the queue is empty.Channel.process_data_eventsandChannel.start_consumingnow
return as soon as the inbound queue is drained instead of waiting
out thebreak_on_emptygrace period, restoring the consume
responsiveness from 3.0.x that the 3.1.0 grace period had slowed
(follow-up to #154).
Version 3.1.2
What's Changed
- The AMQP protocol header is now sent before the inbound reader
thread is started, so the initial socket write no longer races the
reader on the same TLS socket. This fixes intermittent
connection closed by servererrors during the handshake against
brokers that send data immediately after the TLS handshake (for
example TLS 1.3 session tickets).IO.opennow only connects and
prepares the poller; the reader is started separately via the new
IO.start_inbound. Rpc.on_frameno longer tears down the connection when the
matching request or response has already been removed (for example
when an RPC call times out); the stray frame is ignored instead.- Fixed a large-message consume throughput regression in
Channel.build_inbound_messages(#154). - Added LavinMQ compatibility for the management API client; the
functional and management test suites now run against LavinMQ. - Testing: added an end-to-end LavinMQ CI job and modernized the test
certificate generation to ECDSA P-384 with standards-compliant
end-entity certificates.
New Contributors
Full Changelog: 3.1.1...3.1.2
Version 3.1.1
What's Changed
- build a binary wheel and a source tarball by @dimbleby in #151
- Fix race condition shutting down socket by @eandersson in #152
New Contributors
Full Changelog: 3.1...3.1.1
Version 3.1
- Added inline type hints across the public API and shipped
py.typed
so downstream type checkers pick them up (PEP 561). Channel.build_inbound_messagesnow ends cleanly when the channel
or connection is closed via user code (.close()); server- and
network-driven closes still raise as before.check_for_errors
itself is unchanged.- Performance: byte-string accumulation in receive / publish paths
replaced withb''.join(no more O(n²) under non-CPython refcount
semantics); writes usememoryviewslicing; RPC response storage
switched tocollections.dequeso popping multi-frameBasic.Get
results is O(n) instead of O(n²). - Modernized to Python 3.11+ syntax: dropped
(object)bases, switched
to argument-lesssuper(), f-strings, modernwithblocks for
locks. - Packaging migrated from
setup.py/setup.cfgto PEP 621
pyproject.toml; version is now read dynamically from
amqpstorm.__version__. - Documentation: fixed several typos, completed missing
:members:
entries on the management API autodoc, added intersphinx mapping and
short type-hint rendering in the Sphinx config. - SSL: hostname verification now on by default; unknown
cert_reqs
URI values fall back toCERT_REQUIREDinstead ofCERT_NONE. - Switched all elapsed-duration checks (RPC and connection-state
timeouts) fromtime.time()totime.monotonic()so system
clock changes can no longer cause spurious timeouts or hangs.
Version 3.0
- Python 3 only release.
- Added support for pamqp 4.x.
- Improved SSL handling.
Version 2.11.1
Switch back to using select.select by default [#140].
Version 2.11.0
- Added Python 3.13 support.
- Replaced select.select with select.poll on Linux by default.
- Replaced list with collections.deque - Thanks Bernhard Thiel.
- Removed unnecessary lock when building messages.
- Fixed various Python 2.7 tests.
Version 2.10.8
- Fixed bug with multi-threaded basic.consume not always being threadsafe [#132] - Thanks mic1on.
Version 2.10.7
- Fixed bug with heartbeat interval on the client not sent frequently enough [#127] - Thanks Ivan Héda.
- Added support for Python 3.12.