Skip to main content

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

Metadata

Release files for django-nats-client 0.4.3

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for django-nats-client 0.4.3
File Size Uploaded
django_nats_client-0.4.3.tar.gz 8.5 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for django-nats-client 0.4.3
File Interpreter ABI Platform
django_nats_client-0.4.3-py3-none-any.whl Python 3 none any Details

Total release size: 17.7 kB

Release files / django_nats_client-0.4.3.tar.gz

Download URL django_nats_client-0.4.3.tar.gz
Size 8.5 kB
Tags Source
SHA-256 checksum
How to use checksums
86b4301b1a5e50197ef6ec97fba7e0ac6d91916a5856497d2faa08854d757b3e
BLAKE2b-256 checksum
How to use checksums
2ebcde74ac71197b254e133ceb8dceec521da6c62112ad2b17b8490d3cec9ad3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/1.5.1 CPython/3.10.13 Linux/6.2.0-1019-azure

Release files / django_nats_client-0.4.3-py3-none-any.whl

Download URL django_nats_client-0.4.3-py3-none-any.whl
Size 9.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
b6a0e63bcf44b8bd7fcdb44256d20bcb6e9236bb87d21d923f9c63b0dbaad6dc
BLAKE2b-256 checksum
How to use checksums
a768e86f0bf250906943451704f6dc28445791a0c366b896562c4c62b23e3fcd
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/1.5.1 CPython/3.10.13 Linux/6.2.0-1019-azure

Release history Release notifications | RSS feed

This release

0.4.3 This release

2 release files

0.4.2

2 release files

0.4.1

2 release files

0.4.0

2 release files

0.3.5

2 release files

0.3.4

2 release files

0.3.3

2 release files

0.3.2

2 release files

0.3.1

2 release files

0.3.0

2 release files

0.2.2

2 release files

0.2.1

2 release files

0.2.0

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page