Skip to main content

A Python client for the Jolt in-memory messaging broker

Project description

Jolt Python API

PyPI version PyPI downloads

A Python client for the Jolt in-memory messaging broker. This library provides direct access to the Jolt protocol over TCP, enabling efficient pub/sub communication without external dependencies.

The client is designed for real-time messaging, distributed event systems, internal service communication, and data streaming pipelines. It relies solely on the Python standard library and supports thread-safe message sending and background message handling.

Features

This implementation communicates with Jolt using its native NDJSON protocol over TCP sockets and does not require additional third-party packages. It includes a configurable message handler architecture for processing subscription data, status responses, and connection events.

Protocol Overview

The Jolt broker communicates through newline-delimited JSON messages. Clients send operational requests and receive corresponding acknowledgements or topic messages.

Client commands:

{"op": "auth", "user": "username", "pass": "password"}
{"op": "sub", "topic": "channel.name"}
{"op": "unsub", "topic": "channel.name"}
{"op": "pub", "topic": "channel.name", "data": "message"}
{"op": "ping"}

Broker responses:

{"ok": true}
{"ok": false, "error": "error_message"}
{"topic": "channel.name", "data": "message"}

Installation

pip install jolt-python-api

From source:

git clone https://github.com/Jolt-Database/jolt-python-api.git
cd jolt-python-api
pip install -e .

Quick Start Example

from jolt import JoltClient, JoltConfig, JoltMessageHandler
from jolt.response import JoltErrorResponse, JoltTopicMessage
from typing import Optional
import time

class MyHandler(JoltMessageHandler):
    def on_ok(self, raw_line: str):
        print("OK")
    
    def on_error(self, error: JoltErrorResponse, raw_line: str):
        print(f"Error: {error.get_error()}")
    
    def on_topic_message(self, msg: JoltTopicMessage, raw_line: str):
        print(f"[{msg.get_topic()}] {msg.get_data()}")
    
    def on_disconnected(self, cause: Optional[Exception]):
        print("Disconnected")

config = JoltConfig.new_builder() \
    .host("127.0.0.1") \
    .port(8080) \
    .build()

handler = MyHandler()
client = JoltClient(config, handler)
client.connect()

client.subscribe("chat.general")
client.publish("chat.general", "Hello, Jolt!")
client.ping()

time.sleep(1)
client.close()

API Structure

JoltClient

Primary interface for interacting with the broker:

client = JoltClient(config, handler)

client.connect()
client.close()
client.is_connected()

client.auth(username, password)
client.subscribe(topic)
client.unsubscribe(topic)
client.publish(topic, data)
client.ping()

JoltMessageHandler

Application code processes broker events by subclassing JoltMessageHandler:

class MyHandler(JoltMessageHandler):
    def on_ok(self, raw_line: str):
        pass
    
    def on_error(self, error: JoltErrorResponse, raw_line: str):
        pass
    
    def on_topic_message(self, msg: JoltTopicMessage, raw_line: str):
        pass
    
    def on_disconnected(self, cause: Optional[Exception]):
        pass

Response Types

response.is_ok()

error.get_error()
error.is_ok()

message.get_topic()
message.get_data()

Example Usage Scenarios

Simple Topic Subscription

client.connect()
client.subscribe("chat.room1")
client.publish("chat.room1", "Hello everyone")

Handling Multiple Topics

topics = ["news", "sports", "weather"]

for t in topics:
    client.subscribe(t)

client.publish("news", "Python API released")

Robust Error Handling

class RobustHandler(JoltMessageHandler):
    def on_error(self, error: JoltErrorResponse, raw_line: str):
        print(error.get_error())
    
    def on_disconnected(self, cause: Optional[Exception]):
        if cause:
            print(f"Connection lost: {cause}")

Testing

The client includes tests for configuration, request generation, and response parsing.

pytest src/tests/test_config.py -v
pytest src/tests/test_request.py -v
pytest src/tests/test_response.py -v

pytest src/tests/ -v

Running the Jolt Broker

The Python API requires a running Jolt broker instance:

git clone https://github.com/Jolt-Database/Jolt.git
cd Jolt
go build -o jolt-broker
./jolt-broker -port 8080

Troubleshooting

  1. Connection failures commonly result from incorrect host configuration, inactive broker instances, or firewall restrictions.
  2. Publishing without first subscribing will not trigger message delivery.
  3. Authentication errors require correct credentials via .auth() before other operations.

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

jolt_python_api-2.4.2.tar.gz (6.5 kB view details)

Uploaded Source

Built Distribution

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

jolt_python_api-2.4.2-py3-none-any.whl (7.9 kB view details)

Uploaded Python 3

File details

Details for the file jolt_python_api-2.4.2.tar.gz.

File metadata

  • Download URL: jolt_python_api-2.4.2.tar.gz
  • Upload date:
  • Size: 6.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for jolt_python_api-2.4.2.tar.gz
Algorithm Hash digest
SHA256 501dfc44108d9990f540753f4bce79200080aa60452f5dc7b55f4d2b4b19a9ac
MD5 f7e236ae24f1c1de299e934dad67379b
BLAKE2b-256 f97312987ab998d049c0cce14d929734a92c3022d28c30008a319044450a079c

See more details on using hashes here.

File details

Details for the file jolt_python_api-2.4.2-py3-none-any.whl.

File metadata

File hashes

Hashes for jolt_python_api-2.4.2-py3-none-any.whl
Algorithm Hash digest
SHA256 6a5aaa1e3247da3f81a6a65e2d91c42ff64a59aa1ade574ebca9d33eee69bc6b
MD5 c7a4f1929c6f9b0e5a7c03480b7f97f0
BLAKE2b-256 d8463866d5df4316d611fc082b926c31bf4c36042f2107e8f59a65734cd51115

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