================
 Change history
================

0.4.1 [2008-06-08 04:21 P.M CET] askh@opera.com
------------------------------------------------------------------

* Consumer/Publisher now correctly sets the encoder/decoder if they
	have been overriden by setting the class attribute.

0.4.0 [2008-06-06 01:39 P.M CET] askh@opera.com
------------------------------------------------------------------

**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!

.. _`[GH #4]`: http://github.com/ask/carrot/issues/closed/#issue/4
 
	* 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.

0.4.0-pre7 [2009-06-03 05:08 P.M CET] askh@opera.com
------------------------------------------------------------------

	* Conform to pep8.py trying to raise our pypants score.

	* Documentation cleanup (thanks Rune Halvorsen)

0.4.0-pre6 [2009-06-03 04:55 P.M CET] askh@opera.com
------------------------------------------------------------------

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

0.4.0-pre3 [2009-05-29 02:27 P.M CET] askh@opera.com
------------------------------------------------------------------

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

0.4.0-pre2 [2009-05-29 02:27 P.M CET] askh@opera.com
------------------------------------------------------------------

	* AMQPConnection: Added ``connect_timeout`` timeout option, which is
		the timeout in seconds before we exhaust trying to establish a
		connection to the AMQP server.

0.4.0-pre1 [2009-05-27 04:27 P.M CET] askh@opera.com
------------------------------------------------------------------

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

0.3.9 [2009-05-18 04:49 P.M CET] askh@opera.com
--------------------------------------------------------------

	* Consumer.wait() now works properly again. Thanks Alexander Solovyov!

0.3.8 [2009-05-11 02:14 P.M CET] askh@opera.com
--------------------------------------------------------------

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


0.2.1 [2009-03-24 05:48 P.M CET] askh@opera.com
--------------------------------------------------------------

* Fix typo "package" -> "packages" in setup.py

0.2.0 [2009-03-24 05:23 P.M ]` askh@opera.com
--------------------------------------------------------------

* hasty bugfix release, fixed syntax errors.

0.1.0 [2009-03-24 05:16 P.M ]` askh@opera.com
--------------------------------------------------------------

* Initial release
