File size: 643 Bytes
c01955c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
from functools import wraps

from typing import Callable
def route_middleware(*middlewares: Callable):
    def decorator(route_func: Callable):
        @wraps(route_func)
        async def wrapper(*args, **kwargs):
            req = kwargs.get("req")
            if req is None:
                raise ValueError("Route must have 'request: Request' parameter")

            for middleware in middlewares:
                result = middleware(req)
                if callable(getattr(result, "__await__", None)):
                    await result

            return await route_func(*args, **kwargs)

        return wrapper

    return decorator