Serve WSGI applications#

Hypercorn directly serves ASGI applications, but it can be used to serve WSGI applications by using AsyncioWSGIMiddleware or TrioWSGIMiddleware middleware. To do so simply wrap the WSGI app with the appropriate middleware for the hypercorn worker,

from hypercorn.middleware import AsyncioWSGIMiddleware, TrioWSGIMiddleware

asyncio_app = AsyncioWSGIMiddleware(wsgi_app)
trio_app = TrioWSGIMiddleware(wsgi_app)

which can then be served by hypercorn,

$ hypercorn module:asyncio_app
$ hypercorn --worker-class trio module:trio_app

Warning

The full response from the WSGI app will be stored in memory before being sent. This prevents the WSGI app from streaming a response.

Limiting the request body size#

As the request body is stored in memory before being processed it is important to limit the max size. Both the AsyncioWSGIMiddleware and TrioWSGIMiddleware have a default max size that can be configured,

app = AsyncioWSGIMiddleware(wsgi_app, max_body_size=20)  # Bytes