Skip to content

Improve documentation on setting up middleware correctly #476

Open
@Dreamsorcerer

Description

@Dreamsorcerer

We need to explain how to setup the middleware correctly so that it doesn't interfere with other middlewares.

This is the function I use in my projects:

def setup_debugtoolbar(app: web.Application) -> None:
    """Initialise debugtoolbar for app."""
    def is_error_middleware(f: _Middleware) -> bool:
        return getattr(f, "func", f) == error_middleware

    # Find the index of error_middleware (which may be a functools.partial).
    found_middleware = next(filter(is_error_middleware, app.middlewares))

    # Add debugtoolbar middleware to just before app's error handler.
    # This avoids debugtoolbar interrupting other middlewares.
    insert_pos = app.middlewares.index(found_middleware) + 1
    app.middlewares.insert(insert_pos, aiohttp_debugtoolbar.middleware)

    # setup() won't add the middleware if it's already present.
    aiohttp_debugtoolbar.setup(app, check_host=False)

Which is called after the app's normal middlewares have already been configured.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions