Skip to main content

Wrapper for the aiormq for asyncio and humans.

Project description

.. _documentation: https://aio-pika.readthedocs.org/
.. _adopted official RabbitMQ tutorial: https://aio-pika.readthedocs.io/en/latest/rabbitmq-tutorial/1-introduction.html

aio-pika
========

.. image:: https://readthedocs.org/projects/aio-pika/badge/?version=latest
:target: https://aio-pika.readthedocs.org/
:alt: ReadTheDocs

.. image:: https://coveralls.io/repos/github/mosquito/aio-pika/badge.svg?branch=master
:target: https://coveralls.io/github/mosquito/aio-pika
:alt: Coveralls

.. image:: https://cloud.drone.io/api/badges/mosquito/aio-pika/status.svg
:target: https://cloud.drone.io/mosquito/aio-pika
:alt: Drone CI

.. image:: https://img.shields.io/pypi/v/aio-pika.svg
:target: https://pypi-hypernode.com/pypi/aio-pika/
:alt: Latest Version

.. image:: https://img.shields.io/pypi/wheel/aio-pika.svg
:target: https://pypi-hypernode.com/pypi/aio-pika/

.. image:: https://img.shields.io/pypi/pyversions/aio-pika.svg
:target: https://pypi-hypernode.com/pypi/aio-pika/

.. image:: https://img.shields.io/pypi/l/aio-pika.svg
:target: https://pypi-hypernode.com/pypi/aio-pika/


Wrapper for the `aiormq`_ for asyncio and humans.

.. note::
Since version ``5.0.0`` this library doesn't use ``pika`` as AMQP connector.
Versions below ``5.0.0`` contains or requires ``pika``'s source codes.


See examples and the tutorial in `documentation`_.

If you are newcomer in the RabbitMQ let's start the `adopted official RabbitMQ tutorial`_


.. _aiormq: http://github.com/mosquito/aiormq/


Features
--------

* Completely asynchronous API.
* Object oriented API.
* Transparent auto-reconnects with complete state recovery with `connect_robust`
(e.g. declared queues or exchanges, consuming state and bindings).
* Python 3.5+ compatible (include 3.7).
* For python 3.4 users available `aio-pika<4`
* Transparent `publisher confirms`_ support
* `Transactions`_ support


.. _Transactions: https://www.rabbitmq.com/semantics.html
.. _publisher confirms: https://www.rabbitmq.com/confirms.html


Installation
------------

.. code-block:: shell

pip install aio-pika


Usage example
-------------

Simple consumer:

.. code-block:: python

import asyncio
import aio_pika


async def main(loop):
connection = await aio_pika.connect_robust(
"amqp://guest:guest@127.0.0.1/", loop=loop
)

async with connection:
queue_name = "test_queue"

# Creating channel
channel = await connection.channel() # type: aio_pika.Channel

# Declaring queue
queue = await channel.declare_queue(
queue_name,
auto_delete=True
) # type: aio_pika.Queue

async for message in queue:
with message.process():
print(message.body)

if queue.name in message.body.decode():
break


if __name__ == "__main__":
loop = asyncio.get_event_loop()
loop.run_until_complete(main(loop))
loop.close()

Simple publisher:

.. code-block:: python

import asyncio
import aio_pika


async def main(loop):
connection = await aio_pika.connect_robust(
"amqp://guest:guest@127.0.0.1/", loop=loop
)

routing_key = "test_queue"

channel = await connection.channel() # type: aio_pika.Channel

await channel.default_exchange.publish(
aio_pika.Message(
body='Hello {}'.format(routing_key).encode()
),
routing_key=routing_key
)

await connection.close()


if __name__ == "__main__":
loop = asyncio.get_event_loop()
loop.run_until_complete(main(loop))
loop.close()


Get single message example:

.. code-block:: python

import asyncio
from aio_pika import connect_robust, Message


async def main(loop):
connection = await connect_robust(
"amqp://guest:guest@127.0.0.1/",
loop=loop
)

queue_name = "test_queue"
routing_key = "test_queue"

