Skip to main content

A Flask package for managing SSE streams.

Project description

Flask Streamy

flask-streamy is a lightweight Flask package that provides an abstraction for managing Server-Sent Events (SSE) streams. It allows you to easily create, manage, and terminate event streams in your Flask applications.

Installation

pip install flask-streamy

Basic Usage

from flask import Flask
from flask_streamy import StreamManager

app = Flask(__name__)
sse = StreamManager()

@app.route('/send_event')
def send_event():
    sse.send_event("stream1", data="Hello, World!", event_name="greeting")
    return "Event sent"

@app.route('/stream')
def events():
    headers = {
        "X-Accel-Buffering": "no",  # Disable response buffering
        "Cache-Control": "no-cache"
    }
    return sse.get_stream("stream1", headers=headers)

@app.route('/end_stream')
def end_stream():
    sse.end_stream("stream1")
    return "Stream ended"

if __name__ == "__main__":
    app.run(debug=True)

API

StreamManager

  • get_stream(stream_id, event_name="message", headers=None, keep_alive_interval=30):
    • Retrieves or creates a stream for the given ID.
    • Allows setting custom headers and a keep-alive interval to maintain the connection.
    • Automatically sends a Connection: keep-alive header and periodic keep-alive messages.
  • send_event(stream_id, data, event_name=None):
    • Sends an event to the specified stream.
    • Automatically handles errors with logging and retry logic.
  • end_stream(stream_id):
    • Ends the stream for the given ID.
    • Logs the termination of the stream.

SSE

  • Logging:
    • Logs key events like stream creation, message addition, and stream termination.
  • Error Handling with Retries:
    • Automatically retries sending events up to a configurable number of times before ending the stream.
  • Keep-Alive Messages:
    • Periodic keep-alive messages are sent to prevent connection timeouts during idle periods.

Testing

Here's an updated section for the README.md to include instructions on how to test the flask-streamy package:

Running Tests

Tests for flask-streamy are located in the tests directory. To run the tests, you'll need to have unittest available, which is included in the Python standard library.

You can run the tests by executing the following command in the root of the package:

python -m unittest discover tests

Writing Tests

The tests/test_flask_streamy.py file contains example unit tests that check the core functionality of flask-streamy. Here’s a brief overview of what the tests cover:

  • Stream Creation and Retrieval: Ensures that streams are correctly created and retrieved by get_stream.
  • Sending Events: Validates that events are correctly added to the stream's message queue.
  • Ending Streams: Confirms that streams can be properly terminated and are no longer accessible after being ended.

You can add your own tests to the tests directory to cover additional use cases or to test custom functionality you may add to the package.

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

flask_streamy-0.1.2.tar.gz (5.3 kB view details)

Uploaded Source

Built Distribution

flask_streamy-0.1.2-py3-none-any.whl (6.4 kB view details)

Uploaded Python 3

File details

Details for the file flask_streamy-0.1.2.tar.gz.

File metadata

  • Download URL: flask_streamy-0.1.2.tar.gz
  • Upload date:
  • Size: 5.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.12.1

File hashes

Hashes for flask_streamy-0.1.2.tar.gz
Algorithm Hash digest
SHA256 f6d38693482aa0d5aa60c6067b46aef931ff8701a1854f2cfbaaeebd4b76528a
MD5 44ff38e045822cb85338ab91003b6642
BLAKE2b-256 e2ffe7e2de2abfe505344c94b1a759175e4fc1c768dd0bb857ed70b99c13a311

See more details on using hashes here.

File details

Details for the file flask_streamy-0.1.2-py3-none-any.whl.

File metadata

File hashes

Hashes for flask_streamy-0.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 5e5deafb66e2e7aa81dbd329531720ea118a44e7a21d64f882829e93824efb97
MD5 61d6fd3196b15015d4251b7faee9d423
BLAKE2b-256 dfcd1bab9e95dd28d378d04ccd8dbc9ead7e153b4935f219020d7322f8c294cc

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