Metadata-Version: 2.1
Name: async-pq
Version: 0.1.0
Summary: Python async api for creating and managing queues in postgres
Home-page: https://github.com/maximdanilchenko/async-pq
Author: Danilchenko Maksim
Author-email: dmax.dev@gmail.com
License: MIT
Keywords: async postgresql asyncpg queue
Platform: UNKNOWN
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Natural Language :: English
Classifier: Programming Language :: Python :: 3.5
Classifier: Programming Language :: Python :: 3.6
Description-Content-Type: text/markdown
Requires-Dist: asyncpg

[![Documentation Status](https://readthedocs.org/projects/async-pq/badge/?version=latest)](https://async-pq.readthedocs.io/en/latest/?badge=latest)
[![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/ambv/black)
# Usage

To work with queue we need ```asyncpg``` library
```python
import asyncpg

conn = await asyncpg.connect('postgresql://postgres@localhost/test')
```

```QueueFabric.find_queue``` method will create needed 
tables in database if it is new queue. 
Also it has ```is_exists_queue``` method for situations when you 
need to know that it will be the new queue
```python
from async_pq import Queue, QueueFabric

queue: Queue = await QueueFabric(conn).find_queue('items')
```

Put new items (dumped JSONs) in queue
```python
await queue.put('{"id":1,"data":[1,2,3]}', '{"id":2,"data":[3,2,6]}')
```

Pop items from queue with some ```limit```. It is possible to use acknowledge pattern
```python
# If with_ack=False, massage will be acknowledged in place automatically
request_id, data = await queue.pop(limit=2, with_ack=True)
```

Acknowledge request
```python
await queue.ack(request_id)
```

Or vice versa 
```python
await queue.unack(request_id)
```

Return to queue all unacknowledged massages older than ```timeout``` seconds 
```python
await queue.return_unacked(timeout=300)
```

Clean queue (delete all acknowledged massages)
```python
await queue.clean_acked_queue()
```


