Metadata-Version: 2.1
Name: tembo-pgmq-python
Version: 0.2.2
Summary: Python client for the PGMQ Postgres extension.
License: Apache 2.0
Author: Adam Hendel
Author-email: adam@tembo.io
Requires-Python: >=3.9,<4.0
Classifier: License :: Other/Proprietary License
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Requires-Dist: orjson (>=3.8.10,<4.0.0)
Requires-Dist: psycopg[binary,pool] (>=3.1.8,<4.0.0)
Requires-Dist: pydantic (>=1.10.7,<2.0.0)
Project-URL: Documentation, https://github.com/tembo-io/tembo/tree/main/pgmq/tembo-pgmq-python
Project-URL: Homepage, https://github.com/tembo-io/tembo/tree/main/pgmq
Project-URL: Repository, https://github.com/tembo-io/tembo/tree/main/pgmq/tembo-pgmq-python
Description-Content-Type: text/markdown

# Tembo's Python Client for PGMQ

## Installation

Install with `pip` from pypi.org

```bash
pip install tembo-pgmq-python
```

Dependencies:

Postgres running the [Tembo PGMQ extension](https://github.com/tembo-io/tembo/tree/main/pgmq).

## Usage

## Start a Postgres Instance with the Tembo extension installed

```bash
docker run -d --name postgres -e POSTGRES_PASSWORD=postgres -p 5432:5432 quay.io/coredb/pgmq-pg:latest
```

Initialize a connection to Postgres

```python
from tembo_pgmq_python import PGMQueue, Message

queue = PGMQueue(host="0.0.0.0")
```

Create a queue (or a partitioned queue)

```python
queue.create_queue("my_queue")
# queue.create_partitioned_queue("my_partitioned_queue", partition_size=10000)
```


Send a message

```python
msg_id: int = queue.send("my_queue", {"hello": "world"})
```

Read a message, set it invisible for 30 seconds.

```python
read_message: Message = queue.read("my_queue", vt=10)
print(read_message)
```

Archive the message after we're done with it. Archived messages are moved to an archive table.

```python
archived: bool = queue.archive("my_queue", read_message.msg_id)
```

Delete a message completely.

```python
msg_id: int = queue.send("my_queue", {"hello": "world"})
read_message: Message = queue.read("my_queue")
deleted: bool = queue.delete("my_queue", read_message.msg_id)
```

Pop a message, deleting it and reading it in one transaction.

```python
popped_message: Message = queue.pop("my_queue")
print(popped_message)
```

