sessionmarker в переменную bot, которая объект Bot():
async_sessionmaker = sessionmaker(
engine, expire_on_commit=False, class_=AsyncSession
)
bot = Bot(config.bot.token, parse_mode="HTML")
bot["db"] = async_sessionmaker
потом, когда ему нид обратиться к sessionmarker, он берёт это вот так:
message.bot.get("db")
и юзает sessionmarker. У меня вопрос, это вообще норм вот так юзать? Просто выглядит как то не очень и вообще, как можно записывать в [] что то, если там уже инициализированный класс? Например в плюсах можно было оверлоуднуть [], а как это работает тут?
Ну смотри. У тебя два способа «подмешивания данных» — прокидывать через мидлвари и пихнуть в объект бота (в тройке чуть иначе, но пока не важно) В случае с мидлварью ты просто будешь один и тот же объект раз за разом как новый подмешивать в хэндлер. Если пихнуть в бота, то объект будет добавлен один раз на все время жизни инстанса бота. Имхо, для всяких неизменяющихся данных норм. В случае с сессией я, наверное, не соглашусь с самим собой и скажу, что я бы лучше сделал мидлварь, в рамках которой в хэндлер прокидывал бы сессию из сешнмейкера, а на выходе из хэндлера возвращал бы сессию обратно в пул
Мое текущее видение этого вопроса — как сделано в Bombsweeperbot на aiogram 3.x, на гитхабе есть
Обсуждают сегодня