🔥 Hot Reload

В режиме разработки Raito сам перезагружает роутеры при изменении файлов. Это значит, что вы правите хендлеры и видите изменения сразу, без перезапуска.

Как это работает

  • Hot-reload включён по умолчанию, когда вы задаёте production=False:

    raito = Raito(dispatcher, routers_dir="src/handlers", production=False)
    
  • Во время raito.setup() Raito:
    1. сканирует routers_dir на предмет Python-файлов

    2. пропускает файлы, начинающиеся с _

    3. динамически импортирует все роутеры (с router = Router(...))

    4. запускает watchdog через watchfiles.awatch

    5. следит за изменениями файлов и перезагружает соответствующие роутеры

  • Вручную вызывать include_router() или разбираться с импортами не нужно


Пример

from aiogram import Router
from aiogram.types import Message
from aiogram.filters import Command

router = Router(name="debug")

@router.message(Command("debug"))
async def debug_handler(message: Message):
    await message.answer("Hello, this is a live-reloading handler!")

Отредактируйте сообщение и сохраните файл: он перезагрузится автоматически.


Что происходит при изменении файла?

  • Если .py-файл изменён или создан:
    • соответствующий роутер выгружается и загружается заново

  • Если .py-файл удалён:
    • роутер снимается с регистрации

Каждый роутер однозначно отслеживается по Router.name.


Команды Raito в Telegram

Роутерами можно управлять и вручную из чата Telegram:

  • .rt routers показывает все зарегистрированные роутеры

  • .rt unload <router_name> выгружает роутер по имени

  • .rt load <router_name> загружает роутер по имени

  • .rt reload <router_name> перезагружает существующий роутер


Ограничения

  • изменения в общих модулях (например, utils/, models/) перезагрузку не вызывают

  • перезагрузка затрагивает только файлы в routers_dir

  • если у роутера есть побочные эффекты на верхнем уровне (например, запросы к БД), они могут выполниться дважды