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 with queue.iterator() as queue_iter:
# Cancel consuming after __aexit__
async for message in queue_iter:
async 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
await 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/
.. _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 with queue.iterator() as queue_iter:
# Cancel consuming after __aexit__
async for message in queue_iter:
async 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
await 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.1.0.tar.gz
(28.3 kB
view details)
Built Distribution
aio_pika-5.1.0-py3-none-any.whl
(93.5 kB
view details)
File details
Details for the file aio-pika-5.1.0.tar.gz
.
File metadata
- Download URL: aio-pika-5.1.0.tar.gz
- Upload date:
- Size: 28.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/1.11.0 pkginfo/1.4.2 requests/2.18.4 setuptools/33.1.1 requests-toolbelt/0.8.0 tqdm/4.20.0 CPython/3.6.5
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | de6b09542f6ef0bd37775700a12695fdbe784bee91e94a477e5d05fd9c61d2e4 |
|
MD5 | 25fbe19bd461b2769268c8ab95b24e3d |
|
BLAKE2b-256 | 6d8084f00d6346ac149ffe455d872ccb17d5c3c9b7cbc441d65671a8ac53c090 |
File details
Details for the file aio_pika-5.1.0-py3-none-any.whl
.
File metadata
- Download URL: aio_pika-5.1.0-py3-none-any.whl
- Upload date:
- Size: 93.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/1.11.0 pkginfo/1.4.2 requests/2.18.4 setuptools/33.1.1 requests-toolbelt/0.8.0 tqdm/4.20.0 CPython/3.6.5
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | bc4a22f6ec4e460b597540a5f2e188a99c1fec57de32571e3ed3d3532728b0b5 |
|
MD5 | f630153ede682ce248ca7963f12e6415 |
|
BLAKE2b-256 | 7659cf95fa10c4f6d18521f89fc8e1e9a01b8d77b31f1893b6208ea12aa9da81 |