Skip to content

fastack.middleware.init

MiddlewareManager

Middleware Manager which allows you to create middleware with functions.

Source code in fastack/middleware/__init__.py
class MiddlewareManager:
    """
    Middleware Manager which allows you to create middleware with functions.
    """

    def __init__(self, app: "Fastack"):
        self.app = app

    def process_request(self, func: ProcessRequestFunc):
        """
        Process request middleware.

        Args:
            func: Function to be called before request.

        Example:

        ```python
        from fastapi import Request

        @app.middleware.process_request
        def process_request(request):
            print("Processing request")
            auth = request.headers.get("Authorization")
            if auth is None:
                raise HTTPException(status_code=401)
        ```

        """
        self.app.add_middleware(BaseMiddleware, process_request=func)
        return func

    def process_response(self, func: ProcessResponseFunc):
        """
        Process response middleware.

        Args:
            func: Function to be called after request.

        Example:

        ```python
        from fastapi import Response

        @app.middleware.process_response
        def process_response(response: Response, exc: Exception = None):
            print("Processing response")
            success = "1" if exc is None else "0"
            response.headers["X-Success"] = success
        ```
        """
        self.app.add_middleware(BaseMiddleware, process_response=func)
        return func

    def process_websocket(self, func: ProcessWebSocketFunc):
        """
        Process websocket middleware.

        Args:
            func: Function to be called before the request to WebSocket.

        Example:

        ```python
        from fastapi import WebSocket

        @app.middleware.process_websocket
        def process_websocket(websocket: WebSocket):
            print("Processing websocket")
            # websocket.accept()
        ```
        """
        self.app.add_middleware(BaseMiddleware, process_websocket=func)
        return func

    def process_http(self, func: DispatchFunction):
        """
        Original FastAPI.middleware
        """

        self.app.add_middleware(BaseMiddleware, dispatch=func)
        return func

    def __call__(self, middleware_type: str) -> DecoratedMiddleware:
        assert middleware_type in (
            "http",
            "request",
            "response",
            "websocket",
        ), "middleware_type must be 'http', 'request', 'response or 'websocket'"
        func = getattr(self, "process_{}".format(middleware_type))
        return func

process_http(self, func)

Original FastAPI.middleware

Source code in fastack/middleware/__init__.py
def process_http(self, func: DispatchFunction):
    """
    Original FastAPI.middleware
    """

    self.app.add_middleware(BaseMiddleware, dispatch=func)
    return func

process_request(self, func)

Process request middleware.

Parameters:

Name Type Description Default
func Callable[[starlette.requests.Request], Awaitable[NoneType]]

Function to be called before request.

required

Examples:

from fastapi import Request

@app.middleware.process_request
def process_request(request):
    print("Processing request")
    auth = request.headers.get("Authorization")
    if auth is None:
        raise HTTPException(status_code=401)
Source code in fastack/middleware/__init__.py
def process_request(self, func: ProcessRequestFunc):
    """
    Process request middleware.

    Args:
        func: Function to be called before request.

    Example:

    ```python
    from fastapi import Request

    @app.middleware.process_request
    def process_request(request):
        print("Processing request")
        auth = request.headers.get("Authorization")
        if auth is None:
            raise HTTPException(status_code=401)
    ```

    """
    self.app.add_middleware(BaseMiddleware, process_request=func)
    return func

process_response(self, func)

Process response middleware.

Parameters:

Name Type Description Default
func Callable[[starlette.responses.Response, Optional[Exception]], Awaitable[NoneType]]

Function to be called after request.

required

Examples:

from fastapi import Response

@app.middleware.process_response
def process_response(response: Response, exc: Exception = None):
    print("Processing response")
    success = "1" if exc is None else "0"
    response.headers["X-Success"] = success
Source code in fastack/middleware/__init__.py
def process_response(self, func: ProcessResponseFunc):
    """
    Process response middleware.

    Args:
        func: Function to be called after request.

    Example:

    ```python
    from fastapi import Response

    @app.middleware.process_response
    def process_response(response: Response, exc: Exception = None):
        print("Processing response")
        success = "1" if exc is None else "0"
        response.headers["X-Success"] = success
    ```
    """
    self.app.add_middleware(BaseMiddleware, process_response=func)
    return func

process_websocket(self, func)

Process websocket middleware.

Parameters:

Name Type Description Default
func Callable[[starlette.websockets.WebSocket], Awaitable[NoneType]]

Function to be called before the request to WebSocket.

required

Examples:

from fastapi import WebSocket

@app.middleware.process_websocket
def process_websocket(websocket: WebSocket):
    print("Processing websocket")
    # websocket.accept()
Source code in fastack/middleware/__init__.py
def process_websocket(self, func: ProcessWebSocketFunc):
    """
    Process websocket middleware.

    Args:
        func: Function to be called before the request to WebSocket.

    Example:

    ```python
    from fastapi import WebSocket

    @app.middleware.process_websocket
    def process_websocket(websocket: WebSocket):
        print("Processing websocket")
        # websocket.accept()
    ```
    """
    self.app.add_middleware(BaseMiddleware, process_websocket=func)
    return func

Last update: January 17, 2022 13:26:42