Metadata-Version: 2.4
Name: audience-framework
Version: 1.0.0
Summary: A framework for writing asynchronous AMQP-based microservices in Python
Home-page: https://github.com/Neltsoz/audience
Author: Ilya Mushkin
Author-email: mushkin704@gmail.com
License: MIT
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Operating System :: OS Independent
Classifier: Topic :: Software Development :: Libraries
Classifier: Topic :: System :: Distributed Computing
Requires-Python: >=3.8
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: aio-pika==9.5.8
Requires-Dist: aiormq==6.9.2
Requires-Dist: annotated-types==0.7.0
Requires-Dist: idna==3.11
Requires-Dist: multidict==6.7.0
Requires-Dist: pamqp==3.3.0
Requires-Dist: propcache==0.4.1
Requires-Dist: pydantic==2.12.5
Requires-Dist: pydantic-core==2.41.5
Requires-Dist: typing-extensions==4.15.0
Requires-Dist: typing-inspection==0.4.2
Requires-Dist: yarl==1.22.0
Dynamic: license-file

# Audience

Фреймворк для написания на Python асинхронных микросервисов поверх AMQP.

# Особенности:

*   **Декларативный стиль**: Регистрация обработчиков через декораторы.
*   **Два типа обработчиков**: Фоновые задачи (`@app.queue`) и RPC-вызовы (`@app.rpc`).
*   **Полностью асинхронный**: Построен на `asyncio` и `aio-pika`.
*   **Простой API**: Всего несколько методов для начала работы.

## Установка:

```bash
pip install audience-framework
```

## Пример использования:

1. Импорт модуля asyncio и класса Audience из библиотеки audience:
```python
import asyncio

from audience import Audience
```
2. Создание экземпляра приложения:
```python
app = Audience(broker_url="amqp://admin:12345@localhost")
```
3. Регистрация обработчиков очередей сообщений:
```python
@app.queue("queue_name")
async def foo():
    ...

@app.rpc("rpc_queue_name")
async def foo():
    ...
    return { ... }
```
4. Запуск приложения:
```python
if __name__ == "__main__":
    asyncio.run(app.startup())
```

### Дополнительные функции:
1. Отправка сообщения в очередь:
```python
await app.publish("queue_name", "message")
```
2. Отправка RPC-запроса:
```python
await app.rpc_call("rpc_queue_name", "message")