# Creating channel
channel = await connection.channel()

# Declaring exchange
exchange = await channel.declare_exchange('direct', auto_delete=True)

# Declaring queue
queue = await channel.declare_queue(queue_name, auto_delete=True)

# Binding queue
await queue.bind(exchange, routing_key)

await exchange.publish(
Message(
bytes('Hello', 'utf-8'),
content_type='text/plain',
headers={'foo': 'bar'}
),
routing_key
)

# Receiving message
incoming_message = await queue.get(timeout=5)

# Confirm message
incoming_message.ack()

await queue.unbind(exchange, routing_key)
await queue.delete()
await connection.close()


if __name__ == "__main__":
loop = asyncio.get_event_loop()
loop.run_until_complete(main(loop))


See another examples and the tutorial in `documentation`_.


Versioning
==========

This software follows `Semantic Versioning`_


For contributors
----------------

Setting up development environment
__________________________________

Clone the project:

.. code-block:: shell

git clone https://github.com/mosquito/aio-pika.git
cd aio-pika

Create a new virtualenv for `aio_pika`_:

.. code-block:: shell

virtualenv -p python3.5 env

Install all requirements for `aio_pika`_:

.. code-block:: shell

env/bin/pip install -e '.[develop]'


Running Tests
_____________

**NOTE: In order to run the tests locally you need to run a RabbitMQ instance with default user/password (guest/guest) and port (5672).**

* ProTip: Use Docker for this:

.. code-block:: bash

docker run -d -p 5672:5672 -p 15672:15672 rabbitmq:3-management

To test just run:

.. code-block:: bash

make test


Creating Pull Requests
______________________

You feel free to create pull request, but you should describe your cases and add some examples.

The changes should follow simple rules:

* When your changes breaks public API you must increase the major version.
* When your changes is safe for public API (e.g. added an argument with default value)
* You have to add test cases (see `tests/` folder)
* You must add docstrings
* You feel free to add yourself to `"thank's to" section`_


.. _"thank's to" section: https://github.com/mosquito/aio-pika/blob/master/docs/source/index.rst#thanks-for-contributing
.. _Semantic Versioning: http://semver.org/

Project details


Release history Release notifications | RSS feed

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

aio-pika-5.0.0b0.tar.gz (26.7 kB view details)

Uploaded Source

Built Distribution

aio_pika-5.0.0b0-py3-none-any.whl (88.4 kB view details)

Uploaded Python 3

File details

Details for the file aio-pika-5.0.0b0.tar.gz.

File metadata

  • Download URL: aio-pika-5.0.0b0.tar.gz
  • Upload date:
  • Size: 26.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.11.0 pkginfo/1.4.2 requests/2.21.0 setuptools/40.7.3 requests-toolbelt/0.8.0 tqdm/4.22.0 CPython/3.5.4

File hashes

Hashes for aio-pika-5.0.0b0.tar.gz
Algorithm Hash digest
SHA256 f920fc89d3322119b08c5b66452f71fd81265c038da637b89429e0131d89560f
MD5 f074725b38745ca673224af510b1cf74
BLAKE2b-256 0726fa361b0f3e69e5dc2ace1f866ff18279dd7fc2f8480afa5731714c1af0e6

See more details on using hashes here.

File details

Details for the file aio_pika-5.0.0b0-py3-none-any.whl.

File metadata

  • Download URL: aio_pika-5.0.0b0-py3-none-any.whl
  • Upload date:
  • Size: 88.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.11.0 pkginfo/1.4.2 requests/2.21.0 setuptools/40.7.3 requests-toolbelt/0.8.0 tqdm/4.22.0 CPython/3.5.4

File hashes

Hashes for aio_pika-5.0.0b0-py3-none-any.whl
Algorithm Hash digest
SHA256 e9e79b4083fd102016908818e8a157ae27141b1f64ddb0dab781cce3cb5d3737
MD5 f72aa3f659068c6ab94e7e766226067e
BLAKE2b-256 97bb02660aa11e8a979083d67f2e67226342a71eeab50a8b2ee399208326eeb2

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page