Skip to main content

Redis IPC framework for Python and protobuf message types

Project description

Redis IPC

Python application Upload Python Package

A Python library for Redis-based Inter-Process Communication (IPC) with built-in logging capabilities.

Overview

Redis IPC provides a robust framework for implementing inter-process communication using Redis pub/sub mechanisms. It includes utilities for:

  • Redis client management (both sync and async)
  • Channel-based message publishing and subscription
  • Automatic message logging to PostgreSQL databases
  • Verbose logging and debugging support
  • Protocol Buffer message handling

Features

  • Redis Client Management: Base classes for both synchronous and asynchronous Redis operations
  • Channel Management: Easy-to-use channel-based messaging system
  • Message Logging: Automatic logging of all IPC messages to PostgreSQL
  • Protocol Buffer Support: Built-in support for Protocol Buffer message types
  • Verbose Logging: Comprehensive logging and debugging capabilities
  • Database Integration: Seamless integration with PostgreSQL for message persistence

Installation

pip install ryutils

Quick Start

Here's a complete example of how to use the Redis IPC Logger:

import argparse

from ryutils.verbose import Verbose

from config import constants
from database.parse_args import add_postgres_db_args
from ipc.ipc_logger import IpcLogger
from ipc.redis_args import add_redis_args


def parse_args() -> argparse.Namespace:
    parser = argparse.ArgumentParser(description="Run the Redis IPC Logger")

    add_postgres_db_args(parser)
    add_redis_args(parser)

    Verbose.add_arguments(parser, verbose_types=constants.VERBOSE_TYPES)

    return parser.parse_args()


def main() -> None:
    args = parse_args()
    verbose = Verbose(args=args, print_args=True, verbose_types=constants.VERBOSE_TYPES)

    ipc_logger = IpcLogger(verbose=verbose, args=args)
    ipc_logger.subscribe_all()
    ipc_logger.run()


if __name__ == "__main__":
    main()

Usage

1. Setting Up Arguments

The library provides argument parsers for both Redis and PostgreSQL configuration:

from ipc.redis_args import add_redis_args
from database.parse_args import add_postgres_db_args

parser = argparse.ArgumentParser()
add_redis_args(parser)  # Adds Redis host, port, db, user, password, db_name
add_postgres_db_args(parser)  # Adds PostgreSQL connection arguments

2. Creating an IPC Logger

from ipc.ipc_logger import IpcLogger

ipc_logger = IpcLogger(verbose=verbose, args=args)

3. Subscribing to Messages

# Subscribe to all channels
ipc_logger.subscribe_all()

# Start the logger
ipc_logger.run()

Architecture

The library is built around several key components:

  • RedisClientBase: Base class for Redis operations
  • IpcLogger: Main logging class that subscribes to Redis channels
  • RedisReceiver: Handles Redis message reception
  • Channels: Manages channel-based messaging
  • Helpers: Utility functions for common operations

Configuration

Redis Configuration

  • redis_host: Redis server hostname
  • redis_port: Redis server port
  • redis_db: Redis database number
  • redis_user: Redis username (if authentication is enabled)
  • redis_password: Redis password
  • redis_db_name: Redis database name

PostgreSQL Configuration

The library automatically logs all IPC messages to a PostgreSQL database using the LogIpcMessage table.

Message Format

Messages are automatically converted to Protocol Buffer format and include:

  • Message content
  • Channel name
  • Timestamp (UTC)

Development

Requirements

  • Python 3.12+
  • Redis server
  • PostgreSQL database
  • Protocol Buffer support

Running Tests

# Activate virtual environment first
source venv/bin/activate

# Run tests
python -m pytest test/

License

This project is licensed under the MIT License - see the LICENSE file for details.

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

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

ry_redis_bus-2.1.5.tar.gz (13.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

ry_redis_bus-2.1.5-py3-none-any.whl (15.9 kB view details)

Uploaded Python 3

File details

Details for the file ry_redis_bus-2.1.5.tar.gz.

File metadata

  • Download URL: ry_redis_bus-2.1.5.tar.gz
  • Upload date:
  • Size: 13.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.9.25

File hashes

Hashes for ry_redis_bus-2.1.5.tar.gz
Algorithm Hash digest
SHA256 4522c81b0286bb24c0211120389c7833f07c0c86d35d7d1721fe2ddee7e1d57b
MD5 ed85760753fe39463182ccd6f70ff8d0
BLAKE2b-256 a70768ed0a2e8c6d9f4b2d17cf0f8c296a8a05346d6b2d066c682210981f8dcc

See more details on using hashes here.

File details

Details for the file ry_redis_bus-2.1.5-py3-none-any.whl.

File metadata

  • Download URL: ry_redis_bus-2.1.5-py3-none-any.whl
  • Upload date:
  • Size: 15.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.9.25

File hashes

Hashes for ry_redis_bus-2.1.5-py3-none-any.whl
Algorithm Hash digest
SHA256 019126a0cac052c95ff5b0481dd5c29887172e8e52a11b529476effa1bff64f2
MD5 067a0267599032b06c7ab8b0b29ebf8a
BLAKE2b-256 22688c13b964d69fbacbe313445531cce148a169a79bcd83953b6da078d202e7

See more details on using hashes here.

Supported by

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