Skip to main content

No project description provided

Project description

Django NATS Client

GitHub GitHub Workflow Status codecov PyPI
PyPI - Python Version

Important Notes

🚨 The latest major version of this package, v0.4.0, has a numerous breaking changes. Please review its release note.

Features

  • Wrapper of NATS's nats-py
  • Django management command to listen for incoming NATS messages
  • Automatically serialize/deserialize message from/to JSON format
  • Easy-to-call method for publishing NATS messages
  • Support NATS JetStream pull subscription

Installation

pip install django-nats-client

Setup

  1. Add nats_client into INSTALLED_APPS

    # settings.py
    
    INSTALLED_APPS = [
        ...
        'nats_client',
    ]
    
  2. Put NATS connection configuration in settings

    # settings.py
    
    NATS_SERVERS = 'nats://localhost:4222'
    NATS_NAMESPACE = 'foo'
    

Usage

Listen for messages

  1. Create a new callback method and register

    # common/nats.py
    
    import nats_client
    
    @nats_client.register
    def new_message(message: str):
        print(message)
    
    @nats_client.register
    def get_year_from_date(date: str):
        return date.year
    
    # custom name
    @nats_client.register('get_current_time')
    def current_time():
        return datetime.datetime.now().strftime('%H:%M')
    
    # without decorator
    def current_time():
        return datetime.datetime.now().strftime('%H:%M')
    nats_client.register('get_current_time', current_time)
    
    # JetStream
    @nats_client.register(js=True)
    def new_message(message: str):
        print(message)
    
    # JetStream from other namespace
    @nats_client.register(namespace='bar', js=True)
    def new_message_from_bar(message: str):
        print(message)
    
  2. Import previously file in ready method of your apps.py

    # common/apps.py
    
    class CommonConfig(AppConfig):
        ...
    
        def ready(self):
            import common.nats
    
  3. Run listener management command

    python manage.py nats_listener
    
    # or with autoreload enabled (suite for development)
    python manage.py nats_listener --reload
    

Publishing message

import nats_client

arg = 'some arg'
await nats_client.publish(
    'subject_name',
    'method_name',
    arg,
    keyword_arg=1,
    another_keyword_arg=2,
)

Examples

import nats_client

await nats_client.publish('default', 'new_message', 'Hello, world!')
await nats_client.publish('default', 'project_created', 1, name='ACME')

# JetStream
await nats_client.publish('default', 'new_message', 'Hello, world!', _js=True)
await nats_client.js_publish('default', 'new_message', 'Hello, world!')

Request-Reply

import nats_client

arg = 'some arg'
await nats_client.request(
    'subject_name',
    'method_name',
    arg,
    keyword_arg=1,
    another_keyword_arg=2,
)

Examples

import nats_client

year = await nats_client.request('default', 'get_year_from_date', datetime.date(2022, 1, 1))  # 2022
current_time = await nats_client.request('default', 'get_current_time')  # 12:11

Settings

Key Type Required Default Description
NATS_SERVER str Required if no NATS_SERVERS NATS server's host
NATS_SERVERS list[str] Required if no NATS_SERVER NATS server's hosts (for NATS cluster)
NATS_NAMESPACE str No 'default' Main namespace using for prefixing subject, stream name, and etc.
NATS_REQUEST_TIMEOUT int No 1 Timeout when using request() (in seconds)
NATS_OPTIONS dict No {} Other configuration to be passed in nats.connect()
NATS_JETSTREAM_ENABLED bool No True Enable JetStream
NATS_JETSTREAM_DURABLE_NAME str No settings.NATS_NAMESPACE Durable name which is unique across all subscriptions
NATS_JETSTREAM_CREATE_STREAM bool No True Automatically create stream named in NATS_NAMESPACE
NATS_JETSTREAM_CONFIG dict No {} Extra configuration for JetStream streams

Development

Requirements

  • Docker
  • Python
  • Poetry

Linting

make lint

Testing

make test

Fix Formatting

make yapf

Project details


Download files

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

Source Distribution

django_nats_client-0.4.3.tar.gz (8.5 kB view details)

Uploaded Source

Built Distribution

django_nats_client-0.4.3-py3-none-any.whl (9.2 kB view details)

Uploaded Python 3

File details

Details for the file django_nats_client-0.4.3.tar.gz.

File metadata

  • Download URL: django_nats_client-0.4.3.tar.gz
  • Upload date:
  • Size: 8.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.5.1 CPython/3.10.13 Linux/6.2.0-1019-azure

File hashes

Hashes for django_nats_client-0.4.3.tar.gz
Algorithm Hash digest
SHA256 86b4301b1a5e50197ef6ec97fba7e0ac6d91916a5856497d2faa08854d757b3e
MD5 ef44e2f41439ce5bf47df35e01e2d9a0
BLAKE2b-256 2ebcde74ac71197b254e133ceb8dceec521da6c62112ad2b17b8490d3cec9ad3

See more details on using hashes here.

File details

Details for the file django_nats_client-0.4.3-py3-none-any.whl.

File metadata

  • Download URL: django_nats_client-0.4.3-py3-none-any.whl
  • Upload date:
  • Size: 9.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.5.1 CPython/3.10.13 Linux/6.2.0-1019-azure

File hashes

Hashes for django_nats_client-0.4.3-py3-none-any.whl
Algorithm Hash digest
SHA256 b6a0e63bcf44b8bd7fcdb44256d20bcb6e9236bb87d21d923f9c63b0dbaad6dc
MD5 0e637a20b000c3ad782b467df86494c2
BLAKE2b-256 a768e86f0bf250906943451704f6dc28445791a0c366b896562c4c62b23e3fcd

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 Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page