Socket
Socket
Sign inDemoInstall

starlette-cramjam

Package Overview
Dependencies
6
Maintainers
1
Alerts
File Explorer

Install Socket

Detect and block malicious and high-risk dependencies

Install

    starlette-cramjam

Cramjam integration for Starlette ASGI framework.


Maintainers
1

Readme

starlette-cramjam

Cramjam integration for Starlette ASGI framework.

Test Coverage Package version Downloads Downloads


Source Code: https://github.com/developmentseed/starlette-cramjam


The starlette-cramjam middleware aims to provide a unique Compression middleware to support Brotli, GZip and Deflate compression algorithms with a minimal requirement.

The middleware will compress responses for any request that includes "br", "gzip" or "deflate" in the Accept-Encoding header.

As for the official Starlette middleware, the one provided by starlette-cramjam will handle both standard and streaming responses.

stralette-cramjam is built on top of pyrus-cramjam an Extremely thin Python bindings to de/compression algorithms in Rust.

Installation

You can install starlette-cramjam from pypi

$ pip install -U pip
$ pip install starlette-cramjam

or install from source:

$ pip install -U pip
$ pip install https://github.com/developmentseed/starlette-cramjam.git

Usage

The following arguments are supported:

  • compression (List of Compression) - List of available compression algorithm. This list also defines the order of preference. Defaults to [Compression.gzip, Compression.deflate, Compression.br],
  • minimum_size (Integer) - Do not compress responses that are smaller than this minimum size in bytes. Defaults to 500.
  • exclude_path (Set of string) - Do not compress responses in response to specific path requests. Entries have to be valid regex expressions. Defaults to {}.
  • exclude_mediatype (Set of string) - Do not compress responses of specific media type (e.g image/png). Defaults to {}.
Minimal (defaults) example
import uvicorn

from starlette.applications import Starlette
from starlette.responses import PlainTextResponse

from starlette_cramjam.middleware import CompressionMiddleware

# create application
app = Starlette()

# register the CompressionMiddleware
app.add_middleware(CompressionMiddleware)


@app.route("/")
def index(request):
    return PlainTextResponse("Hello World")


if __name__ == "__main__":
    uvicorn.run(app, host="0.0.0.0", port=8000)
Using options
import uvicorn

from starlette.applications import Starlette
from starlette.responses import PlainTextResponse, Response

from starlette_cramjam.compression import Compression
from starlette_cramjam.middleware import CompressionMiddleware

# create application
app = Starlette()

# register the CompressionMiddleware
app.add_middleware(
    CompressionMiddleware,
    compression=[Compression.gzip],  # Only support `gzip`
    minimum_size=0,  # should compress everything
    exclude_path={"^/foo$"},  # do not compress response for the `/foo` request
    exclude_mediatype={"image/jpeg"},  # do not compress jpeg
)


@app.route("/")
def index(request):
    return PlainTextResponse("Hello World")

@app.route("/image")
def foo(request):
    return Response(b"This is a fake body", status_code=200, media_type="image/jpeg")

@app.route("/foo")
def foo(request):
    return PlainTextResponse("Do not compress me.")


if __name__ == "__main__":
    uvicorn.run(app, host="0.0.0.0", port=8000)

Changes

See CHANGES.md.

Contribution & Development

See CONTRIBUTING.md

License

See LICENSE

Authors

Created by Development Seed

See contributors for a listing of individual contributors.

Keywords

FAQs


Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc