Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Pin kombu to latest version 4.1.0 #123

Closed
wants to merge 1 commit into from
Closed

Conversation

pyup-bot
Copy link
Contributor

@pyup-bot pyup-bot commented Oct 9, 2017

kombu is not pinned to a specific version.

I'm pinning it to the latest version 4.1.0 for now.

These links might come in handy: PyPI | Changelog | Docs

Changelog

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.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.

celery/celery#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 &lt;http://qpid.apache.org/&gt;_ 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 (&lt; 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

   &gt;&gt;&gt; Connection(&#39;amqp://&#39;).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

   &gt;&gt;&gt; conn = kombu.Connection(&#39;redis://&#39;, transport_options={
   ...     &#39;fanout_patterns&#39;: 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 &quot;message to queue without consumers&quot; 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(&#39;redis://&#39;, transport_options={&#39;fanout_keyprefix&#39;: 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=[&#39;application/json&#39;])
   Consumer(accept=[&#39;pickle&#39;, &#39;json&#39;])
  • 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

   &gt;&gt;&gt; c = Consumer(conn, accept=[&#39;json&#39;, &#39;pickle&#39;, &#39;msgpack&#39;])

or when using synchronous access:

.. code-block:: pycon

   &gt;&gt;&gt; msg = queue.get(accept=[&#39;json&#39;, &#39;pickle&#39;, &#39;msgpack&#39;])

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:

   &gt;&gt;&gt; from kombu import enable_insecure_serializers
   &gt;&gt;&gt; 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 used
    instead.
  • Message object implementation has moved to :class:kombu.message.Message.
  • Serailization: Renamed functions encode/decode to
    :func:~kombu.serialization.dumps and :func:~kombu.serialization.loads.

For backward compatibility the old names are still available as aliases.

  • The kombu.log.anon_logger function has been removed.

Use :func:~kombu.log.get_logger instead.

  • queue_declare now returns namedtuple with queue, message_count,
    and consumer_count fields.
  • LamportClock: Can now set lock class
  • :mod:kombu.utils.clock: Utilities for ordering events added.
  • :class:~kombu.simple.SimpleQueue now allows you to override
    the exchange type used.

Contributed by Vince Gonzales.

  • Zookeeper transport updated to support new changes in the :mod:kazoo
    library.

Contributed by Mahendra M.

  • pyamqp/librabbitmq: Transport options are now forwarded as keyword arguments
    to the underlying connection (Issue 214).
  • Transports may now distinguish between recoverable and irrecoverable
    connection and channel errors.
  • kombu.utils.Finalize has been removed: Use
    :mod:multiprocessing.util.Finalize instead.
  • Memory transport now supports the fanout exchange type.

Contributed by Davanum Srinivas.

  • Experimental new Pyro_ transport (:mod:kombu.transport.pyro).

Contributed by Tommie McAfee.

.. _Pyro: http://pythonhosted.org/Pyro

  • Experimental new SoftLayer MQ_ transport (:mod:kombu.transport.SLMQ).

Contributed by Kevin McDonald

.. _SoftLayer MQ: http://www.softlayer.com/services/additional/message-queue

  • Eventio: Kqueue breaks in subtle ways so select is now used instead.
  • SQLAlchemy transport: Can now specify table names using the
    queue_tablename and message_tablename transport options.

Contributed by Ryan Petrello.

Redis transport: Now supports using local UNIX sockets to communicate with the
Redis server (Issue 1283)

To connect using a UNIX socket you have to use the redis+socket
URL-prefix: redis+socket:///tmp/redis.sock.

This functionality was merged from the celery-redis-unixsocket_ project.
Contributed by Maxime Rouyrre.

ZeroMQ transport: drain_events now supports timeout.

Contributed by Jesper Thomschütz.

.. _celery-redis-unixsocket:
https://github.com/piquadrat/celery-redis-unixsocket

.. _version-2.5.16:

2.5.16

======
:release-date: 2013-10-04 03:30 P.M BST
:release-by: Ask Solem

  • Python 3: Fixed problem with dependencies not being installed.

.. _version-2.5.15:

2.5.15

======
:release-date: 2013-10-04 03:30 P.M BST
:release-by: Ask Solem

  • Declaration cache: Now only keeps hash of declaration
    so that it does not keep a reference to the channel.
  • Declaration cache: Now respects entity.can_cache_declaration
    attribute.
  • Fixes Python 2.5 compatibility.
  • Fixes tests after python-msgpack changes.
  • Queue.get: Now supports accept argument.

.. _version-2.5.14:

2.5.14

======
:release-date: 2013-08-23 05:00 P.M BST
:release-by: Ask Solem

  • safe_str did not work properly resulting in
    :exc:UnicodeDecodeError (Issue 248).

.. _version-2.5.13:

2.5.13

======
:release-date: 2013-08-16 04:00 P.M BST
:release-by: Ask Solem

  • Now depends on :mod:amqp 1.0.13
  • Fixed typo in Django functional tests.
  • safe_str now returns Unicode in Python 2.x

Fix contributed by Germán M. Bravo.

  • amqp: Transport options are now merged with arguments
    supplied to the connection.
  • Tests no longer depends on distribute, which was deprecated
    and merged back into setuptools.

Fix contributed by Sascha Peilicke.

  • ConsumerMixin now also restarts on channel related errors.

Fix contributed by Corentin Ardeois.

.. _version-2.5.12:

2.5.12

======
:release-date: 2013-06-28 03:30 P.M BST
:release-by: Ask Solem

  • Redis: Ignore errors about keys missing in the round-robin cycle.
  • Fixed test suite errors on Python 3.
  • Fixed msgpack test failures.

.. _version-2.5.11:

2.5.11

======
:release-date: 2013-06-25 02:30 P.M BST
:release-by: Ask Solem

  • Now depends on amqp 1.0.12 (Py3 compatibility issues).
  • MongoDB: Removed cause of a "database name in URI is being ignored"
    warning.

Fix by Flavio Percoco Premoli

  • Adds passive option to :class:~kombu.Exchange.

Setting this flag means that the exchange will not be declared by kombu,
but that it must exist already (or an exception will be raised).

Contributed by Rafal Malinowski

  • Connection.info() now gives the current hostname and not the list of
    available hostnames.

Fix contributed by John Shuping.

  • pyamqp: Transport options are now forwarded as kwargs to amqp.Connection.
  • librabbitmq: Transport options are now forwarded as kwargs to
    librabbitmq.Connection.
  • librabbitmq: Now raises :exc:NotImplementedError if SSL is enabled.

The librabbitmq library does not support ssl,
but you can use stunnel or change to the pyamqp:// transport
instead.

Fix contributed by Dan LaMotte.

  • librabbitmq: Fixed a cyclic reference at connection close.
  • eventio: select implementation now removes bad file descriptors.
  • eventio: Fixed Py3 compatibility problems.
  • Functional tests added for py-amqp and librabbitmq transports.
  • Resource.force_close_all no longer uses a mutex.
  • Pidbox: Now ignores IconsistencyError when sending replies,
    as this error simply means that the client may no longer be alive.
  • Adds new :meth:Connection.collect &lt;~kombu.Connection.collect&gt; method,
    that can be used to clean up after connections without I/O.
  • queue_bind is no longer called for queues bound to
    the "default exchange" (Issue 209).

Contributed by Jonathan Halcrow.

  • The max_retries setting for retries was not respected correctly (off by one).

.. _version-2.5.10:

2.5.10

======
:release-date: 2013-04-11 06:10 P.M BST
:release-by: Ask Solem

2.5.9

=====
:release-date: 2013-04-08 05:07 P.M BST
:release-by: Ask Solem

  • Pidbox: Now warns if there are multiple nodes consuming from
    the same pidbox.
  • Adds :attr:Queue.on_declared &lt;kombu.Queue.on_declared&gt;

A callback to be called when the queue is declared,
with signature (name, messages, consumers).

  • Now uses fuzzy matching to suggest alternatives to typos in transport
    names.
  • SQS: Adds new transport option queue_prefix.

Contributed by j0hnsmith.

  • pyamqp: No longer overrides verify_connection.
  • SQS: Now specifies the driver_type and driver_name
    attributes.

Fix contributed by Mher Movsisyan.

  • Fixed bug with kombu.utils.retry_over_time when no errback
    specified.

.. _version-2.5.8:

2.5.8

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

  • Now depends on :mod:amqp 1.0.10 which fixes a Python 3 compatibility error.
  • Redis: Fixed a possible race condition (Issue 171).
  • Redis: Ack emulation/visibility_timeout can now be disabled
    using a transport option.

Ack emulation adds quite a lot of overhead to ensure data is safe
even in the event of an unclean shutdown. If data loss do not worry
you there is now an ack_emulation transport option you can use
to disable it:

.. code-block:: python

   Connection(&#39;redis://&#39;, transport_options={&#39;ack_emulation&#39;: False})
  • SQS: Fixed :mod:boto v2.7 compatibility (Issue 207).
  • Exchange: Should not try to re-declare default exchange (&quot;&quot;)
    (Issue 209).
  • SQS: Long polling is now disabled by default as it was not
    implemented correctly, resulting in long delays between receiving
    messages (Issue 202).
  • Fixed Python 2.6 incompatibility depending on exc.errno
    being available.

Fix contributed by Ephemera.

.. _version-2.5.7:

2.5.7

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

  • Now depends on amqp 1.0.9
  • Redis: A regression in 2.5.6 caused the redis transport to
    ignore options set in transport_options.
  • Redis: New socket_timeout transport option.
  • Redis: InconsistencyError is now regarded as a recoverable error.
  • Resource pools: Will no longer attempt to release resource
    that was never acquired.
  • MongoDB: Now supports the ssl option.

Contributed by Sebastian Pawlus.

.. _version-2.5.6:

2.5.6

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

  • Now depends on amqp 1.0.8 which works around a bug found on some
    Python 2.5 installations where 2**32 overflows to 0.

.. _version-2.5.5:

2.5.5

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

SQS: Now supports long polling (Issue 176).

The polling interval default has been changed to 0 and a new
transport option (wait_time_seconds) has been added.
This parameter specifies how long to wait for a message from
SQS, and defaults to 20 seconds, which is the maximum
value currently allowed by Amazon SQS.

Contributed by James Saryerwinnie.

  • SQS: Now removes unpickleable fields before restoring messages.
  • Consumer.exit now ignores exceptions occurring while
    canceling the consumer.
  • Virtual: Routing keys can now consist of characters also used
    in regular expressions (e.g. parens) (Issue 194).
  • Virtual: Fixed compression header when restoring messages.

Fix contributed by Alex Koshelev.

  • Virtual: ack/reject/requeue now works while using basic_get.
  • Virtual: Message.reject is now supported by virtual transports
    (requeue depends on individual transport support).
  • Fixed typo in hack used for static analyzers.

Fix contributed by Basil Mironenko.

.. _version-2.5.4:

2.5.4

=====
:release-date: 2012-12-10 12:35 P.M UTC
:release-by: Ask Solem

  • Fixed problem with connection clone and multiple URLs (Issue 182).

Fix contributed by Dane Guempel.

  • zeromq: Now compatible with libzmq 3.2.x.

Fix contributed by Andrey Antukh.

  • Fixed Python 3 installation problem (Issue 187).

.. _version-2.5.3:

2.5.3

=====
:release-date: 2012-11-29 12:35 P.M UTC
:release-by: Ask Solem

  • Pidbox: Fixed compatibility with Python 2.6

2.5.2

=====
:release-date: 2012-11-29 12:35 P.M UTC
:release-by: Ask Solem

  • [Redis] Fixed connection leak and added a new 'max_connections' transport
    option.

.. _version-2.5.1:

2.5.1

=====
:release-date: 2012-11-28 12:45 P.M UTC
:release-by: Ask Solem

  • Fixed bug where return value of Queue.as_dict could not be serialized with
    JSON (Issue 177).

.. _version-2.5.0:

2.5.0

=====
:release-date: 2012-11-27 04:00 P.M UTC
:release-by: Ask Solem

  • py-amqp_ is now the new default transport, replacing amqplib.

The new py-amqp_ library is a fork of amqplib started with the
following goals:

   - Uses AMQP 0.9.1 instead of 0.8
   - Support for heartbeats (Issue 79 + Issue 131)
   - Automatically revives channels on channel errors.
   - Support for all RabbitMQ extensions
       - Consumer Cancel Notifications (Issue 131)
       - Publisher Confirms (Issue 131).
       - Exchange-to-exchange bindings: ``exchange_bind`` / ``exchange_unbind``.
   - API compatible with :mod:`librabbitmq` so that it can be used
     as a pure-python replacement in environments where rabbitmq-c cannot
     be compiled.  librabbitmq will be updated to support all the same
     features as py-amqp.
  • Support for using multiple connection URL's for failover.

The first argument to :class:~kombu.Connection can now be a list of
connection URLs:

.. code-block:: python

   Connection([&#39;amqp://foo&#39;, &#39;amqp://bar&#39;])

or it can be a single string argument with several URLs separated by
semicolon:

.. code-block:: python

   Connection(&#39;amqp://foo;amqp://bar&#39;)

There is also a new keyword argument failover_strategy that defines
how :meth:~kombu.Connection.ensure_connection/
:meth:~kombu.Connection.ensure/:meth:kombu.Connection.autoretry will
reconnect in the event of connection failures.

The default reconnection strategy is round-robin, which will simply
cycle through the list forever, and there's also a shuffle strategy
that will select random hosts from the list. Custom strategies can also
be used, in that case the argument must be a generator yielding the URL
to connect to.

Example:

.. code-block:: python

   Connection(&#39;amqp://foo;amqp://bar&#39;)
  • Now supports PyDev, PyCharm, pylint and other static code analysis tools.
  • :class:~kombu.Queue now supports multiple bindings.

You can now have multiple bindings in the same queue by having
the second argument be a list:

.. code-block:: python

   from kombu import binding, Queue
   Queue(&#39;name&#39;, [
       binding(Exchange(&#39;E1&#39;), routing_key=&#39;foo&#39;),
       binding(Exchange(&#39;E1&#39;), routing_key=&#39;bar&#39;),
       binding(Exchange(&#39;E2&#39;), routing_key=&#39;baz&#39;),
   ])

To enable this, helper methods have been added:

   - :meth:`~kombu.Queue.bind_to`
   - :meth:`~kombu.Queue.unbind_from`

Contributed by Rumyana Neykova.

  • Custom serializers can now be registered using Setuptools entry-points.

See :ref:serialization-entrypoints.

  • New :class:kombu.common.QoS class used as a thread-safe way to manage
    changes to a consumer or channels prefetch_count.

This was previously an internal class used in Celery now moved to
the :mod:kombu.common module.

  • Consumer now supports a on_message callback that can be used to process
    raw messages (not decoded).

Other callbacks specified using the callbacks argument, and
the receive method will be not be called when a on message callback
is present.

  • New utility :func:kombu.common.ignore_errors ignores connection and
    channel errors.

Must only be used for cleanup actions at shutdown or on connection loss.

  • Support for exchange-to-exchange bindings.

The :class:~kombu.Exchange entity gained bind_to
and unbind_from methods:

.. code-block:: python

   e1 = Exchange(&#39;A&#39;)(connection)
   e2 = Exchange(&#39;B&#39;)(connection)
   e2.bind_to(e1, routing_key=&#39;rkey&#39;, arguments=None)
   e2.unbind_from(e1, routing_key=&#39;rkey&#39;, arguments=None)

This is currently only supported by the pyamqp transport.

Contributed by Rumyana Neykova.

.. _version-2.4.10:

2.4.10

======
:release-date: 2012-11-22 06:00 P.M UTC
:release-by: Ask Solem

  • The previous versions connection pool changes broke Redis support so that
    it would always connect to localhost (default setting) no matter what
    connection parameters were provided (Issue 176).

.. _version-2.4.9:

2.4.9

=====
:release-date: 2012-11-21 03:00 P.M UTC
:release-by: Ask Solem

  • Redis: Fixed race condition that could occur while trying to restore
    messages (Issue 171).

Fix contributed by Ollie Walsh.

  • Redis: Each channel is now using a specific connection pool instance,
    which is disconnected on connection failure.
  • ProducerPool: Fixed possible dead-lock in the acquire method.
  • ProducerPool: force_close_all no longer tries to call the non-existent
    Producer._close.
  • librabbitmq: Now implements transport.verify_connection so that
    connection pools will not give back connections that are no longer working.
  • New and better repr() for Queue and Exchange objects.
  • Python 3: Fixed problem with running the unit test suite.
  • Python 3: Fixed problem with JSON codec.

.. _version-2.4.8:

2.4.8

=====
:release-date: 2012-11-02 05:00 P.M UTC
:release-by: Ask Solem

  • Redis: Improved fair queue cycle implementation (Issue 166).

Contributed by Kevin McCarthy.

  • Redis: Unacked message restore limit is now unlimited by default.

Also, the limit can now be configured using the unacked_restore_limit
transport option:

.. code-block:: python

   Connection(&#39;redis://&#39;, transport_options={
       &#39;unacked_restore_limit&#39;: 100,
   })
   A limit of 100 means that the consumer will restore at most 100
   messages at each pass.
  • Redis: Now uses a mutex to ensure only one consumer restores messages at a
    time.

The mutex expires after 5 minutes by default, but can be configured
using the unacked_mutex_expire transport option.

  • LamportClock.adjust now returns the new clock value.
  • Heartbeats can now be specified in URLs.

Fix contributed by Mher Movsisyan.

  • Kombu can now be used with PyDev, PyCharm and other static analysis tools.
  • Fixes problem with msgpack on Python 3 (Issue 162).

Fix contributed by Jasper Bryant-Greene

  • amqplib: Fixed bug with timeouts when SSL is used in non-blocking mode.

Fix contributed by Mher Movsisyan

.. _version-2.4.7:

2.4.7

=====
:release-date: 2012-09-18 03:00 P.M BST
:release-by: Ask Solem

  • Virtual: Unknown exchanges now default to 'direct' when sending a message.
  • MongoDB: Fixed memory leak when merging keys stored in the db (Issue 159)

Fix contributed by Michael Korbakov.

  • MongoDB: Better index for MongoDB transport (Issue 158).

This improvement will create a new compund index for queue and _id in order
to be able to use both indexed fields for getting a new message (using
queue field) and sorting by _id. It'll be necessary to manually delete
the old index from the collection.

Improvement contributed by rmihael

.. _version-2.4.6:

2.4.6

=====
:release-date: 2012-09-12 03:00 P.M BST
:release-by: Ask Solem

  • Adds additional compatibility dependencies:
  • Python <= 2.6:
   - importlib
   - ordereddict
  • Python <= 2.5
   - simplejson

.. _version-2.4.5:

2.4.5

=====
:release-date: 2012-08-30 03:36 P.M BST
:release-by: Ask Solem

  • Last version broke installtion on PyPy and Jython due
    to test requirements clean-up.

.. _version-2.4.4:

2.4.4

=====
:release-date: 2012-08-29 04:00 P.M BST
:release-by: Ask Solem

  • amqplib: Fixed a bug with asynchronously reading large messages.
  • pyamqp: Now requires amqp 0.9.3
  • Cleaned up test requirements.

.. _version-2.4.3:

2.4.3

=====
:release-date: 2012-08-25 10:30 P.M BST
:release-by: Ask Solem

  • Fixed problem with amqp transport alias (Issue 154).

.. _version-2.4.2:

2.4.2

=====
:release-date: 2012-08-24 05:00 P.M BST
:release-by: Ask Solem

  • Having an empty transport name broke in 2.4.1.

.. _version-2.4.1:

2.4.1

=====
:release-date: 2012-08-24 04:00 P.M BST
:release-by: Ask Solem

  • Redis: Fixed race condition that could cause the consumer to crash (Issue 151)

Often leading to the error message &quot;could not convert string to float&quot;

  • Connection retry could cause an inifite loop (Issue 145).
  • The amqp alias is now resolved at runtime, so that eventlet detection
    works even if patching was done later.

.. _version-2.4.0:

2.4.0

=====
:release-date: 2012-08-17 08:00 P.M BST
:release-by: Ask Solem

  • New experimental :mod:ZeroMQ &lt;kombu.transport.zmq transport.

Contributed by John Watson.

  • Redis: Ack timed-out messages were not restored when using the eventloop.
  • Now uses pickle protocol 2 by default to be cross-compatible with Python 3.

The protocol can also now be changed using the :envvar:PICKLE_PROTOCOL
environment variable.

  • Adds Transport.supports_ev attribute.
  • Pika: Queue purge was not working properly.

Fix contributed by Steeve Morin.

  • Pika backend was no longer working since Kombu 2.3

Fix contributed by Steeve Morin.

.. _version-2.3.2:

2.3.2

=====
:release-date: 2012-08-01 06:00 P.M BST
:release-by: Ask Solem

  • Fixes problem with deserialization in Python 3.

.. _version-2.3.1:

2.3.1

=====
:release-date: 2012-08-01 04:00 P.M BST
:release-by: Ask Solem

  • librabbitmq: Can now handle messages that does not have a
    content_encoding/content_type set (Issue 149).

Fix contributed by C Anthony Risinger.

  • Beanstalk: Now uses localhost by default if the URL does not contain a host.

.. _version-2.3.0:

2.3.0

=====
:release-date: 2012-07-24 03:50 P.M BST
:release-by: Ask Solem

  • New pyamqp:// transport!

The new py-amqp_ library is a fork of amqplib started with the
following goals:

   - Uses AMQP 0.9.1 instead of 0.8
   - Should support all RabbitMQ extensions
   - API compatible with :mod:`librabbitmq` so that it can be used
     as a pure-python replacement in environments where rabbitmq-c cannot
     be compiled.

.. _py-amqp: https://amqp.readthedocs.io/

If you start using use py-amqp instead of amqplib you can enjoy many
advantages including:

   - Heartbeat support (Issue 79 + Issue 131)
   - Consumer Cancel Notifications (Issue 131)
   - Publisher Confirms

amqplib has not been updated in a long while, so maintaining our own fork
ensures that we can quickly roll out new features and fixes without
resorting to monkey patching.

To use the py-amqp transport you must install the

@mattstibbs mattstibbs closed this Jan 5, 2018
@mattstibbs mattstibbs deleted the pyup-pin-kombu-4.1.0 branch January 5, 2018 08:07
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants