1Changes
2=======
3
4py-amqp is fork of amqplib used by Kombu containing additional features and improvements.
5The previous amqplib changelog is here:
6http://code.google.com/p/py-amqplib/source/browse/CHANGES
7
8.. _version-2.6.0:
9
102.6.1
11=====
12:release-date: 2020-07-31 10.30 P.M UTC+6:00
13:release-by: Asif Saif Uddin
14
15- Fix buffer overflow in frame_writer after frame_max is increased. `frame_writer`
16allocates a `bytearray` on intialization with a length based on the `connection.frame_max`
17value. If `connection.frame_max` is changed to a larger value, this causes an
18error like `pack_into requires a buffer of at least 408736 bytes`.
19
20
21.. _version-2.6.0:
22
232.6.0
24=====
25:release-date: 20-06-01 12.00 P.M UTC+6:00
26:release-by: Asif Saif Uddin
27
28- Implement speedups in cython (#311)
29- Updated some tests & code improvements
30- Separate logger for Connection.heartbeat_tick method
31- Cython generic content (#315)
32- Improve documentation a_global parameter of basic_qos() method.
33- Fix saving partial read buffer on windows during socket timeout. (#321)
34- Fix deserialization of long string field values that are not utf-8.
35- Added simple cythonization of abstract_channel.py
36- Speedups of serialization.py are more restrictive
37
38.. _version-2.5.2:
39
402.5.2
41=====
42:release-date: 2019-09-30 19.00 P.M UTC+6:00
43:release-by: Asif Saif Uddin
44
45- Fixed a channel issue against a connection already closed
46- Updated some tests & code improvements
47
48
49.. _version-2.5.1:
50
512.5.1
52=====
53:release-date: 2019-08-14 22.00 P.M UTC+6:00
54:release-by: Asif Saif Uddin
55
56- Ignore all methods except Close and Close-OK when channel/connection is closing
57- Fix faulty ssl sni intiation parameters (#283)
58- Undeprecate auto_delete flag for exchanges. (#287)
59- Improved tests and testing environments
60
61
62.. _version-2.5.0:
63
642.5.0
65=====
66:release-date: 2019-05-30 17.30 P.M UTC+6:00
67:release-by: Asif Saif Uddin
68
69- Drop Python 3.4
70- Add new platform
71- Numerious bug fixes
72
73.. _version-2.4.2:
74
752.4.2
76=====
77:release-date: 2019-03-03 10:45 P.M UTC+2:00
78:release-by: Omer Katz
79
80- Added support for the Cygwin platform
81
82  Contributed by **Matus Valo**
83
84- Correct offset incrementation when parsing bitmaps.
85
86  Contributed by **Allan Simon** & **Omer Katz**
87
88- Consequent bitmaps are now parsed correctly.
89
90  Previously the bit counter was reset with every bit.
91  We now reset it once per 8 bits, when we consume the next byte.
92
93  Contributed by **Omer Katz**
94
95Code Cleanups & Improvements:
96
97  - **Patrick Cloke**
98  - **Matus Valo**
99  - **Jeremiah Cooper**
100  - **Omer Katz**
101
102Test Coverage & CI Improvements:
103
104  - **Matus Valo**
105  - **Omer Katz**
106  - **Jeremiah Cooper**
107  - **Omer Katz**
108
109.. _version-2.4.1:
110
1112.4.1
112=====
113:release-date: 2018-04-02 9:00 A.M UTC+2
114:release-by: Omer Katz
115
116- To avoid breaking the API basic_consume() now returns the consumer tag
117  instead of a tuple when nowait is True.
118
119  Fix contributed by **Matus Valo**
120
121- Fix crash in basic_publish when broker does not support connection.blocked
122  capability.
123
124  Fix contributed by **Matus Valo**
125
126- read_frame() is now Python 3 compatible for large payloads.
127
128  Fix contributed by **Antonio Ojea**
129
130- Support float read_timeout/write_timeout.
131
132  Fix contributed by **:github_user:`cadl`**
133
134- Always treat SSLError timeouts as socket timeouts.
135
136  Fix contributed by **Dirk Mueller** and **Antonio Ojea**
137
138- Treat EWOULDBLOCK as timeout.
139
140  This fixes a regression on Windows from 2.4.0.
141
142  Fix contributed by **Lucian Petrut**
143
144Test Coverage & CI Improvements:
145
146- **Matus Valo**
147- **Antonio Ojea**
148
149.. _version-2.4.0:
150
1512.4.0
152=====
153:release-date: 2018-13-01 1:00 P.M UTC+2
154:release-by: Omer Katz
155
156- Fix inconsistent frame_handler return value.
157
158  The function returned by frame_handler is meant to return True
159  once the complete message is received and the callback is called,
160  False otherwise.
161
162  This fixes the return value for messages with a body split across
163  multiple frames, and heartbeat frames.
164
165  Fix contributed by **:github_user:`evanunderscore`**
166
167- Don't default content_encoding to utf-8 for bytes.
168
169  This is not an acceptable default as the content may not be
170  valid utf-8, and even if it is, the producer likely does not
171  expect the message to be decoded by the consumer.
172
173  Fix contributed by **:github_user:`evanunderscore`**
174
175- Fix encoding of messages with multibyte characters.
176
177  Body length was previously calculated using string length,
178  which may be less than the length of the encoded body when
179  it contains multibyte sequences. This caused the body of
180  the frame to be truncated.
181
182  Fix contributed by **:github_user:`evanunderscore`**
183
184- Respect content_encoding when encoding messages.
185
186  Previously the content_encoding was ignored and messages
187  were always encoded as utf-8. This caused messages to be
188  incorrectly decoded if content_encoding is properly respected
189  when decoding.
190
191  Fix contributed by **:github_user:`evanunderscore`**
192
193- Fix AMQP protocol header for AMQP 0-9-1.
194
195  Previously it was set to a different value for unknown reasons.
196
197  Fix contributed by **Carl Hörberg**
198
199- Add support for Python 3.7.
200
201  Change direct SSLSocket instantiation with wrap_socket.
202  Added Python 3.7 to CI.
203
204  Fix contributed by **Omer Katz** and **:github_user:`avborhanian`**
205
206- Add support for field type "x" (byte array).
207
208  Fix contributed by **Davis Kirkendall**
209
210- If there is an exception raised on Connection.connect or Connection.close,
211  ensure that the underlying transport socket is closed.
212
213  Adjust exception message on connection errors as well.
214
215  Fix contributed by **:github_user:`tomc797`**
216
217- TCP_USER_TIMEOUT has to be excluded from KNOWN_TCP_OPTS in BSD platforms.
218
219  Fix contributed by **George Tantiras**
220
221- Handle negative acknowledgments.
222
223  Fix contributed by **Matus Valo**
224
225- Added integration tests.
226
227  Fix contributed by **Matus Valo**
228
229- Fix basic_consume() with no consumer_tag provided.
230
231  Fix contributed by **Matus Valo**
232
233- Improved empty AMQPError string representation.
234
235  Fix contributed by **Matus Valo**
236
237- Drain events before publish.
238
239  This is needed to capture out of memory messages for clients that only
240  publish. Otherwise on_blocked is never called.
241
242  Fix contributed by **Jelte Fennema** and **Matus Valo**
243
244- Don't revive channel when connection is closing.
245
246  When connection is closing don't raise error when Channel.Close method is received.
247
248  Fix contributed by **Matus Valo**
249
250.. _version-2.3.2:
251
2522.3.2
253=====
254:release-date: 2018-05-29 15:30 P.M UTC+3
255:release-by: Omer Katz
256
257- Fix a regression that occurs when running amqp on OSX.
258
259  TCP_USER_TIMEOUT is not available when running on OSX.
260  We now remove it from the set of known TCP options.
261
262  Fix contributed by **Ofer Horowitz**
263
264.. _version-2.3.1:
265
2662.3.1
267=====
268:release-date: 2018-05-28 16:30 P.M UTC+3
269:release-by: Omer Katz
270
271- Fix a regression that occurs when running amqp under Python 2.7.
272
273  #182 mistakenly replaced a type check with unicode to string_t which is str
274  in Python 2.7. text_t should have been used instead.
275  This is now fixed and the tests have been adjusted to ensure this never regresses
276  again.
277
278  Fix contributed by **Omer Katz**
279
280.. _version-2.3.0:
281
2822.3.0
283=====
284:release-date: 2018-05-27 16:30 P.M UTC+3
285:release-by: Omer Katz
286
287- Cleanup TCP configurations across platforms and unified defaults.
288
289  Fix contributed by **Dan Chowdhury**
290
291- Fix for TypeError when setting socket options.
292
293  Fix contributed by **Matthias Erll**
294
295- Ensure that all call sites for decoding bytes to str allow surrogates,
296  as the encoding mechanism now supports.
297
298  Fix contributed by **Stephen Hatch**
299
300- Don't send AAAA DNS request when domain resolved to IPv4 address.
301
302  Fix contributed by **Ihar Hrachyshka & Omer Katz**
303
304- Support for EXTERNAL authentication and specific login_method.
305
306  Fix contributed by **Matthias Erll**
307
308- If the old python-gssapi library is installed the gssapi module will be available.
309  We now ensure that we only use the new gssapi library.
310
311  Fix contributed by **Jacopo Notarstefano**
312
313Code Cleanups & Test Coverage:
314
315- :github_user:`eric-eric-eric`
316- **Omer Katz**
317- **Jon Dufresne**
318- **Matthias Urlichs**
319
320.. _version-2.2.2:
321
3222.2.2
323=====
324:release-date: 2017-09-14 09:00 A.M UTC+2
325:release-by: Omer Katz
326
327- Sending empty messages no longer hangs. Instead an empty message is sent correctly.(addresses #151)
328
329  Fix contributed by **Christian Blades**
330
331- Fixed compatibility issues in UTF-8 encoding behavior between Py2/Py3 (#164)
332
333  Fix contributed by **Tyler James Harden**
334
335.. _version-2.2.1:
336
3372.2.1
338=====
339:release-date: 2017-07-14 09:00 A.M UTC+2
340:release-by: Omer Katz
341
342- Fix implicit conversion from bytes to string on the connection object. (Issue #155)
343
344  This issue has caused Celery to crash on connection to RabbitMQ.
345
346  Fix contributed by **Omer Katz**
347
348.. _version-2.2.0:
349
3502.2.0
351=====
352:release-date: 2017-07-12 10:00 A.M UTC+2
353:release-by: Ask Solem
354
355- Fix random delays in task execution.
356
357  This is a bug that caused performance issues due to polling timeouts that occur when receiving incomplete AMQP frames. (Issues #3978 #3737 #3814)
358
359  Fix contributed by **Robert Kopaczewski**
360
361- Calling ``conn.collect()`` multiple times will no longer raise an ``AttributeError`` when no channels exist.
362
363  Fix contributed by **Gord Chung**
364
365- Fix compatibility code for Python 2.7.6.
366
367  Fix contributed by **Jonathan Schuff**
368
369- When running in Windows, py-amqp will no longer use the unsupported TCP option TCP_MAXSEG.
370
371  Fix contributed by **Tony Breeds**
372
373- Added support for setting the SNI hostname header.
374
375  The SSL protocol version is now set to SSLv23
376
377  Contributed by **Dhananjay Sathe**
378
379- Authentication mechanisms were refactored to be more modular. GSSAPI authentication is now supported.
380
381  Contributed by **Alexander Dutton**
382
383- Do not reconnect on collect.
384
385  Fix contributed by **Gord Chung**
386
387.. _version-2.1.4:
388
3892.1.4
390=====
391:release-date: 2016-12-14 03:40 P.M PST
392:release-by: Ask Solem
393
394- Removes byte string comparison warnings when running under ``python -b``.
395
396    Fix contributed by **Jon Dufresne**.
397
398- Linux version parsing broke when the version included a '+' character
399  (Issue #119).
400
401- Now sets default TCP settings for platforms that support them (e.g. Linux).
402
403    +----------------------+---------------+
404    |   Constant           |   Value       |
405    +======================+===============+
406    | ``TCP_KEEPIDLE``     | ``60``        |
407    +----------------------+---------------+
408    | ``TCP_KEEPINTVL``    | ``10``        |
409    +----------------------+---------------+
410    | ``TCP_KEEPCNT``      | ``9``         |
411    +----------------------+---------------+
412    | ``TCP_USER_TIMEOUT`` | ``1000`` (1s) |
413    +----------------------+---------------+
414
415    This will help detecting the socket being closed earlier, which is very
416    important in failover and load balancing scenarios.
417
418.. _version-2.1.3:
419
4202.1.3
421=====
422:release-date: 2016-12-07 06:00 P.M PST
423:release-by: Ask Solem
424
425- Fixes compatibility with Python 2.7.5 and below (Issue #107).
426
427.. _version-2.1.2:
428
4292.1.2
430=====
431:release-date: 2016-12-07 02:00 P.M PST
432
433- Linux: Now sets the :data:`~socket.TCP_USER_TIMEOUT` flag if available
434  for better failed connection detection.
435
436    Contributed by **Jelte Fennema**.
437
438    The timeout is set to the ``connect_timeout`` value by default,
439    but can also be specified by using the ``socket_settings`` argument
440    to :class:`~amqp.Connection`:
441
442    .. code-block:: python
443
444        from amqp import Connection
445        from amqp.platform import TCP_USER_TIMEOUT
446
447        conn = Connection(socket_settings={
448            TCP_USER_TIMEOUT: int(60 * 1000),  # six minutes in ms.
449        })
450
451    When using :pypi:`Kombu` this can be specified as part of the
452    ``transport_options``:
453
454    .. code-block:: python
455
456        from amqp.platform import TCP_USER_TIMEOUT
457        from kombu import Connection
458
459        conn = Connection(transport_options={
460            'socket_settings': {
461                TCP_USER_TIMEOUT: int(60 * 1000),  # six minutes in ms.
462            },
463        })
464
465    Or when using :pypi:`Celery` it can be specified using the
466    ``broker_transport_options`` setting:
467
468    .. code-block:: python
469
470        from amqp.platform import TCP_USER_TIMEOUT
471        from celery import Celery
472
473        app = Celery()
474        app.conf.update(
475            broker_transport_options={
476                TCP_USER_TIMEOUT: int(60 * 1000),  # six minutes in ms.
477            }
478        )
479
480- Python compatibility: Fixed compatibility when using the python ``-b`` flag.
481
482    Fix contributed by Jon Dufresne.
483
484.. _version-2.1.1:
485
4862.1.1
487=====
488:release-date: 2016-10-13 06:36 P.M PDT
489:release-by: Ask Solem
490
491.. _version-2.1.0:
492
493- **Requirements**
494
495    - Now depends on :ref:`Vine 1.1.3 <vine:version-1.1.3>`.
496
497- Frame writer: Account for overhead when calculating frame size.
498
499    The client would crash if the message was within a certain size.
500
501-  Fixed struct unicode problems (#108)
502
503    * Standardize pack invocations on bytestrings.
504
505    * Leave some literals as strings to enable interpolation.
506
507    * Fix flake8 fail.
508
509    Fix contributed by **Brendan Smithyman**.
510
511
5122.1.0
513=====
514:release-date: 2016-09-07 04:23 P.M PDT
515:release-by: Ask Solem
516
517- **Requirements**
518
519    - Now depends on :ref:`Vine 1.1.2 <vine:version-1.1.2>`.
520
521- Now licensed under the BSD license!
522
523    Thanks to Barry Pederson for approving the license change,
524    which unifies the license used across all projects in the Celery
525    organization.
526
527- Datetimes in method frame arguments are now handled properly.
528
529- Fixed compatibility with Python <= 2.7.6
530
531- Frame_writer is no longer a generator, which should solve
532  a rare "generator already executing" error (Issue #103).
533
534.. _version-2.0.3:
535
5362.0.3
537=====
538:release-date: 2016-07-11 08:00 P.M PDT
539:release-by: Ask Solem
540
541- SSLTransport: Fixed crash "no attribute sslopts" when ``ssl=True``
542  (Issue #100).
543
544- Fixed incompatible argument spec for ``Connection.Close`` (Issue #45).
545
546    This caused the RabbitMQ server to raise an exception (INTERNAL ERROR).
547
548- Transport: No longer implements `__del__` to make sure gc can collect
549  connections.
550
551    It's the responsibility of the caller to close connections, this was
552    simply a relic from the amqplib library.
553
554.. _version-2.0.2:
555
5562.0.2
557=====
558:release-date: 2016-06-10 5:40 P.M PDT
559:release-by: Ask Solem
560
561- Python 3: Installation requirements ended up being a generator
562  and crashed setup.py.
563
564    Fix contributed by ChangBo Guo(gcb).
565
566- Python <= 2.7.7: struct.pack arguments cannot be unicode
567
568    Fix contributed by Alan Justino and Xin Li.
569
570- Python 3.4: Fixed use of `bytes % int`.
571
572    Fix contributed by Alan Justino.
573
574- Connection/Transport: Fixed handling of default port.
575
576    Fix contributed by Quentin Pradet.
577
578.. _version-2.0.1:
579
5802.0.1
581=====
582:release-date: 2016-05-31 6:20 P.M PDT
583:release-by: Ask Solem
584
585- Adds backward compatibility layer for the 1.4 API.
586
587    Using the connection without calling ``.connect()`` first will now work,
588    but a warning is emitted and the behavior is deprecated and will be
589    removed in version 2.2.
590
591- Fixes kombu 3.0/celery 3.1 compatibility (Issue #88).
592
593    Fix contributed by Bas ten Berge.
594
595- Fixed compatibility with Python 2.7.3 (Issue #85)
596
597    Fix contributed by Bas ten Berge.
598
599- Fixed bug where calling drain_events() with a timeout of 0 would actually
600  block until a frame is received.
601
602- Documentation moved to http://amqp.readthedocs.io (Issue #89).
603
604    See https://blog.readthedocs.com/securing-subdomains/ for the reasoning
605    behind this change.
606
607    Fix contributed by Adam Chainz.
608
609.. _version-2.0.0:
610
6112.0.0
612=====
613:release-date: 2016-05-26 1:44 P.M PDT
614:release-by: Ask Solem
615
616- No longer supports Python 2.6
617
618- You must now call Connection.connect() to establish the connection.
619
620    The Connection constructor no longer has side effects, so you have
621    to explicitly call connect first.
622
623- Library rewritten to anticipate async changes.
624
625- Connection now exposes underlying socket options.
626
627    This change allows to set arbitrary TCP socket options during the creation of
628    the transport.
629
630    Those values can be set passing a dictionray where the key is the name of
631    the parameter we want to set.
632    The names of the keys are the ones reported above.
633
634    Contributed by Andrea Rosa, Dallas Marlow and Rongze Zhu.
635
636- Additional logging for heartbeats.
637
638    Contributed by Davanum Srinivas, and Dmitry Mescheryakov.
639
640- SSL: Fixes issue with remote connection hanging
641
642    Fix contributed by Adrien Guinet.
643
644- SSL: ``ssl`` dict argument now supports the ``check_hostname`` key
645    (Issue #63).
646
647    Contributed by Vic Kumar.
648
649- Contributions by:
650
651    Adrien Guinet
652    Andrea Rosa
653    Artyom Koval
654    Corey Farwell
655    Craig Jellick
656    Dallas Marlow
657    Davanum Srinivas
658    Federico Ficarelli
659    Jared Lewis
660    Rémy Greinhofer
661    Rongze Zhu
662    Yury Selivanov
663    Vic Kumar
664    Vladimir Bolshakov
665    :github_user:`lezeroq`
666
667.. _version-1.4.9:
668
6691.4.9
670=====
671:release-date: 2016-01-08 5:50 P.M PST
672:release-by: Ask Solem
673
674- Fixes compatibility with Linux/macOS instances where the ``ctypes`` module
675  does not exist.
676
677    Fix contributed by Jared Lewis.
678
679.. _version-1.4.8:
680
6811.4.8
682=====
683:release-date: 2015-12-07 12:25 A.M
684:release-by: Ask Solem
685
686- ``abstract_channel.wait`` now accepts a float `timeout` parameter expressed
687    in seconds
688
689    Contributed by Goir.
690
691.. _version-1.4.7:
692
6931.4.7
694=====
695:release-date: 2015-10-02 05:30 P.M PDT
696:release-by: Ask Solem
697
698- Fixed libSystem error on macOS 10.11 (El Capitan)
699
700    Fix contributed by Eric Wang.
701
702- ``channel.basic_publish`` now raises :exc:`amqp.exceptions.NotConfirmed` on
703    ``basic.nack``.
704
705- AMQP timestamps received are now converted from GMT instead of local time
706    (Issue #67).
707
708- Wheel package installation now supported by both Python 2 and Python3.
709
710    Fix contributed by Rémy Greinhofer.
711
712.. _version-1.4.6:
713
7141.4.6
715=====
716:release-date: 2014-08-11 06:00 P.M UTC
717:release-by: Ask Solem
718
719- Now keeps buffer when socket times out.
720
721    Fix contributed by Artyom Koval.
722
723- Adds ``Connection.Transport`` attribute that can be used to specify
724  a different transport implementation.
725
726    Contributed by Yury Selivanov.
727
728.. _version-1.4.5:
729
7301.4.5
731=====
732:release-date: 2014-04-15 09:00 P.M UTC
733:release-by: Ask Solem
734
735- Can now deserialize more AMQP types.
736
737    Now handles types ``short string``, ``short short int``,
738    ``short short unsigned int``, ``short int``,  ``short unsigned int``,
739    ``long unsigned int``,  ``long long int``, ``long long unsigned int``
740    and ``float`` which for some reason was missing, even in the original
741    amqplib module.
742
743- SSL: Workaround for Python SSL bug.
744
745    A bug in the python socket library causes ``ssl.read/write()``
746    on a closed socket to raise :exc:`AttributeError` instead of
747    :exc:`IOError`.
748
749    Fix contributed by Craig Jellick.
750
751- ``Transport.__del_`` now handles errors occurring at late interpreter
752  shutdown (Issue #36).
753
754.. _version-1.4.4:
755
7561.4.4
757=====
758:release-date: 2014-03-03 04:00 P.M UTC
759:release-by: Ask Solem
760
761- SSL transport accidentally disconnected after read timeout.
762
763    Fix contributed by Craig Jellick.
764
765.. _version-1.4.3:
766
7671.4.3
768=====
769:release-date: 2014-02-09 03:00 P.M UTC
770:release-by: Ask Solem
771
772- Fixed bug where more data was requested from the socket
773  than was actually needed.
774
775    Contributed by Ionel Cristian Mărieș.
776
777.. _version-1.4.2:
778
7791.4.2
780=====
781:release-date: 2014-01-23 05:00 P.M UTC
782
783- Heartbeat negotiation would use heartbeat value from server even
784  if heartbeat disabled (Issue #31).
785
786.. _version-1.4.1:
787
7881.4.1
789=====
790:release-date: 2014-01-14 09:30 P.M UTC
791:release-by: Ask Solem
792
793- Fixed error occurring when heartbeats disabled.
794
795.. _version-1.4.0:
796
7971.4.0
798=====
799:release-date: 2014-01-13 03:00 P.M UTC
800:release-by: Ask Solem
801
802- Heartbeat implementation improved (Issue #6).
803
804    The new heartbeat behavior is the same approach as taken by the
805    RabbitMQ java library.
806
807    This also means that clients should preferably call the ``heartbeat_tick``
808    method more frequently (like every second) instead of using the old
809    ``rate`` argument (which is now ignored).
810
811    - Heartbeat interval is negotiated with the server.
812    - Some delay is allowed if the heartbeat is late.
813    - Monotonic time is used to keep track of the heartbeat
814      instead of relying on the caller to call the checking function
815      at the right time.
816
817    Contributed by Dustin J. Mitchell.
818
819- NoneType is now supported in tables and arrays.
820
821    Contributed by Dominik Fässler.
822
823- SSLTransport: Now handles ``ENOENT``.
824
825    Fix contributed by Adrien Guinet.
826
827.. _version-1.3.3:
828
8291.3.3
830=====
831:release-date: 2013-11-11 03:30 P.M UTC
832:release-by: Ask Solem
833
834- SSLTransport: Now keeps read buffer if an exception is raised
835  (Issue #26).
836
837    Fix contributed by Tommie Gannert.
838
839.. _version-1.3.2:
840
8411.3.2
842=====
843:release-date: 2013-10-29 02:00 P.M UTC
844:release-by: Ask Solem
845
846- Message.channel is now a channel object (not the channel id).
847
848- Bug in previous version caused the socket to be flagged as disconnected
849  at EAGAIN/EINTR.
850
851.. _version-1.3.1:
852
8531.3.1
854=====
855:release-date: 2013-10-24 04:00 P.M UTC
856:release-by: Ask Solem
857
858- Now implements Connection.connected (Issue #22).
859
860- Fixed bug where ``str(AMQPError)`` did not return string.
861
862.. _version-1.3.0:
863
8641.3.0
865=====
866:release-date: 2013-09-04 02:39 P.M UTC
867:release-by: Ask Solem
868
869- Now sets ``Message.channel`` on delivery (Issue #12)
870
871    amqplib used to make the channel object available
872    as ``Message.delivery_info['channel']``, but this was removed
873    in py-amqp.  librabbitmq sets ``Message.channel``,
874    which is a more reasonable solution in our opinion as that
875    keeps the delivery info intact.
876
877- New option to wait for publish confirmations (Issue #3)
878
879    There is now a new Connection ``confirm_publish`` that will
880    force any ``basic_publish`` call to wait for confirmation.
881
882    Enabling publisher confirms like this degrades performance
883    considerably, but can be suitable for some applications
884    and now it's possible by configuration.
885
886- ``queue_declare`` now returns named tuple of type
887  :class:`~amqp.protocol.basic_declare_ok_t`.
888
889    Supporting fields: ``queue``, ``message_count``, and
890    ``consumer_count``.
891
892- Contents of ``Channel.returned_messages`` is now named tuples.
893
894    Supporting fields: ``reply_code``, ``reply_text``, ``exchange``,
895    ``routing_key``, and ``message``.
896
897- Sockets now set to close on exec using the ``FD_CLOEXEC`` flag.
898
899    Currently only supported on platforms supporting this flag,
900    which does not include Windows.
901
902    Contributed by Tommie Gannert.
903
904.. _version-1.2.1:
905
9061.2.1
907=====
908:release-date: 2013-08-16 05:30 P.M UTC
909:release-by: Ask Solem
910
911- Adds promise type: :meth:`amqp.utils.promise`
912
913- Merges fixes from 1.0.x
914
915.. _version-1.2.0:
916
9171.2.0
918=====
919:release-date: 2012-11-12 04:00 P.M UTC
920:release-by: Ask Solem
921
922- New exception hierarchy:
923
924    - :class:`~amqp.AMQPError`
925        - :class:`~amqp.ConnectionError`
926            - :class:`~amqp.RecoverableConnectionError`
927                - :class:`~amqp.ConsumerCancelled`
928                - :class:`~amqp.ConnectionForced`
929                - :class:`~amqp.ResourceError`
930            - :class:`~IrrecoverableConnectionError`
931                - :class:`~amqp.ChannelNotOpen`
932                - :class:`~amqp.FrameError`
933                - :class:`~amqp.FrameSyntaxError`
934                - :class:`~amqp.InvalidCommand`
935                - :class:`~amqp.InvalidPath`
936                - :class:`~amqp.NotAllowed`
937                - :class:`~amqp.UnexpectedFrame`
938                - :class:`~amqp.AMQPNotImplementedError`
939                - :class:`~amqp.InternalError`
940        - :class:`~amqp.ChannelError`
941            - :class:`~RecoverableChannelError`
942                - :class:`~amqp.ContentTooLarge`
943                - :class:`~amqp.NoConsumers`
944                - :class:`~amqp.ResourceLocked`
945            - :class:`~IrrecoverableChannelError`
946                - :class:`~amqp.AccessRefused`
947                - :class:`~amqp.NotFound`
948                - :class:`~amqp.PreconditionFailed`
949
950
951.. _version-1.1.0:
952
9531.1.0
954=====
955:release-date: 2013-11-08 10:36 P.M UTC
956:release-by: Ask Solem
957
958- No longer supports Python 2.5
959
960- Fixed receiving of float table values.
961
962- Now Supports Python 3 and Python 2.6+ in the same source code.
963
964- Python 3 related fixes.
965
966.. _version-1.0.13:
967
9681.0.13
969======
970:release-date: 2013-07-31 04:00 P.M BST
971:release-by: Ask Solem
972
973- Fixed problems with the SSL transport (Issue #15).
974
975    Fix contributed by Adrien Guinet.
976
977- Small optimizations
978
979.. _version-1.0.12:
980
9811.0.12
982======
983:release-date: 2013-06-25 02:00 P.M BST
984:release-by: Ask Solem
985
986- Fixed another Python 3 compatibility problem.
987
988.. _version-1.0.11:
989
9901.0.11
991======
992:release-date: 2013-04-11 06:00 P.M BST
993:release-by: Ask Solem
994
995- Fixed Python 3 incompatibility in ``amqp/transport.py``.
996
997.. _version-1.0.10:
998
9991.0.10
1000======
1001:release-date: 2013-03-21 03:30 P.M UTC
1002:release-by: Ask Solem
1003
1004- Fixed Python 3 incompatibility in ``amqp/serialization.py``.
1005  (Issue #11).
1006
1007.. _version-1.0.9:
1008
10091.0.9
1010=====
1011:release-date: 2013-03-08 10:40 A.M UTC
1012:release-by: Ask Solem
1013
1014- Publisher ack callbacks should now work after typo fix (Issue #9).
1015
1016- ``channel(explicit_id)`` will now claim that id from the array
1017  of unused channel ids.
1018
1019- Fixes Jython compatibility.
1020
1021.. _version-1.0.8:
1022
10231.0.8
1024=====
1025:release-date: 2013-02-08 01:00 P.M UTC
1026:release-by: Ask Solem
1027
1028- Fixed SyntaxError on Python 2.5
1029
1030.. _version-1.0.7:
1031
10321.0.7
1033=====
1034:release-date: 2013-02-08 01:00 P.M UTC
1035:release-by: Ask Solem
1036
1037- Workaround for bug on some Python 2.5 installations where (2**32) is 0.
1038
1039- Can now serialize the ARRAY type.
1040
1041    Contributed by Adam Wentz.
1042
1043- Fixed tuple format bug in exception (Issue #4).
1044
1045.. _version-1.0.6:
1046
10471.0.6
1048=====
1049:release-date: 2012-11-29 01:14 P.M UTC
1050:release-by: Ask Solem
1051
1052- ``Channel.close`` is now ignored if the connection attribute is None.
1053
1054.. _version-1.0.5:
1055
10561.0.5
1057=====
1058:release-date: 2012-11-21 04:00 P.M UTC
1059:release-by: Ask Solem
1060
1061- ``Channel.basic_cancel`` is now ignored if the channel was already closed.
1062
1063- ``Channel.events`` is now a dict of sets::
1064
1065    >>> channel.events['basic_return'].add(on_basic_return)
1066    >>> channel.events['basic_return'].discard(on_basic_return)
1067
1068.. _version-1.0.4:
1069
10701.0.4
1071=====
1072:release-date: 2012-11-13 04:00 P.M UTC
1073:release-by: Ask Solem
1074
1075- Fixes Python 2.5 support
1076
1077.. _version-1.0.3:
1078
10791.0.3
1080=====
1081:release-date: 2012-11-12 04:00 P.M UTC
1082:release-by: Ask Solem
1083
1084- Now can also handle float in headers/tables when receiving messages.
1085
1086- Now uses :class:`array.array` to keep track of unused channel ids.
1087
1088- The :data:`~amqp.exceptions.METHOD_NAME_MAP` has been updated for
1089  amqp/0.9.1 and Rabbit extensions.
1090
1091- Removed a bunch of accidentally included images.
1092
1093.. _version-1.0.2:
1094
10951.0.2
1096=====
1097:release-date: 2012-11-06 05:00 P.M UTC
1098:release-by: Ask Solem
1099
1100- Now supports float values in headers/tables.
1101
1102.. _version-1.0.1:
1103
11041.0.1
1105=====
1106:release-date: 2012-11-05 01:00 P.M UTC
1107:release-by: Ask Solem
1108
1109- Connection errors no longer includes :exc:`AttributeError`.
1110
1111- Fixed problem with using the SSL transport in a non-blocking context.
1112
1113    Fix contributed by Mher Movsisyan.
1114
1115
1116.. _version-1.0.0:
1117
11181.0.0
1119=====
1120:release-date: 2012-11-05 01:00 P.M UTC
1121:release-by: Ask Solem
1122
1123- Channels are now restored on channel error, so that the connection does not
1124  have to closed.
1125
1126.. _version-0.9.4:
1127
1128Version 0.9.4
1129=============
1130
1131- Adds support for ``exchange_bind`` and ``exchange_unbind``.
1132
1133    Contributed by Rumyana Neykova
1134
1135- Fixed bugs in funtests and demo scripts.
1136
1137    Contributed by Rumyana Neykova
1138
1139.. _version-0.9.3:
1140
1141Version 0.9.3
1142=============
1143
1144- Fixed bug that could cause the consumer to crash when reading
1145  large message payloads asynchronously.
1146
1147- Serialization error messages now include the invalid value.
1148
1149.. _version-0.9.2:
1150
1151Version 0.9.2
1152=============
1153
1154- Consumer cancel notification support was broken (Issue #1)
1155
1156    Fix contributed by Andrew Grangaard
1157
1158.. _version-0.9.1:
1159
1160Version 0.9.1
1161=============
1162
1163- Supports draining events from multiple channels (``Connection.drain_events``)
1164- Support for timeouts
1165- Support for heartbeats
1166    - ``Connection.heartbeat_tick(rate=2)`` must called at regular intervals
1167      (half of the heartbeat value if rate is 2).
1168    - Or some other scheme by using ``Connection.send_heartbeat``.
1169- Supports RabbitMQ extensions:
1170    - Consumer Cancel Notifications
1171        - by default a cancel results in ``ChannelError`` being raised
1172        - but not if a ``on_cancel`` callback is passed to ``basic_consume``.
1173    - Publisher confirms
1174        - ``Channel.confirm_select()`` enables publisher confirms.
1175        - ``Channel.events['basic_ack'].append(my_callback)`` adds a callback
1176          to be called when a message is confirmed. This callback is then
1177          called with the signature ``(delivery_tag, multiple)``.
1178- Support for ``basic_return``
1179- Uses AMQP 0-9-1 instead of 0-8.
1180    - ``Channel.access_request`` and ``ticket`` arguments to methods
1181      **removed**.
1182    - Supports the ``arguments`` argument to ``basic_consume``.
1183    - ``internal`` argument to ``exchange_declare`` removed.
1184    - ``auto_delete`` argument to ``exchange_declare`` deprecated
1185    - ``insist`` argument to ``Connection`` removed.
1186    - ``Channel.alerts`` has been removed.
1187    - Support for ``Channel.basic_recover_async``.
1188    - ``Channel.basic_recover`` deprecated.
1189- Exceptions renamed to have idiomatic names:
1190    - ``AMQPException`` -> ``AMQPError``
1191    - ``AMQPConnectionException`` -> ConnectionError``
1192    - ``AMQPChannelException`` -> ChannelError``
1193    - ``Connection.known_hosts`` removed.
1194    - ``Connection`` no longer supports redirects.
1195    - ``exchange`` argument to ``queue_bind`` can now be empty
1196      to use the "default exchange".
1197- Adds ``Connection.is_alive`` that tries to detect
1198  whether the connection can still be used.
1199- Adds ``Connection.connection_errors`` and ``.channel_errors``,
1200  a list of recoverable errors.
1201- Exposes the underlying socket as ``Connection.sock``.
1202- Adds ``Channel.no_ack_consumers`` to keep track of consumer tags
1203  that set the no_ack flag.
1204- Slightly better at error recovery
1205