Skip to main content

Nameko Redis Keyspace Notifications extension.

https://img.shields.io/pypi/v/nameko-rediskn.svg https://img.shields.io/pypi/pyversions/nameko-rediskn.svg https://img.shields.io/pypi/format/nameko-rediskn.svg https://travis-ci.org/sohonetlabs/nameko-rediskn.svg?branch=master https://img.shields.io/badge/code%20style-black-000000.svg

Usage

This Nameko extension adds the ability to subscribe to events, keys and databases.

Some event examples:

  • expire events fired for EXPIRE commands

  • expired events fired when a key gets deleted due to expiration

Usage example:

from nameko_rediskn import rediskn, REDIS_PMESSAGE_TYPE


class MyService:

    name = 'my-service'

    @rediskn.subscribe(uri_config_key='MY_REDIS', keys='foo/bar-*')
    def subscriber(self, message):
        if message['type'] != REDIS_PMESSAGE_TYPE:
            return

        event_type = message['data']
        if event_type != 'expired':
            return

        key = message['channel'].split(':')[1]

        # ...

Where subscribe accepts:

  • MY_REDIS, which is the attribute name referring to he Redis URI (see the Configuration section below).

  • events, keys and dbs as a single value (string) or a list of values to subscribe to. They are all optional but at least one of those arguments must be provided.

For more information, you can check the documentation of the RedisKNEntrypoint entrypoint.

NOTE: this dependency is not “cluster-aware” and fires on all service instances. There are different ways to solve that: using ddebounce is one of them.

Configuration

Nameko configuration file:

# config.yaml

REDIS:
    notification_events: "KEA"
    pubsub_backoff_factor: 3

REDIS_URIS:
    MY_REDIS: "redis://localhost:6380/0"

REDIS[notification_events] is optional and can be omited or just contain None. Otherwise, it must have a valid value for the 'notify-keyspace-events' Redis client configuration attribute. This should be ideally set on the server side, as setting it in one of the Redis clients will affect the rest of them.

REDIS[pubsub_backoff_factor] sets the exponential backoff factor for reconnecting to Redis on errors. If an error occurs while listening for Redis events, we sleep for backoff_factor * 2 ** (n - 1) where n is the number of consecutive errors that have occurred. If omitted, this defaults to 2.

REDIS_URIS follows the config format used by the Nameko Redis dependency provider, where MY_REDIS is just the attribute name refering to the Redis URI of the instance being used.

Tests

RabbitMQ should be up and running on the default URI guest:guest@localhost and using the default ports.

Redis should be also running on the default port.

There are Makefile targets to run both RabbitMQ and Redis docker containers locally using the default ports and configuration:

$ make rabbitmq-container
$ make redis-container

A virtual environment should be set up and up to date:

$ # Create/activate a virtual environment
$ pip install -U pip setuptools wheel

tox can be used to run the tests. It is recomented that all its dependencies, specially virtualenv, are up to date, so that it uses the correct version of libraries like pip, setuptools and wheel:

$ pip install -U --upgrade-strategy=eager tox
$ tox
$ tox -e "py37-namekolatest-redislatest-test"

There are other Makefile targets that can be used to run the tests, but extra dependencies will have to be installed, including this package in develop mode:

$ pip install -U --editable ".[dev]"
$ make test
$ make coverage

A different RabbitMQ URI can be provided overriding the following environment variables: RABBIT_CTL_URI and AMQP_URI.

Additional pytest parameters can be also provided using the ARGS variable:

$ make test RABBIT_CTL_URI=http://guest:guest@localhost:15673 AMQP_URI=amqp://guest:guest@localhost:5673 ARGS='-x -vv --disable-warnings'
$ make coverage RABBIT_CTL_URI=http://guest:guest@localhost:15673 AMQP_URI=amqp://guest:guest@localhost:5673 ARGS='-x -vv --disable-warnings'

Linting

To run linting checks using tox:

$ for env in $(tox -l - | grep linting); do tox -e $env; done

Nameko support

The following Nameko versions are actively supported: 2.11, 2.12.

However, this extension should work from, at least, Nameko 2.6 onwards.

Redis support

The following Redis Python versions are actively supported: 2.10, 3.0, 3.1, 3.2.

Redis 4.0 is actively supported.

Changelog

Consult the CHANGELOG document for fixes and enhancements of each version.

License

The MIT License. See LICENSE for details.

Metadata

Release files for nameko-rediskn 0.1.1

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

Source distribution (sdist)

Source distribution for nameko-rediskn 0.1.1
File Size Uploaded Provenance
nameko-rediskn-0.1.1.tar.gz 8.2 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for nameko-rediskn 0.1.1
File Interpreter ABI Platform
nameko_rediskn-0.1.1-py3-none-any.whl Python 3 none any Details

Total release size: 16.1 kB

Release files / nameko-rediskn-0.1.1.tar.gz

Download URL nameko-rediskn-0.1.1.tar.gz
Size 8.2 kB
Tags Source
SHA-256 checksum
How to use checksums
7503369f7d48d61fef3e41dce355d429a61b2411a56c6fa0534767047b44048e
BLAKE2b-256 checksum
How to use checksums
8de799218e19a6a93cfb8d0d7420f41ba809c692f649e938ea0ea67ad2807f2f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/2.0.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.0.1 requests-toolbelt/0.9.1 tqdm/4.33.0 CPython/3.7.2

Release files / nameko_rediskn-0.1.1-py3-none-any.whl

Download URL nameko_rediskn-0.1.1-py3-none-any.whl
Size 7.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
2ac1a473470ee86dca3d4c3617cc888c3fcb24d013e0f0eb7868b730b21bbae4
BLAKE2b-256 checksum
How to use checksums
bdf345494ed5ff30cbcc6c2b3b40aed43228573fa26682d5bf13d0d5f36b8b24
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/2.0.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.0.1 requests-toolbelt/0.9.1 tqdm/4.33.0 CPython/3.7.2

Security for nameko-rediskn 0.1.1

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

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