Skip to main content

Middleware to handle ASGI lifespans

Project description

asgi-lifespan-middleware

ASGI middlewate to support ASGI lifespans using a simple async context manager interface.

This middleware accepts an ASGI application to wrap and an async context manager lifespan. It will run both the lifespan it was handed directly and that of the ASGI app (if the wrapped ASGI app supports lifespans).

Example (Starlette)

Starlette apps already support lifespans so we'll just be using the TestClient against a plain ASGI app that does nothing.

from contextlib import asynccontextmanager
from typing import AsyncIterator

from starlette.testclient import TestClient
from starlette.types import ASGIApp, Scope, Send, Receive

from asgi_lifespan_middleware import LifespanMiddleware

@asynccontextmanager
async def lifespan(
    # you'll get the wrapped app injected
    app: ASGIApp,
) -> AsyncIterator[None]:
    print("setup")
    yield
    print("teardown")


async def app(scope: Scope, receive: Receive, send: Send) -> None:
    ...  # do nothing


wrapped_app = LifespanMiddleware(
    app,
    lifespan=lifespan,
)

with TestClient(wrapped_app):
    pass

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

asgi_lifespan_middleware-0.1.3.tar.gz (4.7 kB view hashes)

Uploaded Source

Built Distribution

asgi_lifespan_middleware-0.1.3-py3-none-any.whl (5.0 kB view hashes)

Uploaded Python 3

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