diff --git a/Makefile b/Makefile index 86b354b..cef1d55 100644 --- a/Makefile +++ b/Makefile @@ -32,7 +32,7 @@ build: .PHONY: play play: - @python3 playground/main.py + @cd playground && python3 main.py .PHONY: deps deps: diff --git a/playground/main.py b/playground/main.py index 8148a3c..7d556d5 100644 --- a/playground/main.py +++ b/playground/main.py @@ -20,7 +20,10 @@ def after(self, _request, response): return response -@router.get('/main') +router.use_middleware(ExampleMiddleware) + + +@router.get('/main', middlewares=[ExampleMiddleware]) def html_example(_request): response = web.responses.HTMLResponse( template_path='templates/index.html', @@ -29,7 +32,7 @@ def html_example(_request): return response -@router.get('/hello', middlewares=[ExampleMiddleware]) +@router.get('/hello') def get_example(request): logger.info(f'got {request=}') return web.responses.JsonResponse({'message': 'hello, world!'}) diff --git a/web/router.py b/web/router.py index e5a77fe..1d91d1e 100644 --- a/web/router.py +++ b/web/router.py @@ -1,5 +1,5 @@ from http import HTTPMethod -from typing import Callable +from typing import Type, Callable from webob import Request, Response from webob.exc import HTTPNotFound, HTTPInternalServerError @@ -11,6 +11,10 @@ class Router: def __init__(self): self._routes = {} self.not_found_handler = None + self.global_middlewares: list[Type[Middleware]] = [] + + def use_middleware(self, middleware: Type[Middleware]): + self.global_middlewares.append(middleware) def _add_route( self, @@ -24,7 +28,10 @@ def _add_route( if path not in self._routes: self._routes[path] = {} - self._routes[path][method] = self._apply_middlewares(func, middlewares) + self._routes[path][method] = self._apply_middlewares( + func, + self.global_middlewares + middlewares, + ) def get(self, path: str, middlewares: list[Middleware] | None = None): def decorator(func):