/
liquid-g
/
liquid-code
Обзор
Документация
Войти
/
liquid-g
/
liquid-code
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
develop-0.4
src/liquidcode/kernel/chain_builder.py
53 строки
2 KB
User
0.4.9 - переработка документации, рефакторинг кода, покрытие тестами 70%
06 июл 2026, 13:37
06 июл 2026, 13:37
79b2ebc
Код
Авторство
О чём код?
import time from typing import Callable, List from ..contracts import Request, Response def build_middleware_chain( handler: Callable[[Request], Response], middlewares: List[Callable], profiler_enabled: bool = False ) -> Callable[[Request], Response]: """ Строит цепочку middleware, где каждый middleware оборачивает следующий. Если profiler_enabled=True, замеряет время выполнения каждого middleware. """ chain = handler for mw in reversed(middlewares): if profiler_enabled: chain = _wrap_with_profiler(mw, chain) else: chain = _wrap_simple(mw, chain) return chain def _wrap_simple( middleware: Callable, next_step: Callable[[Request], Response] ) -> Callable[[Request], Response]: """Простая обёртка без профайлера.""" def wrapped(req: Request) -> Response: return middleware(req, next_step) return wrapped def _wrap_with_profiler( middleware: Callable, next_step: Callable[[Request], Response] ) -> Callable[[Request], Response]: """Обёртка с замером времени выполнения.""" def wrapped(req: Request) -> Response: start = time.time() response = middleware(req, next_step) duration = time.time() - start context = req.get_attr('_profiler_context') if context: name = getattr(middleware, '__name__', str(middleware)) context.add_middleware(name, duration) return response return wrapped