Skip to content
This repository was archived by the owner on Oct 30, 2020. It is now read-only.

Pin celery to latest version 4.2.1#15

Merged
alanjds merged 1 commit intomasterfrom
pyup-pin-celery-4.2.1
Jul 25, 2018
Merged

Pin celery to latest version 4.2.1#15
alanjds merged 1 commit intomasterfrom
pyup-pin-celery-4.2.1

Conversation

@pyup-bot
Copy link
Copy Markdown
Contributor

This PR pins celery to the latest release 4.2.1.

Changelog

4.2.1

=====
:release-date: 2018-07-18 11:00 AM IST
:release-by: Omer Katz

- **Result Backend**: Fix deserialization of exceptions that are present in the producer codebase but not in the consumer codebase.

Contributed by **John Arnold**

- **Message Protocol Compatibility**: Fix error caused by an invalid (None) timelimit value in the message headers when migrating messages from 3.x to 4.x.

Contributed by **Robert Kopaczewski**

- **Result Backend**: Fix serialization of exception arguments when exception arguments are not JSON serializable by default.

Contributed by **Tom Booth**

- **Worker**: Fixed multiple issues with rate limited tasks

Maintain scheduling order.
Fix possible scheduling of a :class:`celery.worker.request.Request` with the wrong :class:`kombu.utils.limits.TokenBucket` which could cause tasks' rate limit to behave incorrectly. 
Fix possible duplicated execution of tasks that were rate limited or if ETA/Countdown was provided for them.

Contributed by :github_user:`ideascf`

- **Worker**: Defensively handle invalid timelimit header values in requests.

Contributed by **Omer Katz**

Documentation fixes:


 - **Matt Wiens**
 - **Seunghun Lee**
 - **Lewis M. Kabui**
 - **Prathamesh Salunkhe**

4.2.0

=====
:release-date: 2018-06-10 21:30 PM IST
:release-by: Omer Katz

- **Task**: Add ``ignore_result`` as task execution option (4709, 3834)

 Contributed by **Andrii Kostenko** and **George Psarakis**.

- **Redis Result Backend**: Do not create PubSub subscriptions when results are ignored (4709, 3834)

 Contributed by **Andrii Kostenko** and **George Psarakis**.

- **Redis Result Backend**: Result consumer always unsubscribes when task state is ready (4666)

 Contributed by **George Psarakis**.

- **Development/Testing**: Add docker-compose and base Dockerfile for development (4482)

 Contributed by **Chris Mitchell**.

- **Documentation/Sphinx**: Teach autodoc to document tasks if undoc-members is not set (4588)

 Contributed by **Leo Singer**.

- **Documentation/Sphinx**: Put back undoc-members option in sphinx test (4586)

 Contributed by **Leo Singer**.

- **Documentation/Sphinx**: Sphinx autodoc picks up tasks automatically only if `undoc-members` is set (4584)

 Contributed by **Leo Singer**.

- **Task**: Fix shadow_name issue when using previous version Task class (4572)

 Contributed by :github_user:`pachewise`.

- **Task**: Add support for bound tasks as `link_error` parameter (Fixes 3723) (4545)

 Contributed by :github_user:`brabiega`.

- **Deployment**: Add a command line option for setting the Result Backend URL (4549)

 Contributed by :github_user:`y0ngdi`.

- **CI**: Enable pip cache in appveyor build (4546)

 Contributed by **Thijs Triemstra**.

- **Concurrency/Asynpool**: Fix errno property name shadowing.

 Contributed by **Omer Katz**.

- **DynamoDB Backend**: Configurable endpoint URL (4532)

 Contributed by **Bohdan Rybak**.

- **Timezones**: Correctly detect UTC timezone and timezone from settings (Fixes 4517) (4519)

 Contributed by :github_user:`last-partizan`.

- **Control**: Cleanup the mailbox's producer pool after forking (4472)

 Contributed by **Nick Eaket**.

- **Documentation**: Start Celery and Celery Beat on Azure WebJob (4484)

 Contributed by **PauloPeres**.

- **Celery Beat**: Schedule due tasks on startup, after Beat restart has occurred (4493)

 Contributed by **Igor Kasianov**.

- **Worker**: Use absolute time when task is accepted by worker pool (3684)

 Contributed by **Régis Behmo**.

- **Canvas**: Propagate arguments to chains inside groups (4481)

 Contributed by **Chris Mitchell**.

- **Canvas**: Fix `Task.replace` behavior in nested chords (fixes 4368) (4369)

 Contributed by **Denis Shirokov** & **Alex Hill**.

- **Installation**: Pass python_requires argument to setuptools (4479)

 Contributed by **Jon Dufresne**.

- **Message Protocol Compatibility**: Handle "hybrid" messages that have moved between Celery versions (4358) (Issue 4356)

 Contributed by **Russell Keith-Magee**.

- **Canvas**: request on_timeout now ignores soft time limit exception (fixes 4412) (4473)

 Contributed by **Alex Garel**.

- **Redis Result Backend**: Integration test to verify PubSub unsubscriptions (4468)

 Contributed by **George Psarakis**.

- **Message Protocol Properties**: Allow the shadow keyword argument and the shadow_name method to set shadow properly (4381)

 Contributed by :github_user:`hclihn`.

- **Canvas**: Run chord_unlock on same queue as chord body (4448) (Issue 4337)

 Contributed by **Alex Hill**.

- **Canvas**: Support chords with empty header group (4443)

 Contributed by **Alex Hill**.

- **Timezones**: make astimezone call in localize more safe (4324)

 Contributed by **Matt Davis**.

- **Canvas**: Fix length-1 and nested chords (4437) (Issues 4393, 4055, 3885, 3597, 3574, 3323, 4301)

 Contributed by **Alex Hill**.

- **CI**: Run `Openstack Bandit <https://pypi.org/project/bandit/1.0.1/>`_ in Travis CI in order to detect security issues.

 Contributed by **Omer Katz**.

- **CI**: Run `isort <https://github.com/timothycrosley/isort>`_ in Travis CI in order to lint Python **import** statements.

 Contributed by **Omer Katz**.

- **Canvas**: Resolve TypeError on `.get` from nested groups (4432) (Issue 4274)

 Contributed by **Misha Wolfson**.

- **CouchDB Backend**: Correct CouchDB key string type for Python 2/3 compatibility (4166)

 Contributed by :github_user:`fmind` && **Omer Katz**.

- **Group Result**: Fix current_app fallback in GroupResult.restore() (4431)

 Contributed by **Alex Hill**.

- **Consul Backend**: Correct key string type for Python 2/3 compatibility (4416)

 Contributed by **Wido den Hollander**.

- **Group Result**: Correctly restore an empty GroupResult (2202) (4427)

 Contributed by **Alex Hill** & **Omer Katz**.

- **Result**: Disable synchronous waiting for sub-tasks on eager mode(4322)

 Contributed by **Denis Podlesniy**.

- **Celery Beat**: Detect timezone or Daylight Saving Time changes (1604) (4403)

 Contributed by **Vincent Barbaresi**.

- **Canvas**: Fix append to an empty chain. Fixes 4047. (4402)

 Contributed by **Omer Katz**.

- **Task**: Allow shadow to override task name in trace and logging messages. (4379)

 Contributed by :github_user:`hclihn`.

- **Documentation/Sphinx**: Fix getfullargspec Python 2.x compatibility in contrib/sphinx.py (4399)

 Contributed by **Javier Martin Montull**.

- **Documentation**: Updated installation instructions for SQS broker (4382)

 Contributed by **Sergio Fernandez**.

- **Celery Beat**: Better equality comparison for ScheduleEntry instances (4312)

 Contributed by :github_user:`mariia-zelenova`.

- **Task**: Adding 'shadow' property to as_task_v2 (4350)

 Contributed by **Marcelo Da Cruz Pinto**.

- Try to import directly, do not use deprecated imp method (4216)

 Contributed by **Tobias Kunze**.

- **Task**: Enable `kwargsrepr` and `argsrepr` override for modifying task argument representation (4260)

 Contributed by **James M. Allen**.

