Skip to main content

A middleware for the FastStream framework to support message compression.

Project description

faststream-compressors

A middleware for the FastStream framework to support message compression.

Example

from faststream.nats import NatsBroker

from faststream_compressors.compressors import GzipCompressor, GzipDecompressor
from faststream_compressors.compressors.lz4 import Lz4Decompressor  # pip install "faststream_compressors[lz4]"
from faststream_compressors.middlewares.nats import NatsCompressionMiddleware

compression_middleware = NatsCompressionMiddleware.make_middleware(
    # Compression methods used for decompressing messages.
    # The order does not matter here.
    decompressors=(GzipDecompressor(), Lz4Decompressor()),
    # Compression methods used for compressing messages.
    # The order in which compressors are specified matters.
    compressors=GzipCompressor(),
)

broker = NatsBroker(middlewares=(compression_middleware,))
Broker Is Supported? Middleware
NATS faststream_compressors.middlewares.nats.NatsMiddleware
Other

You can submit a pull request to add support for middleware for your broker. I expect that FastStream will update its middleware API soon, allowing us to create a universal middleware for each broker. For now, only NATS is supported.

Compression Method Is Supported? Compressor Extra Dependency
gzip faststream_compressors.compressors.GzipCompressor
faststream_compressors.compressors.GzipDecompressor
lz4 faststream_compressors.compressors.lz4.Lz4Compressor
faststream_compressors.compressors.lz4.Lz4Decompressor
faststream-compressors[lz4]
Other

You can submit a pull request to add support for your compression method or use your custom algorithm that adheres to the BaseCompressor interface.

from faststream import FastStream, Header
from faststream.nats import NatsBroker

from faststream_compressors.compressors import BaseCompressor

from faststream_compressors.middlewares.nats import NatsCompressionMiddleware


class MyCompressor(BaseCompressor):
    ENCODING = "xor1"

    def __call__(self, data: bytes) -> bytes:
        return bytes(byte ^ 1 for byte in data)


compression_middleware = NatsCompressionMiddleware.make_middleware(
    decompressors=MyCompressor(), compressors=MyCompressor()
)

broker = NatsBroker(middlewares=(compression_middleware,))
app = FastStream(broker)


@broker.subscriber("my-subject")
async def my_handler(data: str, encoding: str = Header("content-encoding")):
    print(data, encoding)


@app.after_startup
async def ping():
    await broker.publish("My secret message", "my-subject")

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

faststream_compressors-0.1.0.1.tar.gz (5.3 kB view details)

Uploaded Source

Built Distribution

faststream_compressors-0.1.0.1-py3-none-any.whl (7.2 kB view details)

Uploaded Python 3

File details

Details for the file faststream_compressors-0.1.0.1.tar.gz.

File metadata

  • Download URL: faststream_compressors-0.1.0.1.tar.gz
  • Upload date:
  • Size: 5.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.8.3 CPython/3.12.4 Darwin/24.0.0

File hashes

Hashes for faststream_compressors-0.1.0.1.tar.gz
Algorithm Hash digest
SHA256 82ef8ae3dab85ff2608cce772fa92cd31aee3d1a4eda9580e8caf693003c4793
MD5 65b047a6c8386729a3e2a82181b4c646
BLAKE2b-256 9e4307bd4eadc8344880f61016df4fb0a9fa111446a4e9babe7dbcf97073ae6f

See more details on using hashes here.

File details

Details for the file faststream_compressors-0.1.0.1-py3-none-any.whl.

File metadata

File hashes

Hashes for faststream_compressors-0.1.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 da358aa21d6298bc401ce787a077f99dcd19b81fd1c0421842288a406b43ca32
MD5 5ea7af9b82277a8f5d8692949770a5b0
BLAKE2b-256 76b1cd67838304d475560363665f267bd9a2e8598b196bed995f426cb28401f2

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