async def test_app_add_remove_middleware(): app = Baguette() @app.route("/short") async def short(): return "" @app.route("/long") async def long(): await asyncio.sleep(0.2) return "" assert len(app.middlewares) == 2 app.add_middleware(TimingMiddleware) assert len(app.middlewares) == 3 request = create_test_request(path="/short") response = await app.handle_request(request) assert "X-time" in response.headers short_time = float(response.headers["X-time"]) request = create_test_request(path="/long") response = await app.handle_request(request) assert "X-time" in response.headers long_time = float(response.headers["X-time"]) assert short_time < long_time app.remove_middleware(TimingMiddleware) assert len(app.middlewares) == 2
async def test_app_middleware(): app = Baguette() @app.route("/short") async def short(): return "" @app.route("/long") async def long(): await asyncio.sleep(0.2) return "" assert len(app.middlewares) == 2 @app.middleware() class TimingMiddleware(Middleware): async def __call__(self, request: Request): start_time = time.perf_counter() response = await self.next(request) response.headers["X-time"] = str(time.perf_counter() - start_time) return response assert len(app.middlewares) == 3 @app.middleware() async def timing_middleware(next_middleware, request: Request): start_time = time.time() response = await next_middleware(request) process_time = time.time() - start_time response.headers["X-time"] = str(process_time) return response assert len(app.middlewares) == 4 request = create_test_request(path="/short") response = await app.handle_request(request) assert "X-time" in response.headers short_time = float(response.headers["X-time"]) request = create_test_request(path="/long") response = await app.handle_request(request) assert "X-time" in response.headers long_time = float(response.headers["X-time"]) assert short_time < long_time app.remove_middleware(timing_middleware) app.remove_middleware(TimingMiddleware) assert len(app.middlewares) == 2