Skip to main content

Asynchronous framework for working with RabbitMQ

Project description

aiocarrot

aiocarrot is a fully asynchronous framework for working with the RabbitMQ message broker

Tests Version

Source Code: https://github.com/d3nbr0/aiocarrot


The key features are:

  • Completely asynchronous - aiocarrot has the aiopika library running under the hood
  • Fast to code - the framework allows you to reduce the amount of code in your project, as well as speed up its development
  • Fields validation - aiocarrot supports field validation using pydantic
  • Scheduler - describe the task launch period in the cron format

Requirements

The following dependencies are required for aiocarrot to work:

Installation

Create and activate virtual environment and then install aiocarrot:

pip install aiocarrot

Example

Create a file main.py with:

from aiocarrot import Carrot, Consumer

import asyncio


consumer = Consumer()


@consumer.message(name='multiply')
async def multiply(first_number: int, second_number: int) -> None:
    print('Result is:', first_number * second_number)


async def main() -> None:
    carrot = Carrot(url='amqp://guest:guest@127.0.0.1/', queue_name='sample')
    carrot.setup_consumer(consumer)
    await carrot.run()


if __name__ == '__main__':
    asyncio.run(main())

Then run it with:

python main.py

Now you have created a consumer with the ability to receive a "multiply" task

Produce message

If you want to send a message, use this:

from aiocarrot import Carrot

import asyncio


async def main() -> None:
    carrot = Carrot(url='amqp://guest:guest@127.0.0.1:5672/', queue_name='sample')
    
    await carrot.send('multiply', first_number=10, second_number=20)


if __name__ == '__main__':
    asyncio.run(main())

Scheduler

You can use the scheduler to run your tasks automatically.
You can schedule a task using the cron format. For example, to run a task once every 15 minutes: */15 * * * *

@consumer.message(name='example.scheduler', schedule='*/15 * * * *')
async def scheduler_message(value: Optional[int] = None) -> None:
    print('Your value is:', value or 0)

NOTE: The scheduler does not support working with arguments that do not have default values. If you want to schedule a message and it has arguments, make sure they all have a default value.

You can find more examples here

It's very simple to use. Enjoy!

Project details


Download files

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

Source Distribution

aiocarrot-1.1.0.tar.gz (10.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

aiocarrot-1.1.0-py3-none-any.whl (11.3 kB view details)

Uploaded Python 3

File details

Details for the file aiocarrot-1.1.0.tar.gz.

File metadata

  • Download URL: aiocarrot-1.1.0.tar.gz
  • Upload date:
  • Size: 10.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.6

File hashes

Hashes for aiocarrot-1.1.0.tar.gz
Algorithm Hash digest
SHA256 5a0208ca2b26ba97509604ef23bbdfde75422cfc8b36c95f3527af9401ebdce6
MD5 9f7692adc2e3b0b032c67dc430e4e3d3
BLAKE2b-256 7a958ec3d9d16e04bb3a8e4c045efe21020543999b5b6371392310a3e41bece6

See more details on using hashes here.

File details

Details for the file aiocarrot-1.1.0-py3-none-any.whl.

File metadata

  • Download URL: aiocarrot-1.1.0-py3-none-any.whl
  • Upload date:
  • Size: 11.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.6

File hashes

Hashes for aiocarrot-1.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 a5276064a2e39a8986e3165230f648742c95b004e49ad22326d6dd96e1c3fe2e
MD5 fede095f08f9aef8522efdd1a4cea4a8
BLAKE2b-256 c4e4ff28773229388ec6745ffaac735d3242ed7637f0e031106aa47d8889ff60

See more details on using hashes here.

Supported by

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