0657136ae5
- Упорядочивание и группировка импортов в соответствии с PEP 8 - Удаление неиспользуемых импортов - Перемещение локальных импортов в начало списка - Добавление пустых строк для улучшения читаемости - Систематизация порядка импортов в различных модулях проекта
59 lines
2.6 KiB
Python
59 lines
2.6 KiB
Python
from collections.abc import Iterable
|
|
from typing import Any, Optional, Type, Union
|
|
|
|
from aiogram import Dispatcher
|
|
from aiogram.dispatcher.middlewares.base import BaseMiddleware
|
|
|
|
from .admin import AdminMiddleware
|
|
from .loggings import LoggingMiddleware
|
|
from .session import SessionMiddleware
|
|
from .throttling import ThrottlingMiddleware
|
|
from .user import UserMiddleware
|
|
|
|
|
|
def register_middleware(
|
|
dispatcher: Dispatcher,
|
|
middlewares: Iterable[BaseMiddleware | type[BaseMiddleware]] | None = None,
|
|
exclude: Iterable[str] | None = None,
|
|
) -> None:
|
|
"""Регистрирует middleware в диспетчере.
|
|
|
|
Args:
|
|
dispatcher: Экземпляр диспетчера Aiogram
|
|
middlewares: Опциональный список middleware для регистрации.
|
|
Если не указан, регистрируются все стандартные middleware.
|
|
exclude: Опциональный список имен middleware, которые нужно исключить из регистрации.
|
|
Применяется только если middlewares не указан.
|
|
"""
|
|
# Если middleware не указаны, используем стандартный набор
|
|
if middlewares is None:
|
|
# Словарь всех доступных middleware
|
|
available_middlewares = {
|
|
"admin": AdminMiddleware(),
|
|
"session": SessionMiddleware(),
|
|
"logging": LoggingMiddleware(),
|
|
"throttling": ThrottlingMiddleware(),
|
|
"user": UserMiddleware(),
|
|
}
|
|
|
|
# Фильтруем middleware по списку исключений
|
|
exclude_set = set(exclude or [])
|
|
middlewares = [middleware for name, middleware in available_middlewares.items() if name not in exclude_set]
|
|
|
|
# Регистрируем middleware для всех типов обработчиков
|
|
handlers = [
|
|
dispatcher.message,
|
|
dispatcher.callback_query,
|
|
dispatcher.inline_query,
|
|
# Можно добавить другие типы обработчиков при необходимости
|
|
]
|
|
|
|
# Регистрируем каждый middleware для каждого типа обработчика
|
|
for middleware in middlewares:
|
|
# Если передан класс, а не экземпляр, создаем экземпляр
|
|
if isinstance(middleware, type):
|
|
middleware = middleware()
|
|
|
|
for handler in handlers:
|
|
handler.outer_middleware(middleware)
|