не совсем могу понять как мне правильно в хендлеры передавать информацию из баз данных, и при этом сохранить принципы ООП?
В файле bot.py в объект бота передаётся конфиг собранный из датаклассов. В models я написал своеобразный модуль для подключения к безе данных - класс в который нужно передать данные для аутентификации. Но получается чтобы создать объект подключения мне нужно импортировать объект бота в хендлеры, из чего выходит циркулирующий импорт. Я чёт запутался, скучаю по временам когда можно было писать говнокод и не париться(
Получается раньше я мог сделать users_tables = UsersTables(db_auth) прямо в модуле с хендлерами где UsersTables объект подключения к базе данных, и начать выполнять запросы в бд и получать ответы пользуясь функциями класса. Сейчас же для того чтобы так поступить мне нужно получать конфиг из config.load_config('env') в этой части репозитория, что мне кажется костыльным, так как конфиг в темплейте собирается в bot.py и передаётся в объект бота, вот здесь.
эээ я чет запутался
> Но получается чтобы создать объект подключения мне нужно импортировать объект бота в хендлеры нет. Чтобы создать объект подключения тебе нужен конфиг подклчения. > в объект бота передаётся конфиг собранный из датаклассов. плохая идея. конфиг должен передаваться частями туда куда надо напрямую без каких-то божественных хранилищ конфигов
То есть не будет костыльным, если я буду использовать config.load_config('env') везде где мне заблагоразумится?
Ну да, впринципе понял, я чёт из мухи слона раздул
я сказал передавать нужные части куда надо, а не грузить везде заново
https://t.me/advice17/6
Если ты имеешь ввиду что нужно грузить конфиг максимум в каждом модуле, а не в каждой функции, то это я понимаю
нет, максимум в мейн функции или тестах
тогда я все ещё не понимаю как мне пользоваться конфигом из мейна, и при этом не ловить циркулирующий импорт. и вопрос отсаётся тот же что и был
да не трогай ты бота
а, я понял что он сделал
https://github.com/Tishka17/tgbot_template/blob/master/tgbot/middlewares/db.py у меня вот так сделано
в смысле? ты передал параметры коннекта в мидлварь, таким образом они ни очем не знает больше и умеет создавать коннекты. затем эти коннекты прилетают в репо/хэндлер который может их юзать
то есть в каждом хенделе я могу получать данные для коннекта и работать таким образом? async def admin_start(message: Message, data): await message.reply("Hello, admin!") users_tables = models.UsersTables(data.db.database, data.db.tables, data.db.auth) await users_tables.new_user("1234", "da")
что за data.db.database, data.db.tables, data.db.auth
Ты сам говоришь миддлварь передаёт данные для коннекта в хендлер
@dataclass class DbConfig: host: str password: str user: str database: str tables: list auth: dict
что за users_tables - почему таблицы юзеров тебе прилетают из мидлвари?
что он делает в хэндлере
users_tables это объект соединения с базой данных с методами работы с определённым таблицами
users_tables - это "таблицы пользвоателей", назови нормально
я тебе дал ссылку на мой шаблон, ты посмотрел?
https://t.me/advice17/16
Там вроде как нет примера работы с базой данных
Миддлварь который я не понял как работает, но явно не как коннектор с бд?
мидлварь тупо создает нужные для хэндлеров объекты
Обсуждают сегодня