- Fix typo with long_description in setup.py.
- Make sure README exists before reading it for long_description.
Thanks to jcater.
- discard_all: Use AMQP.queue_purge if filterfunc is not
specified
have been overriden by setting the class attribute.
IMPORTANT Please don’t use Consumer.wait in production. Use either of Consumer.iterconsume or Consumer.iterqueue.
IMPORTANT The ack argument to Consumer.process_next has been removed, use the instance-wide auto_ack argument/attribute instead.
IMPORTANT Consumer.message_to_python has been removed, use message.decode() on the returned message object instead.
IMPORTANT Consumer/Publisher/Messaging now no longer takes a backend instance, but a backend class, so the backend argument is renamed to backend_cls.
WARNING Consumer.process_next has been deprecated in favor of Consumer.fetch(enable_callbacks=True) and emits a DeprecationWarning if used.
- Consumer.iterconsume: New sane way to use basic_consume instead of Consumer.wait:
(Consmer.wait now uses this behind the scenes, just wrapped around a highly unsafe infinite loop.)
- Consumer: New options: auto_ack and no_ack. Auto ack means the
consumer will automatically acknowledge new messages, and No-Ack means it will disable acknowledgement on the server alltogether (probably not what you want)
- Consumer.iterqueue: Now supports infinite argument, which means the
iterator doesn’t raise StopIteration if there’s no messages, but instead yields None (thus never ends)
- message argument to consumer callbacks is now a
carrot.backends.pyamqplib.Message instance. See [GH #4]. Thanks gregoirecachet!
- AMQPConnection, Consumer, Publisher and Messaging now supports
the with statement. They automatically close when the with-statement block exists.
- Consumer tags are now automatically generated for each class instance,
so you should never get the “consumer tag already open” error anymore.
Loads of new unit tests.
- Conform to pep8.py trying to raise our pypants score.
- Documentation cleanup (thanks Rune Halvorsen)
- exclusive implies auto_delete, not durable. Closes #2.
Thanks gregoirecachet
- Consumer tags are now automatically generated by the class module,
name and a UUID.
- New attribute Consumer.warn_if_exists:
If True, emits a warning if the queue has already been declared. If a queue already exists, and you try to redeclare the queue with new settings, the new settings will be silently ignored, so this can be useful if you’ve recently changed the routing_key attribute or other settings.
- Publisher.send: Now supports message priorities (a number between 0
and 9)
- Publihser.send: Added routing_key keyword argument. Can override
the routing key for a single message.
Publisher.send: Support for the immediate and mandatory flags.
- AMQPConnection: Added connect_timeout timeout option, which is
the timeout in seconds before we exhaust trying to establish a connection to the AMQP server.
- This version introduces backends. The consumers and publishers
all have an associated backend. Currently there are two backends available; pyamqlib and pyqueue. The amqplib backend is for production use, while the Queue backend is for use while unit testing.
Consumer/Publisher operations no longer re-establishes the connection if the connection has been closed.
Consumer.next has been deprecated for a while, and has now been removed.
Message objects now have a decode method, to deserialize the message body.
You can now use the Consumer class standalone, without subclassing, by registering callbacks by using Consumer.register_callback.
Ability to filter messages in Consumer.discard_all.
- carrot now includes a basic unit test suite, which hopefully will
be more complete in later releases.
carrot now uses the Sphinx documentation system.
- Consumer.wait() now works properly again. Thanks Alexander Solovyov!
- Rearranged json module import order.
New order is cjson > simplejson > json > django.util.somplejson
- _Backwards incompatible change:
Have to instantiate AMQPConnection object before passing it to consumers/publishers. e.g before when you did
>>> consumer = Consumer(connection=DjangoAMQPConnection)you now have to do
>>> consumer = Consumer(connection=DjangoAMQPConnection())or sometimes you might even want to share the same connection with publisher/consumer.