Задать вопрос
  • Как создать connection_pool асинхронно, но в отдельном модуле, чтобы затем использовать его в dp.message_handler для работы с БД асинхронно?

    @fishlover12345 Автор вопроса
    у меня handlers - это python package, содержащий файлы с хендлерами (каждый написан отдельно (каждый - в отдельном файле), затем в файле _init_.py:
    from .start import dp
    from .help import dp
    from .website import dp
    from .text import dp
    
    # Список параметров, которые можно импортировать из users.
    __all__ = ['dp']

    Это сделано для того, чтобы импортировать DP, содержащий данные все ххендлеров в файл app.py:
    async def on_startup(dp):
        # Импортирую функцию из ранее созданного файла в директории utils.
        # Эта функция будет отправлять всем администраторам бота сообщение о том, что бот запущен и работает.
        from utils.notify_admins import on_startup_notify
        await on_startup_notify(dp)
    
        from utils.set_bot_commands import set_default_commands
        await set_default_commands(dp)
    
        print('Bot is running!')
    
    
    # Проверяем что записано в __name__, запускаем бота.
    # Дабы избежать срабатывания экзекьютора, если модуль не запускается как главный, а импортируется.
    if __name__ == '__main__':
        from aiogram import executor
        from src.telegram.handlers import dp
    
        executor.start_polling(dp, on_startup=on_startup)

    Короче - из python-директории handlers у меня импортируется dp, уже содержащий в себе информацию о всех хендлерах. А в каждый файл с хендлером (например, с хендлером для обработки /start - команды) dp - dispatcher импортируется из файла loader.py:
    from aiogram import Bot, types, Dispatcher
    
    from src.telegram.data import config
    
    # Переменная с ключом бота.
    bot = Bot(token=config.BOT_TOKEN, parse_mode=types.ParseMode.HTML)
    
    # Dispatcher init.
    dp = Dispatcher(bot)

    Что я хочу сделать:
    Чтобы при запуске файла app.py, а конкретно - функции on_startup - объекту Dispatcher с помощью другой функции в другом модуле присваивалось значение connection_pool (вряд ли это вообще возможно реализовать).
    Вот так (в файле app.py);
    async def on_startup(dp):
        # Импортирую функцию из ранее созданного файла в директории utils.
        # Эта функция будет отправлять всем администраторам бота сообщение о том, что бот запущен и работает.
        from utils.notify_admins import on_startup_notify
        await on_startup_notify(dp)
    
        from utils.set_bot_commands import set_default_commands
        await set_default_commands(dp)
        # Вот новая строчка (и да, я понимаю, что не смогу потом в хендлере использовать результат работы 
        # функции)
        from src.db_tools.connection_pools import create_asyncpg_connection_pool
        await create_asyncpg_connection_pool
        print('Bot is running!')
    
    
    # Проверяем что записано в __name__, запускаем бота.
    # Дабы избежать срабатывания экзекьютора, если модуль не запускается как главный, а импортируется.
    if __name__ == '__main__':
        from aiogram import executor
        from src.telegram.handlers import dp
    
        executor.start_polling(dp, on_startup=on_startup)