- **Result Backend**: Add Redis Sentinel backend (4144)

 Contributed by **Geoffrey Bauduin**.

- Use unique time values for Collections/LimitedSet (3879 and 3891) (3892)

 Contributed by :github_user:`lead2gold`.

- **CI**: Report coverage for all result backends.

 Contributed by **Omer Katz**.

- **Django**: Use Django DB max age connection setting (fixes 4116) (4292)

 Contributed by **Marco Schweighauser**.

- **Canvas**: Properly take into account chain tasks link_error (4240)

 Contributed by :github_user:`agladkov`.

- **Canvas**: Allow to create group with single task (fixes issue 4255) (4280)

 Contributed by :github_user:`agladkov`.

- **Canvas**: Copy dictionary parameter in chord.from_dict before modifying (fixes issue 4223) (4278)

 Contributed by :github_user:`agladkov`.

- **Results Backend**: Add Cassandra options (4224)

 Contributed by **Scott Cooper**.

- **Worker**: Apply rate limiting for tasks with ETA (4251)

 Contributed by :github_user:`arpanshah29`.

- **Celery Beat**: support scheduler entries without a schedule (4235)

 Contributed by **Markus Kaiserswerth**.

- **SQS Broker**: Updated SQS requirements file with correct boto3 version (4231)

 Contributed by **Alejandro Varas**.

- Remove unused code from _create_app contextmanager (4204)

 Contributed by **Ryan P Kilby**.

- **Group Result**: Modify GroupResult.as_tuple() to include parent (fixes 4106) (4205)

 Contributed by :github_user:`pachewise`.

- **Beat**: Set default scheduler class in beat command. (4189)

 Contributed by :github_user:`Kxrr`.

- **Worker**: Retry signal receiver after raised exception (4192)

 Contributed by **David Davis**.

- **Task**: Allow custom Request class for tasks (3977)

 Contributed by **Manuel Vázquez Acosta**.

- **Django**: Django fixup should close all cache backends (4187)

 Contributed by **Raphaël Riel**.

- **Deployment**: Adds stopasgroup to the supervisor scripts (4200)

 Contributed by :github_user:`martialp`.

- Using Exception.args to serialize/deserialize exceptions (4085)

 Contributed by **Alexander Ovechkin**.

- **Timezones**: Correct calculation of application current time with timezone (4173)

 Contributed by **George Psarakis**.

- **Remote Debugger**: Set the SO_REUSEADDR option on the socket (3969)

 Contributed by **Theodore Dubois**.

- **Django**: Celery ignores exceptions raised during `django.setup()` (4146)

 Contributed by **Kevin Gu**.

- Use heartbeat setting from application configuration for Broker connection (4148)

 Contributed by :github_user:`mperice`.

- **Celery Beat**: Fixed exception caused by next_transit receiving an unexpected argument. (4103)

 Contributed by **DDevine**.

- **Task** Introduce exponential backoff with Task auto-retry (4101)

 Contributed by **David Baumgold**.

- **AsyncResult**: Remove weak-references to bound methods in AsyncResult promises. (4131)

 Contributed by **Vinod Chandru**.

- **Development/Testing**: Allow eager application of canvas structures (4576)

 Contributed by **Nicholas Pilon**.

- **Command Line**: Flush stderr before exiting with error code 1.

 Contributed by **Antonin Delpeuch**.

- **Task**: Escapes single quotes in kwargsrepr strings.

 Contributed by **Kareem Zidane**

- **AsyncResult**: Restore ability to join over ResultSet after fixing celery/3818.

 Contributed by **Derek Harland**

- **Redis Results Backend**: Unsubscribe on message success.

Previously Celery would leak channels, filling the memory of the Redis instance.

Contributed by **George Psarakis**

- **Task**: Only convert eta to isoformat when it is not already a string.

Contributed by **Omer Katz**

- **Redis Results Backend**: The result_backend setting now supports rediss:// URIs

Contributed by **James Remeika**

- **Canvas** Keyword arguments are passed to tasks in chain as expected.

Contributed by :github_user:`tothegump`

- **Django** Fix a regression casuing Celery to crash when using Django.

Contributed by **Jonas Haag**

- **Canvas** Chain with one task now runs as expected.

Contributed by :github_user:`tothegump`

- **Kombu** Celery 4.2 now requires Kombu 4.2 or better.

Contributed by **Omer Katz & Asif Saifuddin Auvi**

- `GreenletExit` is not in `__all__` in greenlet.py which can not be imported by Python 3.6.

The import was adjusted to work on Python 3.6 as well.

Contributed by **Hsiaoming Yang**

- Fixed a regression that occured during the development of Celery 4.2 which caused `celery report` to crash when Django is installed.

Contributed by **Josue Balandrano Coronel**

- Matched the behavior of `GroupResult.as_tuple()` to that of `AsyncResult.as_tuple()`.

The group's parent is now serialized correctly.

Contributed by **Josue Balandrano Coronel**

- Use Redis coercion mechanism for converting URI query parameters.

Contributed by **Justin Patrin**

- Fixed the representation of `GroupResult`.

The dependency graph is now presented correctly.

Contributed by **Josue Balandrano Coronel**

Documentation, CI, Installation and Tests fixes:


 - **Sammie S. Taunton**
 - **Dan Wilson**
 - :github_user:`pachewise`
 - **Sergi Almacellas Abellana**
 - **Omer Katz**
 - **Alex Zaitsev**
 - **Leo Singer**
 - **Rachel Johnson**
 - **Jon Dufresne**
 - **Samuel Dion-Girardeau**
 - **Ryan Guest**
 - **Huang Huang**
 - **Geoffrey Bauduin**
 - **Andrew Wong**
 - **Mads Jensen**
 - **Jackie Leng**
 - **Harry Moreno**
 - :github_user:`michael-k`
 - **Nicolas Mota**
 - **Armenak Baburyan**
 - **Patrick Zhang**
 - :github_user:`anentropic`
 - :github_user:`jairojair`
 - **Ben Welsh**
 - **Michael Peake**
 - **Fengyuan Chen**
 - :github_user:`arpanshah29`
 - **Xavier Hardy**
 - **Shitikanth**
 - **Igor Kasianov**
 - **John Arnold**
 - :github_user:`dmollerm`
 - **Robert Knight**
 - **Asif Saifuddin Auvi**
 - **Eduardo Ramírez**
 - **Kamil Breguła**
 - **Juan Gutierrez**

4.1.0

=====
:release-date: 2017-07-17 04:45 P.M MST
:release-by: Anthony Lukach

- SQS: Added support for long-polling on all supported queries. Fixed bug
causing error on parsing responses with no retrieved messages from SQS.

 Contributed by **Anthony Lukach**.

- Async hub: Fixed potential infinite loop while performing todo tasks
(Issue celery/celery3712).

- Qpid: Fixed bug where messages could have duplicate ``delivery_tag``
(Issue 563).

 Contributed by **bmbouter**.

- MongoDB: Fixed problem with using ``readPreference`` option at pymongo 3.x.

 Contributed by **Mikhail Elovskikh**.

- Re-added support for :pypi:``SQLAlchemy``

 Contributed by **Amin Ghadersohi**.

- SQS: Fixed bug where hostname would default to ``localhost`` if not specified
in settings.

 Contributed by **Anthony Lukach**.

- Redis: Added support for reading password from transport URL (Issue 677).

 Contributed by **George Psarakis**.

- RabbitMQ: Ensured safer encoding of queue arguments.

 Contributed by **Robert Kopaczewski**.

- Added fallback to :func:``uuid.uuid5`` in :func:``generate_oid`` if
:func:``uuid.uuid3`` fails.

 Contributed by **Bill Nottingham**.

- Fixed race condition and innacurrate timeouts for
:class:``kombu.simple.SimpleBase`` (Issue 720).

 Contributed by **c-nichols**.

- Zookeeper: Fixed last chroot character trimming

 Contributed by **Dima Kurguzov**.

- RabbitMQ: Fixed bug causing an exception when attempting to close an
already-closed connection (Issue 690).

 Contributed by **eavictor**.

- Removed deprecated use of StopIteration in generators and invalid regex
escape sequence.

 Contributed by **Jon Dufresne**.

