/
liquid-g
/
liquid-code
Обзор
Документация
Войти
/
liquid-g
/
liquid-code
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
develop-0.4
src/liquidcode/middleware/base.py
53 строки
2 KB
User
0.4.1 - продолжаю переписывать тесты. пофиксил несколько багов по дороге.
04 июл 2026, 23:46
04 июл 2026, 23:46
7632abc
Код
Авторство
О чём код?
""" Базовые классы для создания middleware. """ import abc from typing import Callable from ..contracts import Request, Response class Middleware(metaclass=abc.ABCMeta): """ Абстрактный базовый класс для middleware. Дочерние классы должны реализовать метод __call__. """ def __new__(cls, *args, **kwargs): """ Запрещает создание экземпляров абстрактного класса. """ # Если метод __call__ не переопределён в подклассе, выбрасываем ошибку if cls.__dict__.get('__call__') is Middleware.__call__: raise TypeError( f"Cannot instantiate abstract class {cls.__name__}. " f"Subclasses must implement the __call__ method." ) return super().__new__(cls) @abc.abstractmethod def __call__( self, request: Request, call_next: Callable[[Request], Response] ) -> Response: """ Обрабатывает запрос. Args: request: Объект Request. call_next: Функция для вызова следующего middleware. Returns: Ответ в формате Response (из contracts). """ pass def create_middleware(func: Callable) -> Callable: """ Декоратор для преобразования функции в middleware. Функция должна принимать (request: Request, call_next: Callable) -> Response. """ return func