Skip to main content

No project description provided

Project description

Django NATS

GitHub GitHub Workflow Status codecov PyPI
PyPI - Python Version Django Version

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 sending NATS messages

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_OPTIONS = {
        'servers': ['nats://localhost:4222'],
        'max_reconnect_attempts': 2,
        'connect_timeout': 1,
        ...
    }
    NATS_LISTENING_SUBJECT = 'default'
    

Usage

Listen for messages

  1. Create a new callback method and register

    # common/nats.py
    
    import nats_client
    
    @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)
    
  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
    

Sending message

import nats_client

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

Examples

import nats_client

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

Settings

Key Required Default Description
NATS_OPTIONS Yes Configuration to be passed in nats.connect()
NATS_LISTENING_SUBJECT No 'default' Subject for registering callback function

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.3.0.tar.gz (5.5 kB view hashes)

Uploaded Source

Built Distribution

django_nats_client-0.3.0-py3-none-any.whl (6.7 kB view hashes)

Uploaded Python 3

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