Middleware for Starlette that allows you to store and access the context data of a request. Can be used with logging so logs automatically use request headers such as x-request-id or x-correlation-id.
- Source: https://github.com/tomwojcik/starlette-context
- Documentation: https://starlette-context.readthedocs.io/
- Changelog: https://starlette-context.readthedocs.io/en/latest/changelog.html
# Python 3.9+
pip install starlette-context
starlette>=0.27.0
import uvicorn
from starlette.applications import Starlette
from starlette.middleware import Middleware
from starlette.requests import Request
from starlette.responses import JSONResponse
from starlette.routing import Route
from starlette_context import context, plugins
from starlette_context.middleware import ContextMiddleware
async def index(request: Request):
# Access and store data in context
context["custom_value"] = "example"
return JSONResponse(context.data)
# Define routes
routes = [
Route("/", endpoint=index)
]
# Configure middleware
middleware = [
Middleware(
ContextMiddleware,
plugins=(
plugins.RequestIdPlugin(),
plugins.CorrelationIdPlugin()
)
)
]
# Create application with routes and middleware
app = Starlette(
routes=routes,
middleware=middleware
)
if __name__ == "__main__":
uvicorn.run(app, host="0.0.0.0")
In this example the response contains a JSON with:
{
"X-Correlation-ID": "5ca2f0b43115461bad07ccae5976a990",
"X-Request-ID": "21f8d52208ec44948d152dc49a713fdd",
"custom_value": "example"
}
Context can be updated and accessed at anytime if it's created in the middleware.
A huge thank you to Adverity for sponsoring the development of this OSS library.
See the contributing guide.