跳转到主要内容

Cramjam集成Starlette ASGI框架。

项目描述

starlette-cramjam

Cramjam集成Starlette ASGI框架。

Test Coverage Package version Downloads Downloads


源代码: https://github.com/developmentseed/starlette-cramjam


starlette-cramjam中间件旨在提供一个独特的压缩中间件,以最小要求支持BrotliGZipDeflate压缩算法。

中间件将对包含“br”、“gzip”或“deflate”的Accept-Encoding头部的任何请求的响应进行压缩。

对于官方的Starlette中间件,starlette-cramjam提供的将处理标准和流响应。

stralette-cramjam是基于pyrus-cramjam构建的,这是一个对Rust中的解压缩算法的极薄Python绑定。

安装

您可以从pypi安装starlette-cramjam

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

或从源安装

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

使用方法

以下参数被支持

  • compression(压缩列表) - 可用压缩算法的列表。此列表还定义了优先顺序。默认为[Compression.gzip, Compression.deflate, Compression.br]
  • minimum_size(整数) - 不压缩小于此最小字节数的响应。默认为500
  • exclude_path(字符串集合)- 对特定 path 请求不压缩响应。条目必须是有效的正则表达式。默认为 {}
  • exclude_mediatype(字符串集合)- 不压缩特定媒体类型的响应(例如 image/png)。默认为 {}

最小(默认)示例

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)

使用选项

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.md

贡献与发展

请参阅 CONTRIBUTING.md

许可证

请参阅 LICENSE

作者

Development Seed 创建

查看个人贡献者的列表 contributors

项目详情


下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解有关 安装包 的更多信息。

源分发

starlette_cramjam-0.3.3.tar.gz (7.4 kB 查看哈希值)

上传时间

构建分发

starlette_cramjam-0.3.3-py3-none-any.whl (6.7 kB 查看哈希值)

上传时间 Python 3

由以下机构支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面