Metadata-Version: 2.1
Name: pgnotify-u
Version: 0.2
Summary: Easily LISTEN and NOTIFY to PostgreSQL notifications system
Home-page: https://github.com/glowlex/pgnotify
License: Unlicense
Author: glowlex
Author-email: glowlex@yandex.ru
Classifier: License :: Other/Proprietary License
Classifier: Programming Language :: Python :: 2
Classifier: Programming Language :: Python :: 2.7
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.4
Classifier: Programming Language :: Python :: 3.5
Classifier: Programming Language :: Python :: 3.6
Classifier: Programming Language :: Python :: 3.7
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3.9
Requires-Dist: logx
Requires-Dist: psycopg2-binary
Requires-Dist: six
Project-URL: Repository, https://github.com/glowlex/pgnotify
Description-Content-Type: text/markdown

# pgnotify_u: Updated pgnotify module. A python library to easily LISTEN and NOTIFY with PostgreSQL notifications system

## Example

LISTEN to and process NOTIFY events with a simple `for` loop, like so:

```python
from pgnotify import await_pg_notifications

for notification in await_pg_notifications(
        'postgresql:///example',
        ['channel1', 'channel2']):

    print(notification.channel)
    print(notification.payload)
```
## Example2

NOTIFY to:

```python
from pgnotify import pg_notify
pg_notify("postgresql:///example", 'channel1', 'hello')
```
## Install

Installable with any python package manager from the python package index, eg:

```shell
pip install pgnotify_u
```

## All the bells and whistles

You can also handle timeouts and signals, as in this more fully-fleshed example:

```python
import signal

from pgnotify import await_pg_notifications, get_dbapi_connection

# the first parameter of the await_pg_notifications
# loop is a dbapi connection in autocommit mode
CONNECT = "postgresql:///example"

# use this convenient method to create the right connection
# from a database URL
e = get_dbapi_connection(CONNECT)

SIGNALS_TO_HANDLE = [signal.SIGINT, signal.SIGTERM]

for n in await_pg_notifications(
    e,
    ["hello", "hello2"],
    timeout=10,
    yield_on_timeout=True,
    handle_signals=SIGNALS_TO_HANDLE,
):
    # the integer code of the signal is yielded on each
    # occurrence of a handled signal
    if isinstance(n, int):
        sig = signal.Signals(n)
        print(f"handling {sig.name}, stopping")
        break

    # the `yield_on_timeout` option makes the
    # loop yield `None` on timeout
    elif n is None:
        print("timeout, continuing")

    # handle the actual notify occurrences here
    else:
        print((n.pid, n.channel, n.payload))
```

Further documentation to come.

