Serve WSGI applications#

Hypercorn directly serves WSGI applications:

$ hypercorn module:wsgi_app


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

WSGI Middleware#

If a WSGI application is being combined with ASGI middleware it is best to use either 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 passed to other middleware served by hypercorn,

Limiting the request body size#

As the request body is stored in memory before being processed it is important to limit the max size. This is configured by the wsgi_max_body_size configuration attribute.

When using middleware the AsyncioWSGIMiddleware and TrioWSGIMiddleware have a default max size that can be configured,

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