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:
# Cancel consuming after __aexit__
async for message in queue:
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:
# Cancel consuming after __aexit__
async for message in queue:
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.0.1.tar.gz
(28.2 kB
view details)
Built Distribution
aio_pika-5.0.1-py3-none-any.whl
(93.4 kB
view details)
File details
Details for the file aio-pika-5.0.1.tar.gz
.
File metadata
- Download URL: aio-pika-5.0.1.tar.gz
- Upload date:
- Size: 28.2 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 | 790cd54bd8dbf08293ac45cbeab31192d9eaaa8a51b307b214140d134b41c332 |
|
MD5 | 9c6b700a31fe628cbce59b73058b155f |
|
BLAKE2b-256 | 8ccd8d96b6fb17d3944130508c757a882a891435575451fd0615f638fe048948 |
File details
Details for the file aio_pika-5.0.1-py3-none-any.whl
.
File metadata
- Download URL: aio_pika-5.0.1-py3-none-any.whl
- Upload date:
- Size: 93.4 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 | a41c7b5e2c4f2256bb6fe9f269ede2958948e5417631ce758bfa94f3144791e4 |
|
MD5 | c4abf62cc25c4c8ae9970c643757c9f4 |
|
BLAKE2b-256 | 5125d7cc08784e9e2868e95e9ce42f6daf3b6cc104065eea073842ae5126a71c |