Skip to main content

A lightweigth message dispatcher based on SSE protocol data transfer objects format

Project description

The lightweight library for async messaging nobody expects.

Features

  • Send to one listener and broadcast
  • SSE format was adopted by design, is order to make library suitable for such kind of model
  • Sockets
  • Callbacks
  • Threading support for large data processing

Possible applications

Trivia

Library name pretends to be a tribute to the following movie https://en.wikipedia.org/wiki/Looking_for_Eric

Entities

class eric_sse.entities.AbstractChannel(stream_delay_seconds: int = 0, retry_timeout_millisedonds: int = 5)

Base class for channels.

Provides functionalities for listeners and message delivery management. SSEChannel is the default implementation

add_listener() → MessageQueueListener

Add the default listener

broadcast(msg: Message)

Enqueue a message to all listeners

  • Parameters: msg

deliver_next(listener_id: str) → Message

Returns next message for given listener id. Raises a NoMessagesException if queue is empty

  • Parameters: listener_id

dispatch(listener_id: str, msg: Message)

Adds a message to listener’s queue

  • Parameters:
    • listener_id
    • msg

async message_stream(listener: MessageQueueListener) → AsyncIterable[dict]

In case of failure at channel resulution time, a special message with type=’_eric_channel_closed’ is sent, and correspondant listener is stopped

  • Parameters: listener
  • Returns:

register_listener(l: MessageQueueListener)

Adds a listener to channel

  • Parameters: l

class eric_sse.entities.Message(type: str, payload: dict | list | str | int | float | None = None)

Models a message

It’s just a container of information identified by a type. For validation purposes you can override MessageQueueListener.on_message

class eric_sse.entities.MessageQueueListener

Base class for listeners.

Optionally you can override on_message method if you need to inject code at message delivery time.

async is_running() → bool

Returns listener’s state: stopped vs. running

is_running_sync() → bool

Returns listener’s state: stopped vs. running

on_message(msg: Message) → None

Event handler. It executes whan a message is delivered to client

async start() → None

Starts listening

start_sync() → None

Starts listening

async stop() → None

Stops listening

stop_sync() → None

Stops listening

Prefab channels and listeners

class eric_sse.prefabs.DataProcessingChannel(stream_delay_seconds: int = 0, retry_timeout_millisedonds: int = 5)

Channel that invoke a callable in a Pool of threads

add_threaded_listener(callback: Callable, max_workers: int) → ThreadPoolListener

Adds a threaded listener

class eric_sse.prefabs.SSEChannel(stream_delay_seconds: int = 0, retry_timeout_millisedonds: int = 5)

SSE streaming channel.

See https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events/Using_server-sent_events#event_stream_format Currently, ‘id’ field is not supported.

class eric_sse.prefabs.ThreadPoolListener(callback: Callable, max_workers: int)

Listener intended for consurrent processing of data.

Relies on concurrent.futures.ThreadPoolExecutor. ‘_eric_channel_closed’ Message type is intended as end of stream. Is shouls be considered as a reserved Message type

on_message(msg: Message) → None

Event handler. It executes whan a message is delivered to client

Prefab servers

class eric_sse.servers.ChannelContainer

Helper class for managment of multiple SSE channels cases of use.

class eric_sse.servers.SocketServer(file_descriptor_path: str)

An implementation of a socket server that reveives and broadcasts automatically all messages that receives

A static shortcut for starting a basic server is provided. See examples.

static start(file_descriptor_path: str)

Shortcut to start a server

Exceptions

exception eric_sse.exception.InvalidChannelException

exception eric_sse.exception.InvalidListenerException

exception eric_sse.exception.InvalidMessageFormat

exception eric_sse.exception.NoMessagesException

Raised when trying to fetch from an empty queue

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

eric_sse-0.2.0.1.tar.gz (6.2 kB view details)

Uploaded Source

Built Distribution

eric_sse-0.2.0.1-py3-none-any.whl (8.4 kB view details)

Uploaded Python 3

File details

Details for the file eric_sse-0.2.0.1.tar.gz.

File metadata

  • Download URL: eric_sse-0.2.0.1.tar.gz
  • Upload date:
  • Size: 6.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.8.3 CPython/3.10.12 Linux/5.15.0-122-generic

File hashes

Hashes for eric_sse-0.2.0.1.tar.gz
Algorithm Hash digest
SHA256 b29a02fa47c00a7e67352aca8db942d2be9f6ba86796a1c2f75a7627086f1309
MD5 955ec9ff6317a6c8d633aa024c17a735
BLAKE2b-256 de645ad9600430c3f865d5e15fe68b8d39dc128ad7abd2a3f17b81888ec4aba5

See more details on using hashes here.

File details

Details for the file eric_sse-0.2.0.1-py3-none-any.whl.

File metadata

  • Download URL: eric_sse-0.2.0.1-py3-none-any.whl
  • Upload date:
  • Size: 8.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.8.3 CPython/3.10.12 Linux/5.15.0-122-generic

File hashes

Hashes for eric_sse-0.2.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 4bc3ad00d5c83dc8466a8b78dc57890503b3d4d8263973cd27e42813fc98108e
MD5 c11aaf8e22f3509f8d07d9198f56600e
BLAKE2b-256 4b59bdfa4a280c6febc8a1c397304285439aee7996225a71740357428c270e4a

See more details on using hashes here.

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