Skip to main content

Stay informed of it

Project description

Django Whisperer

Build status Documentation status PyPI PyPI - Django version PyPI - Python version PyPI - License

Whisperer informs subscribed users via an URL when a specific event occurs.

Installation

Installation using pip:

pip install dj-whisperer

whisperer package has to be added to INSTALLED_APPS and migrate command has to be run.

INSTALLED_APPS = (
    # other apps here...
    'whisperer',
)

Sample Scenario

Let's give an example using Package model. When an event occurs related to a package, subscribed users are gonna be informed. To do so, firstly which events to subscribe must be determined. In order to learn when a package created:

from django.db.models.signals import post_save
from whisperer.events import WhispererEvent, registry
from whisperer.tasks import deliver_event

class PackageCreateEvent(WhispererEvent):
    serializer_class = PackageSerializer
    event_type = 'package-created'

registry.register(PackageCreateEvent)


def signal_receiver(instance, created=False, **kwargs):
    if created:
        deliver_event(instance, 'package-created')

post_save.connect(signal_receiver, Package)

When database transaction succeeds, in short when transaction.on_commit(), deliver_event must be triggered. Subscribed users now can be informed that a package created if they have created a Webhook.

import requests

requests.post(
    url='https://your-app.com/whisperer/hooks/',
    headers={
        'Authorization': 'Token <secret-login-token>',
    },
    json={
        'event_type': 'package-created',
        'secret_key': 'secret',
        'target_url': 'https://example.com/',
    }
)

When a package created, uuid, type & data passed through PackageSerializer will be posted to https://example.com/.

import requests

requests.post(
    url='https://example.com/',
    headers={
        'Content-Type': 'application/json',
        'X-Whisperer-Event': 'package-created',
    },
    json={
        'event': {
            'type': 'package-created',
            'uuid': 'da81e85139824c6187dd1e58a7d3f971',
        },
        'data': {
            'id': 61,
            'transfer_id': 49,
            'order_number': '248398923123',
            '.....': '......',
        }
    }
)

In order to cancel the subscription:

import requests

requests.delete(
    url='https://your-app.com/whisperer/hooks/<webhook-id>/',
    headers={
        'Authorization': 'Token <secret-login-token>',
    }
)

To re-trigger events that lost on the queue you must call whisperer.tasks.trigger_event_queue_events with scheduler

To automate the removal of outdated event records, schedule the task whisperer.tasks.delete_outdated_webhook_events using a scheduler. By default, it targets records older than 12 weeks.

Download files

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

Source Distribution

dj-whisperer-0.5.0.tar.gz (31.1 kB view details)

Uploaded Source

Built Distribution

dj_whisperer-0.5.0-py3-none-any.whl (24.7 kB view details)

Uploaded Python 3

File details

Details for the file dj-whisperer-0.5.0.tar.gz.

File metadata

  • Download URL: dj-whisperer-0.5.0.tar.gz
  • Upload date:
  • Size: 31.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.7.17

File hashes

Hashes for dj-whisperer-0.5.0.tar.gz
Algorithm Hash digest
SHA256 1fc49f7700b8e08ade95aca76ce359b7303eb45cda23c70142bdda4d184e2c62
MD5 f69bb2d4ee0c4e7c8f9a5f909863adaa
BLAKE2b-256 7b7f45aa7a11246510b3f47d7f1e28daca978c1308af225cf6b6a00c753dd75c

See more details on using hashes here.

File details

Details for the file dj_whisperer-0.5.0-py3-none-any.whl.

File metadata

  • Download URL: dj_whisperer-0.5.0-py3-none-any.whl
  • Upload date:
  • Size: 24.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.7.17

File hashes

Hashes for dj_whisperer-0.5.0-py3-none-any.whl
Algorithm Hash digest
SHA256 2fd7454875ebb467b94c70596cb71ceeef5cc0bbbfedbcda6997e3fd094e07d8
MD5 3d09566a862eddb47025954524b1b927
BLAKE2b-256 9b9f0f8c76208f63b4c6b9bf99c719f8a27cd1770ce70871d7d0a5a01e656304

See more details on using hashes here.

Supported by

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