NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #1464 most downloaded on PyPI
RabbitMQ Focused AMQP low-level library
Last release 3 months ago
06 Jul 2026
Release timing varies
gaps range from 8 days to 2.2 years
Nearly every release is documented
notes for 29 of 29 stable releases
Nothing withdrawn
no release was ever pulled
14 years old
36 releases · first in 2012
Migrated documentation from ReadTheDocs to GitHub Pages (MkDocs)
ValueError instead of leaking struct.error on truncated or malformed input (#73)TypeError instead of a cryptic struct.error (#74)BasicProperties.__eq__ returns NotImplemented for non-Properties operands so comparisons yield False instead of raising (#75)short_int range error message (#74, #75)ContentHeader._get_flags on malformed flags (#72)One column per quarter.
Fix Exchange.Declare(internal=True) raising ValueError — The internal flag was incorrectly treated as a deprecated field. It is a legitimate AMQP flag…
__annotations__ class variable from all command classes and base classes. Python manages __annotations__ automatically; the explicit declarations conflicted with object.__annotations__. Code that introspected MyCommand.__annotations__ directly may need updating.Basic.Reject(requeue=False) being coerced to True — The codegen emitted self.requeue = requeue or True which made it impossible to reject without requeuing. Now uses a proper ternary to preserve explicit False. (#45 related, also previously fixed in 3.0.1 but regressed)Exchange.Declare(internal=True) raising ValueError — The internal flag was incorrectly treated as a deprecated field. It is a legitimate AMQP flag used for internal exchanges and RabbitMQ tracing.table_integer routed values in -128..127 to octet() which uses unsigned byte format (struct 'B'), causing struct.error for negative values like -1. Now uses signed byte format (struct '>b'). This affected x-priority, x-delivery-limit, and any other table argument using small negative integers.@, #, ,, /, +, space), and fixes a bug where the trailing-comma replacement corrupted regex patterns containing commas.typing.ClassVar annotations on all class-level attributes across base classes, command classes, body, header, and heartbeat modules. Codegen updated to emit these correctly.__init__.py to satisfy basedpyright's reportUnsupportedDunderAll check.x if x is not None else default) instead of x or default, which correctly preserves False values.Update changelog to include last change
Fix line length issue in comment
Fix line length issue in comment
Update changelog and bump version
Remove unused annotation
Remove unused annotation
Fix an issue with Basic.Reject requeue=False always being set to True (#29 - eandersson)
Basic.Reject requeue=False always being set to True (#29 - eandersson)Fix unsigned short-int encoding and decoding to use the correct amqp field designation of B instead of b
B instead of b (#27)Fix additional missing branch coverage
Fix additional missing branch coverage
pamqp.commands.Basic.QoS.globally renamed back to pamqp.commands.Basic.QoS.global___init__pamqp.frame.Frame.validate() methodNonepamqp.commands.Basic.Properties.delivery_mode to ensure it's 0 or 1Rename pamqp.frame._frame_parts to pamqp.frame.frame_parts (#15 again)
pamqp.frame._frame_parts to pamqp.frame.frame_parts (#15 again)pamqp.commands.Basic.QoS.global_ renamed to pamqp.commands.Basic.QoS.globallypamqp/py.typed for PEP-561 compatibility (#21 - michael-k)Add strict value checking for deprecated values
Noneamqp0-9-1.extended.xml instead of amqp-0-9-1.xml to get the documentation for RabbitMQ added classes/methods__init__ functions from method classesMake comparison of Basic.Properties against other object types raise NotImplementedError
NotImplementedErrorAdded mypy as part of the test pipeline and made updates based upon its findings
pamqp.commandspamqp.commandsNoneRevert the removal of pamqp.body.ContentBody.name
pamqp.body.ContentBody.nameUpdated pamqp.encode.support_deprecated_rabbitmq() to allow for toggling support
pamqp.specification to pamqp.exceptionspamqp.specification to pamqp.constantspamqp.specification to pamqp.basepamqp.specification to functions in pamqp.commandspamqp.specification.ERRORS to pamqp.exceptions.CLASS_MAPPINGpamqp.headers.ContentHeader and pamqp.header.ProtocolHeaderpamqp.body.ContentBody.value now only supports bytespamqp.decode.timestamp to return a datetime.datetime instance instead of time.struct_timepamqp.encode.support_deprecated_rabbitmq() to allow for toggling supportpamqp.encode.timestamp to only support datetime.datetime and time.struct_time values, dropping epoch (int) supportpamqp.frame.BasicProperties.to_dict() in favor of behavior allowing for dict(pamqp.frame.BasicProperties)pamqp.heartbeat.Heartbeat to marshal the static frame value as a predefined class attributeConnection.UpdateSecret and Connection.UpdateSecretOkBasic.Property by invoking del properties[key]pamqp.codec sub-packageAdd pamqp.encode.support_deprecated_rabbitmq function to limit data types available when encoding field-tables for older RabbitMQ versions
pamqp.encode.support_deprecated_rabbitmq function to limit data types available when encoding field-tables for older RabbitMQ versionsChange pamqp.encode.timestamp to allow for numeric/epoch timestamps (#14 - mosquito)
Change raising a DeprecationWarning exception to using warnings.warn for deprecated AMQP methods (#13 - dzen)
This may be a breaking change means in Python3 keys will always be type str for short strings. This includes frame values and field table values.
unicode object.pamqp.encode (#7)pamqp.exceptions.PAMQPException as a base class for pamqp specific exceptions (#4)Fix the encoding guard for unsigned short integers to be 65535
Remove UTF-8 encoding from byte_array
Basic.Properties headers behavior:
Basic.Properties to a slotted classtype() for Basic.Properties for accessing data typetype() for AMQP methods for accessing data typeBasic.Properties.attributes to Basic.Properties.attributes(), returning the list of slotted attributesFrame.__getitem__ will now raise a KeyError instead of None for an invalid attributePropertiesBase no longer checks to see if an attribute is set for containsCleanup how UTF-8 is handled in decoding strings
Fix a long standing bug for non-specified responses for RabbitMQ AMQP extensions
pamqp.codec.encode and pamqp.codec.decode to pamqp.encode and pamqp.decodepamqp.codecFix encoding of long-long-integers
Remove support for short strings in field tables
- Add short-short-int support
- Fix distribution requirements
- Add decimal data type support
- Fix Confirm.Select definition
Add support for Connection.Blocked, Connection.Unblocked
- Fix exception creation
Add Confirm.Select, Confirm.SelectOk
Remove debugging print statements (eek)
- Add Python 3.3 support
Add void support in table arrays
- Initial version
Your coding agent can read these notes before it upgrades. Set up the MCP server →