- Added Python 3.6 to CI testing.

 Contributed by **Jon Dufresne**.

- SQS: Allowed endpoint URL to be specified in the boto3 connection.

 Contributed by **georgepsarakis**.

- SQS: Added support for Python 3.4.

 Contributed by **Anthony Lukach**.

- SQS: ``kombu[sqs]`` now depends on :pypi:`boto3` (no longer using
:pypi:`boto)`.

 - Adds support for Python 3.4+
 - Adds support for FIFO queues (Issue 678) and (Issue celery/celery3690)
 - Avoids issues around a broken endpoints file (Issue celery/celery3672)

 Contributed by **Mischa Spiegelmock** and **Jerry Seutter**.

- Zookeeper: Added support for delaying task with Python 3.

 Contributed by **Dima Kurguzov**.

- SQS: Fixed bug where :meth:`kombu.transport.SQS.drain_events` did not support
callback argument (Issue 694).

 Contributed by **Michael Montgomery**.

- Fixed bug around modifying dictionary size while iterating over it
(Issue 675).

 Contributed by **Felix Yan**.

- etcd: Added handling for :exc:`EtcdException` exception rather than
:exc:`EtcdError`.

 Contributed by **Stephen Milner**.

- Documentation improvements by:

 - **Mads Jensen**
 - **Matias Insaurralde**
 - **Omer Katz**
 - **Dmitry Dygalo**
 - **Christopher Hoskin**

.. _version-4.0.2:

4.0.2

=====
:release-date: 2016-12-15 03:31 P.M PST
:release-by: Ask Solem

- Now depends on :mod:`amqp` 2.1.4

 This new version takes advantage of TCP Keepalive settings on Linux,
 making it better at detecting closed connections, also in failover
 conditions.

- Redis: Priority was reversed so, e.g. priority 0 became priority 9.

.. _version-4.0.1:

4.0.1

=====
:release-date: 2016-12-07 06:00 P.M PST
:release-by: Ask Solem

- Now depends on :mod:`amqp` 2.1.3

 This new version takes advantage of the new ``TCP_USER_TIMEOUT`` socket option
 on Linux.

- Producer: Fixed performance degradation when default exchange specified
(Issue 651).

- QPid: Switch to using getattr in qpid.Transport.__del__ (Issue 658)

 Contributed by **Patrick Creech**.

- QPid: Now uses monotonic time for timeouts.

- MongoDB: Fixed compatibility with Python 3 (Issue 661).

- Consumer: ``__exit__`` now skips cancelling consumer if connection-related
error raised (Issue 670).

- MongoDB: Removes use of natural sort (Issue 638).

 Contributed by **Anton Chaporgin**.

- Fixed wrong keyword argument ``channel`` error (Issue 652).

 Contributed by **Toomore Chiang**.

- Safe argument to ``urllib.quote`` must be bytes on Python 2.x (Issue 645).

- Documentation improvments by:

 - **Carlos Edo**
 - **Cemre Mengu**

.. _version-4.0:

4.0

===
:release-date: 2016-10-28 16:45 P.M UTC
:release-by: Ask Solem

- Now depends on :mod:`amqp` 2.0.

 The new py-amqp version have been refactored for better performance,
 using modern Python socket conventions, and API consistency.

- No longer depends on :mod:`anyjson`.

 Kombu will now only choose between :pypi:`simplejson` and the built-in
 :mod:`json`.

 Using the latest version of simplejson is recommended:

 .. code-block:: console

     $ pip install -U simplejson

- Removed transports that are no longer supported in this version:

 - Django ORM transport
 - SQLAlchemy ORM transport
 - Beanstalk transport
 - ZeroMQ transport
 - amqplib transport (use pyamqp).

- API Changes

 * Signature of :class:`kombu.Message` now takes body as first argment.

     It used to be ``Message(channel, body=body, **kw)``, but now it's
     ``Message(body, channel=channel, **kw)``.

     This is unlikey to affect you, as the Kombu API does not have
     users instantiate messages manually.

- New SQS transport

 Donated by NextDoor, with additional contributions from mdk.

 .. note::

     ``kombu[sqs]`` now depends on :pypi:`pycurl`.

- New Consul transport.

 Contributed by **Wido den Hollander**.

- New etcd transport.

 Contributed by **Stephen Milner**.

- New Qpid transport.

 It was introduced as an experimental transport in Kombu 3.0, but is now
 mature enough to be fully supported.

 Created and maintained by **Brian Bouterse**.

- Redis: Priority 0 is now lowest, 9 is highest.
(**backward incompatible**)

 This to match how priorities in AMQP works.

 Fix contributed by **Alex Koshelev**.

- Redis: Support for Sentinel

 You can point the connection to a list of sentinel URLs like:

 .. code-block:: text

     sentinel://0.0.0.0:26379;sentinel://0.0.0.0:26380/...

 where each sentinel is separated by a `;`. Multiple sentinels are handled
 by :class:`kombu.Connection` constructor, and placed in the alternative
 list of servers to connect to in case of connection failure.

Contributed by **Sergey Azovskov**, and **Lorenzo Mancini**

- RabbitMQ Queue Extensions

 New arguments have been added to :class:`kombu.Queue` that lets
 you directly and conveniently configure the RabbitMQ queue extensions.

 - ``Queue(expires=20.0)``

     Set queue expiry time in float seconds.

     See :attr:`kombu.Queue.expires`.

 - ``Queue(message_ttl=30.0)``

     Set queue message time-to-live float seconds.

     See :attr:`kombu.Queue.message_ttl`.

 - ``Queue(max_length=1000)``

     Set queue max length (number of messages) as int.

     See :attr:`kombu.Queue.max_length`.

 - ``Queue(max_length_bytes=1000)``

     Set queue max length (message size total in bytes) as int.

     See :attr:`kombu.Queue.max_length_bytes`.

 - ``Queue(max_priority=10)``

     Declare queue to be a priority queue that routes messages
     based on the ``priority`` field of the message.

     See :attr:`kombu.Queue.max_priority`.

- RabbitMQ: ``Message.ack`` now supports the ``multiple`` argument.

 If multiple is set to True, then all messages received before
 the message being acked will also be acknowledged.

- ``amqps://`` can now be specified to require SSL (Issue 610).

- ``Consumer.cancel_by_queue`` is now constant time.

- ``Connection.ensure*`` now raises :exc:`kombu.exceptions.OperationalError`.

 Things that can be retried are now reraised as
 :exc:`kombu.exceptions.OperationalError`.

- Redis: Fixed SSL support.

 Contributed by **Robert Kolba**.

- New ``Queue.consumer_arguments`` can be used for the ability to
set consumer priority via ``x-priority``.

See https://www.rabbitmq.com/consumer-priority.html

Example:

.. code-block:: python

     Queue(
         'qname',
         exchange=Exchange('exchange'),
         routing_key='qname',
         consumer_arguments={'x-priority': 3},
     )

- Queue/Exchange: ``no_declare`` option added (also enabled for
internal amq. exchanges) (Issue 565).

- JSON serializer now calls ``obj.__json__`` for unsupported types.

 This means you can now define a ``__json__`` method for custom
 types that can be reduced down to a built-in json type.

 Example:

 .. code-block:: python

     class Person:
         first_name = None
         last_name = None
         address = None

         def __json__(self):
             return {
                 'first_name': self.first_name,
                 'last_name': self.last_name,
                 'address': self.address,
             }

- JSON serializer now handles datetimes, Django promise, UUID and Decimal.

- Beanstalk: Priority 0 is now lowest, 9 is highest.
(**backward incompatible**)

 This to match how priorities in AMQP works.

 Fix contributed by **Alex Koshelev**.

- Redis: now supports SSL using the ``ssl`` argument to
:class:`~kombu.Connection`.

- Redis: Fanout exchanges are no longer visible between vhosts,
and fanout messages can be filtered by patterns.
(**backward incompatible**)

 It was possible to enable this mode previously using the
 ``fanout_prefix``, and ``fanout_patterns``
 transport options, but now these are enabled by default.

 If you want to mix and match producers/consumers running different
 versions you need to configure your kombu 3.x clients to also enable
 these options:

 .. code-block:: pycon

     >>> Connection(transport_options={
         'fanout_prefix': True,
         'fanout_patterns': True,
     })

- Pidbox: Mailbox new arguments: TTL and expiry.

 Mailbox now supports new arguments for controlling
 message TTLs and queue expiry, both for the mailbox
 queue and for reply queues.

 - ``queue_expires`` (float/int seconds).
 - ``queue_ttl`` (float/int seconds).
 - ``reply_queue_expires`` (float/int seconds).
 - ``reply_queue_ttl`` (float/int seconds).

 All take seconds in int/float.

 Contributed by **Alan Justino**.

- Exchange.delivery_mode now defaults to :const:`None`, and the default
is instead set by ``Producer.publish``.

- :class:`~kombu.Consumer` now supports a new ``prefetch_count`` argument,
which if provided will force the consumer to set an initial prefetch count
just before starting.

- Virtual transports now stores ``priority`` as a property, not in
``delivery_info``, to be compatible with AMQP.

- ``reply_to`` argument to ``Producer.publish`` can now be
:class:`~kombu.Queue` instance.

- Connection: There's now a new method
``Connection.supports_exchange_type(type)`` that can be used to check if the
current transport supports a specific exchange type.

- SQS: Consumers can now read json messages not sent by Kombu.

 Contributed by **Juan Carlos Ferrer**.

- SQS: Will now log the access key used when authentication fails.

 Contributed by **Hank John**.

- Added new :class:`kombu.mixins.ConsumerProducerMixin` for consumers that
will also publish messages on a separate connection.

- Messages: Now have a more descriptive ``repr``.

 Contributed by **Joshua Harlow**.

- Async: HTTP client based on curl.

- Async: Now uses `poll` instead of `select` where available.

- MongoDB: Now supports priorities

 Contributed by **Alex Koshelev**.

- Virtual transports now supports multiple queue bindings.

 Contributed by **Federico Ficarelli**.

- Virtual transports now supports the anon exchange.

 If when publishing a message, the exchange argument is set to '' (empty
 string), the routing_key will be regarded as the destination queue.

 This will bypass the routing table compeltely, and just deliver the
 message to the queue name specified in the routing key.

- Zookeeper: Transport now uses the built-in suport in kazoo to handle
failover when using a list of server names.

 Contributed by **Joshua Harlow**.

- ConsumerMixin.run now passes keyword arguments to .consume.

Deprecations and removals
-------------------------

- The deprecated method ``Consumer.add_queue_from_dict`` has been removed.

 Use instead:

 .. code-block:: python

     consumer.add_queue(Queue.from_dict(queue_name, **options))

- The deprecated function ``kombu.serialization.encode`` has been removed.

 Use :func:`kombu.serialization.dumps` instead.

- The deprecated function ``kombu.serialization.decode`` has been removed.

 Use :func:`kombu.serialization.loads` instead.

- Removed module ``kombu.syn``

 ``detect_environment`` has been moved to kombu.utils.compat

.. _version-3.0.37:

3.5.0.4

--------------------

- Fix rebuild_ctype losing BufferedWrapper reference on Python 3
- Deprecation warning with python 3.6 fixed
- Correct spawn start method

3.5.0.3

--------------------

- Adds Process._authkey alias to .authkey for 2.7 compat.
- Remove superfluous else clause from max_memory_per_child_check.
- Document and test all supported Python versions.
- Extend 'Process' to be compatible with < Py3.5.
- Use a properly initialized logger in pool.py error logging.
- _trywaitkill can now kill a whole process group if the worker process declares itself as a group leader.
- Fix cpython issue 14881 (See http://bugs.python.org/issue14881).
- Fix for a crash on windows.
- Fix messaging in case of worker exceeds max memory.

3.5.0.2

--------------------

- max_memory_per_child was measured in kilobytes on Linux, but bytes on
*BSD/MacOS, it's now always kilobytes.

- Windows: Adds support for max_memory_per_child, but requires the
``psutil`` package to be installed.

- Fixed bug in ForkingPickler.loadbuf, where it tried to pass
a BytesIO instance directly to ``pickle.loads`` on Python 2.7.

3.5.0.1

--------------------

- Connection: Properly handle EINTR (Issue 191).

- Fixed bug with missing CreateProcess for Windows on Python 2.7.

- Adds Process._counter for compatibility with Python <3.5.

3.5.0.0

--------------------

- No longer supports Python 2.6

 You need Python 2.7 or later to use this version of billiard.

- Merged changes from CPython 3.5

3.3.0.20

---------------------

- Pool: Timeouts will attempt to send SIGKILL, but this signal
does not exist on Windows.  Replaced with SIGTERM.

3.3.0.19

---------------------

- Pool: Exceptions in user timeout callbacks are now logged instead
of crashing the pool.

 Contributed by Pierre Fersing.

- Pool: Exit codes in errors were improperly being represented as signals.

- Pool: ``.map``. and ``.imap`` now working again.

- Now builds on FreeBSD 10.

 Contributed by Michael Fladischer.

3.3.0.18

---------------------

- Now compiles on GNU/kFreeBSD

 Contributed by Michael Fladischer.

- Pool: `AF_PIPE` address fixed so that it works on recent Windows versions
in combination with Python 2.7.7.

 Fix contributed by Joshua Tacoma.

- Pool: Fix for `Supervisor object has no attribute _children` error.

 Fix contributed by Andres Riancho.

- Pool: Fixed bug with human_status(None).

- Pool: shrink did not work properly if asked to remove more than 1 process.

3.3.0.17

---------------------

- Fixes SemLock on Python 3.4 (Issue 107) when using
``forking_enable(False)``.

- Pool: Include more useful exitcode information when processes exit.

3.3.0.16

---------------------

- Previous release was missing the billiard.py3 package from MANIFEST
so the installation would not work on Python 3.

3.3.0.15

---------------------

- Pool: Fixed "cannot join process not started" error.

- Now uses billiard.py2 and billiard.py3 specific packages that are installed
depending on the python version used.

 This way the installation will not import version specific modules (and
 possibly crash).

3.3.0.14

---------------------

- Fixed problem with our backwards compatible ``bytes`` wrapper
(Issue 103).

- No longer expects frozen applications to have a valid ``__file__``
attribute.

 Fix contributed by George Sibble.

3.3.0.13

---------------------

- Fixes compatability with Python < 2.7.6

- No longer attempts to handle ``SIGBUS``

 Contributed by Vishal Vatsa.

- Non-thread based pool now only handles signals:

 ``SIGHUP``, ``SIGQUIT``, ``SIGTERM``, ``SIGUSR1``,
 ``SIGUSR2``.

- setup.py: Only show compilation warning for build related commands.

3.3.0.12

---------------------

- Fixed installation for Python 3.

 Contributed by Rickert Mulder.

- Pool: Fixed bug with maxtasksperchild.

 Fix contributed by Ionel Cristian Maries.

- Pool: Fixed bug in maintain_pool.

3.3.0.11

---------------------

- Fixed Unicode error when installing the distribution (Issue 89).

- Daemonic processes are now allowed to have children.

 But note that it will not be possible to automatically
 terminate them when the process exits.

 See discussion at https://github.com/celery/celery/issues/1709

- Pool:  Would not always be able to detect that a process exited.

3.3.0.10

---------------------

- Windows: Fixed problem with missing ``WAITABANDONED_0``

 Fix contributed by Matthias Wagner

- Windows: PipeConnection can now be inherited.

 Fix contributed by Matthias Wagner

3.3.0.9

--------------------

- Temporary workaround for Celery maxtasksperchild issue.

 Fix contributed by Ionel Cristian Maries.

3.3.0.8

--------------------

- Now also sets ``multiprocessing.current_process`` for compatibility
with loggings ``processName`` field.

3.3.0.7

--------------------

- Fixed compatibility with PyPy 2.1 + 2.2.

- Fixed problem in pypy detection.

 Fix contributed by Tin Tvrtkovic.

- Now uses ``ctypes.find_library`` instead of hardcoded path to find
the macOS CoreServices framework.

 Fix contributed by Moritz Kassner.

3.3.0.6

--------------------

- Now works without C extension again.

- New ``_billiard.read(fd, buffer, [len, ])`` function
implements os.read with buffer support (new buffer API)

- New pure-python implementation of ``Connection.send_offset``.

3.3.0.5

--------------------

- All platforms except for Windows/PyPy/Jython now requires the C extension.

3.3.0.4

--------------------

- Fixed problem with Python3 and setblocking.

3.3.0.3

--------------------

- Now works on Windows again.

3.3.0.2

--------------------

- ApplyResult.terminate() may be set to signify that the job
must not be executed.  It can be used in combination with
Pool.terminate_job.

- Pipe/_SimpleQueue: Now supports rnonblock/wnonblock arguments
to set the read or write end of the pipe to be nonblocking.

- Pool: Log message included exception info but exception happened
in another process so the resulting traceback was wrong.

- Pool: Worker process can now prepare results before they are sent
back to the main process (using ``Worker.prepare_result``).

3.3.0.1

--------------------

- Pool: New ``correlation_id`` argument to ``apply_async`` can be
used to set a related id for the ``ApplyResult`` object returned:

 >>> r = pool.apply_async(target, args, kwargs, correlation_id='foo')
 >>> r.correlation_id
 'foo'

- Pool: New callback `on_process_exit` is called when a pool
process exits, with signature ``(pid, exitcode)``.

 Contributed by Daniel M. Taub.

- Pool: Improved the too many restarts detection.

3.3.0.0

--------------------

- Dual code base now runs on Python 2.6+ and Python 3.

- No longer compatible with Python 2.5

- Includes many changes from multiprocessing in 3.4.

- Now uses ``time.monotonic`` when available, also including
fallback implementations for Linux and macOS.

- No longer cleans up after receiving SIGILL, SIGSEGV or SIGFPE

 Contributed by Kevin Blackham

- ``Finalize`` and ``register_after_fork`` is now aliases to multiprocessing.

 It's better to import these from multiprocessing directly now
 so that there aren't multiple registries.

- New `billiard.queues._SimpleQueue` that does not use semaphores.

- Pool: Can now be extended to support using multiple IPC queues.

- Pool: Can now use async I/O to write to pool IPC queues.

- Pool: New ``Worker.on_loop_stop`` handler can be used to add actions
at pool worker process shutdown.

 Note that, like all finalization handlers, there is no guarantee that
 this will be executed.

 Contributed by dmtaub.

3.0.37

======
:release-date: 2016-10-06 05:00 P.M PDT
:release-by: Ask Solem

- Connection: Return value of ``.info()`` was no longer JSON serializable,
leading to "itertools.cycle object not JSON serializable"
errors (Issue 635).

.. _version-3.0.36:

3.0.36

======
:release-date: 2016-09-30 03:06 P.M PDT
:release-by: Ask Solem

- Connection: Fixed bug when cloning connection with alternate urls.

 Fix contributed by Emmanuel Cazenave.

- Redis: Fixed problem with unix socket connections.

 https://github.com/celery/celery/issues/2903

 Fix contributed by Raphael Michel.

- Redis: Fixed compatibility with older redis-py versions (Issue 576).

- Broadcast now retains queue name when being copied/pickled (Issue 578).

.. _version-3.0.35:

3.0.35

======
:release-date: 2016-03-22 11:22 P.M PST
:release-by: Ask Solem

- msgpack: msgpack support now requires msgpack-python > 0.4.7.

- Redis: TimeoutError was no longer handled as a recoverable error.

- Redis: Adds the ability to set more Redis connection options
using ``Connection(transport_options={...})``.

 - ``socket_connect_timeout``
 - ``socket_keepalive`` (requires :mod:`redis-py` > 2.10)
 - ``socket_keepalive_options`` (requires :mod:`redis-py` > 2.10)

- msgpack: Fixes support for binary/unicode data

.. _version-3.0.34:

3.0.34

======
:release-date: 2016-03-03 05:30 P.M PST
:release-by: Ask Solem

- Qpid: Adds async error handling.

 Contributed by Brian Bouterse.

- Qpid: Delivery tag is now a UUID4 (Issue 563).

 Fix contributed by Brian Bouterse.

- Redis: Connection.as_uri() returned malformed URLs when the
``redis+socket`` scheme was ised (Issue celery/celery2995).

- msgpack: Use binary encoding instead of utf-8 (Issue 570).

.. _version-3.0.33:

3.0.33

======
:release-date: 2016-01-08 06:36 P.M PST
:release-by: Ask Solem

- Now depends on :mod:`amqp` 1.4.9.

- Redis: Fixed problem with auxilliary connections causing the main
consumer connection to be closed (Issue 550).

- Qpid: No longer uses threads to operate, to ensure compatibility with
all environments (Issue 531).

.. _version-3.0.32:

3.0.32

======
:release-date: 2015-12-16 02:29 P.M PST
:release-by: Ask Solem

- Redis: Fixed bug introduced in 3.0.31 where the redis transport always
connects to localhost, regardless of host setting.

.. _version-3.0.31:

3.0.31

======
:release-date: 2015-12-16 12:00 P.M PST
:release-by: Ask Solem

- Redis: Fixed bug introduced in 3.0.30 where socket was prematurely
disconnected.

- Hub: Removed debug logging message: "Deregistered fd..." (Issue 549).

.. _version-3.0.30:

3.0.30

======
:release-date: 2015-12-07 12:28 A.M PST
:release-by: Ask Solem

- Fixes compatiblity with uuid in Python 2.7.11 and 3.5.1.

 Fix contributed by Kai Groner.

- Redis transport: Attempt at fixing problem with hanging consumer
after disconnected from server.

- Event loop:
 Attempt at fixing issue with 100% CPU when using the Redis transport,

- Database transport: Fixed oracle compatiblity.

 An "ORA-00907: missing right parenthesis" error could manifest when using
 an Oracle database with the database transport.

 Fix contributed by Deepak N.

- Documentation fixes

 Contributed by Tommaso Barbugli.

.. _version-3.0.29:

3.0.29

======
:release-date: 2015-10-26 11:10 A.M PDT
:release-by: Ask Solem

- Fixed serialization issue for ``bindings.as_dict()`` (Issue 453).

 Fix contributed by Sergey Tikhonov.

- Json serializer wrongly treated bytes as ``ascii``, not ``utf-8``
(Issue 532).

- MongoDB: Now supports pymongo 3.x.

 Contributed by Len Buckens.

- SQS: Tests passing on Python 3.

 Fix contributed by Felix Yan

.. _version-3.0.28:

3.0.28

======
:release-date: 2015-10-12 12:00 PM PDT
:release-by: Ask Solem

.. admonition:: Django transport migrations.

 If you're using Django 1.8 and have already created the
 kombu_transport_django tables, you have to run a fake initial migration:

 .. code-block:: console

     $ python manage.py migrate kombu_transport_django --fake-initial

- No longer compatible with South by default.

 To keep using kombu.transport.django with South migrations
 you now need to configure a new location for the kombu migrations:

 .. code-block:: python

     SOUTH_MIGRATION_MODULES = {
         'kombu_transport_django':
             'kombu.transport.django.south_migrations',
     }

- Keep old South migrations in ``kombu.transport.django.south_migrations``.

- Now works with Redis < 2.10 again.

.. _version-3.0.27:

3.0.27

======
:release-date: 2015-10-09 3:10 PM PDT
:release-by: Ask Solem

- Now depends on :mod:`amqp` 1.4.7.

- Fixed libSystem import error on some macOS 10.11 (El Capitan) installations.

 Fix contributed by Eric Wang.

- Now compatible with Django 1.9.

- Django: Adds migrations for the database transport.

- Redis: Now depends on py-redis 2.10.0 or later (Issue 468).

- QPid: Can now connect as localhost (Issue 519).

 Fix contributed by Brian Bouterse.

- QPid: Adds support for ``login_method`` (Issue 502, Issue 499).

 Contributed by Brian Bouterse.

- QPid: Now reads SASL mechanism from broker string (Issue 498).

 Fix contributed by Brian Bouterse.

- QPid: Monitor thread now properly terminated on session close (Issue 485).

 Fix contributed by Brian Bouterse.

- QPid: Fixed file descriptor leak (Issue 476).

 Fix contributed by Jeff Ortel

- Docs: Fixed wrong order for entrypoint arguments (Issue 473).

- ConsumerMixin: Connection error logs now include traceback (Issue 480).

- BaseTransport now raises RecoverableConnectionError when disconnected
(Issue 507).

- Consumer: Adds ``tag_prefix`` option to modify how consumer tags are
generated (Issue 509).

.. _version-3.0.26:

3.0.26

======
:release-date: 2015-04-22 06:00 P.M UTC
:release-by: Ask Solem

- Fixed compatibility with py-redis versions before 2.10.3 (Issue 470).

.. _version-3.0.25:

3.0.25

======
:release-date: 2015-04-21 02:00 P.M UTC
:release-by: Ask Solem

- pyamqp/librabbitmq now uses 5671 as default port when SSL is enabled
(Issue 459).

- Redis: Now supports passwords in ``redis+socket://:passhost:port`` URLs
(Issue 460).

- ``Producer.publish`` now defines the ``expiration`` property in support
of the `RabbitMQ per-message TTL extension`_.

 Contributed by Anastasis Andronidis.

- Connection transport attribute now set correctly for all transports.

 Contributed by Alex Koshelev.

- qpid: Fixed bug where the connectionw as not being closed properly.

 Contributed by Brian Bouterse.

- :class:`~kombu.entity.bindings` is now JSON serializable (Issue 453).

 Contributed by Sergey Tikhonov.

- Fixed typo in error when yaml is not installed (said ``msgpack``).

 Contributed by Joshua Harlow.

- Redis: Now properly handles :exc:`redis.exceptions.TimeoutError`
raised by :mod:`redis`.

 Contributed by markow.

- qpid: Adds additional string to check for when connecting to qpid.

 When we connect to qpid, we need to ensure that we skip to the next SASL
 mechanism if the current mechanism fails. Otherwise, we will keep retrying the
 connection with a non-working mech.

 Contributed by Chris Duryee.

- qpid: Handle ``NotFound`` exceptions.

 Contributed by Brian Bouterse.

- :class:`Queue.__repr__` now makes sure return value is not unicode
(Issue 440).

- qpid: ``Queue.purge`` incorrectly raised :exc:`AttributeErrror` if the
does not exist (Issue 439).

 Contributed by Brian Bouterse.

- Linux: Now ignores permission errors on epoll unregister.

.. _`RabbitMQ per-message TTL extension`: https://www.rabbitmq.com/ttl.html

.. _version-3.0.24:

3.0.24

======
:release-date: 2014-11-17 11:00 P.M UTC
:release-by: Ask Solem

- The `Qpid <http://qpid.apache.org/>`_ broker is supported for Python 2.x
environments. The Qpid transport includes full SSL support within Kombu. See
the :mod:`kombu.transport.qpid` docs for more info.

 Contributed by Brian Bouterse and Chris Duryee through support from Red Hat.

- Dependencies: extra[librabbitmq] now requires librabbitmq 1.6.0

- Docstrings for :class:`~kombu.utils.limit.TokenBucket` did not match
implementation.

 Fix contributed by Jesse Dhillon.

- :func:`~kombu.common.oid_from` accidentally called ``uuid.getnode()`` but
did not use the return value.

 Fix contributed by Alexander Todorov.

- Redis: Now ignores errors when cosing the underlying connection.

- Redis: Restoring messages will now use a single connection.

- ``kombu.five.monotonic``: Can now be imported even if ctypes is not
available for some reason (e.g. App Engine)

- Documentation: Improved example to use the ``declare`` argument to
``Producer`` (Issue 423).

- Django: Fixed ``app_label`` for older Django versions (``< 1.7``).
(Issue 414).

.. _version-3.0.23:

3.0.23

======
:release-date: 2014-09-14 10:45 P.M UTC
:release-by: Ask Solem

- Django: Fixed bug in the Django 1.7 compatibility improvements related
to autocommit handling.

 Contributed by Radek Czajka.

- Django: The Django transport models would not be created on syncdb
after app label rename (Issue 406).

.. _version-3.0.22:

3.0.22

======
:release-date: 2014-09-04 03:00 P.M UTC
:release-by: Ask Solem

- kombu.async: Min. delay between waiting for timer was always increased to
one second.

- Fixed bug in itermessages where message is received after the with
statement exits the block.

 Fixed by Rumyana Neykova

- Connection.autoretry: Now works with functions missing wrapped attributes
 (``__module__``, ``__name__``, ``__doc__``).  Fixes 392.

 Contributed by johtso.

- Django: Now sets custom app label for ``kombu.transport.django`` to work
with recent changes in Django 1.7.

- SimpleQueue removed messages from the wrong end of buffer (Issue 380).

- Tests: Now using ``unittest.mock`` if available (Issue 381).

.. _version-3.0.21:

3.0.21

======
:release-date: 2014-07-07 02:00 P.M UTC
:release-by: Ask Solem

- Fixed remaining bug in ``maybe_declare`` for ``auto_delete`` exchanges.

 Fix contributed by Roger Hu.

- MongoDB: Creating a channel now properly evaluates a connection (Issue 363).

 Fix contributed by Len Buckens.

.. _version-3.0.20:

3.0.20

======
:release-date: 2014-06-24 02:30 P.M UTC
:release-by: Ask Solem

- Reverts change in 3.0.17 where ``maybe_declare`` caches the declaration
of auto_delete queues and exchanges.

 Fix contributed by Roger Hu.

- Redis: Fixed race condition when using gevent and the channel is closed.

 Fix contributed by Andrew Rodionoff.

.. _version-3.0.19:

3.0.19

======
:release-date: 2014-06-09 03:10 P.M UTC
:release-by: Ask Solem

- The wheel distribution did not support Python 2.6 by failing to list
the extra dependencies required.

- Durable and auto_delete queues/exchanges can be be cached using
``maybe_declare``.

.. _version-3.0.18:

3.0.18

======
:release-date: 2014-06-02 06:00 P.M UTC
:release-by: Ask Solem

- A typo introduced in 3.0.17 caused kombu.async.hub to crash (Issue 360).

.. _version-3.0.17:

3.0.17

======
:release-date: 2014-06-02 05:00 P.M UTC
:release-by: Ask Solem

- ``kombu[librabbitmq]`` now depends on librabbitmq 1.5.2.

- Async: Event loop now selectively removes file descriptors for the mode
it failed in, and keeps others (e.g read vs write).

 Fix contributed by Roger Hu.

- CouchDB: Now works without userid set.

 Fix contributed by Latitia M. Haskins.

- SQLAlchemy: Now supports recovery from connection errors.

 Contributed by Felix Schwarz.

- Redis: Restore at shutdown now works when ack emulation is disabled.

- :func:`kombu.common.eventloop` accidentally swallowed socket errors.

- Adds :func:`kombu.utils.url.sanitize_url`

.. _version-3.0.16:

3.0.16

======
:release-date: 2014-05-06 01:00 P.M UTC
:release-by: Ask Solem

- ``kombu[librabbitmq]`` now depends on librabbitmq 1.5.1.

- Redis: Fixes ``TypeError`` problem in ``unregister`` (Issue 342).

 Fix contributed by Tobias Schottdorf.

- Tests: Some unit tests accidentally required the `redis-py` library.

 Fix contributed by Randy Barlow.

- librabbitmq: Would crash when using an older version of :mod:`librabbitmq`,
now emits warning instead.

.. _version-3.0.15:

3.0.15

======
:release-date: 2014-04-15 09:00 P.M UTC
:release-by: Ask Solem

- Now depends on :mod:`amqp` 1.4.5.

- RabbitMQ 3.3 changes QoS semantics (Issue 339).

 See the RabbitMQ release notes here:
 http://www.rabbitmq.com/blog/2014/04/02/breaking-things-with-rabbitmq-3-3/

 A new connection property has been added that can be used to detect
 whether the remote server is using this new QoS behavior:

 .. code-block:: pycon

     >>> Connection('amqp://').qos_behavior_matches_spec
     False

 so if your application depends on the old semantics you can
 use this to set the ``apply_global`` flag appropriately:

 .. code-block:: python

     def update_prefetch_count(channel, new_value):
         channel.basic_qos(
             0, new_value,
             not channel.connection.client.qos_behavior_matches_spec,
         )

- Users of :mod:`librabbitmq` is encouraged to upgrade to librabbitmq 1.5.0.

 The ``kombu[librabbitmq]`` extra has been updated to depend on this
 version.

- Pools: Now takes transport options into account when comparing connections
(Issue 333).

- MongoDB: Fixes Python 3 compatibility.

- Async: select: Ignore socket errors when attempting to unregister handles
from the loop.

- Pidbox: Can now be configured to use a serializer other than json,
but specifying a serializer argument to :class:`~kombu.pidbox.Mailbox`.

 Contributed by Dmitry Malinovsky.

- Message decompression now works with Python 3.

 Fix contributed by Adam Gaca.

.. _version-3.0.14:

3.0.14

======
:release-date: 2014-03-19 07:00 P.M UTC
:release-by: Ask Solem

- **MongoDB**: Now endures a connection failover (Issue 123).

 Fix contributed by Alex Koshelev.

- **MongoDB**: Fixed ``KeyError`` when a replica set member is removed.

 Also fixes celery971 and celery/898.

 Fix contributed by Alex Koshelev.

- **MongoDB**: Fixed MongoDB broadcast cursor re-initialization bug.

 Fix contributed by Alex Koshelev.

- **Async**: Fixed bug in lax semaphore implementation where in
some usage patterns the limit was not honored correctly.

 Fix contributed by Ionel Cristian Mărieș.

- **Redis**: Fixed problem with fanout when using Python 3 (Issue 324).

- **Redis**: Fixed ``AttributeError`` from attempting to close a non-existing
connection (Issue 320).

.. _version-3.0.13:

3.0.13

======
:release-date: 2014-03-03 04:00 P.M UTC
:release-by: Ask Solem

- Redis: Fixed serious race condition that could lead to data loss.

 The delivery tags were accidentally set to be an incremental number
 local to the channel, but the delivery tags need to be globally
 unique so that a message can not overwrite an older message
 in the backup store.

 This change is not backwards incompatible and you are encouraged
 to update all your system using a previous version as soon as possible.

- Now depends on :mod:`amqp` 1.4.4.

- Pidbox: Now makes sure message encoding errors are handled by default,
so that a custom error handler does not need to be specified.

- Redis: The fanout exchange can now use AMQP patterns to route and filter
messages.

 This change is backwards incompatible and must be enabled with
 the ``fanout_patterns`` transport option:

 .. code-block:: pycon

     >>> conn = kombu.Connection('redis://', transport_options={
     ...     'fanout_patterns': True,
     ... })

 When enabled the exchange will work like an amqp topic exchange
 if the binding key is a pattern.

 This is planned to be default behavior in the future.

- Redis: Fixed ``cycle`` no such attribute error.

.. _version-3.0.12:

3.0.12

======
:release-date: 2014-02-09 03:50 P.M UTC
:release-by: Ask Solem

- Now depends on :mod:`amqp` 1.4.3.

- Fixes Python 3.4 logging incompatibility (Issue 311).

- Redis: Now properly handles unknown pub/sub messages.

 Fix contributed by Sam Stavinoha.

- amqplib: Fixed bug where more bytes were requested from the socket
than necessary.

 Fix contributed by Ionel Cristian Mărieș.

.. _version-3.0.11:

3.0.11

======
:release-date: 2014-02-03 05:00 P.M UTC
:release-by: Ask Solem

- Now depends on :mod:`amqp` 1.4.2.

- Now always trusts messages of type `application/data` and `application/text`
or which have an unspecified content type (Issue 306).

- Compression errors are now handled as decode errors and will trigger
the ``Consumer.on_decode_error`` callback if specified.

- New ``kombu.Connection.get_heartbeat_interval()`` method that can be
used to access the negotiated heartbeat value.

- `kombu.common.oid_for` no longer uses the MAC address of the host, but
instead uses a process-wide UUID4 as a node id.

 This avoids a call to `uuid.getnode()` at module scope.

- Hub.add: Now normalizes registered fileno.

 Contributed by Ionel Cristian Mărieș.

- SQS: Fixed bug where the prefetch count limit was not respected.

.. _version-3.0.10:

3.0.10

======
:release-date: 2014-01-17 05:40 P.M UTC
:release-by: Ask Solem

- Now depends on :mod:`amqp` 1.4.1.

- ``maybe_declare`` now raises a "recoverable connection error" if
the channel is disconnected instead of a :exc:`ChannelError` so that
the operation can be retried.

- Redis: ``Consumer.cancel()`` is now thread safe.

 This fixes an issue when using gevent/eventlet and a
 message is handled after the consumer is canceled resulting
 in a "message for queue without consumers" error.

- Retry operations would not always respect the interval_start
value when calculating the time to sleep for (Issue 303).

 Fix contributed by Antoine Legrand.

- Timer: Fixed "unhashable type" error on Python 3.

- Hub: Do not attempt to unregister operations on an already closed
poller instance.

.. _version-3.0.9:

3.0.9

=====
:release-date: 2014-01-13 05:30 P.M UTC
:release-by: Ask Solem

- Now depends on :mod:`amqp` 1.4.0.

- Redis: Basic cancel for fanout based queues now sends a corresponding
``UNSUBSCRIBE`` command to the server.

 This fixes an issue with pidbox where reply messages could be received
 after the consumer was canceled, giving the ``"message to queue without
 consumers"`` error.

- MongoDB: Improved connection string and options handling
(Issue 266 + Issue 120).

 Contributed by Alex Koshelev.

- SQS: Limit the number of messages when receiving in batch to 10.

 This is a hard limit enforced by Amazon so the sqs transport
 must not exceeed this value.

 Fix contributed by Eric Reynolds.

- ConsumerMixin: ``consume`` now checks heartbeat every time the
socket times out.

 Contributed by Dustin J. Mitchell.

- Retry Policy: A max retries of 0 did not retry forever.

 Fix contributed by Antoine Legrand.

- Simple: If passing a Queue object the simple utils will now take
default routing key from that queue.

 Contributed by Fernando Jorge Mota.

- ``repr(producer)`` no longer evaluates the underlying channnel.

- Redis: The map of Redis error classes are now exposed at the module level
using the :func:`kombu.transport.redis.get_redis_error_classes` function.

- Async: ``Hub.close`` now sets ``.poller`` to None.

.. _version-3.0.8:

3.0.8

=====
:release-date: 2013-12-16 05:00 P.M UTC
:release-by: Ask Solem

- Serializer: loads and dumps now wraps exceptions raised into
:exc:`~kombu.exceptions.DecodeError` and
:exc:`kombu.exceptions.EncodeError` respectively.

 Contributed by Ionel Cristian Maries

- Redis: Would attempt to read from the wrong connection if a select/epoll/kqueue
exception event happened.

 Fix contributed by Michael Nelson.

- Redis: Disabling ack emulation now works properly.

 Fix contributed by Michael Nelson.

- Redis: :exc:`IOError` and :exc:`OSError` are now treated as recoverable
connection errors.

- SQS: Improved performance by reading messages in bulk.

 Contributed by Matt Wise.

- Connection Pool: Attempting to acquire from a closed pool will now
raise :class:`RuntimeError`.

.. _version-3.0.7:

3.0.7

=====
:release-date: 2013-12-02 04:00 P.M UTC
:release-by: Ask Solem

- Fixes Python 2.6 compatibility.

- Redis: Fixes 'bad file descriptor' issue.

.. _version-3.0.6:

3.0.6

=====
:release-date: 2013-11-21 04:50 P.M UTC
:release-by: Ask Solem

- Timer: No longer attempts to hash keyword arguments (Issue 275).

- Async: Did not account for the long type for file descriptors.

 Fix contributed by Fabrice Rabaute.

- PyPy: kqueue support was broken.

- Redis: Bad pub/sub payloads no longer crashes the consumer.

- Redis: Unix socket URLs can now specify a virtual host by including
it as a query parameter.

 Example URL specifying a virtual host using database number 3:

 .. code-block:: text

     redis+socket:///tmp/redis.sock?virtual_host=3

- ``kombu.VERSION`` is now a named tuple.

.. _version-3.0.5:

3.0.5

=====
:release-date: 2013-11-15 11:00 P.M UTC
:release-by: Ask Solem

- Now depends on :mod:`amqp` 1.3.3.

- Redis: Fixed Python 3 compatibility problem (Issue 270).

- MongoDB: Fixed problem with URL parsing when authentication used.

 Fix contributed by dongweiming.

- pyamqp: Fixed small issue when publishing the message and
the property dictionary was set to None.

 Fix contributed by Victor Garcia.

- Fixed problem in ``repr(LaxBoundedSemaphore)``.

 Fix contributed by Antoine Legrand.

- Tests now passing on Python 3.3.

.. _version-3.0.4:

3.0.4

=====
:release-date: 2013-11-08 01:00 P.M UTC
:release-by: Ask Solem

- common.QoS: ``decrement_eventually`` now makes sure the value
does not go below 1 if a prefetch count is enabled.

.. _version-3.0.3:

3.0.3

=====
:release-date: 2013-11-04 03:00 P.M UTC
:release-by: Ask Solem

- SQS: Properly reverted patch that caused delays between messages.

 Contributed by James Saryerwinnie

- select: Clear all registerd fds on poller.cloe

- Eventloop: unregister if EBADF raised.

.. _version-3.0.2:

3.0.2

=====
:release-date: 2013-10-29 02:00 P.M UTC
:release-by: Ask Solem

- Now depends on :mod:`amqp` version 1.3.2.

- select: Fixed problem where unregister did not properly remove
the fd.

.. _version-3.0.1:

3.0.1

=====
:release-date: 2013-10-24 04:00 P.M UTC
:release-by: Ask Solem

- Now depends on :mod:`amqp` version 1.3.1.

- Redis: New option ``fanout_keyprefix``

 This transport option is recommended for all users as it ensures
 that broadcast (fanout) messages sent is only seen by the current
 virtual host:

 .. code-block:: python

     Connection('redis://', transport_options={'fanout_keyprefix': True})

 However, enabling this means that you cannot send or receive messages
 from older Kombu versions so make sure all of your participants
 are upgraded and have the transport option enabled.

 This will be the default behavior in Kombu 4.0.

- Distribution: Removed file ``requirements/py25.txt``.

- MongoDB: Now disables ``auto_start_request``.

- MongoDB: Enables ``use_greenlets`` if eventlet/gevent used.

- Pidbox: Fixes problem where expires header was None,
which is a value not supported by the amq protocol.

- ConsumerMixin: New ``consumer_context`` method for starting
the consumer without draining events.

.. _version-3.0.0:

3.0

-----------------------------------------

Kombu 3 consumers will no longer accept pickle/yaml or msgpack
by default, and you will have to explicitly enable untrusted deserializers
either globally using :func:`kombu.enable_insecure_serializers`, or
using the ``accept`` argument to :class:`~kombu.Consumer`.

Changes
-------

- New utility function to disable/enable untrusted serializers.

   - :func:`kombu.disable_insecure_serializers`
   - :func:`kombu.enable_insecure_serializers`.

- Consumer: ``accept`` can now be used to specify a whitelist
of content types to accept.

 If the accept whitelist is set and a message is received
 with a content type that is not in the whitelist then a
 :exc:`~kombu.exceptions.ContentDisallowed` exception
 is raised.  Note that this error can be handled by the already
 existing `on_decode_error` callback

 Examples:

 .. code-block:: python

     Consumer(accept=['application/json'])
     Consumer(accept=['pickle', 'json'])

- Now depends on amqp 1.0.11

- pidbox: Mailbox now supports the ``accept`` argument.

- Redis: More friendly error for when keys are missing.

- Connection URLs: The parser did not work well when there were
multiple '+' tokens.

.. _version-2.5.9:

3.0.0

=====
:release-date: 2013-10-14 04:00 P.M BST
:release-by: Ask Solem

- Now depends on :mod:`amqp` version 1.3.

- No longer supports Python 2.5

 The minimum Python version supported is now Python 2.6.0 for Python 2,
 and Python 3.3 for Python 3.

- Dual codebase supporting both Python 2 and 3.

 No longer using ``2to3``, making it easier to maintain support for
 both versions.

- pickle, yaml and msgpack deserialization is now disabled by default.

 This means that Kombu will by default refuse to handle any content type other
 than json.

 Pickle is known to be a security concern as it will happily
 load any object that is embedded in a pickle payload, and payloads
 can be crafted to do almost anything you want.  The default
 serializer in Kombu is json but it also supports a number
 of other serialization formats that it will evaluate if received:
 including pickle.

 It was always assumed that users were educated about the security
 implications of pickle, but in hindsight we don't think users
 should be expected to secure their services if we have the ability to
 be secure by default.

 By disabling any content type that the user did not explicitly
 want enabled we ensure that the user must be conscious when they
 add pickle as a serialization format to support.

 The other built-in serializers (yaml and msgpack) are also disabled
 even though they aren't considered insecure [f1]_ at this point.
 Instead they're disabled so that if a security flaw is found in one of these
 libraries in the future, you will only be affected if you have
 explicitly enabled them.

 To have your consumer accept formats other than json you have to
 explicitly add the wanted formats to a white-list of accepted
 content types:

 .. code-block:: pycon

     >>> c = Consumer(conn, accept=['json', 'pickle', 'msgpack'])

 or when using synchronous access:

 .. code-block:: pycon

     >>> msg = queue.get(accept=['json', 'pickle', 'msgpack'])

 The ``accept`` argument was first supported for consumers in version
 2.5.10, and first supported by ``Queue.get`` in version 2.5.15
 so to stay compatible with previous versions you can enable
 the previous behavior:

     >>> from kombu import enable_insecure_serializers
     >>> enable_insecure_serializers()

 But note that this has global effect, so be very careful should you use it.

 .. rubric:: Footnotes

 .. [f1] The PyYAML library has a :func:`yaml.load` function with some of the
          same security implications as pickle, but Kombu uses the
          :func:`yaml.safe_load` function which is not known to be affected.

- kombu.async: Experimental event loop implementation.

 This code was previously in Celery but was moved here
 to make it easier for async transport implementations.

 The API is meant to match the Tulip API which will be included
 in Python 3.4 as the ``asyncio`` module.  It's not a complete
 implementation obviously, but the goal is that it will be easy
 to change to it once that is possible.

- Utility function ``kombu.common.ipublish`` has been removed.

 Use ``Producer(..., retry=True)`` instead.

- Utility function ``kombu.common.isend_reply`` has been removed

 Use ``send_reply(..., retry=True)`` instead.

- ``kombu.common.entry_to_queue`` and ``kombu.messaging.entry_to_queue``
has been removed.

 Use ``Queue.from_dict(name, **options)`` instead.

- Redis: Messages are now restored at the end of the list.

 Contributed by Mark Lavin.

- ``StdConnectionError`` and ``StdChannelError`` is removed
 and :exc:`amqp.ConnectionError` and :exc:`amqp.ChannelError` is us

@codecov
Copy link
Copy Markdown

codecov bot commented Jul 18, 2018

Codecov Report

Merging #15 into master will not change coverage.
The diff coverage is n/a.

Impacted file tree graph

@@           Coverage Diff           @@
##           master      #15   +/-   ##
=======================================
  Coverage   93.15%   93.15%           
=======================================
  Files           3        3           
  Lines         146      146           
  Branches       20       20           
=======================================
  Hits          136      136           
  Misses          5        5           
  Partials        5        5

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 994b461...a060c7d. Read the comment docs.

@alanjds alanjds merged commit 5d38de8 into master Jul 25, 2018
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Development

Successfully merging this pull request may close these issues.

2 participants