- Added support for python 3.13
- Updated OpenSSL dependency to 3.0 LTS
- Updated Cython dependency to 3.0.11
- Updated Azure uAMQP C and Azure C Shared Utility dependencies
- Incorporate fixes from PR to update vendor uamqp code.
- Incorporate fixes from PR
- Incorporate fixes from PR
- Fixes for CVE-2024-21646
- Added support for python 3.11
- Few more updates to submodules to support OpenSSL 3.0 compilation
- Updated OpenSSL dependency to 1.1.1t
- Updated submodules to support OpenSSL 3.0 compilation
- Removed dependency on six
- Fixed a bug that caused the wrong port to selected for websockets when a port was not passed in
- Publish 3.11 wheels
- Added support for python 3.11
- Updated OpenSSL dependency to 1.1.1q
- Updated cython dependency to 0.29.32
- Dropped support for manylinux2010
- Using cibuildwheel to generate wheels
- Added support for handling of duplicate certificates in [azure-c-shared-utility]{.title-ref} dependency by using [CERT_STORE_ADD_REPLACE_EXISTING]{.title-ref} parameter in the [CertAddEncodedCertificateToStore]{.title-ref} function call. (azure-sdk-for-python issue #26034)
This version and all future versions will require Python 3.7+, Python 3.6 is no longer supported.
- Added [data]{.title-ref}, [value]{.title-ref}, [sequence]{.title-ref} properties to [uamqp.Message]{.title-ref}, which return the body if the body type corresponds.
- Added [message_annotations]{.title-ref} property to [uamqp.Message]{.title-ref}, which is an alias for the [annotations]{.title-ref} instance variable.
- Added [data]{.title-ref} property to [uamqp.BatchMessage]{.title-ref}, which returns the iterable body of the batch.
- Added [ttl]{.title-ref} property to [uamqp.MessageHeader]{.title-ref}, which is an alias for the [time_to_live]{.title-ref} instance variable.
- Updated OpenSSL dependency to 1.1.1n for wheels of manylinux and macOS.
- Fixed bug that resulted in an error when deepcopying BatchMessage objects (azure-sdk-for-python issue #22529).
- Added back the support for Python 3.6.
This version and all future versions will require Python 3.7+, Python 2.7 and Python 3.6 are no longer supported.
- [SASTokenAuth]{.title-ref}, [JWTTokenAuth]{.title-ref}, [SASTokenAsync]{.title-ref}, and [JWTTokenAsync]{.title-ref} now takes keyword argument [refresh_window]{.title-ref} to override default token refresh timing in constructors.
- Fixed bug that [SendClientAsync]{.title-ref} might run into infinite loop while sending when it is shutdown unexpectedly.
- Updated dependencies Azure uAMQP C @ 2021-11-16 and Azure C Shared Utility @ 2021-11-15.
- Fixed bug that the [keep_alive_thread]{.title-ref} of [AMQPClient]{.title-ref} should not keep program from exiting in the case of [AMQPClient]{.title-ref} not being closed properly.
- Added support for Python 3.10.
- Fixed memory leak in win32 socketio and tlsio (azure-sdk-for-python issue #19777).
- Fixed memory leak in the process of converting AMQPValue into string (azure-sdk-for-python issue #19777).
- Fixed bug that JWTTokenAuth and JWTTokenAsync do not initialize token for token types other than b'jwt'.
- Fixed bug that attibutes [creation_time]{.title-ref}, [absolute_expiry_time]{.title-ref} and [group_sequence]{.title-ref} on [MessageProperties]{.title-ref} should be compatible with integer types on Python 2.7.
This version and all future versions will require Python 2.7 or Python 3.6+, Python 3.5 is no longer supported.
- Fixed memory leaks in the process of link attach where source and target cython objects are not properly deallocated (azure-sdk-for-python issue #15747).
- Improved management operation callback not to parse description value of non AMQP_TYPE_STRING type as string (azure-sdk-for-python issue #18361).
This version will be the last version to officially support Python 3.5, future versions will require Python 2.7 or Python 3.6+.
-
Added support for AMQP Sequence as the body type of an amqp message.
-
Added new class [uamqp.MessageBodyType]{.title-ref} to represent the body type of an amqp message, including:
- `Data`: The body consists of one or more data sections and each section contains opaque binary data.
- `Sequence`: The body consists of one or more sequence sections and each section contains an arbitrary number of structured data elements.
- `Value`: The body consists of one amqp-value section and the section contains a single AMQP value.
-
Added new parameters to the constructor of `uamqp.Message`:
- [body_type]{.title-ref} which takes [uamqp.MessageBodyType]{.title-ref} to specify the body type of an amqp message.
- [footer]{.title-ref} which takes a dict to set the footer of an amqp message.
- [delivery_annotations]{.title-ref} which takes a dict to set the delivery annotations of an amqp message.
-
Added support for pickling [uamqp.Message]{.title-ref}.
-
Fixed bug that sending message of large size triggering segmentation fault when the underlying socket connection is lost.
-
Fixed bug in link flow control where link credit and delivery count should be calculated based on per message instead of per transfer frame.
- Added desired-capabilities for [SendClient(Async)]{.title-ref} and [MessageSender(Async)]{.title-ref} as part of the AMQP protocol.
- Added types for AMQPShort and AMQPuShort for explicit handling of short and unsigned short encoding.
- Updated Azure uAMQP C and Azure C Shared Utility dependencies.
- Fixed memory leak with SAS Token creation.
- Fixed bug in accessing [MessageProperties.user_id]{.title-ref} triggering segmentation fault when the underlying C bytes are NULL.
- Fixed bug in [MessageProperties.user_id]{.title-ref} being limited to 8 bytes.
- Fixed bug where connection establishment on macOS with Clang 12 triggering unrecognized selector exception.
- Fixed bug that macOS was unable to detect network error.
- Fixed bug that [ReceiveClient]{.title-ref} and [ReceiveClientAsync]{.title-ref} receive messages during connection establishment.
- Updated cython dependency to 0.29.21.
- Added support for Python 3.9.
- Updated tlsio_openssl module to send SNI when establishing tls connection (Thanks to milope).
- Fixed bug where [Message.footer]{.title-ref} and [Message.delivery_annotation]{.title-ref} were not encoded into the outgoing payload.
- Fixed bug where message sending timeout error didn't get raised out.
- Added parameter [shutdown_after_timeout]{.title-ref} to [ReceiveClient]{.title-ref} and [ReceiveClientAsync]{.title-ref} which gives control over whether to shutdown receiver after timeout.
- Added method [MessageReceiver.reset_link_credit]{.title-ref} which is responsible for resetting current available link credit on the receiver link and send update to the sender.
- Fix to initialize delivery_count header at 0 instead of None (azure-sdk-for-python issue #9708)
- Added info fields to rejected delivery disposition.
- Fixed bug in setting certificate of tlsio on MacOS (azure-sdk-for-python issue #7201).
- Fixed seg fault in logging network tracing on MacOS (PR#147, Thanks to malthe).
- Fixed typos in log messages (PR#146, Thanks to bluca).
- Improved reproducibility of the generated c_uamqp.c file (PR#144, Thanks to bluca).
- Fixed seg fault in tearing down a failed link with unsent pending messages.
- Fixed garbage collection of C objects to prevent crashing on uncontrolled shutdown.
- Fixed missing event loop references passed into asyncio functions.
- Fixed bug in noneffective flow control when large messages are received.
- Demote link redirect logging from warning to info.
- Fixed bug in calculating send timeout.
- Removed [ThreadPoolExecutor]{.title-ref} in [ConnectionAsync]{.title-ref}.
- Added support for Python 3.8
- Fixed bug in dropping received messages at the moment when the connection just started working.
- Fixed bug where underlying io type wasn't set to WebSocket when http_proxy was applied (PR#92, Thanks to skoop22).
- Fixed bug in noneffective timeout when sending messages.
- Added desired-capabilities for [ReceiveClient(Async)]{.title-ref} and [MessageReceiver(Async)]{.title-ref} as part of the AMQP protocol.
- Added delivery-tag to [Message]{.title-ref} (azure-sdk-for-python issue #7336).
- Added method [work]{.title-ref} to [MessageReceiver]{.title-ref} and [work_async]{.title-ref} to [MessageReceiverAsync]{.title-ref} responsible for updating link status.
- Made bug fix in asyncio.get_event_loop backwards-compatible for now by just printing a warning rather than raising an error. In the next major version bump we can disable entirely.
- Updated the implementation of [update_token()]{.title-ref} in [JWTTokenAuth]{.title-ref} and [JWTTokenAsync]{.title-ref} (issue #80).
- Fixed bug in batched messages missing application_properties (azure-event-hubs-python issue #97).
- Fixed bug in datetime object parsing (issue #63).
- Fixed bug in unexposed send/receive settle modes.
- Fixed bug where retried messages were not added back to the send queue.
- Fixed bug in using asyncio.get_event_loop.
- Added type objects for AMQP Byte and uBytes types.
- Added async locking around pending messages queue (PR#54, Thanks to zach-b)
- Added WebSocket(AMQP over WebSocket) support (azure-sdk-for-python issue #5318).
- Added new token class [JWTTokenAuth]{.title-ref} and [JWTTokenAsync]{.title-ref} to support OAuth.
-
Support for Python 2.7 (>_<)/
- Where ever a [TimeoutError]{.title-ref} is raised in Python 3.x, this will be replaced with a new ~uamqp.errors.ClientTimeout exception in Python 2.7.
- A Python 2 [str]{.title-ref} object will be treated as [bytes]{.title-ref} in Python 3 and a Python 2 [unicode]{.title-ref} object will be treated like a Python 3 [str]{.title-ref}.
- Added uamqp.compat module for handling Py 2 vs 3 imports and types (PR#46, Thanks to maxkrivich).
-
AMQP encoding of an integer type will now automatically failover into a Long type or a double type if the value is too large.
-
Improved support for promptly detecting invalid ATTACH handles and raising the appropriate error.
-
Added types for AMQPDescribed, AMQPInt and AMQPuInt for explicit handling of int and unsigned int encoding.
-
Added new error [errors.AMQPClientShutdown]{.title-ref} as a wrapper for [KeyboardInterrupt]{.title-ref} to better handle interrupt handling.
-
Added better handling of keyboard interrupts during C callbacks to better facilitate clean client shutdown.
-
Added additional handling of keyboard interrupt at the C level to clean up annoying warnings.
-
Added classmethod [Message.decode_from_bytes]{.title-ref} to create a message from AMQP wire-encoded data.
-
Added [Message.encode_message]{.title-ref} method to retrieve the AMQP wire-encoded byte representation of the current message.
-
Fixed behaviour of [Message.get_message_encoded_size()]{.title-ref} to return accurate size.
-
Added new optional [callback]{.title-ref} argument to [client.mgmt_request]{.title-ref} to allow for custom handling of different status codes.
-
Added new client methods [auth_complete()]{.title-ref} and [client_ready()]{.title-ref} to allow for more fine-tuned monitoring or the client opening stages.
-
Client message handler is now a public attribute [client.message_handler]{.title-ref} ([SendClient._message_sender]{.title-ref} and [ReceiveClient._message_receiver]{.title-ref} are now deprecated).
-
Added automatic encoding of [datetime.datetime]{.title-ref} objects into AMQP timestamp.
-
Better support for Source filters with optional [descriptor]{.title-ref} argument in [Source.set_filter()]{.title-ref} and new [Source.get_filter()]{.title-ref} method.
-
Fixed Session settings not being passed to CBS session.
-
Added support for a callback on receipt on a Link ATTACH frame. Can be supplied to a client through the [on_attach]{.title-ref} keyword argument.
-
Removed unsued message.SequenceBody class.
-
Exposed BatchMessage.size_offset property for batch size customization.
- Reduced CPU load during idle receive.
- Updated Azure uAMQP C and Azure C Shared Utility dependencies.
- Fixed additional bugs in setting MessageProperties as string or bytes.
- Removed auth locking to prevent locking issues on keyboard interrupt.
- Added some more checks in place to prevent lock hanging on a keybaord interrupt.
- Fixed bug in setting MessageProperties.subject as string or bytes.
- [uamqp.send_message]{.title-ref} now returns a list of [uamqp.constants.MessageState]{.title-ref} to indicate the success of each message sent.
-
API settled.
-
Behaviour change When a SendClient or SendClientAsync is shutdown, any remaining pending messages (that is messages in the states [WaitingToBeSent]{.title-ref} and [WaitingForSendAck]{.title-ref}) will no longer be cleared, but can be retrieved from a new attribute [SendClient.pending_messages]{.title-ref} in order to be re-processed as needed.
-
Behaviour change The function [SendClient.queue_message]{.title-ref} now allows for queueing multiple messages at once by simply passing in additional message instances:
- [send_client.queue_message(my_message)]{.title-ref}
- [send_client.queue_message(message_1, message_2, message_3)]{.title-ref}
- [send_client.queue_message(*my_message_list)]{.title-ref}
-
An authentication object will now raise a [ValueError]{.title-ref} if one attempts to use it for more than one connection.
-
Renamed internal [_async]{.title-ref} module to non-private [async_ops]{.title-ref} to allow for docs generation.
-
Reformatted logging for better performance.
-
Added additional logging.
- Fixed potential crashing in bindings for amqpvalue.
- Fixed bindings fault in cbs PUT token complete callback.
- Updated uAMQP-C.
- Added additional auth and connection locking for thread/async safety.
- Increased INFO level logging.
- Removed platform deinitialization until it can be improved.
- Added handling for a connection reaching a client-caused error state.
-
Breaking change [MessageSender.send_async]{.title-ref} has been renamed to [MessageSender.send]{.title-ref}, and [MessageSenderAsync.send_async]{.title-ref} is now a coroutine.
-
Breaking change Removed [detach_received]{.title-ref} callback argument from MessageSender, MessageReceiver, MessageSenderAsync, and MessageReceiverAsync in favour of new [error_policy]{.title-ref} argument.
-
Added ErrorPolicy class to determine how the client should respond to both generic AMQP errors and custom or vendor-specific errors. A default policy will be used, but a custom policy can be added to any client by using a new [error_policy]{.title-ref} argument. Value must be either an instance or subclass of ErrorPolicy.
- The [error_policy]{.title-ref} argument has also been added to MessageSender, MessageReceiver, Connection, and their async counterparts to allow for handling of link DETACH and connection CLOSE events.
- The error policy passed to a SendClient determines the number of message send retry attempts. This replaces the previous [constants.MESSAGE_SEND_RETRIES]{.title-ref} value which is now deprecated.
- Added new ErrorAction object to determine how a client should respond to an error. It has three properties: [retry]{.title-ref} (a boolean to determine whether the error is retryable), [backoff]{.title-ref} (an integer to determine how long the client should wait before retrying, default is 0) and [increment_retries]{.title-ref} (a boolean to determine whether the error should count against the maximum retry attempts, default is [True]{.title-ref}). Currently [backoff]{.title-ref} and [increment_retries]{.title-ref} are only considered for message send failures.
- Added [VendorConnectionClose]{.title-ref} and [VendorLinkDetach]{.title-ref} exceptions for non-standard (unrecognized) connection/link errors.
-
Added support for HTTP proxy configuration.
-
Added support for running async clients synchronously.
-
Added keep-alive support for connection - this is a background thread for a synchronous client, and a background async function for an async client. The keep-alive feature is disabled by default, to enable, set the [keep_alive_interval]{.title-ref} argument on the client to an integer representing the number of seconds between connection pings.
-
Added support for catching a Connection CLOSE event.
-
Added support for [Connection.sleep]{.title-ref} and [ConnectionAsync.sleep_async]{.title-ref} to pause the connection.
-
Added support for surfacing message disposition delivery-state (with error information).
-
Added [constants.ErrorCodes]{.title-ref} enum to map standard AMQP error conditions. This replaces the previous [constants.ERROR_CONNECTION_REDIRECT]{.title-ref} and [constants.ERROR_LINK_REDIRECT]{.title-ref} which are now both deprecated.
-
Added new super error [AMQPError]{.title-ref} from which all exceptions inherit.
-
Added new [MessageHandlerError]{.title-ref} exception, a subclass of [AMQPConnectionError]{.title-ref}, for Senders/Receivers that enter an indeterminate error state.
-
[MessageException]{.title-ref} is now a subclass of [MessageResponse]{.title-ref}.
-
Added [ClientMessageError]{.title-ref} exception, a subclass of [MessageException]{.title-ref} for send errors raised client-side.
-
Catching Link DETACH event will now work regardless of whether service returns delivery-state.
-
Fixed bug where received messages attempting to settle on a detached link crashed the client.
-
Fixed bug in amqp C DescribedValue.
-
Fixed bug where client crashed on deallocating failed management operation.
- Removed circular dependency in Python 3.4 with types.py/utils.py
- When a header properties is not set, returns [None]{.title-ref} rather than raising ValueError.
- Fixed bug in receiving messages with application properties.
- Fixed bug in error handling for CBS auth to invalid hostname.
- Changed C error logging to debug level.
- Bumped uAMQP C version to 1.2.7
- Fixed memory leaks and deallocation bugs with Properties and Annotations.
-
Breaking change Submodule [async]{.title-ref} has been renamed to the internal [_async]{.title-ref}. All asynchronous classes in the submodule can now be accessed from uamqp or uamqp.authentication directly.
-
Breaking change Anything returned by a callback supplied to receive messages will now be ignored.
-
Breaking change Changed message state enum values:
- [Complete -> SendComplete]{.title-ref}
- [Failed -> SendFailed]{.title-ref}
- [WaitingForAck -> WaitingForSendAck]{.title-ref}
-
Added new message state enum values:
- [ReceivedUnsettled]{.title-ref}
- [ReceivedSettled]{.title-ref}
-
Breaking change Changes to message settlement exceptions:
- Combined the [AbandonMessage]{.title-ref} and [DeferMessage]{.title-ref} exceptions as [MessageModified]{.title-ref} to be in keeping with the AMQP specification.
- Renamed [AcceptMessage]{.title-ref} to [MessageAccepted]{.title-ref}.
- Renamed [RejectMessage]{.title-ref} to [MessageRejected]{.title-ref} which now takes [condition]{.title-ref} and [description]{.title-ref} arguments rather than [message]{.title-ref}.
-
Added [errors.LinkDetach]{.title-ref} exception as new subclass of [AMQPConnectionError]{.title-ref} as a wrapped for data in a Link DETACH dispostition.
-
Added [errors.LinkRedirect]{.title-ref} as a specific subclass of [LinkDetach]{.title-ref} to decode the specific redirect fields of a Link Redirect response.
-
Added [errors.MessageAlreadySettled]{.title-ref} exception for operations performed on a received message that has already returned a receipt dispostition.
-
Added [errors.MessageReleased]{.title-ref} exception.
-
Added [errors.ErrorResponse]{.title-ref} exception.
-
A received Message can now be explicitly settled through a set of new functions on the message:
- [Message.accept()]{.title-ref}
- [Message.reject(condition:str, description:str)]{.title-ref}
- [Message.release()]{.title-ref}
- [Message.modify(failed:bool, deliverable:bool, annotations:dict)]{.title-ref}
-
Added explicit [auto_complete]{.title-ref} argument to [ReceiveClient]{.title-ref} and [ReceiveClientAsync]{.title-ref}. If [auto_complete]{.title-ref} is set to [False]{.title-ref} then all messages must be explicitly "accepted" or "rejected" by the user otherwise they will timeout and be released. The default is [True]{.title-ref}, which is the exiting behaviour for each receive mechanism:
- Received messages processed by callback ([ReceiveClient.receive_messages()]{.title-ref}) will be automatically "accepted" if no explicit response has been set on completion of the callback.
- Received messages processed by batch ([ReceiveClient.receive_message_batch()]{.title-ref}) will by automatically "accepted" before being returned to the user.
- Received messages processed by iterator ([ReceiveClient.receive_message_iter()]{.title-ref}) will by automatically "accepted" if no explicit response has been set once the generator is incremented.
-
Added new methods to clients and connections to allow to redirect to an alternative endpoint when a LinkRedirect exception is raised. The client redirect helper cannot be used for clients that use a shared connection - the clients must be closed before the connection can be redirected. New credentials must be supplied for the new endpoint. The new methods are:
- [uamqp.Connection.redirect(redirect_info, auth)]{.title-ref}
- [uamqp.async.ConnectionAsync.redirect_async(redirect_info, auth)]{.title-ref}
- [uamqp.SendClient.redirect(redirect_info, auth)]{.title-ref}
- [uamqp.ReceiveClient.redirect(redirect_info, auth)]{.title-ref}
- [uamqp.async.SendClientAsync.redirect_async(redirect_info, auth)]{.title-ref}
- [uamqp.async.ReceiveClientAsync.redirect_async(redirect_info, auth)]{.title-ref}
-
Added [on_detach_received]{.title-ref} argument to [Sender]{.title-ref} and [Receiver]{.title-ref} classes to pass in callback to run on Link DETACH.
-
Removed automatic char encoding for strings of length 1, and added [types.AMQPChar]{.title-ref} for explicit encoding.
-
Bumped uAMQP C version to 1.2.5
-
Bumped Azure C Shared Utility to 1.1.5
-
Fixed memory leaks in MessageProperties, MessageHeader and message annotations.
- Fixed import error in async receiver.
- Exposed sender/receiver destroy function.
- Moved receiver.open on_message_received argument to constructor.
- Removed sasl module and moved internal classes into authentication module.
- Added encoding parameter everywhere where strings are encoded.
- Started documentation.
- Updated uAMQP-C to 1.2.4 and C Shared Utility to 1.1.4 (includes fix for issue #12).
- Fixed return type of MgmtOperation.execute - now returns ~uamqp.message.Message.
- Made AMQP connection/session/sender/receiver types in a client overridable.
- Added debug trace to management operations.
- Fixed error in management callback on failed operation.
- Default AMQP encoding of bytes is now a String type and a bytearray is a Binary type.
- Added AMQP Array type and fixed Long type range validation.
- Added [header]{.title-ref} argument to Message and BatchMessage for setting a MessageHeader.
- Fixed MessageHeader attribute setters.
- Added Certifi as a depedency to make OpenSSL certs dynamic.
- Added [verify]{.title-ref} option to authentication classes to allow setting custom certificate path (for Linux and OSX).
- Fixed memory leak in async receive.
- Removed close_on_done argument from client receive functions.
- Added receive iterator to synchronous client.
- Made async iter receive compatible with Python 3.5.
- Fixed SSL errors in manylinux wheels.
- Fixed message annoations attribute.
- Fixed bugs in batched messages and sending batched messages.
- Fixed conflicting receiver link ID.
- Fixed hanging receiver by removing queue max size in sync clients.
- Added support for sending messages with None and empty bodies.
- Added message send retry.
- Added timeouts and better error handling for management requests.
- Improved connection and auth error handling and error messages.
- Fixed message annotations type.
- SendClient.send_all_messages() now returns a list of message send statuses.
- Fixed OpenSSL platform being initialized multiple times.
- Fixed auto-refresh of SAS tokens.
- Altered [receive_batch]{.title-ref} behaviour to return messages as soon as they're available.
- Parameter [batch_size]{.title-ref} in [receive_batch]{.title-ref} renamed to [max_batch_size]{.title-ref}.
- Fixed message [application_properties]{.title-ref} decode error.
- Removed MacOS dependency on OpenSSL and libuuid.
- Added management request support.
- Fixed message-less C operation ValueError.
- Store message metadata in Python rather than C.
- Refactored Send and Receive clients to create a generic parent AMQPClient.
- Fixed None receive timestamp bug.
- Removed async iterator queue due to instabilities - all callbacks are now synchronous.
- Added support for asynchronous message receive by iterator or batch.
- Removed synchronous receive iterator, and replaced with synchronous batch receive.
- Added sync and async context managers for Send and Receive Clients.
- Fixed token instability and added put token retry policy.
- Exposed Link ATTACH properties.
- A connection now has a single $cbs session that can be reused between clients.
- Added C debug trace logging to the Python logger ('uamqp.c_uamqp')
- Exposed OPEN performative properties for connection telemetry.
- Exposed setters for message.message_annotations and message.application_properties.
- Made adjustments to connection open and close to facilitate sharing a connection object between send/receive clients.
- Support for username/password embedded in connection URI.
- Clients can now optionally leave connection/session/link open for re-use.
- Updated build process and installation instructions.
- Various bug fixes to increase stability.
- Initial release