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.0.2.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.0.2-py3-none-any.whl (15.9 kB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for ry_redis_bus-2.0.2.tar.gz
Algorithm Hash digest
SHA256 a019dae93ad7881dc41b82c83b02b4b616759d8fa50f686a3c85d4f4428c2956
MD5 3d78106679d6dfadf18a27ae2e80ba9d
BLAKE2b-256 bfbf6e0192c85dc17d93c3c78f3aa106e17849bec5607ae6ecc5f87e58f7194a

See more details on using hashes here.

File details

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

File metadata

  • Download URL: ry_redis_bus-2.0.2-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.24

File hashes

Hashes for ry_redis_bus-2.0.2-py3-none-any.whl
Algorithm Hash digest
SHA256 7fdfe9a5437a0058aa4f2380f85c219028909e90939c1311200cf0124a6e030c
MD5 1df3cb329b679e49e9aafa5b778965f1
BLAKE2b-256 caa781fd8eb9aed6a3cebcc0ad6dc8b9cd8a477f41d09c58ac97eed4eda2674f

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